def put(self, ini_date: str = None, end_date: str = None): """ Ejecuta reportes diarios desde fecha inicial a final Fecha inicial formato: <b>yyyy-mm-dd, yyyy-mm-dd H:M:S</b> Fecha final formato: <b>yyyy-mm-dd, yyyy-mm-dd H:M:S</b> """ if ini_date is None and end_date is None: ini_date, end_date = u.get_dates_by_default() else: success1, ini_date = u.check_date_yyyy_mm_dd(ini_date) success2, end_date = u.check_date_yyyy_mm_dd(end_date) if not success1 or not success2: msg = "No se puede convertir. " + (ini_date if not success1 else end_date) return dict(success=False, msg=msg), 400 date_range = pd.date_range(start=ini_date, end=end_date, freq=dt.timedelta(days=1)) to_execute_reports = list() existing_reports = list() executing_reports = list() for ini, end in zip(date_range, date_range[1:]): report = SRFinalReportTemporal.objects(fecha_inicio=ini, fecha_final=end).first() if report is not None: existing_reports.append([str(ini), str(end)]) else: to_execute_reports.append([ini, end]) executing_reports.append([str(ini), str(end)]) p = threading.Thread(target=executing_all_reports, kwargs={"to_execute_reports": to_execute_reports}) p.start() return dict(success=True, existing_reports=existing_reports, executing_reports=executing_reports), 200
def __init__(self, url_daily_report: str, url_tags_report: str, parameters: dict, ini_date: dt.datetime = None, end_date: dt.datetime = None, *args, **values): super().__init__(*args, **values) self.url_tags_report = url_tags_report self.url_daily_report = url_daily_report if ini_date is None or end_date is None: ini_date, end_date = get_dates_by_default() self.ini_date = ini_date self.end_date = end_date self.last_day = end_date - dt.timedelta(days=1) self.daily_summary = None self.daily_details = None self.tags_report = None self.to_report_tags = None self.to_report_details = None self.parameters = parameters
def __init__(self, name: str, mail_config: dict, parameters: dict, trigger: dt.timedelta = None, ini_date: dt.datetime = None, end_date: dt.datetime = None, *args, **values): super().__init__(*args, **values) if trigger is None: trigger = dt.timedelta(hours=0) self.name = name self.mail_config = mail_config self.parameters = parameters self.trigger = trigger self.today = get_today() self.start_time = dt.datetime.now() self._stop = threading.Event() self.trigger_event = self.today + self.trigger if dt.datetime.now() < self.today + self.trigger else \ self.today + dt.timedelta(days=1) + self.trigger self.seconds_to_sleep = 10 if ini_date is None or end_date is None: ini_date, end_date = get_dates_by_default() self.ini_date = ini_date self.end_date = end_date self.daemon = True
def run(self): n_iter = 0 log.info("Starting this routine") while not self._stop.is_set(): try: self.update_from_db() if dt.datetime.now() >= self.trigger_event: msg = f"Executing: {url_disponibilidad_diaria}" log.info(msg) daily_response = requests.put(url_disponibilidad_diaria) msg = f"This process was executed: [{daily_response}]" log.info(msg) if dt.datetime.now().day == 1: ini_date, end_date = get_dates_by_default() url_to_send = url_disponibilidad_mes.replace( "ini_date", ini_date.strftime("%Y-%m-%d")) url_to_send = url_to_send.replace( "end_date", end_date.strftime("%Y-%m-%d")) msg = f"Executing: {url_to_send}" month_response = requests.put(url_to_send) log.info(msg) msg = f"This process was executed: [{month_response}]" log.info(msg) msg = f"All was correctly executed" msg = f"{msg} \nWainting until {self.trigger_event}" self.save(msg) self.update() log.info(msg) except Exception as e: log.error( f"Error al procesar la informaciĆ³n \n{str(e)}\n{traceback.format_exc()}" ) if n_iter % 50 == 0 or n_iter == 0: msg = f"The process is running. Waiting until {self.trigger_event}" log.info(msg) self.save(msg) n_iter = n_iter + 1 if n_iter <= 500 else 0 left_time = self.get_left_time_seconds() time.sleep(left_time)
def test(): mongo_config = init.MONGOCLIENT_SETTINGS connect(**mongo_config) rutine_name = "rutina_correo_electronico" trigger = dict(hours=7, minutes=40, seconds=0) mail_config = dict(from_email="*****@*****.**", users=["*****@*****.**"], admin=["*****@*****.**"]) parameters = dict(disp_utr_umbral=0.9, disp_tag_umbral=0.9) ini_date, end_date = get_dates_by_default() ini_date, end_date = dt.datetime(year=2021, month=3, day=1), dt.datetime(year=2021, month=3, day=30) th_v = StoppableThreadMailReport(trigger=dt.timedelta(**trigger), name=rutine_name, mail_config=mail_config, parameters=parameters, ini_date=ini_date, end_date=end_date) th_v.save(msg="ConfiguraciĆ³n guardada") state = TemporalProcessingStateReport.objects(id_report=rutine_name).first() trigger = dt.timedelta(**state.info["trigger"]) mail_config = state.info["mail_config"] th = get_thread_by_name(rutine_name) if th is None: th = StoppableThreadMailReport(name=rutine_name, trigger=trigger, mail_config=mail_config, parameters=parameters, ini_date=ini_date, end_date=end_date) th.start() else: th.stop()
def update(self): self.today = get_today() self.start_time = dt.datetime.now() self.ini_date, self.end_date = get_dates_by_default() self.trigger_event = self.today + self.trigger if dt.datetime.now() < self.today + self.trigger else \ self.today + dt.timedelta(days=1) + self.trigger