Commit 9b69cb352b7e273adf20c608e5fee40b02f229fd

Authored by Nathanael Jourdane
1 parent e5ab198f

Implement batch mode for getParameter REST api

php/classes/AmdaAction.php
... ... @@ -844,7 +844,7 @@ class AmdaAction
844 844 /*
845 845 * Get Jobs en cours
846 846 */
847   - public function getJobs($obj)
  847 + public function getJobs($obj = null)
848 848 {
849 849 require_once(INTEGRATION_SRC_DIR."RequestManager.php");
850 850 return $this->executeRequest($obj, FunctionTypeEnumClass::PROCESSRUNNINGINFO);
... ... @@ -909,8 +909,7 @@ class AmdaAction
909 909 try
910 910 {
911 911 $res = $requestManager->runIHMRequest($this->user, $res['userHost'], $function, $obj);
912   - } catch (Exception $e)
913   - {
  912 + } catch (Exception $e) {
914 913 return array('success' => false, 'message' => 'Exception detected : '.$e->getMessage());
915 914 }
916 915 return $res;
... ...
php/classes/RequestMgr.php
... ... @@ -247,7 +247,8 @@ class RequestMgr extends AmdaObjectMgr
247 247 if ($obj->timesrc != 'Interval') break;
248 248  
249 249 foreach ($obj->list as $param)
250   - {
  250 + {
  251 +
251 252 //TODO not in code spase___IMPEX_ !!!
252 253 //TODO other models (tsyganenko etc)
253 254 if (preg_match("#^spase___IMPEX_#", $param->paramid))
... ... @@ -255,14 +256,15 @@ class RequestMgr extends AmdaObjectMgr
255 256 if ($param->template_args->url_XYZ) $params[] = $param->template_args->url_XYZ;
256 257 }
257 258 }
258   - if (count($params) > 0)
  259 + if (isset($params) && count($params) > 0)
259 260 {
  261 + // tab is not defined, iterate over $obj->tabs?
260 262 $argsTab['param'] = array_unique($params);
261 263 $argsTab['startTime'] = $tab->{'multi-plot-linked'} ? $obj->startDate : $tab->startDate;
262 264 $argsTab['stopTime'] = $tab->{'multi-plot-linked'} ? $obj->startDate : $tab->stopDate;
263 265 }
264 266 if (count($argsTab) > 0) $args[] = $argsTab;
265   -
  267 +
266 268 break;
267 269 case 'statistics' :
268 270 return array('success' => true);
... ... @@ -270,23 +272,23 @@ class RequestMgr extends AmdaObjectMgr
270 272 default :
271 273 return array('success' => false, 'message' => "unknown action ".$obj->nodeType);
272 274 }
273   -
274   - if (count($args) === 0) return array('success' => true);
275   -
  275 +
  276 + if (count($args) === 0) return array('success' => true);
  277 +
276 278 try
277 279 {
278 280 $client = new SoapClient(DD_WSDL);
279 281 }
280 282 catch (SoapFault $exception)
281   - {
  283 + {
282 284 return array('success' => false, 'message' => $exception->faultstring);
283 285 }
284   -
  286 +
285 287 $orbitsXml = new DomDocument("1.0");
286 288 $orbitsXml->load(orbitsAllXml);
287 289 $tr = array('_' => ':');
288   -
289   - foreach ($args as $tab)
  290 +
  291 + foreach ($args as $tab)
290 292 {
291 293 $startTime = $tab['startTime'];
292 294 $stopTime = $tab['stopTime'];
... ... @@ -315,8 +317,8 @@ class RequestMgr extends AmdaObjectMgr
315 317 return array('success' => false, 'message' => "Too big interval for IMPEX request : ".IMPEX_INTERVAL_LIMIT/86400.." day limit!");
316 318 }
317 319 }
318   -
319   - return array('success' => true);
  320 +
  321 + return array('success' => true);
