MCPcopy Create free account
hub / github.com/TheSecuredAnalyst/security-suite / ScheduleStorage

Class ScheduleStorage

modules/scheduler/storage.py:13–253  ·  view source on GitHub ↗

Persistent storage for schedules and job history.

Source from the content-addressed store, hash-verified

11
12class ScheduleStorage:
13 """Persistent storage for schedules and job history."""
14
15 def __init__(self, storage_dir: Path | None = None):
16 """Initialize storage.
17
18 Args:
19 storage_dir: Directory for storage files
20 """
21 self.logger = get_logger("scheduler.storage")
22
23 if storage_dir:
24 self.storage_dir = Path(storage_dir)
25 else:
26 self.storage_dir = get_settings().data_dir / "scheduler"
27
28 self.storage_dir.mkdir(parents=True, exist_ok=True)
29
30 self.schedules_file = self.storage_dir / "schedules.json"
31 self.jobs_file = self.storage_dir / "jobs.json"
32
33 def save_schedules(self, schedules: dict[str, ScheduledScan]) -> bool:
34 """Save schedules to disk.
35
36 Args:
37 schedules: Dictionary of schedules
38
39 Returns:
40 True if successful
41 """
42 try:
43 data = {sid: s.to_dict() for sid, s in schedules.items()}
44 self.schedules_file.write_text(json.dumps(data, indent=2))
45 self.logger.debug(f"Saved {len(schedules)} schedules")
46 return True
47
48 except Exception as e:
49 self.logger.error(f"Failed to save schedules: {e}")
50 return False
51
52 def load_schedules(self) -> dict[str, ScheduledScan]:
53 """Load schedules from disk.
54
55 Returns:
56 Dictionary of schedules
57 """
58 if not self.schedules_file.exists():
59 return {}
60
61 try:
62 data = json.loads(self.schedules_file.read_text())
63 schedules = {}
64 for sid, sdata in data.items():
65 try:
66 schedules[sid] = ScheduledScan.from_dict(sdata)
67 except Exception as e:
68 self.logger.warning(f"Failed to load schedule {sid}: {e}")
69
70 self.logger.info(f"Loaded {len(schedules)} schedules")

Callers 5

schedule_createFunction · 0.90
schedule_listFunction · 0.90
schedule_deleteFunction · 0.90
schedule_runFunction · 0.90
schedule_startFunction · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected