Commit ea5cac1a89149801091fd039169232bcca3a2b9a

Authored by Benjamin Renard
1 parent ca5a298d
Exists in master and in 1 other branch WIP

WIP

src/DATA/TOOLS/GetModificationDate.c
... ... @@ -45,12 +45,12 @@ int main(int argc, char *argv[])
45 45 if ((status = nc_open(argv[1], NC_NOWRITE, &DataID)) != NC_NOERR)
46 46 nc_handle_error(status);
47 47  
48   - char* modificationDate = (char *) malloc(21);
  48 + char modificationDate[21];
49 49 memset(modificationDate, 0, 21*sizeof(char));
50 50 if ((status = nc_get_att_text(DataID, NC_GLOBAL, "ModificationDate", modificationDate)) != NC_NOERR) {
51 51 struct stat b;
52 52 if (!stat(argv[1], &b)) {
53   - strftime(modificationDate, 100, "%Y-%m-%dT%H:%M:%SZ", localtime( &b.st_mtime));
  53 + strftime(modificationDate, 21, "%Y-%m-%dT%H:%M:%SZ", localtime( &b.st_mtime));
54 54 }
55 55 }
56 56  
... ...
src/DATA/TOOLS/TimesUpdate.c
... ... @@ -46,6 +46,7 @@
46 46 #include <dirent.h>
47 47 #include <netcdf.h>
48 48 #include <math.h>
  49 +#include <time.h>
49 50 #include <DD.h>
50 51  
51 52 /* Global Constant definitions */
... ... @@ -269,6 +270,7 @@ main(int argc, char **argv)
269 270 char name[100];
270 271 int compress = 0;
271 272 int status;
  273 + int updateModificationDate = 0;
272 274  
273 275 double LastTime = 0.0, FirstTime = 0.0; // Times of the hall between files
274 276  
... ... @@ -390,14 +392,18 @@ main(int argc, char **argv)
390 392 /*--------- Look the conditions ---------------*/
391 393 condition = ALLRIGHT;
392 394 if((CurrentRecord->StartD < FirstTime - 60.0) &&
393   - (CurrentRecord->StopD > LastTime + 60.0)) condition = LEFTRIGHTOVER;
  395 + (CurrentRecord->StopD > LastTime + 60.0))
  396 + condition = LEFTRIGHTOVER;
394 397 else if((CurrentRecord->StartD < FirstTime - 60.0) &&
395   - (CurrentRecord->StopD < FirstTime + 60.0)) condition = ALLLEFT;
  398 + (CurrentRecord->StopD < FirstTime + 60.0))
  399 + condition = ALLLEFT;
396 400 else if((CurrentRecord->StartD < FirstTime - 60.0) &&
397 401 (CurrentRecord->StopD > FirstTime) &&
398   - (CurrentRecord->StopD < LastTime + 60.0)) condition = LEFTOVER;
  402 + (CurrentRecord->StopD < LastTime + 60.0))
  403 + condition = LEFTOVER;
399 404 else if((CurrentRecord->StartD >= FirstTime - 60.0) &&
400   - (CurrentRecord->StopD <= LastTime + 60.0)) condition = WELLIN;
  405 + (CurrentRecord->StopD <= LastTime + 60.0))
  406 + condition = WELLIN;
401 407 else if((CurrentRecord->StartD >= FirstTime - 60.0) &&
402 408 (CurrentRecord->StartD < LastTime) &&
403 409 (CurrentRecord->StopD > LastTime + 60.0))condition = RIGHTOVER;
... ... @@ -407,14 +413,33 @@ main(int argc, char **argv)
407 413 /* What to do with these conditions ----------------*/
408 414 switch(condition)
409 415 {
410   - case WELLIN : InsertRecord((size_t)ihole, CurrentRecord); InsertFlag = 1; break;
411   - case ALLLEFT : RemoveRecord((size_t)(ihole-1),CurrentRecord); ihole--; break;
412   - case ALLRIGHT : ihole++; break;
413   - case LEFTOVER : RemoveRecord((size_t)(ihole-1),CurrentRecord); ihole--; break;
414   - case RIGHTOVER : RemoveRecord((size_t)ihole,CurrentRecord); break;
415   - case LEFTRIGHTOVER : RemoveRecord((size_t)(ihole-1),CurrentRecord);
416   - RemoveRecord((size_t)(ihole-1),CurrentRecord);
417   - ihole--; break;
  416 + case WELLIN :
  417 + InsertRecord((size_t)ihole, CurrentRecord);
  418 + InsertFlag = 1;
  419 + break;
  420 + case ALLLEFT :
  421 + RemoveRecord((size_t)(ihole-1),CurrentRecord);
  422 + updateModificationDate = 1;
  423 + ihole--;
  424 + break;
  425 + case ALLRIGHT :
  426 + ihole++;
  427 + break;
  428 + case LEFTOVER :
  429 + RemoveRecord((size_t)(ihole-1),CurrentRecord);
  430 + updateModificationDate = 1;
  431 + ihole--;
  432 + break;
  433 + case RIGHTOVER :
  434 + RemoveRecord((size_t)ihole,CurrentRecord);
  435 + updateModificationDate = 1;
  436 + break;
  437 + case LEFTRIGHTOVER :
  438 + RemoveRecord((size_t)(ihole-1),CurrentRecord);
  439 + RemoveRecord((size_t)(ihole-1),CurrentRecord);
  440 + updateModificationDate = 1;
  441 + ihole--;
  442 + break;
418 443 }
419 444 } // While InsertFlag
420 445 } // if RecordsNumber > 0
... ... @@ -425,6 +450,17 @@ main(int argc, char **argv)
425 450 } // If current argument file is OK
426 451 } // CASE
427 452 } // For several arguments
  453 +
  454 + if (updateModificationDate == 1) {
  455 + char modificationDate[21];
  456 + memset(modificationDate, 0, 21*sizeof(char));
  457 + time_t t = time(NULL);
  458 + strftime(modificationDate, 21, "%Y-%m-%dT%H:%M:%SZ", localtime(&t));
  459 + nc_redef(tmID);
  460 + status = nc_put_att_text (tmID, NC_GLOBAL, "ModificationDate", 20, modificationDate);
  461 + nc_enddef(tmID);
  462 + }
  463 +
428 464 status = nc_close(tmID);
429 465 return(0);
430 466 }
... ...
src/DDSERVICES/SOAP/DDserverWeb.php
... ... @@ -144,12 +144,18 @@ function getDatasetsModificationDates()
144 144 }
145 145  
146 146 // Modification date
147   -
  147 + $cmd = "/opt/tools/DDServer/bin/GetModificationDate ".$timesFile;
  148 + exec($cmd, $output, $result_code);
  149 + if ($result_code === 0)
  150 + $modificationDate = $output[0];
  151 + if (!isset($releaseDate))
  152 + $releaseDate = $modificationDate;
  153 +
148 154  
149 155 $result[] = array(
150 156 'vi' => $viName,
151 157 'releaseDate' => $releaseDate,
152   - 'modificationDate' => "2018-01-01T00:00:00.000Z",
  158 + 'modificationDate' => $modificationDate,
153 159 );
154 160 }
155 161 }
... ...