Commit bae6f5dad7efba2b2c64c4389bd7c47ccbe8a19a
1 parent
9b69cb35
Exists in
master
and in
111 other branches
bugFix fileName for webservice batch mode
Showing
3 changed files
with
136 additions
and
82 deletions
Show diff stats
php/classes/AmdaAction.php
@@ -842,9 +842,9 @@ class AmdaAction | @@ -842,9 +842,9 @@ class AmdaAction | ||
842 | } | 842 | } |
843 | 843 | ||
844 | /* | 844 | /* |
845 | -* Get Jobs en cours | 845 | +* Get running jobs |
846 | */ | 846 | */ |
847 | - public function getJobs($obj = null) | 847 | + public function getJobs($obj = null) |
848 | { | 848 | { |
849 | require_once(INTEGRATION_SRC_DIR."RequestManager.php"); | 849 | require_once(INTEGRATION_SRC_DIR."RequestManager.php"); |
850 | return $this->executeRequest($obj, FunctionTypeEnumClass::PROCESSRUNNINGINFO); | 850 | return $this->executeRequest($obj, FunctionTypeEnumClass::PROCESSRUNNINGINFO); |
@@ -866,7 +866,7 @@ class AmdaAction | @@ -866,7 +866,7 @@ class AmdaAction | ||
866 | if (isset($obj->username) && isset($obj->password) && isset($obj->sessionID)) | 866 | if (isset($obj->username) && isset($obj->password) && isset($obj->sessionID)) |
867 | { | 867 | { |
868 | $dd = new WSUserMgr(); | 868 | $dd = new WSUserMgr(); |
869 | - $dd->init($obj->username,$obj->password,$obj->sessionID); | 869 | + $dd->init($obj->username,$obj->password,$obj->sessionID, false); |
870 | // return array('success' => false, "message" => "AKKA-KERNEL-INT - WS support not implemented"); | 870 | // return array('success' => false, "message" => "AKKA-KERNEL-INT - WS support not implemented"); |
871 | } | 871 | } |
872 | else | 872 | else |
php/classes/WebServer.php
@@ -113,8 +113,6 @@ class WebServer | @@ -113,8 +113,6 @@ class WebServer | ||
113 | else | 113 | else |
114 | $this->userPWD = 'impexfp7'; | 114 | $this->userPWD = 'impexfp7'; |
115 | 115 | ||
116 | -// | ||
117 | - | ||
118 | return array('success' => true, 'vars' => $vars); | 116 | return array('success' => true, 'vars' => $vars); |
119 | } | 117 | } |
120 | 118 | ||
@@ -495,7 +493,7 @@ class WebServer | @@ -495,7 +493,7 @@ class WebServer | ||
495 | 493 | ||
496 | } | 494 | } |
497 | 495 | ||
498 | - public function getStatus($data) { | 496 | + public function getStatus($id) { |
499 | $obj = (object)array( | 497 | $obj = (object)array( |
500 | "username" => $this->userID, | 498 | "username" => $this->userID, |
501 | "password" => $this->userPWD, | 499 | "password" => $this->userPWD, |
@@ -522,17 +520,23 @@ class WebServer | @@ -522,17 +520,23 @@ class WebServer | ||
522 | // "sendToSamp":false | 520 | // "sendToSamp":false |
523 | // } | 521 | // } |
524 | 522 | ||
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); | 523 | + if (intval($jobs['nInProgress']) > 0) { |
524 | + foreach ($jobs['jobsInProgress'] as $job) { | ||
525 | + if ($job['id'] == $id) { | ||
526 | + return ['success' => true, 'status' => 'in_progress']; | ||
527 | + } | ||
528 | + } | ||
529 | + } | ||
530 | + if (intval($jobs['nFinished']) > 0) { | ||
531 | + foreach ($jobs['jobsFinished'] as $job) { | ||
532 | + if ($job['id'] == $id) { | ||
533 | + $vars = $this->getVarsFromRunningPath($job['runningPath']); | ||
534 | + $resTempFilePath = USERPATH . $this->userID . '/RES/' . $job['folder'] . '/' . $job['result'] . $vars['kernelExtension']; | ||
535 | + $resOutputFilePath = WSRESULT.$vars['dataFileName'].$vars['wsExtension']; | ||
536 | + return $this->finishDownloadRequest($job['id'], $resTempFilePath, $resOutputFilePath); | ||
537 | + } | ||
533 | } | 538 | } |
534 | } | 539 | } |
535 | - | ||
536 | return ['success' => false, 'message' => 'No job found for this id.']; | 540 | return ['success' => false, 'message' => 'No job found for this id.']; |
537 | } | 541 | } |
538 | 542 | ||
@@ -597,7 +601,9 @@ class WebServer | @@ -597,7 +601,9 @@ class WebServer | ||
597 | 601 | ||
598 | public function getNewToken() | 602 | public function getNewToken() |
599 | { | 603 | { |
600 | - $timeStamp = (new DateTime())->getTimestamp(); | 604 | + require_once(INTEGRATION_SRC_DIR."RequestManager.php"); |
605 | + | ||
606 | + $timeStamp = (new DateTime())->getTimestamp(); | ||
601 | // generate token from timeStamp and some salt | 607 | // generate token from timeStamp and some salt |
602 | $newToken = md5(1321 * (int)($timeStamp / timeLimitQuery)); | 608 | $newToken = md5(1321 * (int)($timeStamp / timeLimitQuery)); |
603 | return array('success' => true, 'token' => $newToken); | 609 | return array('success' => true, 'token' => $newToken); |
@@ -838,7 +844,6 @@ class WebServer | @@ -838,7 +844,6 @@ class WebServer | ||
838 | array("format" => $vars["outputFormat"], "timeFormat" => $timeFormat, "gzip" => $gzip, "stream" => $stream), | 844 | array("format" => $vars["outputFormat"], "timeFormat" => $timeFormat, "gzip" => $gzip, "stream" => $stream), |
839 | $dataFileName); | 845 | $dataFileName); |
840 | 846 | ||
841 | - | ||
842 | if ($res['success']) return $res; | 847 | if ($res['success']) return $res; |
843 | else { | 848 | else { |
844 | if ($this->isSoap) throw new SoapFault("request03", $res['message']); | 849 | if ($this->isSoap) throw new SoapFault("request03", $res['message']); |
@@ -880,6 +885,49 @@ class WebServer | @@ -880,6 +885,49 @@ class WebServer | ||
880 | } | 885 | } |
881 | } | 886 | } |
882 | 887 | ||
888 | + private function getFormatInfo($fileFormat, $timeFormat, $gzip) { | ||
889 | + switch ($fileFormat) { | ||
890 | + case 'netCDF' : | ||
891 | + if ($this->isSoap) { | ||
892 | + throw new SoapFault("server01", "netCDF format not implemented"); | ||
893 | + } else { | ||
894 | + return array('success' => false, 'message' => "netCDF format not implemented"); | ||
895 | + } | ||
896 | + break; | ||
897 | + case 'VOTable' : | ||
898 | + $fileFormat = "vot"; | ||
899 | + $kernelExtension = ".vot"; | ||
900 | + $wsExtension = ".xml"; | ||
901 | + break; | ||
902 | + case 'ASCII' : | ||
903 | + default : | ||
904 | + $fileFormat = "ASCII"; | ||
905 | + $kernelExtension = ".txt"; | ||
906 | + $wsExtension = ".txt"; | ||
907 | + } | ||
908 | + | ||
909 | + switch ($timeFormat) { | ||
910 | + case 'unixtime' : | ||
911 | + $timeFormat = 'Timestamp'; | ||
912 | + break; | ||
913 | + default : | ||
914 | + $timeFormat = 'YYYY-MM-DDThh:mm:ss'; | ||
915 | + } | ||
916 | + | ||
917 | + if ($gzip == 1) { | ||
918 | + $compression = "gzip"; | ||
919 | + $kernelExtension .= ".gz"; | ||
920 | + $wsExtension .= ".gz"; | ||
921 | + } else | ||
922 | + $compression = ""; | ||
923 | + | ||
924 | + return ['success' => true, | ||
925 | + 'kernelExtension' => $kernelExtension, | ||
926 | + 'wsExtension' => $wsExtension, | ||
927 | + 'fileFormat' => $fileFormat, | ||
928 | + 'timeFormat' => $timeFormat, | ||
929 | + 'compression' => $compression]; | ||
930 | + } | ||
883 | 931 | ||
884 | protected function doDownloadRequest($interval, $paramList, $user, $formatInfo, $dataFileName) | 932 | protected function doDownloadRequest($interval, $paramList, $user, $formatInfo, $dataFileName) |
885 | { | 933 | { |
@@ -888,40 +936,7 @@ class WebServer | @@ -888,40 +936,7 @@ class WebServer | ||
888 | else | 936 | else |
889 | $structure = 2; // not sampling | 937 | $structure = 2; // not sampling |
890 | 938 | ||
891 | - $fileExtension = ""; | ||
892 | - switch ($formatInfo['format']) { | ||
893 | - case 'netCDF' : | ||
894 | - if (!$jobMgr) { | ||
895 | - if ($this->isSoap) throw new SoapFault("server01", "netCDF format not implemented"); | ||
896 | - else return array('success' => false, 'message' => "netCDF format not implemented"); | ||
897 | - } | ||
898 | - break; | ||
899 | - case 'VOTable' : | ||
900 | - $fileformat = "vot"; | ||
901 | - $kernelExtension = ".vot"; | ||
902 | - $wsExtension = ".xml"; | ||
903 | - break; | ||
904 | - case 'ASCII' : | ||
905 | - default : | ||
906 | - $fileformat = "ASCII"; | ||
907 | - $kernelExtension = ".txt"; | ||
908 | - $wsExtension = ".txt"; | ||
909 | - } | ||
910 | - | ||
911 | - switch ($formatInfo['timeFormat']) { | ||
912 | - case 'unixtime' : | ||
913 | - $timeformat = 'Timestamp'; | ||
914 | - break; | ||
915 | - default : | ||
916 | - $timeformat = 'YYYY-MM-DDThh:mm:ss'; | ||
917 | - } | ||
918 | - | ||
919 | - if ($formatInfo['gzip'] == 1) { | ||
920 | - $compression = "gzip"; | ||
921 | - $kernelExtension .= ".gz"; | ||
922 | - $wsExtension .= ".gz"; | ||
923 | - } else | ||
924 | - $compression = ""; | 939 | + $fileInfo = $this->getFormatInfo($formatInfo['format'], $formatInfo['timeFormat'], $formatInfo['gzip']); |
925 | 940 | ||
926 | require_once(INTEGRATION_SRC_DIR . "RequestManager.php"); | 941 | require_once(INTEGRATION_SRC_DIR . "RequestManager.php"); |
927 | IHMConfigClass::setUserName($this->userID); | 942 | IHMConfigClass::setUserName($this->userID); |
@@ -966,18 +981,19 @@ class WebServer | @@ -966,18 +981,19 @@ class WebServer | ||
966 | "startDate" => $interval['startTime'], | 981 | "startDate" => $interval['startTime'], |
967 | "stopDate" => $interval['stopTime'], | 982 | "stopDate" => $interval['stopTime'], |
968 | "list" => $params, | 983 | "list" => $params, |
969 | - "fileformat" => $fileformat, | ||
970 | - "timeformat" => $timeformat, | ||
971 | - "compression" => $compression, | ||
972 | - "extension" => $wsExtension, | ||
973 | - "disablebatch" => false | 984 | + "fileformat" => $fileInfo['fileFormat'], |
985 | + "timeformat" => $fileInfo['timeFormat'], | ||
986 | + "compression" => $fileInfo['compression'], | ||
987 | + "extension" => $fileInfo['wsExtension'], | ||
988 | + "disablebatch" => false, | ||
989 | + "dataFileName" => $this->dataFileName | ||
974 | ); | 990 | ); |
975 | 991 | ||
976 | if (!isset($this->requestManager)) | 992 | if (!isset($this->requestManager)) |
977 | $this->requestManager = new RequestManagerClass(); | 993 | $this->requestManager = new RequestManagerClass(); |
978 | 994 | ||
979 | try { | 995 | try { |
980 | - $downloadResult = $this->requestManager->runIHMRequest($this->userID, $this->getIPclient(), FunctionTypeEnumClass::PARAMS, $obj); | 996 | + $downloadResult = $this->requestManager->runIHMRequest($this->userID, $this->getIPclient(), FunctionTypeEnumClass::PARAMS, $obj); |
981 | } catch (Exception $e) { | 997 | } catch (Exception $e) { |
982 | if ($this->isSoap) throw new SoapFault("server02", 'Exception detected : ' . $e->getMessage()); | 998 | if ($this->isSoap) throw new SoapFault("server02", 'Exception detected : ' . $e->getMessage()); |
983 | else return array('success' => false, 'message' => 'Exception detected : ' . $e->getMessage()); | 999 | else return array('success' => false, 'message' => 'Exception detected : ' . $e->getMessage()); |
@@ -991,43 +1007,37 @@ class WebServer | @@ -991,43 +1007,37 @@ class WebServer | ||
991 | if($downloadResult['status'] == 'in_progress') { | 1007 | if($downloadResult['status'] == 'in_progress') { |
992 | return ['success' => true, 'status' => 'in_progress', 'id' => $downloadResult['id']]; | 1008 | return ['success' => true, 'status' => 'in_progress', 'id' => $downloadResult['id']]; |
993 | } elseif ($downloadResult['status'] == 'done') { | 1009 | } elseif ($downloadResult['status'] == 'done') { |
994 | - return $this->finishDownloadRequest($downloadResult); | 1010 | + $resTempFilePath = USERPATH . $this->userID . '/RES/' . $downloadResult['folder'] . '/' . $downloadResult['result'] . $fileInfo['kernelExtension']; |
1011 | + $resOutputFilePath = WSRESULT.$this->dataFileName.$fileInfo['wsExtension']; | ||
1012 | + return $this->finishDownloadRequest($downloadResult['id'], $resTempFilePath, $resOutputFilePath); | ||
995 | } else { | 1013 | } else { |
996 | return ['success' => false, 'message' => 'Unknown status ' . $downloadResult['status'] . '.']; | 1014 | return ['success' => false, 'message' => 'Unknown status ' . $downloadResult['status'] . '.']; |
997 | } | 1015 | } |
998 | } | 1016 | } |
999 | 1017 | ||
1000 | - private function finishDownloadRequest($downloadResult) | 1018 | + private function finishDownloadRequest($id, $resTempFilePath, $resOutputFilePath) |
1001 | { | 1019 | { |
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); | 1020 | + if (!file_exists($resTempFilePath)) { |
1021 | + if ($this->isSoap) throw new SoapFault("server04", 'Cannot retrieve result file ' . $resTempFilePath); | ||
1016 | else return ['success' => false, 'message' => 'Cannot retrieve result file']; | 1022 | else return ['success' => false, 'message' => 'Cannot retrieve result file']; |
1017 | } | 1023 | } |
1018 | 1024 | ||
1019 | - rename($resultFile, $outputFile); | ||
1020 | - chmod($outputFile, 0664); | ||
1021 | - $outputURL = 'http://' . str_replace(BASE_PATH, $_SERVER['SERVER_NAME'] . APACHE_ALIAS, $outputFile); | 1025 | + rename($resTempFilePath, $resOutputFilePath); |
1026 | + chmod($resOutputFilePath, 0664); | ||
1027 | + $outputURL = 'http://' . str_replace(BASE_PATH, $_SERVER['SERVER_NAME'] . APACHE_ALIAS, $resOutputFilePath); | ||
1022 | 1028 | ||
1023 | - $obj = (object)array( | ||
1024 | - 'id' => $downloadResult['id'] | 1029 | + $obj = (object)array( |
1030 | + 'id' => $id | ||
1025 | ); | 1031 | ); |
1026 | 1032 | ||
1033 | + require_once(INTEGRATION_SRC_DIR . "RequestManager.php"); | ||
1034 | + if (!isset($this->requestManager)) | ||
1035 | + $this->requestManager = new RequestManagerClass(); | ||
1036 | + | ||
1027 | try { | 1037 | try { |
1028 | $downloadResult = $this->requestManager->runIHMRequest($this->userID, $this->getIPclient(), FunctionTypeEnumClass::PROCESSDELETE, $obj); | 1038 | $downloadResult = $this->requestManager->runIHMRequest($this->userID, $this->getIPclient(), FunctionTypeEnumClass::PROCESSDELETE, $obj); |
1029 | } catch (Exception $e) { | 1039 | } catch (Exception $e) { |
1030 | - //Nothing to do | 1040 | + error_log("Can not delete file $resOutputFilePath: $e"); |
1031 | } | 1041 | } |
1032 | 1042 | ||
1033 | return array('success' => true, 'status' => 'done', 'dataFileURLs' => $outputURL); | 1043 | return array('success' => true, 'status' => 'done', 'dataFileURLs' => $outputURL); |
@@ -1035,7 +1045,6 @@ class WebServer | @@ -1035,7 +1045,6 @@ class WebServer | ||
1035 | 1045 | ||
1036 | protected function timeIntervalToDuration($startTime, $stopTime) | 1046 | protected function timeIntervalToDuration($startTime, $stopTime) |
1037 | { | 1047 | { |
1038 | - | ||
1039 | $duration = strtotime($stopTime) - strtotime($startTime); | 1048 | $duration = strtotime($stopTime) - strtotime($startTime); |
1040 | $durationDay = intval($duration / (86400)); | 1049 | $durationDay = intval($duration / (86400)); |
1041 | $duration = $duration - $durationDay * 86400; | 1050 | $duration = $duration - $durationDay * 86400; |
@@ -1077,7 +1086,52 @@ class WebServer | @@ -1077,7 +1086,52 @@ class WebServer | ||
1077 | } | 1086 | } |
1078 | } | 1087 | } |
1079 | 1088 | ||
1080 | - private function compress($srcName, $dstName) | 1089 | + private function getVarsFromRunningPath($runningPath) |
1090 | + { | ||
1091 | + $filePath = $runningPath . "request_0.xml"; | ||
1092 | + if (file_exists($filePath)) { | ||
1093 | + $requestXml = new DOMDocument(); | ||
1094 | + $requestXml->load($filePath); | ||
1095 | + } else { | ||
1096 | + return ['success' => false, 'message' => 'Failed to open request file.']; | ||
1097 | + } | ||
1098 | + | ||
1099 | + $fileFormat = $requestXml->getElementsByTagName('fileFormat')->item(0)->nodeValue; | ||
1100 | + $timeFormat = $requestXml->getElementsByTagName('timeFormat')->item(0)->nodeValue; | ||
1101 | + $gzip = 0; // todo $requestXml->getElementsByTagName('gzip')->item(0)->nodeValue; | ||
1102 | + | ||
1103 | + // get kernelExtension, wsExtension, fileFormat, timeFormat, compression: | ||
1104 | + $vars = $this->getFormatInfo($fileFormat, $timeFormat, $gzip); | ||
1105 | + | ||
1106 | + require_once(INTEGRATION_SRC_DIR . "InputOutput/IHMImpl/Tools/CommonClass.php"); | ||
1107 | + $cc = new CommonClass(); | ||
1108 | + | ||
1109 | + $vars['parameterID'] = $requestXml->getElementsByTagName('param')->item(0)->getAttribute('id'); | ||
1110 | + | ||
1111 | + $ddStart = $requestXml->getElementsByTagName('startTime')->item(0)->nodeValue; | ||
1112 | + $ddInterval = $requestXml->getElementsByTagName('timeInterval')->item(0)->nodeValue; | ||
1113 | + $vars['startTime'] = $cc->DDTimeToIso($ddStart); | ||
1114 | + $vars['stopTime'] = $cc->DDStartIntervalToStopIso($ddStart, $ddInterval); | ||
1115 | + | ||
1116 | + $sampling = $requestXml->getElementsByTagName('sampling')->item(0); | ||
1117 | + if (!is_null($sampling)) | ||
1118 | + $vars['sampling'] = $sampling->nodeValue; | ||
1119 | + | ||
1120 | + if (in_array(null, $vars, true)) { | ||
1121 | + return ['success' => false, | ||
1122 | + 'message' => 'Can not create data file name because a value is missing in the request file.']; | ||
1123 | + } | ||
1124 | + | ||
1125 | + $getDataFileName = $this->getDataFileName($vars, false); | ||
1126 | + if (!$getDataFileName['success']) { | ||
1127 | + return $getDataFileName; | ||
1128 | + } | ||
1129 | + $vars['dataFileName'] = $getDataFileName['fileName']; | ||
1130 | + | ||
1131 | + return $vars; | ||
1132 | + } | ||
1133 | + | ||
1134 | + private function compress($srcName, $dstName) | ||
1081 | { | 1135 | { |
1082 | 1136 | ||
1083 | $fp = fopen($srcName, "r"); | 1137 | $fp = fopen($srcName, "r"); |
php/rest/getStatus.php
@@ -13,6 +13,6 @@ if (!key_exists("id", $_GET)) { | @@ -13,6 +13,6 @@ if (!key_exists("id", $_GET)) { | ||
13 | $result = array('success' => false, 'message' => "You must provide a job id."); | 13 | $result = array('success' => false, 'message' => "You must provide a job id."); |
14 | } else { | 14 | } else { |
15 | $amda_ws = new WebServer(); | 15 | $amda_ws = new WebServer(); |
16 | - $result = $amda_ws->getStatus($_GET); | 16 | + $result = $amda_ws->getStatus($_GET['id']); |
17 | } | 17 | } |
18 | echo json_encode($result); | 18 | echo json_encode($result); |
19 | \ No newline at end of file | 19 | \ No newline at end of file |