@@ -4,9 +4,12 @@ import (
44 "context"
55 "fmt"
66 "log/slog"
7+ "os"
8+ "path/filepath"
79 "time"
810
911 "github.com/opensvc/oc3/cdb"
12+ "github.com/spf13/viper"
1013)
1114
1215// TaskScrubObjects marks services status "undef" if all instances have outdated or absent data.
@@ -80,6 +83,18 @@ var TaskScrubSvcdisks = Task{
8083 timeout : time .Minute ,
8184}
8285
86+ var TaskScrubTempviz = Task {
87+ name : "scrub_tempviz" ,
88+ fn : taskScrubTempviz ,
89+ timeout : time .Minute ,
90+ }
91+
92+ var TaskScrubPdf = Task {
93+ name : "scrub_pdf" ,
94+ fn : taskScrubPdf ,
95+ timeout : time .Minute ,
96+ }
97+
8398var TaskScrubCompModulesetsNodes = Task {
8499 name : "scrub_comp_modulesets_nodes" ,
85100 fn : taskScrubCompModulesetsNodes ,
@@ -144,6 +159,7 @@ var TaskScrubDaily = Task{
144159 TaskScrubNodeHBA ,
145160 TaskScrubPackages ,
146161 TaskScrubPatches ,
162+ TaskScrubPdf ,
147163 TaskScrubResmon ,
148164 TaskScrubStorArray ,
149165 TaskScrubSvcdisks ,
@@ -152,6 +168,15 @@ var TaskScrubDaily = Task{
152168 timeout : 5 * time .Minute ,
153169}
154170
171+ var TaskScrubHourly = Task {
172+ name : "scrub_hourly" ,
173+ period : time .Minute ,
174+ children : TaskList {
175+ TaskScrubTempviz ,
176+ },
177+ timeout : time .Minute ,
178+ }
179+
155180var TaskScrubMinutely = Task {
156181 name : "scrub_minutely" ,
157182 period : time .Minute ,
@@ -579,3 +604,67 @@ func taskUpdateStorArrayDGQuota(ctx context.Context, task *Task) error {
579604 }
580605 return odb .Commit ()
581606}
607+
608+ func taskScrubTempviz (ctx context.Context , task * Task ) error {
609+ threshold := time .Now ().Add (- 1 * time .Hour )
610+ directories := viper .GetStringSlice ("scheduler.task.scrub_tempviz.directories" )
611+ if len (directories ) == 0 {
612+ slog .Warn ("skip: define scheduler.task.scrub_tempviz.directories" )
613+ return nil
614+ }
615+ var matches []string
616+ for _ , directory := range directories {
617+ pattern := filepath .Join (directory , "tempviz*" )
618+ if m , err := filepath .Glob (pattern ); err != nil {
619+ return fmt .Errorf ("failed to glob files: %w" , err )
620+ } else {
621+ matches = append (matches , m ... )
622+ }
623+ }
624+ for _ , fpath := range matches {
625+ fileInfo , err := os .Stat (fpath )
626+ if err != nil {
627+ return err
628+ }
629+ mtime := fileInfo .ModTime ()
630+ if mtime .Before (threshold ) {
631+ slog .Info (fmt .Sprintf ("rm %s mtime %s" , fpath , mtime ))
632+ if err := os .Remove (fpath ); err != nil {
633+ return fmt .Errorf ("failed to rm %s: %w" , fpath , err )
634+ }
635+ }
636+ }
637+ return nil
638+ }
639+
640+ func taskScrubPdf (ctx context.Context , task * Task ) error {
641+ threshold := time .Now ().Add (- 24 * time .Hour )
642+ directories := viper .GetStringSlice ("scheduler.task.scrub_pdf.directories" )
643+ if len (directories ) == 0 {
644+ slog .Warn ("skip: define scheduler.task.scrub_pdf.directories" )
645+ return nil
646+ }
647+ var matches []string
648+ for _ , directory := range directories {
649+ pattern := filepath .Join (directory , "*-*-*-*-*.pdf" )
650+ if m , err := filepath .Glob (pattern ); err != nil {
651+ return fmt .Errorf ("failed to glob files: %w" , err )
652+ } else {
653+ matches = append (matches , m ... )
654+ }
655+ }
656+ for _ , fpath := range matches {
657+ fileInfo , err := os .Stat (fpath )
658+ if err != nil {
659+ return err
660+ }
661+ mtime := fileInfo .ModTime ()
662+ if mtime .Before (threshold ) {
663+ slog .Info (fmt .Sprintf ("rm %s mtime %s" , fpath , mtime ))
664+ if err := os .Remove (fpath ); err != nil {
665+ return fmt .Errorf ("failed to rm %s: %w" , fpath , err )
666+ }
667+ }
668+ }
669+ return nil
670+ }
0 commit comments