webtask.php 4.22 KB
Newer Older
1 2
<?php
#
3
# Copyright (c) 2006-2015 University of Utah and the Flux Group.
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
# 
# {{{EMULAB-LICENSE
# 
# This file is part of the Emulab network testbed software.
# 
# This file is free software: you can redistribute it and/or modify it
# under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or (at
# your option) any later version.
# 
# This file is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Affero General Public
# License for more details.
# 
# You should have received a copy of the GNU Affero General Public License
# along with this file.  If not, see <http://www.gnu.org/licenses/>.
# 
# }}}
#
#
class WebTask {
    var	$webtask;
27
    var $decoded = null;
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75

    #
    # Constructor by lookup on unique ID
    #
    function WebTask($task_id) {
	$safe_id = addslashes($task_id);

	$query_result =
	    DBQueryWarn("select * from web_tasks ".
			"where task_id='$safe_id'");

	if (!$query_result || !mysql_num_rows($query_result)) {
	    $this->webtask = NULL;
	    return;
	}
	$this->webtask = mysql_fetch_array($query_result);
    }

    # Hmm, how does one cause an error in a php constructor?
    function IsValid() {
	return !is_null($this->webtask);
    }

    # Lookup by imageid
    function Lookup($id) {
	$foo = new WebTask($id);

	if (! $foo->IsValid())
	    return null;

	return $foo;
    }

    # Lookup by object.
    function LookupByObject($uuid) {
	$query_result =
	    DBQueryWarn("select task_id from web_tasks ".
			"where object_uuid='$uuid'");

	if (!$query_result || !mysql_num_rows($query_result)) {
	    return null;
	}
	$row = mysql_fetch_array($query_result);
	$idx = $row['task_id'];
	
	return WebTask::Lookup($idx);
    }

76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
    #
    # Create an anonymous web task (not associated with an object). This
    # is useful when using a webtask to create a new object via a backend
    # script.
    #
    function CreateAnonymous() {
        $task_id = WebTask::GenerateID();

        $query_result = 
            DBQueryWarn("insert into web_tasks set task_id='$task_id', ".
                        "  created=now(), object_uuid='$task_id'");
	if (!$query_result || !mysql_num_rows($query_result)) {
            return null;
        }
        return WebTask::Lookup($task_id);
    }

    function Refresh($task_id) {
	if (! $this->IsValid())
	    return -1;
        $task_id = $this->task_id();

	$query_result =
	    DBQueryWarn("select * from web_tasks ".
			"where task_id='$task_id'");

	if (!$query_result || !mysql_num_rows($query_result)) {
	    $this->webtask = NULL;
	    return -1;
	}
	$this->webtask = mysql_fetch_array($query_result);
        return 0;
    }

110 111 112 113 114 115 116
    # We delete from the web interface.
    function Delete() {
	$task_id = $this->task_id();
	DBQueryWarn("delete from web_tasks where task_id='$task_id'");
	return 0;
    }

117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
    # accessors
    function field($name) {
	return (is_null($this->webtask) ? -1 : $this->webtask[$name]);
    }
    function task_id()		{ return $this->field("task_id"); }
    function created()		{ return $this->field("created"); }
    function modified()		{ return $this->field("modified"); }
    function process_id()	{ return $this->field("process_id"); }
    function object_uuid()	{ return $this->field("object_uuid"); }
    function exitcode()		{ return $this->field("exitcode"); }
    function exited()		{ return $this->field("exited"); }
    function task_data()	{ return $this->field("task_data"); }

    #
    # Return the task data as a real object intead of JSON
    #
    function TaskData() {
	if ($this->task_data()) {
	    return json_decode($this->task_data(), true);
	}
	else {
	    return array();
	}
    }
141 142 143 144 145 146 147 148 149 150 151 152
    # Return a specific value from the data.
    function TaskValue($key) {
	if ($this->task_data()) {
	    if (! $this->decoded) {
		$this->decoded = json_decode($this->task_data(), true);
	    }
	    if (array_key_exists($key, $this->decoded)) {
		return $this->decoded[$key];
	    }
	}
	return null;
    }
153 154 155 156 157 158 159

    function ValidTaskID($id) {
	if (preg_match("/^[-\w]+$/", $id)) {
	    return TRUE;
	}
	return FALSE;
    }
160 161 162 163

    function GenerateID() {
	return md5(uniqid(rand(),1));
    }
164 165
}
?>