Skip to content

Commit edf3a81

Browse files
author
Andrei Neagu
committed
print disk usage on dynamic sidecar boot
1 parent 89f3caf commit edf3a81

File tree

3 files changed

+56
-24
lines changed

3 files changed

+56
-24
lines changed

services/dynamic-sidecar/src/simcore_service_dynamic_sidecar/core/application.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,9 +180,9 @@ def create_app():
180180
setup_background_log_fetcher(app)
181181
setup_resource_tracking(app)
182182
setup_notifications(app)
183-
setup_system_monitor(app)
184183

185184
setup_mounted_fs(app)
185+
setup_system_monitor(app)
186186
setup_inputs(app)
187187
setup_outputs(app)
188188

services/dynamic-sidecar/src/simcore_service_dynamic_sidecar/modules/system_monitor/_disk_usage.py

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ async def _publish_disk_usage(self, usage: dict[MountPathCategory, DiskUsage]):
137137
self.app, user_id=self.user_id, node_id=self.node_id, usage=usage
138138
)
139139

140-
async def _monitor(self) -> None:
140+
async def get_disk_usage(self) -> dict[MountPathCategory, DiskUsage]:
141141
measured_disk_usage = await self._get_measured_disk_usage()
142142

143143
local_disk_usage = self._get_local_disk_usage(measured_disk_usage)
@@ -167,12 +167,14 @@ async def _monitor(self) -> None:
167167
msg = f"Could not assign {disk_usage=} for {folder_names=}"
168168
raise RuntimeError(msg)
169169

170-
supported_usage = {k: v for k, v in usage.items() if k in _SUPPORTED_ITEMS}
170+
return {k: v for k, v in usage.items() if k in _SUPPORTED_ITEMS}
171171

172+
async def _monitor(self) -> None:
173+
disk_usage = await self.get_disk_usage()
172174
# notify only when usage changes
173-
if self._last_usage != supported_usage:
174-
await self._publish_disk_usage(supported_usage)
175-
self._last_usage = supported_usage
175+
if self._last_usage != disk_usage:
176+
await self._publish_disk_usage(disk_usage)
177+
self._last_usage = disk_usage
176178

177179
async def setup(self) -> None:
178180
self._monitor_task = create_periodic_task(
@@ -202,25 +204,30 @@ def _get_monitored_paths(app: FastAPI) -> dict[MountPathCategory, set[Path]]:
202204
}
203205

204206

205-
def get_disk_usage_monitor(app: FastAPI) -> DiskUsageMonitor:
206-
disk_usage_monitor: DiskUsageMonitor = app.state.disk_usage_monitor
207-
return disk_usage_monitor
207+
def create_disk_usage_monitor(app: FastAPI) -> DiskUsageMonitor:
208+
settings: ApplicationSettings = app.state.settings
209+
return DiskUsageMonitor(
210+
app,
211+
user_id=settings.DY_SIDECAR_USER_ID,
212+
node_id=settings.DY_SIDECAR_NODE_ID,
213+
interval=settings.DYNAMIC_SIDECAR_TELEMETRY_DISK_USAGE_MONITOR_INTERVAL,
214+
monitored_paths=_get_monitored_paths(app),
215+
dy_volumes_mount_dir=settings.DYNAMIC_SIDECAR_DY_VOLUMES_MOUNT_DIR,
216+
)
217+
218+
219+
def get_disk_usage_monitor(app: FastAPI) -> DiskUsageMonitor | None:
220+
if hasattr(app.state, "disk_usage_monitor"):
221+
disk_usage_monitor: DiskUsageMonitor = app.state.disk_usage_monitor
222+
return disk_usage_monitor
223+
return None
208224

209225

210226
def setup_disk_usage(app: FastAPI) -> None:
211227
async def on_startup() -> None:
212228
with log_context(_logger, logging.INFO, "setup disk monitor"):
213-
settings: ApplicationSettings = app.state.settings
214-
215-
app.state.disk_usage_monitor = disk_usage_monitor = DiskUsageMonitor(
216-
app,
217-
user_id=settings.DY_SIDECAR_USER_ID,
218-
node_id=settings.DY_SIDECAR_NODE_ID,
219-
interval=settings.DYNAMIC_SIDECAR_TELEMETRY_DISK_USAGE_MONITOR_INTERVAL,
220-
monitored_paths=_get_monitored_paths(app),
221-
dy_volumes_mount_dir=settings.DYNAMIC_SIDECAR_DY_VOLUMES_MOUNT_DIR,
222-
)
223-
await disk_usage_monitor.setup()
229+
app.state.disk_usage_monitor = create_disk_usage_monitor(app)
230+
await app.state.disk_usage_monitor.setup()
224231

225232
async def on_shutdown() -> None:
226233
with log_context(_logger, logging.INFO, "shutdown disk monitor"):

services/dynamic-sidecar/src/simcore_service_dynamic_sidecar/modules/system_monitor/_setup.py

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,42 @@
44
from servicelib.logging_utils import log_context
55

66
from ...core.settings import SystemMonitorSettings
7-
from ._disk_usage import setup_disk_usage
7+
from ._disk_usage import (
8+
create_disk_usage_monitor,
9+
get_disk_usage_monitor,
10+
setup_disk_usage,
11+
)
812

913
_logger = logging.getLogger(__name__)
1014

1115

16+
async def _display_current_disk_usage(app: FastAPI) -> None:
17+
disk_usage_monitor = get_disk_usage_monitor(app)
18+
if disk_usage_monitor is None:
19+
disk_usage_monitor = create_disk_usage_monitor(app)
20+
21+
disk_usage = await disk_usage_monitor.get_disk_usage()
22+
for name, entry in disk_usage.items():
23+
_logger.info(
24+
"Disk usage for '%s': total=%s, free=%s, used=%s, used_percent=%s",
25+
name,
26+
entry.total.human_readable(),
27+
entry.free.human_readable(),
28+
entry.used.human_readable(),
29+
entry.used_percent,
30+
)
31+
32+
1233
def setup_system_monitor(app: FastAPI) -> None:
1334
with log_context(_logger, logging.INFO, "setup system monitor"):
1435
settings: SystemMonitorSettings = app.state.settings.SYSTEM_MONITOR_SETTINGS
1536

16-
if not settings.DY_SIDECAR_SYSTEM_MONITOR_TELEMETRY_ENABLE:
37+
if settings.DY_SIDECAR_SYSTEM_MONITOR_TELEMETRY_ENABLE:
38+
setup_disk_usage(app)
39+
else:
1740
_logger.warning("system monitor disabled")
18-
return
1941

20-
setup_disk_usage(app)
42+
async def on_startup() -> None:
43+
await _display_current_disk_usage(app)
44+
45+
app.add_event_handler("startup", on_startup)

0 commit comments

Comments
 (0)