320 322 }
321 323 }
322 324 ?>
... ...
php/classes/UserMgr.php
... ... @@ -491,13 +491,8 @@ class UserMgr
491 491  
492 492 public function ddCheckUser()
493 493 {
494   - error_log("Checking user...");
495 494 $this->IP = $this->getIPclient();
496   - error_log("User: " . $this->user);
497   - error_log("IP: " . $this->IP);
498   -
499 495 $cmdCheckUser = DDBIN."DDCheckUser ".$this->IP." ".$this->user." 1> /dev/null 2> /dev/null";
500   - error_log("cmdCheckUser: " . $cmdCheckUser);
501 496 system($cmdCheckUser, $res);
502 497 return $res;
503 498 }
... ... @@ -612,6 +607,7 @@ class UserMgr
612 607 public function dirSize($dir)
613 608 {
614 609 $handle = opendir($dir);
  610 + $mas = 1024 * 1024 * 200; // fixme
615 611  
616 612 while ($file = readdir($handle))
617 613 {
... ...
php/classes/WebServer.php
... ... @@ -113,7 +113,7 @@ class WebServer
113 113 else
114 114 $this->userPWD = 'impexfp7';
115 115  
116   -
  116 +//
117 117  
118 118 return array('success' => true, 'vars' => $vars);
119 119 }
... ... @@ -503,7 +503,37 @@ class WebServer
503 503 );
504 504  
505 505 $aa = new AmdaAction();
506   - return $aa->getJobs($obj);
  506 + $jobs = $aa->getJobs($obj);
  507 +
  508 +// job =
  509 +// {
  510 +// "success":true,
  511 +// "id":"process_aiaoh7_1517403874_1372",
  512 +// "name":"download_data_1517403886",
  513 +// "status":"in_progress",
  514 +// "jobType":"download",
  515 +// "info":" ",
  516 +// "start":"31-01-2018 13:04:34",
  517 +// "stop":"unknown",
  518 +// "folder":"DDpTDRrk_",
  519 +// "result":"result_pTDRrk",
  520 +// "format":"unknown",
  521 +// "compression":"",
  522 +// "sendToSamp":false
  523 +// }
  524 +
  525 + foreach ($jobs['jobsInProgress'] as $job) {
  526 + if ($job['id'] == $data['id']) {
  527 + return ['success' => true, 'status' => 'in_progress'];
  528 + }
  529 + }
  530 + foreach ($jobs['jobsFinished'] as $job) {
  531 + if ($job['id'] == $data['id']) {
  532 + return $this->finishDownloadRequest($job);
  533 + }
  534 + }
  535 +
  536 + return ['success' => false, 'message' => 'No job found for this id.'];
507 537 }
508 538  
509 539 public function getParameterList($data)
... ... @@ -576,7 +606,6 @@ class WebServer
576 606 ///////////////////////////////////////START GET DATASET ///////////////////////////////
577 607 public function getParameter($data)
578 608 {
579   -
580 609 $multiParam = false;
581 610  
582 611 $res = $this->init($data);
... ... @@ -940,6 +969,7 @@ class WebServer
940 969 "fileformat" => $fileformat,
941 970 "timeformat" => $timeformat,
942 971 "compression" => $compression,
  972 + "extension" => $wsExtension,
943 973 "disablebatch" => false
944 974 );
945 975  
... ... @@ -958,31 +988,49 @@ class WebServer
958 988 else return array('success' => false, 'message' => $downloadResult['message']);
959 989 }
960 990  
961   - $resultFile = USERPATH . $this->userID . '/RES/' . $downloadResult['folder'] . '/' . $downloadResult['result'];
962   - $resultFile .= $kernelExtension;
963   -
964   - if (!file_exists($resultFile)) {
965   - if ($this->isSoap) throw new SoapFault("server04", 'Cannot retrieve result file ' . $resultFile);
966   - else return array('success' => false, 'message' => 'Cannot retrieve result file');
967   - }
968   -
969   - rename($resultFile, WSRESULT . $this->dataFileName . $wsExtension);
970   - $outputFile = WSRESULT . $this->dataFileName . $wsExtension;
971   - chmod($outputFile, 0664);
972   - $outputFile = 'http://' . str_replace(BASE_PATH, $_SERVER['SERVER_NAME'] . APACHE_ALIAS, $outputFile);
973   -
974   - $obj = (object)array(
975   - 'id' => $downloadResult['id']
976   - );
977   -
978   - try {
979   - $downloadResult = $this->requestManager->runIHMRequest($this->userID, $this->getIPclient(), FunctionTypeEnumClass::PROCESSDELETE, $obj);
980   - } catch (Exception $e) {
981   - //Nothing to do
  991 + if($downloadResult['status'] == 'in_progress') {
  992 + return ['success' => true, 'status' => 'in_progress', 'id' => $downloadResult['id']];
  993 + } elseif ($downloadResult['status'] == 'done') {
  994 + return $this->finishDownloadRequest($downloadResult);
  995 + } else {
  996 + return ['success' => false, 'message' => 'Unknown status ' . $downloadResult['status'] . '.'];
982 997 }
  998 + }
