| 298 local_file = os.path.join(local_dir, basename) |
303 local_file = os.path.join(local_dir, basename) |
| 299 |
304 |
| 300 with open(local_file, 'wb') as f: |
305 with open(local_file, 'wb') as f: |
| 301 f.write(zip_file.read(ziped_name)) |
306 f.write(zip_file.read(ziped_name)) |
| 302 |
307 |
| 303 def download_hirelpp(self, measurement_id): |
308 def download_hirelpp(self, measurement_id, is_automatic_upload=False): |
| 304 """ Download hirelpp files for the measurement id. """ |
309 """ Download hirelpp files for the measurement id. """ |
| 305 # Construct the download url |
310 # Construct the download url |
| 306 download_url = self.download_hirelpp_pattern.format(measurement_id) |
311 download_url = self.download_hirelpp_pattern.format(measurement_id) |
| 307 try: |
312 try: |
| 308 self.download_files(measurement_id, 'hirelpp', download_url) |
313 self.download_files(measurement_id, 'hirelpp', download_url) |
| |
314 if is_automatic_upload: |
| |
315 self.sccquery = self.sccquery.replace("#hirelpp_transfer_status#", "true") |
| |
316 self.sccquery = self.sccquery.replace("#hirelpp_transfer_message#", "'HIRELPP products downloaded'") |
| 309 except Exception as e: |
317 except Exception as e: |
| 310 logger.error("Could not download HiRElPP files. Error message: {}".format(e)) |
318 logger.error("Could not download HiRElPP files. Error message: {}".format(e)) |
| |
319 if is_automatic_upload: |
| |
320 self.sccquery = self.sccquery.replace("#hirelpp_transfer_status#", "false") |
| |
321 self.sccquery = self.sccquery.replace("#hirelpp_transfer_message#", |
| |
322 "'Could not download HIRELPP files. Error message: {}".format(e))+"'" |
| 311 logger.debug('Download exception:', exc_info=True) |
323 logger.debug('Download exception:', exc_info=True) |
| 312 |
324 |
| 313 def download_cloudmask(self, measurement_id): |
325 def download_cloudmask(self, measurement_id, is_automatic_upload=False): |
| 314 """ Download cloudmask files for the measurement id. """ |
326 """ Download cloudmask files for the measurement id. """ |
| 315 # Construct the download url |
327 # Construct the download url |
| 316 download_url = self.download_cloudmask_pattern.format(measurement_id) |
328 download_url = self.download_cloudmask_pattern.format(measurement_id) |
| 317 try: |
329 try: |
| 318 self.download_files(measurement_id, 'cloudscreen', download_url) |
330 self.download_files(measurement_id, 'cloudscreen', download_url) |
| |
331 if is_automatic_upload: |
| |
332 self.sccquery = self.sccquery.replace("#cloudmask_transfer_status#", "true") |
| |
333 self.sccquery = self.sccquery.replace("#cloudmask_transfer_message#", "'CLODUMASK products downloaded'") |
| 319 except Exception as e: |
334 except Exception as e: |
| 320 logger.error("Could not download cloudscreen files. Error message: {}".format(e)) |
335 logger.error("Could not download cloudscreen files. Error message: {}".format(e)) |
| |
336 if is_automatic_upload: |
| |
337 self.sccquery = self.sccquery.replace("#cloudmask_transfer_status#", "false") |
| |
338 self.sccquery = self.sccquery.replace("#cloudmask_transfer_message#", |
| |
339 "'Could not download CLOUDMASK files. Error message: {}".format(e))+"'" |
| 321 logger.debug('Download exception:', exc_info=True) |
340 logger.debug('Download exception:', exc_info=True) |
| 322 |
341 |
| 323 def download_elpp(self, measurement_id): |
342 def download_elpp(self, measurement_id, is_automatic_upload=False): |
| 324 """ Download preprocessed files for the measurement id. """ |
343 """ Download preprocessed files for the measurement id. """ |
| 325 # Construct the download url |
344 # Construct the download url |
| 326 download_url = self.download_elpp_pattern.format(measurement_id) |
345 download_url = self.download_elpp_pattern.format(measurement_id) |
| 327 try: |
346 try: |
| 328 self.download_files(measurement_id, 'elpp', download_url) |
347 self.download_files(measurement_id, 'elpp', download_url) |
| |
348 if is_automatic_upload: |
| |
349 self.sccquery = self.sccquery.replace("#elpp_transfer_status#", "true") |
| |
350 self.sccquery = self.sccquery.replace("#elpp_transfer_message#", "'ELPP products downloaded'") |
| 329 except Exception as e: |
351 except Exception as e: |
| 330 logger.error("Could not download ElPP files. Error message: {}".format(e)) |
352 logger.error("Could not download ElPP files. Error message: {}".format(e)) |
| |
353 if is_automatic_upload: |
| |
354 self.sccquery = self.sccquery.replace("#elpp_transfer_status#", "false") |
| |
355 self.sccquery = self.sccquery.replace("#elpp_transfer_message#", |
| |
356 "'Could not download ELPP files. Error message: {}".format(e))+"'" |
| 331 logger.debug('Download exception:', exc_info=True) |
357 logger.debug('Download exception:', exc_info=True) |
| 332 |
358 |
| 333 def download_elda(self, measurement_id): |
359 def download_elda(self, measurement_id, is_automatic_upload=False): |
| 334 """ Download optical files for the measurement id. """ |
360 """ Download optical files for the measurement id. """ |
| 335 # Construct the download url |
361 # Construct the download url |
| 336 download_url = self.download_elda_pattern.format(measurement_id) |
362 download_url = self.download_elda_pattern.format(measurement_id) |
| 337 try: |
363 try: |
| 338 self.download_files(measurement_id, 'elda', download_url) |
364 self.download_files(measurement_id, 'elda', download_url) |
| |
365 if is_automatic_upload: |
| |
366 self.sccquery = self.sccquery.replace("#elda_transfer_status#", "true") |
| |
367 self.sccquery = self.sccquery.replace("#elda_transfer_message#", "'ELDA products downloaded'") |
| 339 except Exception as e: |
368 except Exception as e: |
| 340 logger.error("Could not download ELDA files. Error message: {}".format(e)) |
369 logger.error("Could not download ELDA files. Error message: {}".format(e)) |
| |
370 if is_automatic_upload: |
| |
371 self.sccquery = self.sccquery.replace("#elda_transfer_status#", "false") |
| |
372 self.sccquery = self.sccquery.replace("#elda_transfer_message#", |
| |
373 "'Could not download ELDA files. Error message: {}".format(e))+"'" |
| 341 logger.debug('Download exception:', exc_info=True) |
374 logger.debug('Download exception:', exc_info=True) |
| 342 |
375 |
| 343 def download_plots(self, measurement_id): |
376 def download_plots(self, measurement_id): |
| 344 """ Download profile graphs for the measurement id. """ |
377 """ Download profile graphs for the measurement id. """ |
| 345 # Construct the download url |
378 # Construct the download url |
| 348 self.download_files(measurement_id, 'elda_plots', download_url) |
381 self.download_files(measurement_id, 'elda_plots', download_url) |
| 349 except Exception as e: |
382 except Exception as e: |
| 350 logger.error("Could not download ELDA plots. Error message: {}".format(e)) |
383 logger.error("Could not download ELDA plots. Error message: {}".format(e)) |
| 351 logger.debug('Download exception:', exc_info=True) |
384 logger.debug('Download exception:', exc_info=True) |
| 352 |
385 |
| 353 def download_elic(self, measurement_id): |
386 def download_elic(self, measurement_id, is_automatic_upload=False): |
| 354 """ Download ELIC files for the measurement id. """ |
387 """ Download ELIC files for the measurement id. """ |
| 355 # Construct the download url |
388 # Construct the download url |
| 356 download_url = self.download_elic_pattern.format(measurement_id) |
389 download_url = self.download_elic_pattern.format(measurement_id) |
| 357 try: |
390 try: |
| 358 self.download_files(measurement_id, 'elic', download_url) |
391 self.download_files(measurement_id, 'elic', download_url) |
| |
392 if is_automatic_upload: |
| |
393 self.sccquery = self.sccquery.replace("#elic_transfer_status#", "true") |
| |
394 self.sccquery = self.sccquery.replace("#elic_transfer_message#", "'ELIC products downloaded'") |
| 359 except Exception as e: |
395 except Exception as e: |
| 360 logger.error("Could not download ELIC files. Error message: {}".format(e)) |
396 logger.error("Could not download ELIC files. Error message: {}".format(e)) |
| |
397 if is_automatic_upload: |
| |
398 self.sccquery = self.sccquery.replace("#elic_transfer_status#", "false") |
| |
399 self.sccquery = self.sccquery.replace("#elic_transfer_message#", |
| |
400 "'Could not download ELIC files. Error message: {}".format(e))+"'" |
| 361 logger.debug('Download exception:', exc_info=True) |
401 logger.debug('Download exception:', exc_info=True) |
| 362 |
402 |
| 363 def download_eldec(self, measurement_id): |
403 def download_eldec(self, measurement_id, is_automatic_upload=False): |
| 364 """ Download ELDEC files for the measurement id. """ |
404 """ Download ELDEC files for the measurement id. """ |
| 365 # Construct the download url |
405 # Construct the download url |
| 366 download_url = self.download_elda_pattern.format(measurement_id) # ELDA patter is used for now |
406 download_url = self.download_elda_pattern.format(measurement_id) # ELDA patter is used for now |
| 367 try: |
407 try: |
| 368 self.download_files(measurement_id, 'eldec', download_url) |
408 self.download_files(measurement_id, 'eldec', download_url) |
| |
409 if is_automatic_upload: |
| |
410 self.sccquery = self.sccquery.replace("#eldec_transfer_status#", "true") |
| |
411 self.sccquery = self.sccquery.replace("#eldec_transfer_message#", "'ELDEC products downloaded'") |
| 369 except Exception as e: |
412 except Exception as e: |
| 370 logger.error("Could not download EDELC files. Error message: {}".format(e)) |
413 logger.error("Could not download EDELC files. Error message: {}".format(e)) |
| |
414 if is_automatic_upload: |
| |
415 self.sccquery = self.sccquery.replace("#eldec_transfer_status#", "false") |
| |
416 self.sccquery = self.sccquery.replace("#eldec_transfer_message#", |
| |
417 "'Could not download ELDEC files. Error message: {}".format(e))+"'" |
| 371 logger.debug('Download exception:', exc_info=True) |
418 logger.debug('Download exception:', exc_info=True) |
| 372 |
419 |
| 373 def rerun_elpp(self, measurement_id, monitor=True): |
420 def rerun_elpp(self, measurement_id, monitor=True): |
| 374 logger.debug("Started rerun_elpp procedure.") |
421 logger.debug("Started rerun_elpp procedure.") |
| 375 |
422 |
| 495 self.download_eldec(measurement_id) |
542 self.download_eldec(measurement_id) |
| 496 logger.info("--- Processing finished. ---") |
543 logger.info("--- Processing finished. ---") |
| 497 |
544 |
| 498 return measurement |
545 return measurement |
| 499 |
546 |
| 500 def download_products(self, measurement, dir_name): |
547 def download_products(self, measurement, dir_name, is_automatic_upload=False): |
| 501 """ Download all the products of a measurement id (used only for E-SHAPE)""" |
548 """ Download all the products of a measurement id (used for E-SHAPE and automatic_upload)""" |
| |
549 |
| 502 measurement_id = measurement.id |
550 measurement_id = measurement.id |
| |
551 self.sccquery = self.sccquery.replace("#__measurements__ID#", "'"+measurement_id+"'") |
| 503 base_output_dir = self.output_dir |
552 base_output_dir = self.output_dir |
| 504 self.output_dir = self.output_dir + dir_name + "/" |
553 self.output_dir = self.output_dir + dir_name + "/" |
| 505 |
554 |
| 506 if measurement.hirelpp == 127: |
555 if measurement.hirelpp == 127: |
| 507 logger.info("Downloading HiRElPP files.") |
556 logger.info("Downloading HiRElPP files.") |
| 508 self.download_hirelpp(measurement_id) |
557 self.download_hirelpp(measurement_id, is_automatic_upload) |
| |
558 else: |
| |
559 if is_automatic_upload: |
| |
560 self.sccquery = self.sccquery.replace("#hirelpp_transfer_status#", "NULL") |
| |
561 self.sccquery = self.sccquery.replace("#hirelpp_transfer_message#", "'No HIRELPP products available'") |
| 509 if measurement.cloudmask == 127: |
562 if measurement.cloudmask == 127: |
| 510 logger.info("Downloading cloud screening files.") |
563 logger.info("Downloading cloud screening files.") |
| 511 self.download_cloudmask(measurement_id) |
564 self.download_cloudmask(measurement_id, is_automatic_upload) |
| |
565 else: |
| |
566 if is_automatic_upload: |
| |
567 self.sccquery = self.sccquery.replace("#cloudmask_transfer_status#", "NULL") |
| |
568 self.sccquery = self.sccquery.replace("#cloudmask_transfer_message#", "'No CLOUDMASK products available'") |
| 512 if measurement.elpp == 127: |
569 if measurement.elpp == 127: |
| 513 logger.info("Downloading ElPP files.") |
570 logger.info("Downloading ElPP files.") |
| 514 self.download_elpp(measurement_id) |
571 self.download_elpp(measurement_id, is_automatic_upload) |
| |
572 else: |
| |
573 if is_automatic_upload: |
| |
574 self.sccquery = self.sccquery.replace("#elpp_transfer_status#", "NULL") |
| |
575 self.sccquery = self.sccquery.replace("#elpp_transfer_message#", "'No ELPP products available'") |
| 515 if measurement.elda == 127: |
576 if measurement.elda == 127: |
| 516 logger.info("Downloading ELDA files.") |
577 logger.info("Downloading ELDA files.") |
| 517 self.download_elda(measurement_id) |
578 self.download_elda(measurement_id, is_automatic_upload) |
| 518 logger.info("Downloading ELDA plots.") |
579 if not is_automatic_upload: |
| 519 self.download_plots(measurement_id) |
580 logger.info("Downloading ELDA plots.") |
| |
581 self.download_plots(measurement_id) |
| |
582 else: |
| |
583 if is_automatic_upload: |
| |
584 self.sccquery = self.sccquery.replace("#elda_transfer_status#", "NULL") |
| |
585 self.sccquery = self.sccquery.replace("#elda_transfer_message#", "'No ELDA products available'") |
| 520 if measurement.elic == 127: |
586 if measurement.elic == 127: |
| 521 logger.info("Downloading ELIC files.") |
587 logger.info("Downloading ELIC files.") |
| 522 self.download_elic(measurement_id) |
588 self.download_elic(measurement_id, is_automatic_upload) |
| 523 if measurement.is_calibration and measurement.eldec == 0: |
589 else: |
| |
590 if is_automatic_upload: |
| |
591 self.sccquery = self.sccquery.replace("#elic_transfer_status#", "NULL") |
| |
592 self.sccquery = self.sccquery.replace("#elic_transfer_message#", "'No ELIC products available'") |
| |
593 if measurement.is_calibration and measurement.eldec == 127: |
| 524 logger.info("Downloading ELDEC files.") |
594 logger.info("Downloading ELDEC files.") |
| 525 self.download_eldec(measurement_id) |
595 self.download_eldec(measurement_id, is_automatic_upload) |
| |
596 elif not measurement.is_calibration: |
| |
597 if is_automatic_upload: |
| |
598 self.sccquery = self.sccquery.replace("#eldec_transfer_status#", "NULL") |
| |
599 self.sccquery = self.sccquery.replace("#eldec_transfer_message#", "'The measurement is not a calibration'") |
| |
600 elif measurement.is_calibration and measurement.eldec != 127: |
| |
601 if is_automatic_upload: |
| |
602 self.sccquery = self.sccquery.replace("#eldec_transfer_status#", "NULL") |
| |
603 self.sccquery = self.sccquery.replace("#eldec_transfer_message#", "'No ELDEC products available'") |
| 526 logger.info("--- Processing finished. ---") |
604 logger.info("--- Processing finished. ---") |
| 527 |
605 |
| 528 self.output_dir = base_output_dir |
606 self.output_dir = base_output_dir |
| 529 return measurement |
607 return measurement |
| 530 |
608 |
| 1016 |
1094 |
| 1017 scc.logout() |
1095 scc.logout() |
| 1018 |
1096 |
| 1019 |
1097 |
| 1020 def automatic_upload(settings): |
1098 def automatic_upload(settings): |
| 1021 date_time_start = datetime.datetime.now() - datetime.timedelta(days=1) |
1099 date_time_start = datetime.datetime.now() - datetime.timedelta(hours=8) |
| |
1100 date_time_start = date_time_start.replace(minute=0, second=0) |
| 1022 start_parameter = date_time_start.strftime("%Y-%m-%dT%H:%M:%S") |
1101 start_parameter = date_time_start.strftime("%Y-%m-%dT%H:%M:%S") |
| 1023 date_time_stop = datetime.datetime.now() |
1102 date_time_stop = date_time_start + datetime.timedelta(hours=6) |
| 1024 stop_parameter = date_time_stop.strftime("%Y-%m-%dT%H:%M:%S") |
1103 stop_parameter = date_time_stop.strftime("%Y-%m-%dT%H:%M:%S") |
| 1025 |
1104 |
| 1026 with SCC(settings['basic_credentials'], settings['output_dir'], settings['base_url']) as scc: |
1105 # Altri esempi di utilizzo della libreria |
| |
1106 #date_time_start = datetime.datetime.combine(date_time_start, datetime.time.min) |
| |
1107 #date_time_stop = date_time_start.replace(hour=6, minute=0, second=0) |
| |
1108 #date_time_stop = datetime.datetime.combine(date_time_stop, datetime.time.max) |
| |
1109 |
| |
1110 with SCC(settings['basic_credentials'], settings['output_dir'], settings['base_url'], settings['sccdb_host'], settings['sccdb_credentials'], settings['sccdb']) as scc: |
| 1027 scc.login(settings['website_credentials']) |
1111 scc.login(settings['website_credentials']) |
| 1028 |
1112 |
| 1029 measurements = scc.available_measurements(start_gte=start_parameter, stop_lte=stop_parameter, is_queued=False, is_being_processed=False) |
1113 measurements = scc.available_measurements(start_gte=start_parameter, stop_lte=stop_parameter, is_queued=False, is_being_processed=False) |
| |
1114 is_automatic_upload = True |
| 1030 if measurements is not None: |
1115 if measurements is not None: |
| 1031 for meas in measurements: |
1116 for meas in measurements: |
| 1032 scc.download_products(meas, "") |
1117 #Create SQL query to compose |
| |
1118 mySql_insert_query = ("INSERT INTO scctoearlinettransfer_log (__measurements__ID, creation_date, " |
| |
1119 "hirelpp_transfer_status, hirelpp_transfer_message, cloudmask_transfer_status, " |
| |
1120 "cloudmask_transfer_message, elpp_transfer_status, elpp_transfer_message, " |
| |
1121 "elda_transfer_status, elda_transfer_message, eldamwl_transfer_status, " |
| |
1122 "eldamwl_transfer_message, eldec_transfer_status, eldec_transfer_message, " |
| |
1123 "elic_transfer_status, elic_transfer_message, transfer_status, transfer_message) " |
| |
1124 "VALUES " |
| |
1125 "(#__measurements__ID#, #creation_date# , #hirelpp_transfer_status#, " |
| |
1126 "#hirelpp_transfer_message# , #cloudmask_transfer_status#, #cloudmask_transfer_message#, " |
| |
1127 "#elpp_transfer_status#, #elpp_transfer_message#, #elda_transfer_status#, " |
| |
1128 "#elda_transfer_message#, #eldamwl_transfer_status#, #eldamwl_transfer_message#, " |
| |
1129 "#eldec_transfer_status#, #eldec_transfer_message#, #elic_transfer_status#, " |
| |
1130 "#elic_transfer_message#, #transfer_status#, #transfer_message#);") |
| |
1131 scc.sccquery = mySql_insert_query |
| |
1132 scc.download_products(meas, "", is_automatic_upload) |
| |
1133 |
| |
1134 scc.sccquery = scc.sccquery.replace("#creation_date#", "'"+datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")+"'") |
| |
1135 scc.sccquery = scc.sccquery.replace("#eldamwl_transfer_status#", "NULL") |
| |
1136 scc.sccquery = scc.sccquery.replace("#eldamwl_transfer_message#", "'No ELDAMWL products available'") |
| |
1137 scc.sccquery = scc.sccquery.replace("#transfer_status#", "true") |
| |
1138 scc.sccquery = scc.sccquery.replace("#transfer_message#", "NULL") |
| |
1139 |
| |
1140 #Execute SQL query |
| |
1141 try: |
| |
1142 connection = mysql.connector.connect(host=scc.sccdb_host, |
| |
1143 database=scc.sccdb, |
| |
1144 user=scc.sccdb_credentials[0], |
| |
1145 password=scc.sccdb_credentials[1]) |
| |
1146 |
| |
1147 cursor = connection.cursor() |
| |
1148 cursor.execute(scc.sccquery) |
| |
1149 connection.commit() |
| |
1150 logger.info("{} Record inserted successfully into scctoearlinettransfer_log table".format(cursor.rowcount)) |
| |
1151 cursor.close() |
| |
1152 |
| |
1153 except mysql.connector.Error as error: |
| |
1154 logger.error("Failed to insert record into scctoearlinettransfer_log table {}".format(error)) |
| |
1155 |
| |
1156 finally: |
| |
1157 if connection.is_connected(): |
| |
1158 connection.close() |
| |
1159 logger.debug("MySQL connection is closed") |
| 1033 |
1160 |
| 1034 scc.logout() |
1161 scc.logout() |
| 1035 |
1162 |
| 1036 |
1163 |
| 1037 def settings_from_path(config_file_path): |
1164 def settings_from_path(config_file_path): |