From 01c17a023467cf3c4b8c5acd202d9df760f092a2 Mon Sep 17 00:00:00 2001
From: Nathanaƫl Jourdane <nathanael.jourdane@irap.omp.eu>
Date: Fri, 9 Mar 2018 16:29:37 +0100
Subject: [PATCH] Add detailled info when creating jobs

---
 src/InputOutput/IHMImpl/Tools/IHMJobsManagerClass.php | 138 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------------
 1 file changed, 94 insertions(+), 44 deletions(-)

diff --git a/src/InputOutput/IHMImpl/Tools/IHMJobsManagerClass.php b/src/InputOutput/IHMImpl/Tools/IHMJobsManagerClass.php
index b2cdeba..3986b47 100644
--- a/src/InputOutput/IHMImpl/Tools/IHMJobsManagerClass.php
+++ b/src/InputOutput/IHMImpl/Tools/IHMJobsManagerClass.php
@@ -258,95 +258,145 @@ class IHMJobsManagerClass {
 	/*
 	 * @brief Add a new job
 	*/
-	public function addJob($obj, $id, $folder,
-			$running, $start, $result, $exitcode)
+	public function addJob($obj, $id, $folder, $running, $start, $result, $exitcode)
 	{
+		$obj = get_object_vars($obj); // Allow access to elements where the key is in dash-separated form.
 		$res = $this->init();
 		if (!$res['success'])
 			return $res;
 
-		$newJob = $this->jobXml->createElement('job');
-
-		$newJob->setAttribute('xml:id', $id);
-		$newJob->setAttribute('jobType', $obj->nodeType);
+//		$f = fopen('/AMDA/AMDA_Integration/debug/serialise.json', 'w') or die("Unable to open file!");
+//		fwrite($f, json_encode($obj, JSON_PRETTY_PRINT));
+//		fclose($f);
 
-		switch ($obj->nodeType)
-		{
-			case 'condition' :
+		$infos = [];
+		switch ($obj['nodeType']) {
+			// Data mining
+			case 'condition':
 				$name = 'datamining_'.time();
-				$info = $obj->expression;
+				$infos['Name'] = $obj['name'];
+				$infos['Condition'] = $obj['expression'];
+				$infos['Start date'] = $obj['startDate'];
+				$infos['Stop date'] = $obj['stopDate'];
+				$infos['Duration'] = $obj['durationDay'] . 'd ' . $obj['durationHour'] . 'h ' . $obj['durationMin'] . 'm ' . $obj['durationSec'] . 's';
 				break;
-			case 'statistics' :
+
+			case 'statistics':
 				$name = 'statistics_'.time();
-				$info = isset($obj->expression) ? $obj->expression : "";
+				$infos['Name'] =  $obj['name'];
+				$infos['Start date'] = $obj['startDate'];
+				$infos['Stop date'] = $obj['stopDate'];
+				$infos['Duration'] = $obj['durationDay'] . 'd ' . $obj['durationHour'] . 'h ' . $obj['durationMin'] . 'm ' . $obj['durationSec'] . 's';
+				if(array_key_exists('expression', $obj)) {
+					$infos['Expression'] =  $obj['expression'];
+				}
+				$params = [];
+				foreach ($obj['parameter'] as $param) {
+					$params[] = $param->function . '(' . $param->paramid . ')';
+				}
+				if(count($params) == 1) {
+					$infos['Parameter'] = $params[0];
+				} else {
+					$infos['Parameters'] = '<ul><li>' . join('</li><li>', $params) . '</li></ul>';
+				}
 				break;
-			case 'download' :
-				if ($obj->downloadSrc == '2') //fits image
-					$name = "download_fits_".time();
-				else
-					$name = "download_data_".time();
-				$info = '';
-				foreach ($obj->list as $param)
-				{
-					if ($obj->downloadSrc == '2') //fits image
-						$info = $info.' '.$param->url;
-					else
-						$info = $info.' '.$param->name; //data
+
+			case 'download':
+				$name = $obj['downloadSrc'] == '2' ? "download_fits_".time() : "download_data_".time();
+				$params = [];
+				foreach ($obj['list'] as $param) {
+					$params[] = $param->paramid;
+				}
+				if(count($params) == 1) {
+					$infos['Parameter'] = $params[0];
+				} else {
+					$infos['Parameters'] = join(', ', $params);
 				}
+				$infos['Start date'] = $obj['startDate'];
+				$infos['Stop date'] = $obj['stopDate'];
+				$infos['Duration'] = $obj['durationDay'] . 'd ' . $obj['durationHour'] . 'h ' . $obj['durationMin'] . 'm ' . $obj['durationSec'] . 's';
 				break;
-			case 'request'	 :
+
+			// Plot
+			case 'request':
 				$name = "request_".time();
-				$info = '';
-				for ($i=0; $i < count($obj->children); $i++) {
-					for ($j=0; $j < count($obj->children[$i]->children); $j++) {
-						$info = $info.' '.$obj->children[$i]->children[$j]->name;
+
+				$infos['Output'] = strtolower($obj['file-format']) . ' (' . strtolower($obj['file-output']) . ')';
+				foreach ($obj['tabs'] as $tab) {
+					if($tab->id == $obj['last-plotted-tab']) {
+						$infos['Start date'] = $tab->startDate;
+						$infos['Stop date'] = $tab->stopDate;
+						$infos['Duration'] = $tab->durationDay . 'd ' . $tab->durationHour . 'h ' . $tab->durationMin . 'm ' . $tab->durationSec . 's';
+
+						$strPanels = [];
+						foreach ($tab->panels as $panel) {
+							$axes = [];
+							foreach ($panel->axes as $axe) {
+								$axes[] = $axe->id;
+							}
+							$params = [];
+							foreach ($panel->params as $param) {
+								$params[] = $param->paramid;
+							}
+							$strPanels[] = join(', ', $params) . ' (' . join(', ', $axes) . ')';
+						}
+
+						if(count($strPanels) == 1) {
+							$infos['Parameters'] = $strPanels[0];
+						} else {
+							$infos['Panels'] = '<ul><li>' . join('</li><li>', $strPanels) . '</li></ul>';
+						}
+
+						continue;
 					}
 				}
 				break;
+
 			default:
 				$name = "unknown_".time();
-				$info = '';
 		}
+		$infos['Started at'] = gmdate("Y-m-d\TH:i:s\Z", $start);
 
-		$newJob->setAttribute('name', $name);
-		$newJob->setAttribute('info', $info);
+		$strInfo = '';
+		foreach ($infos as $key => $info) {
+			$strInfo .= '<b>' . $key . '</b>: ' . $info . '<br/>';
+		}
 
+		$newJob = $this->jobXml->createElement('job');
+		$newJob->setAttribute('xml:id', $id);
+		$newJob->setAttribute('jobType', $obj['nodeType']);
+		$newJob->setAttribute('name', $name);
+		$newJob->setAttribute('info', $strInfo);
 		$newJob->setAttribute('folder', $folder);
-
 		$newJob->setAttribute('result', $result);
-
 		$newJob->setAttribute('start', date('d-m-Y H:i:s', $start));
-
-		$newJob->setAttribute('result', $result);
-
 		//to know if know if it's an immediate job or not
 		$newJob->setAttribute('immediate', !$running);
 
-		$sendToSamp = isset($obj->sendToSamp) ? $obj->sendToSamp : FALSE;
+		$sendToSamp = isset($obj['sendToSamp']) ? $obj['sendToSamp'] : FALSE;
 		if ($sendToSamp) {
 			 $newJob->setAttribute('sendToSamp', "true");
 		}
 
+		$key = $obj['nodeType'];
 		if ($running)
 		{
-			$rootJobNode = $this->jobXml->getElementById($this->bkgRootNode[$obj->nodeType]);
+			$rootJobNode = $this->jobXml->getElementById($this->bkgRootNode[$key]);
 			if (!$rootJobNode)
 			{
-				$key = $obj->nodeType;
 				$rootJobNode =  $this->jobXml->createElement("$key");
-				$rootJobNode->setAttribute('xml:id', $this->bkgRootNode[$obj->nodeType]);
+				$rootJobNode->setAttribute('xml:id', $this->bkgRootNode[$key]);
 				$jobsInProgress = $this->jobXml->getElementsByTagName('jobsInProgress')->item(0);
 				$jobsInProgress->appendChild($rootJobNode);
 			}
 		}
 		else
 		{
-			$rootJobNode = $this->jobXml->getElementById($this->resRootNode[$obj->nodeType]);
+			$rootJobNode = $this->jobXml->getElementById($this->resRootNode[$key]);
 			if (!$rootJobNode)
 			{
-				$key = $obj->nodeType;
 				$rootJobNode =  $this->jobXml->createElement("$key");
-				$rootJobNode->setAttribute('xml:id', $this->resRootNode[$obj->nodeType]);
+				$rootJobNode->setAttribute('xml:id', $this->resRootNode[$key]);
 				$jobsFinished = $this->jobXml->getElementsByTagName('jobsFinished')->item(0);
 				$jobsFinished->appendChild($rootJobNode);
 			}
--
libgit2 0.21.2