summaryrefslogtreecommitdiffstats
path: root/inc/taskmanager.inc.php
diff options
context:
space:
mode:
authorSimon Rettberg2014-05-26 22:49:54 +0200
committerSimon Rettberg2014-05-26 22:49:54 +0200
commita4f4147b6fe5f2a003a61cf8a8f7508c94130b31 (patch)
treede34472a2b9bd83909469affb884619b4858efc1 /inc/taskmanager.inc.php
parentWIP (diff)
downloadslx-admin-a4f4147b6fe5f2a003a61cf8a8f7508c94130b31.tar.gz
slx-admin-a4f4147b6fe5f2a003a61cf8a8f7508c94130b31.tar.xz
slx-admin-a4f4147b6fe5f2a003a61cf8a8f7508c94130b31.zip
WIP
Diffstat (limited to 'inc/taskmanager.inc.php')
-rw-r--r--inc/taskmanager.inc.php41
1 files changed, 28 insertions, 13 deletions
diff --git a/inc/taskmanager.inc.php b/inc/taskmanager.inc.php
index e93cc696..99e35e94 100644
--- a/inc/taskmanager.inc.php
+++ b/inc/taskmanager.inc.php
@@ -5,12 +5,13 @@
*/
class Taskmanager
{
-
+
private static $sock = false;
-
+
private static function init()
{
- if (self::$sock !== false) return;
+ if (self::$sock !== false)
+ return;
self::$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_set_option(self::$sock, SOL_SOCKET, SO_RCVTIMEO, array('sec' => 0, 'usec' => 300000));
socket_set_option(self::$sock, SOL_SOCKET, SO_SNDTIMEO, array('sec' => 0, 'usec' => 200000));
@@ -20,7 +21,7 @@ class Taskmanager
public static function submit($task, $data, $async = false)
{
self::init();
- $seq = (string)mt_rand();
+ $seq = (string) mt_rand();
if (empty($data)) {
$data = '{}';
} else {
@@ -32,7 +33,8 @@ class Taskmanager
Message::addError('taskmanager-error');
return false;
}
- if ($async) return true;
+ if ($async)
+ return true;
$reply = self::readReply($seq);
if ($reply === false) {
Message::addError('taskmanager-error');
@@ -56,38 +58,50 @@ class Taskmanager
public static function status($taskId)
{
self::init();
- $seq = (string)mt_rand();
+ $seq = (string) mt_rand();
$message = "$seq, status, $taskId";
$sent = socket_send(self::$sock, $message, strlen($message), 0);
$reply = self::readReply($seq);
- if (!is_array($reply)) return false;
+ if (!is_array($reply))
+ return false;
return $reply;
}
-
+
public static function waitComplete($taskId)
{
$done = false;
for ($i = 0; $i < 10; ++$i) {
$status = self::status($taskId);
- if (!isset($status['statusCode'])) break;
+ if (!isset($status['statusCode']))
+ break;
if ($status['statusCode'] != TASK_PROCESSING && $status['statusCode'] != TASK_WAITING) {
$done = true;
break;
}
usleep(150000);
}
- if ($done) self::release ($taskId);
+ if ($done)
+ self::release($taskId);
return $status;
}
+ public static function isFailed($task)
+ {
+ if (!isset($task['statusCode']) || !isset($task['id']))
+ return true;
+ if ($task['statusCode'] !== TASK_WAITING && $task['statusCode'] !== TASK_PROCESSING && $task['statusCode'] !== TASK_FINISHED)
+ return true;
+ return false;
+ }
+
public static function release($taskId)
{
self::init();
- $seq = (string)mt_rand();
+ $seq = (string) mt_rand();
$message = "$seq, release, $taskId";
socket_send(self::$sock, $message, strlen($message), 0);
}
-
+
/**
*
* @param type $seq
@@ -101,7 +115,8 @@ class Taskmanager
if (count($parts) == 2 && $parts[0] == $seq) {
return json_decode($parts[1], true);
}
- if (++$tries > 10) return false;
+ if (++$tries > 10)
+ return false;
}
//error_log(socket_strerror(socket_last_error(self::$sock)));
return false;