summaryrefslogtreecommitdiffstats
path: root/application
diff options
context:
space:
mode:
authorSebastian Wagner2011-08-22 16:06:53 +0200
committerSebastian Wagner2011-08-22 16:06:53 +0200
commit3993e289cc49ea88bf42402b7559258549b231a2 (patch)
treecea64a63ccff49d8156168c6b8471234c5480361 /application
parentsome calendar changes (diff)
parentupdatePeriod nun in Application.ini (diff)
downloadpoolctrl-3993e289cc49ea88bf42402b7559258549b231a2.tar.gz
poolctrl-3993e289cc49ea88bf42402b7559258549b231a2.tar.xz
poolctrl-3993e289cc49ea88bf42402b7559258549b231a2.zip
Merge branch 'master' of git.openslx.org:lsfks/projekte/poolctrl
Conflicts: application/controllers/EventController.php
Diffstat (limited to 'application')
-rw-r--r--application/configs/application.ini.dist1
-rw-r--r--application/controllers/EventController.php265
-rw-r--r--application/controllers/GearmanController.php24
-rw-r--r--application/models/EventreportMapper.php2
4 files changed, 270 insertions, 22 deletions
diff --git a/application/configs/application.ini.dist b/application/configs/application.ini.dist
index 6176733..0f0e9b9 100644
--- a/application/configs/application.ini.dist
+++ b/application/configs/application.ini.dist
@@ -36,6 +36,7 @@ gearman.server.host =
gearman.server.port =
gearman.worker.waitTime = 120
gearman.worker.updateRate = 1
+event.updatePeriod = 5
[staging : production]
diff --git a/application/controllers/EventController.php b/application/controllers/EventController.php
index a8e091b..f9fb845 100644
--- a/application/controllers/EventController.php
+++ b/application/controllers/EventController.php
@@ -496,17 +496,22 @@ class EventController extends Zend_Controller_Action
}
}
+
public function listeventsAction(){
+
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$eventList = $this->eventMapper->fetchAll();
-
+
foreach ($eventList as $event){
+
if($event->getCategory() == 1){$color= 'green' AND $category= 'Lecture';}
else if ($event->getCategory() == 2){$color= 'yellow' AND $category= 'Maintenance';}
else if ($event->getCategory() == 3){$color= 'blue' AND $category= 'BootEvent';}
else if ($event->getCategory() == 4){$color= 'red' AND $category= 'ShutdownEvent';}
$events[] = array(
+
+ $events[] = array(
'id' => $event->getID(),
'title' => $event->getTitle(),
'start' => $event->getStart(),
@@ -518,7 +523,8 @@ class EventController extends Zend_Controller_Action
'bootosID' => $event->getPbs_bootosID(),
'allDay' => false,
'color' => $color,
- );
+ )
+ );
}
echo json_encode($events);
}
@@ -526,8 +532,177 @@ class EventController extends Zend_Controller_Action
public function runAction() {
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
-
- $events = $this->eventMapper->findBy(array());
+ $startTime = time();
+ $updatePeriod = $this->config['event']['updatePeriod'];
+ $endTime = $startTime + $updatePeriod * 60;
+ $eventlist = $this->eventMapper->fetchAll();
+ $eventcategoryMapper = new Application_Model_EventcategoryMapper();
+ $result = $eventcategoryMapper->fetchAll();
+ foreach($result as $category) {
+ $eventcategories[$category->getTitle()] = $category->getID();
+ }
+ if(isset($this->userIDsNamespace['apikey'])) {
+ $apikey = $this->userIDsNamespace['apikey'];
+ } else {
+ $apikey = $this->_request->getParam('apikey');
+ }
+ $eventtypeMapper = new Application_Model_EventtypeMapper();
+ $results = array();
+ foreach($eventlist as $event) {
+ $run = false;
+ $boot = false;
+ $shutdown = false;
+ $eventStart = strtotime($event->getStart());
+ $eventEnd = strtotime($event->getEnd());
+ if($event->getRunning()) {
+ continue;
+ }
+ switch($event->getCategory()) {
+ case $eventcategories['Boot']:
+ if($eventStart >= $startTime && $eventStart <= $endTime) {
+ $run = true;
+ $boot = true;
+ }
+ break;
+ case $eventcategories['Shutdown']:
+ if($eventStart >= $startTime && $eventStart <= $endTime) {
+ $run = true;
+ $hutdown = true;
+ }
+ break;
+ case $eventcategories['Lecture']:
+ if($eventStart >= $startTime && $eventStart <= $endTime) {
+ $run = true;
+ $boot = true;
+ } else if($eventEnd >= $startTime && $eventEnd <= $endTime) {
+ $run = true;
+ $shutdown = true;
+ }
+ break;
+ case $eventcategories['Maintenance']:
+ if($eventStart >= $startTime && $eventStart <= $endTime) {
+ $run = true;
+ $boot = true;
+ } else if($eventEnd >= $startTime && $eventEnd <= $endTime) {
+ $run = true;
+ $shutdown = true;
+ }
+ break;
+ }
+ if($run) {
+ $data = array(
+ 'eventName' => $event->getTitle(),
+ 'updateRate' => $this->gearmanWorkerUpdateRate,
+ 'waitTime' => $this->gearmanWorkerWaitTime,
+ 'host' => $this->gearmanServerHost,
+ 'port' => $this->gearmanServerPort,
+ );
+ $poolRequest = "poolid=" . $event->getPbs_poolID();
+ $this->config['pbs2']['getpools'];
+ $poolApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['getpools'] . $apikey, 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', $poolRequest);
+ $poolXMLString = $poolApiResult['http-body'];
+ if(strlen($poolXMLString) > 0) {
+ $poolXML = new SimpleXMLElement($poolXMLString);
+ foreach($poolXML->poollist->pool as $pool) {
+ $clientsXML = $pool->clients;
+ foreach($clientsXML->client as $clientNew) {
+ $client = new Application_Model_Client();
+ $client->setID(sprintf("%s", $clientNew->clientID));
+ $client->setCreated(sprintf("%s", $clientNew->created));
+ $client->setGroupID(sprintf("%s", $clientNew->groupid));
+ $client->setHardwarehash(sprintf("%s", $clientNew->location));
+ $client->setIp(sprintf("%s", $clientNew->ip));
+ $client->setIp6(sprintf("%s", $clientNew->ip6));
+ $client->setMacadress(sprintf("%s", $clientNew->macadress));
+ $clientArray = array(
+ 'id' => $client->getID(),
+ 'ip' => $client->getIp(),
+ 'mac' => $client->getMacadress());
+ $clients[] = $clientArray;
+ }
+ }
+ }
+ $data['clients'] = $clients;
+ if($boot) {
+ $bootOsRequest = "bootosid=" . $event->getPbs_bootosID();
+ $bootOsApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['getbootoss'] . $apikey, 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', $bootOsRequest);
+ $bootOsXMLString = $bootOsApiResult['http-body'];
+ if(strlen($bootOsXMLString) > 0) {
+ $bootOsXML = new SimpleXMLElement($bootOsXMLString);
+ foreach($bootOsXML->bootoslist->bootos as $bootosNew) {
+ $bootos = new Application_Model_BootOs();
+ $bootos->setID(sprintf("%s", $bootosNew->id));
+ $bootos->setCreated(sprintf("%s", $bootosNew->created));
+ $bootos->setDefaultkcl(sprintf("%s", $bootosNew->defaultkcl));
+ $bootos->setDescription(sprintf("%s", $bootosNew->description));
+ $bootos->setDistro(sprintf("%s", $bootosNew->distro));
+ $bootos->setDistroversion(sprintf("%s", $bootosNew->distroversion));
+ $bootos->setExpires(sprintf("%s", $bootosNew->expires));
+ $bootos->setGroupID(sprintf("%s", $bootosNew->groupid));
+ $bootos->setMembershipID(sprintf("%s", $bootosNew->membershipid));
+ $bootos->setPublic(sprintf("%s", $bootosNew->public));
+ $bootos->setShare(sprintf("%s", $bootosNew->share));
+ $bootos->setShortname(sprintf("%s", $bootosNew->shortname));
+ $bootos->setSource(sprintf("%s", $bootosNew->source));
+ $bootos->setTitle(sprintf("%s", $bootosNew->title));
+ }
+ $data['eventOS'] = $bootos->getTitle();
+ }
+ $dataString = json_encode($data);
+ $result = $this->gearmanClient->do("boot", $dataString, 'boot' . $event->getTitle());
+ if (! $this->gearmanClient->runTasks())
+ {
+ echo "ERROR " . $gmc->error() . "\n";
+ exit;
+ }
+ $results[$event->getTitle()] = $result;
+ $result = $eventtypeMapper->findBy(array("title" => "boot"));
+ $eventtypeBoot = $result[0];
+ $event->setRunning(true);
+ $event->setRunningtype($eventtypeBoot->getID());
+ try {
+ $this->eventMapper->save($event);
+ } catch(Zend_Exception $e)
+ {
+ echo "Caught exception: " . get_class($e) . "<br/>";
+ echo "Message: " . $e->getMessage() . "<br/>";
+ return;
+ }
+ } else if($shutdown) {
+ $dataString = json_encode($data);
+ $result = $this->gearmanClient->do("shutdown", $dataString, 'shutdown' . $event->getTitle());
+ if (! $this->gearmanClient->runTasks())
+ {
+ echo "ERROR " . $gmc->error() . "\n";
+ exit;
+ }
+ $results[$event->getTitle()] = $result;
+ $result = $eventtypeMapper->findBy(array("title" => "shutdown"));
+ $eventtypeShutdown = $result[0];
+ $event->setRunning(true);
+ $event->setRunningtype($eventtypeShutdown->getID());
+ try {
+ $this->eventMapper->save($event);
+ } catch(Zend_Exception $e)
+ {
+ echo "Caught exception: " . get_class($e) . "<br/>";
+ echo "Message: " . $e->getMessage() . "<br/>";
+ return;
+ }
+ }
+ }
+ }
+ if(count($results)) {
+ $resultString = json_encode($results);
+ } else {
+ $results = array("No current events available");
+ $resultString = json_encode($results);
+ }
+ header('Content-Type: application/json');
+ header('Content-Disposition: inline; filename="result.json"');
+ header('Pragma: no-cache');
+ header('Expires: 0');
+ echo $resultString;
}
public function reportAction() {
@@ -535,20 +710,24 @@ class EventController extends Zend_Controller_Action
$this->_helper->viewRenderer->setNoRender();
$events = $this->eventMapper->findBy(array('running' => 1));
- $runningtypeMapper = new Application_Model_RunningtypeMapper();
- $runningtypeBoot = $runningtypeMapper->findBy(array("title" => "boot"));
- $runningtypeShutdown = $runningtypeMapper->findBy(array("title" => "shutdown"));
+ $eventtypeMapper = new Application_Model_EventtypeMapper();
+ $result = $eventtypeMapper->findBy(array("title" => "boot"));
+ $eventtypeBoot = $result[0];
+ $result = $eventtypeMapper->findBy(array("title" => "shutdown"));
+ $eventtypeShutdown = $result[0];
$eventBootNames = array();
$eventShutdownNames = array();
foreach($events as $event) {
- if($event->getRunningtype() == $runningtypeBoot[0]->getID()) {
+ if($event->getRunningtype() == $eventtypeBoot->getID()) {
$eventBootNames[] = $event->getTitle();
- } else if($event->getRunningtype() == $runningtypeShutdown[0]->getID()) {
+ } else if($event->getRunningtype() == $eventtypeShutdown->getID()) {
$eventShutdownNames[] = $event->getTitle();
}
}
+ $eventreportMapper = new Application_Model_EventreportMapper();
+
if(count($eventBootNames) > 0) {
$data = array(
'type' => 'boot',
@@ -562,6 +741,40 @@ class EventController extends Zend_Controller_Action
echo "ERROR " . $gmc->error() . "\n";
exit;
}
+ $bootResultDecode = json_decode($bootResult);
+ foreach($bootResultDecode as $k => $eventResult) {
+ $eventResult->result = sprintf('%s', $eventResult->result);
+ if($eventResult->result == "not finished" || $eventResult->result = 'not founded') {
+ continue;
+ }
+ $result = $this->eventMapper->findBy(array("title" => $k));
+ $event = $result[0];
+ $eventreport = new Application_Model_Eventreport();
+ $eventreport->setEventID($event->getID());
+ $eventreport->setResult($eventResult->result);
+ if($eventResult->result == "failed") {
+ $eventreport->setErrors(json_encode($eventResult->errors));
+ }
+ $eventreport->setType($eventtypeBoot->getID());
+ try {
+ $eventreportMapper->save($eventreport);
+ } catch(Zend_Exception $e)
+ {
+ echo "Caught exception: " . get_class($e) . "<br/>";
+ echo "Message: " . $e->getMessage() . "<br/>";
+ return;
+ }
+ $event->setRunning(false);
+ $event->setRunningtype(null);
+ try {
+ $this->eventMapper->save($event);
+ } catch(Zend_Exception $e)
+ {
+ echo "Caught exception: " . get_class($e) . "<br/>";
+ echo "Message: " . $e->getMessage() . "<br/>";
+ return;
+ }
+ }
}
if(count($eventShutdownNames) > 0) {
@@ -577,6 +790,40 @@ class EventController extends Zend_Controller_Action
echo "ERROR " . $gmc->error() . "\n";
exit;
}
+ $shutdownResultDecode = json_decode($shutdownResult);
+ foreach($shutdownResultDecode as $k => $eventResult) {
+ $eventResult->result = sprintf('%s', $eventResult->result);
+ if($eventResult->result == "not finished" || $eventResult->result = 'not founded') {
+ continue;
+ }
+ $result = $this->eventMapper->findBy(array("title" => $k));
+ $event = $result[0];
+ $eventreport = new Application_Model_Eventreport();
+ $eventreport->setEventID($event->getID());
+ $eventreport->setResult($eventResult->result);
+ if($eventResult->result == 'failed') {
+ $eventreport->setErrors(json_encode($eventResult->errors));
+ }
+ $eventreport->setType($eventtypeShutdown->getID());
+ try {
+ $eventreportMapper->save($eventreport);
+ } catch(Zend_Exception $e)
+ {
+ echo "Caught exception: " . get_class($e) . "<br/>";
+ echo "Message: " . $e->getMessage() . "<br/>";
+ return;
+ }
+ $event->setRunning(false);
+ $event->setRunningtype(null);
+ try {
+ $this->eventMapper->save($event);
+ } catch(Zend_Exception $e)
+ {
+ echo "Caught exception: " . get_class($e) . "<br/>";
+ echo "Message: " . $e->getMessage() . "<br/>";
+ return;
+ }
+ }
}
}
} \ No newline at end of file
diff --git a/application/controllers/GearmanController.php b/application/controllers/GearmanController.php
index 8c33dcc..8e0252f 100644
--- a/application/controllers/GearmanController.php
+++ b/application/controllers/GearmanController.php
@@ -42,7 +42,7 @@ class GearmanController extends Zend_Controller_Action
public function somepingAction()
{
- $ipArray = array(
+ $data = array(
0 => '132.230.4.1',
1 => '132.230.4.2',
2 => '132.230.4.3',
@@ -75,9 +75,9 @@ class GearmanController extends Zend_Controller_Action
29 => '132.230.4.30',
);
- $ipString = json_encode($ipArray);
+ $dataString = json_encode($data);
- $result = $this->gearmanClient->do("somePing", $ipString, 'somePing');
+ $result = $this->gearmanClient->do("somePing", $dataString, 'somePing');
if (! $this->gearmanClient->runTasks())
{
echo "ERROR " . $gmc->error() . "\n";
@@ -100,7 +100,7 @@ class GearmanController extends Zend_Controller_Action
public function bootAction() {
$eventName = 'bootTest';
$eventOS = 'testOS';
- $clients = array(
+ $data = array(
'eventName' => $eventName,
'eventOS' => $eventOS,
'updateRate' => $this->gearmanWorkerUpdateRate,
@@ -112,8 +112,8 @@ class GearmanController extends Zend_Controller_Action
),
);
- $ipString = json_encode($clients);
- $result = $this->gearmanClient->do("boot", $ipString, 'boot' . $eventName);
+ $dataString = json_encode($data);
+ $result = $this->gearmanClient->do("boot", $dataString, 'boot' . $eventName);
if (! $this->gearmanClient->runTasks())
{
echo "ERROR " . $gmc->error() . "\n";
@@ -124,7 +124,7 @@ class GearmanController extends Zend_Controller_Action
public function shutdownAction() {
$eventName = 'shutdownTest';
- $clients = array(
+ $data = array(
'eventName' => $eventName,
'updateRate' => $this->gearmanWorkerUpdateRate,
'waitTime' => $this->gearmanWorkerWaitTime,
@@ -135,8 +135,8 @@ class GearmanController extends Zend_Controller_Action
),
);
- $ipString = json_encode($clients);
- $result = $this->gearmanClient->do("shutdown", $ipString, 'shutdown' . $eventName);
+ $dataString = json_encode($data);
+ $result = $this->gearmanClient->do("shutdown", $dataString, 'shutdown' . $eventName);
if (! $this->gearmanClient->runTasks())
{
echo "ERROR " . $gmc->error() . "\n";
@@ -147,7 +147,7 @@ class GearmanController extends Zend_Controller_Action
public function maintenanceAction() {
$eventName = 'maintenance_pool-113'; //maintenance of pool-113
- $clients = array(
+ $data = array(
'eventName' => $eventName,
'updateRate' => $this->gearmanWorkerUpdateRate,
'waitTime' => $this->gearmanWorkerWaitTime,
@@ -172,8 +172,8 @@ class GearmanController extends Zend_Controller_Action
),
);
- $ipString = json_encode($clients);
- $result = $this->gearmanClient->do("shutdown", $ipString, 'shutdown' . $eventName);
+ $dataString = json_encode($data);
+ $result = $this->gearmanClient->do("shutdown", $dataString, 'shutdown' . $eventName);
if (! $this->gearmanClient->runTasks())
{
echo "ERROR " . $gmc->error() . "\n";
diff --git a/application/models/EventreportMapper.php b/application/models/EventreportMapper.php
index 0dc4547..00379f9 100644
--- a/application/models/EventreportMapper.php
+++ b/application/models/EventreportMapper.php
@@ -84,7 +84,7 @@ class Application_Model_EventreportMapper
public function save(Application_Model_Eventreport $eventreport)
{
- $data = array('reportID'=> $eventreport->getID() ,'eventID'=> $eventreport->getEventID() ,'report'=> $eventreport->getResult(), 'errors' => $eventreport->getErrors(), 'type' => $eventreport->geType() );
+ $data = array('reportID'=> $eventreport->getID() ,'eventID'=> $eventreport->getEventID() ,'result'=> $eventreport->getResult(), 'errors' => $eventreport->getErrors(), 'type' => $eventreport->geType() );
if (null === ($id = $eventreport->getID()) ) {
unset($data['reportID']);
return $this->getDbTable()->insert($data);