#!/usr/bin/php
<?php
include "/usr/local/opmon/etc/config.php";

define(DELAYEDMESSAGESFILE, "/usr/local/opmon/var/delayed-messages.dump");

if (!file_exists(DELAYEDMESSAGESFILE)) {
	print "Arquivo ".DELAYEDMESSAGESFILE." nao encontrado\n";
	exit(0);
}

$lines = @file(DELAYEDMESSAGESFILE);
if ($lines === false) {
	print "Impossivel ler arquivo ".DELAYEDMESSAGESFILE."\n";
	exit(2);
}

if (count($lines) == 0) {
	print "Sem mensagens atrasadas\n";
	exit(0);
}

$jobs = array();
$failmsg = null;
$c = 1;
foreach($lines as $line) {
	if (!preg_match("/^([^\t]+)\t(.+)$/", $line, $matches)) {
		$failmsg = "Linha $c do arquivo parece ser invalida\n";
		break;
	}
	$c++;
	$jobs[$matches[1]][] = $matches[2];
}

if (!is_null($failmsg)) {
	print $failmsg;
	exit(2);
}

$workers = false;
$tr = new TaskRunner();
if (is_object($tr)) {
	$workers = $tr->getRegisteredWorkers();
}
try {
	foreach(array_keys($jobs) as $queue) {
		if (Validator::array_index_is_empty($queue, $workers)) {
			$failmsg = "Impossivel localizar worker na fila $queue\n";
			break;
		}
	}
} catch(InvalidArgumentException $e) {
	$failmsg = $e->getMessage();
}

if (!is_null($failmsg)) {
	print $failmsg;
	exit(2);
}

$c = 0;
foreach($jobs as $queue => $jobs) {
	foreach($jobs as $job) {
		if (is_object($tr)) {
			$workers = $tr->runBackground($queue, $job);
		}
		$c++;
		usleep(300);
	}
}

if (is_object($tr)) {
	$tr->disconnect();
}
$tr = NULL;

print "$c jobs submetidos com sucesso\n";
exit(0);

?>