983 999  
984   - return array('success' => true, 'dataFileURLs' => $outputFile);
985   -
  1000 + private function finishDownloadRequest($downloadResult)
  1001 + {
  1002 + require_once(INTEGRATION_SRC_DIR . "RequestManager.php");
  1003 + IHMConfigClass::setUserName($this->userID);
  1004 + if (!isset($this->paramLoader))
  1005 + $this->paramLoader = new IHMUserParamLoaderClass();
  1006 + if (!isset($this->requestManager))
  1007 + $this->requestManager = new RequestManagerClass();
  1008 +
  1009 + $kernelExtension = '.txt'; // TODO: handle other formats
  1010 + $wsExtension = '.txt';
  1011 + $resultFile = USERPATH . $this->userID . '/RES/' . $downloadResult['folder'] . '/' . $downloadResult['result'] . $kernelExtension;
  1012 + $outputFile = WSRESULT . $this->dataFileName . $wsExtension;
  1013 +
  1014 + if (!file_exists($resultFile)) {
  1015 + if ($this->isSoap) throw new SoapFault("server04", 'Cannot retrieve result file ' . $resultFile);
  1016 + else return ['success' => false, 'message' => 'Cannot retrieve result file'];
  1017 + }
  1018 +
  1019 + rename($resultFile, $outputFile);
  1020 + chmod($outputFile, 0664);
  1021 + $outputURL = 'http://' . str_replace(BASE_PATH, $_SERVER['SERVER_NAME'] . APACHE_ALIAS, $outputFile);
  1022 +
  1023 + $obj = (object)array(
  1024 + 'id' => $downloadResult['id']
  1025 + );
  1026 +
  1027 + try {
  1028 + $downloadResult = $this->requestManager->runIHMRequest($this->userID, $this->getIPclient(), FunctionTypeEnumClass::PROCESSDELETE, $obj);
  1029 + } catch (Exception $e) {
  1030 + //Nothing to do
  1031 + }
  1032 +
  1033 + return array('success' => true, 'status' => 'done', 'dataFileURLs' => $outputURL);
986 1034 }
987 1035  
988 1036 protected function timeIntervalToDuration($startTime, $stopTime)
... ...
php/rest/getParameter.php
... ... @@ -13,17 +13,11 @@ require_once '../config.php';
13 13 $amda_ws = new WebServer();
14 14  
15 15 if (!key_exists("token", $_GET)) {
16   - $result = array('success' => false, 'message' => "E01: Authentication is required for this webservice.");
  16 + $result = array('success' => false, 'message' => "Authentication is required for this webservice.");
17 17 } else if ($amda_ws->getNewToken()['token'] != $_GET["token"]) {
18   - $result = array('success' => false, 'message' => "E02: Token expired. Please authenticate again.");
  18 + $result = array('success' => false, 'status' => 'expired', 'message' => "Token expired. Please authenticate again.");
19 19 } else {
20 20 $result = $amda_ws->getParameter($_GET);
21 21 }
22   -
23   -if ($result['success']) {
24   - echo $result['dataFileURLs'];
25   -} else {
26   - echo $result['message'];
27   -}
28   -
  22 +echo json_encode($result);
29 23 ?>
30 24 \ No newline at end of file
... ...
php/rest/getStatus.php
... ... @@ -6,14 +6,13 @@
6 6 *
7 7 * @version $Id: $
8 8 */
9   -//
10   -//
11   -// 3€/m <50Go
12   -//
13   -require_once '../config.php';
14 9  
15   -$amda_ws = new WebServer();
16   -$result = $amda_ws->getStatus($_GET);
  10 +require_once '../config.php';
17 11  
18   -echo '<pre>' . var_export($result, true) . '</pre>';
19   -?>
20 12 \ No newline at end of file
  13 +if (!key_exists("id", $_GET)) {
  14 + $result = array('success' => false, 'message' => "You must provide a job id.");
  15 +} else {
  16 + $amda_ws = new WebServer();
  17 + $result = $amda_ws->getStatus($_GET);
  18 +}
  19 +echo json_encode($result);
21 20 \ No newline at end of file
... ...