hW\SSKrSSKrSSKrSSKrSSKJr SSKJr SSKJ r "SS5r g)N)BackgroundScheduler) CronTrigger)IntervalTriggercL\rSrSrSrSrSrSrS SjrSr Sr S r S r S r g )SchedulerService u Servizio di backend per la schedulazione e l'esecuzione di task. È completamente "headless" e non ha un'interfaccia grafica. La sua configurazione è gestita tramite un file JSON esterno. cXlURS5Ul[SS9UlURR 5Ulg)N config_file Europe/Rome)timezone)coregetr r schedulerget_python_executablepython_executable)selfcore_apiconfigs JC:\Hub\SCAMBIO\PYTHON\Jarvis\services\schedulerservice\schedulerservice.py__init__SchedulerService.__init__s9 !::m4,mD!%!@!@!BcURS5 UR(dURSS5 gUR5 URR 5 URS5 g)z,Avvia il servizio e carica i job schedulati.zAvvio servizio...uRNessun 'config_file' specificato per lo scheduler. Il servizio non eseguirà task.warningNzServizio avviato e operativo.)logr _load_jobs_from_filerstartrs rrSchedulerService.startsT $% HHikt u  !!#  01rcURS5 URR(aURRSS9 URS5 g)z"Ferma lo scheduler in modo pulito.zArresto servizio...F)waitzServizio fermato.N)rrrunningshutdownrs rstopSchedulerService.stop!s> &' >> ! ! NN # # # / $%rcBURRSU3U5 g)z+Metodo di logging standard per il servizio.z [SCHEDULER] N)r r)rmessagelevels rrSchedulerService.log(s WI.6rc(URR5 UR5nUHbnURU5nU(dMURR UR US/UUSS9 UR SUSS35 Md g)z7Carica e imposta i job dal file di configurazione JSON. script_pathid)argstriggerr,zJob 'z ' caricato.N)rremove_all_jobsget_jobs_config_create_triggeradd_job _run_taskr)r jobs_datajob_infor.s rr%SchedulerService._load_jobs_from_file-s &&(((* !H**84Gw&&NN"=12#~ ' 5$ 0 <="rc2URS5nUS:Xa9[URS5URS5URS5SS9$US:Xa[URS 5SS 9$URS US URS 5S3S5 g)zCCrea un oggetto trigger di APScheduler basato sulla configurazione.r.cronhourminute day_of_weekr )r9r:r;r intervalseconds)r=r zTrigger non valido 'z' per il job 'r,'.rN)rrrr)rr5 trigger_types rr1 SchedulerService._create_trigger<s||I. 6 !HLL$8hAW+3<< +FQ^` ` Z '"8<< +B][ [ ' ~^HLLQUDVCWWYZ\efrc URS[RRU535 /nUR 5R S5(aUR U/nO[UR 5R S5(aU/nO3URS[RRU53S5 g[R"S5n[R"USSSUS SS 9nURS [RRU5S 35 UR(a-URS URR535 gg![RanURS[RRU5S3S5 UR(a2URSURR53S5 SnAgSnAgSnAf[a?nURS[RRU5SU3S5 SnAgSnAff=f)z7Esegue un singolo script/batch in un processo separato.z Avvio task: z.py)z.batz.shz%ERRORE: Tipo di file non supportato: errorNFTreplace)checkcapture_outputtextencodingerrorsshellzTask 'z ' completato.z > Output: z ERRORE task 'r>z > Errore: zERRORE imprevisto task 'z': )rospathbasenamelowerendswithrlocalegetpreferredencoding subprocessrunstdoutstripCalledProcessErrorstderr Exception)rr+commandsystem_encodingresultes rr3SchedulerService._run_taskHs < 0 0 =>?@     ' ' . .--{;G    ) )/ : :"mG HH(?@A,, F HH}RWW%5%5k%B$C2F Pxx=)9(:;WEE ` HH/0@0@0M/NcRSQTUW^ _ _ `s&BE$$H?8A1G33 H?5H::H?cURn[RRU5(d4[RR UR R U5n[USSS9n[R"U5sSSS5 $!,(df  g=f![[R4a /s$[a!nURSU3S5 /sSnA$SnAff=f)z `4rr) rJrcrOrQ!apscheduler.schedulers.backgroundrapscheduler.triggers.cronrapscheduler.triggers.intervalrrrqrrrus& A19ffr