reformat queuehandler.php

This commit is contained in:
Evan Prodromou 2009-04-03 12:45:54 -04:00
parent 6be15dfcac
commit bd120bc315
1 changed files with 39 additions and 40 deletions

View File

@ -36,7 +36,7 @@ class QueueHandler extends Daemon
$this->set_id($id); $this->set_id($id);
} }
} }
function class_name() function class_name()
{ {
return ucfirst($this->transport()) . 'Handler'; return ucfirst($this->transport()) . 'Handler';
@ -46,7 +46,7 @@ class QueueHandler extends Daemon
{ {
return strtolower($this->class_name().'.'.$this->get_id()); return strtolower($this->class_name().'.'.$this->get_id());
} }
function get_id() function get_id()
{ {
return $this->_id; return $this->_id;
@ -56,16 +56,16 @@ class QueueHandler extends Daemon
{ {
$this->_id = $id; $this->_id = $id;
} }
function transport() function transport()
{ {
return null; return null;
} }
function start() function start()
{ {
} }
function finish() function finish()
{ {
} }
@ -74,7 +74,7 @@ class QueueHandler extends Daemon
{ {
return true; return true;
} }
function db_dispatch() { function db_dispatch() {
do { do {
$qi = Queue_item::top($this->transport()); $qi = Queue_item::top($this->transport());
@ -107,43 +107,43 @@ class QueueHandler extends Daemon
} else { } else {
$this->clear_old_claims(); $this->clear_old_claims();
$this->idle(5); $this->idle(5);
} }
} while (true); } while (true);
} }
function stomp_dispatch() { function stomp_dispatch() {
require("Stomp.php"); require("Stomp.php");
$con = new Stomp(common_config('queue','stomp_server')); $con = new Stomp(common_config('queue','stomp_server'));
if (!$con->connect()) { if (!$con->connect()) {
$this->log(LOG_ERR, 'Failed to connect to queue server'); $this->log(LOG_ERR, 'Failed to connect to queue server');
return false; return false;
} }
$queue_basename = common_config('queue','queue_basename'); $queue_basename = common_config('queue','queue_basename');
// subscribe to the relevant queue (format: basename-transport) // subscribe to the relevant queue (format: basename-transport)
$con->subscribe('/queue/'.$queue_basename.'-'.$this->transport()); $con->subscribe('/queue/'.$queue_basename.'-'.$this->transport());
do { do {
$frame = $con->readFrame(); $frame = $con->readFrame();
if ($frame) { if ($frame) {
$this->log(LOG_INFO, 'Got item enqueued '.common_exact_date($frame->headers['created'])); $this->log(LOG_INFO, 'Got item enqueued '.common_exact_date($frame->headers['created']));
// XXX: Now the queue handler receives only the ID of the // XXX: Now the queue handler receives only the ID of the
// notice, and it has to get it from the DB // notice, and it has to get it from the DB
// A massive improvement would be avoid DB query by transmitting // A massive improvement would be avoid DB query by transmitting
// all the notice details via queue server... // all the notice details via queue server...
$notice = Notice::staticGet($frame->body); $notice = Notice::staticGet($frame->body);
if ($notice) { if ($notice) {
$this->log(LOG_INFO, 'broadcasting notice ID = ' . $notice->id); $this->log(LOG_INFO, 'broadcasting notice ID = ' . $notice->id);
$result = $this->handle_notice($notice); $result = $this->handle_notice($notice);
if ($result) { if ($result) {
// if the msg has been handled positively, ack it // if the msg has been handled positively, ack it
// and the queue server will remove it from the queue // and the queue server will remove it from the queue
$con->ack($frame); $con->ack($frame);
$this->log(LOG_INFO, 'finished broadcasting notice ID = ' . $notice->id); $this->log(LOG_INFO, 'finished broadcasting notice ID = ' . $notice->id);
} }
else { else {
// no ack // no ack
$this->log(LOG_WARNING, 'Failed broadcast for notice ID = ' . $notice->id); $this->log(LOG_WARNING, 'Failed broadcast for notice ID = ' . $notice->id);
} }
$notice->free(); $notice->free();
@ -152,12 +152,11 @@ class QueueHandler extends Daemon
} else { } else {
$this->log(LOG_WARNING, 'queue item for notice that does not exist'); $this->log(LOG_WARNING, 'queue item for notice that does not exist');
} }
} }
} while (true); } while (true);
$con->disconnect(); $con->disconnect();
} }
function run() function run()
{ {
@ -165,12 +164,12 @@ class QueueHandler extends Daemon
return false; return false;
} }
$this->log(LOG_INFO, 'checking for queued notices'); $this->log(LOG_INFO, 'checking for queued notices');
if (common_config('queue','subsystem') == 'stomp') { if (common_config('queue','subsystem') == 'stomp') {
$this->stomp_dispatch(); $this->stomp_dispatch();
} }
else { else {
$this->db_dispatch(); $this->db_dispatch();
} }
if (!$this->finish()) { if (!$this->finish()) {
return false; return false;
} }
@ -183,7 +182,7 @@ class QueueHandler extends Daemon
sleep($timeout); sleep($timeout);
} }
} }
function clear_old_claims() function clear_old_claims()
{ {
$qi = new Queue_item(); $qi = new Queue_item();
@ -193,10 +192,10 @@ class QueueHandler extends Daemon
$qi->free(); $qi->free();
unset($qi); unset($qi);
} }
function log($level, $msg) function log($level, $msg)
{ {
common_log($level, $this->class_name() . ' ('. $this->get_id() .'): '.$msg); common_log($level, $this->class_name() . ' ('. $this->get_id() .'): '.$msg);
} }
} }