Skip to content

Commit b33c405

Browse files
committed
feat(orion): surface VM image, resources, and toolchain in Client UI
Record image-info at build time and return it from scheduler status so the Orion Client runner panel can show image digest/build time, CPU/mem/disk, and rust/buck2/python versions without probing the guest.
1 parent de4cebc commit b33c405

13 files changed

Lines changed: 719 additions & 118 deletions

File tree

Cargo.lock

Lines changed: 37 additions & 36 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ reqwest = "0.13.4"
9797
uuid = "1.24.0"
9898
regex = "1.13.1"
9999
ctrlc = "3.5.2"
100-
cedar-policy = "4.11.2"
100+
cedar-policy = "4.12.0"
101101
secp256k1 = "0.31.1"
102102
pgp = "0.20.0"
103103
base64 = "0.23.0"

ceres/src/model/orion_runner.rs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,4 +48,26 @@ pub struct RunnerStatusResponse {
4848
pub error: Option<String>,
4949
#[serde(default, skip_serializing_if = "Option::is_none")]
5050
pub uptime_secs: Option<u64>,
51+
#[serde(default, skip_serializing_if = "Option::is_none")]
52+
pub image_path: Option<String>,
53+
#[serde(default, skip_serializing_if = "Option::is_none")]
54+
pub image_digest: Option<String>,
55+
#[serde(default, skip_serializing_if = "Option::is_none")]
56+
pub image_cpus: Option<u32>,
57+
#[serde(default, skip_serializing_if = "Option::is_none")]
58+
pub image_memory_mb: Option<u32>,
59+
#[serde(default, skip_serializing_if = "Option::is_none")]
60+
pub image_disk_gb: Option<u32>,
61+
#[serde(default, skip_serializing_if = "Option::is_none")]
62+
pub image_name: Option<String>,
63+
#[serde(default, skip_serializing_if = "Option::is_none")]
64+
pub image_built_at: Option<String>,
65+
#[serde(default, skip_serializing_if = "Option::is_none")]
66+
pub toolchain_rust: Option<String>,
67+
#[serde(default, skip_serializing_if = "Option::is_none")]
68+
pub toolchain_buck2: Option<String>,
69+
#[serde(default, skip_serializing_if = "Option::is_none")]
70+
pub toolchain_python: Option<String>,
71+
#[serde(default, skip_serializing_if = "Option::is_none")]
72+
pub kernel: Option<String>,
5173
}

clients/orion-scheduler-client/src/http_client.rs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,17 @@ impl OrionSchedulerHttpClient {
9191
uptime_secs: None,
9292
log_file: None,
9393
error: Some("VM not found".to_string()),
94+
image_path: None,
95+
image_digest: None,
96+
image_cpus: None,
97+
image_memory_mb: None,
98+
image_disk_gb: None,
99+
image_name: None,
100+
image_built_at: None,
101+
toolchain_rust: None,
102+
toolchain_buck2: None,
103+
toolchain_python: None,
104+
kernel: None,
94105
});
95106
}
96107
if status.is_success() {
@@ -123,6 +134,17 @@ impl OrionSchedulerHttpClient {
123134
uptime_secs: None,
124135
log_file: None,
125136
error: None,
137+
image_path: None,
138+
image_digest: None,
139+
image_cpus: None,
140+
image_memory_mb: None,
141+
image_disk_gb: None,
142+
image_name: None,
143+
image_built_at: None,
144+
toolchain_rust: None,
145+
toolchain_buck2: None,
146+
toolchain_python: None,
147+
kernel: None,
126148
});
127149
}
128150
Ok(serde_json::from_value(v)?)

clients/orion-scheduler-client/src/lib.rs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,28 @@ pub struct SchedulerStatusResponse {
6464
pub log_file: Option<String>,
6565
#[serde(default)]
6666
pub error: Option<String>,
67+
#[serde(default)]
68+
pub image_path: Option<String>,
69+
#[serde(default)]
70+
pub image_digest: Option<String>,
71+
#[serde(default)]
72+
pub image_cpus: Option<u32>,
73+
#[serde(default)]
74+
pub image_memory_mb: Option<u32>,
75+
#[serde(default)]
76+
pub image_disk_gb: Option<u32>,
77+
#[serde(default)]
78+
pub image_name: Option<String>,
79+
#[serde(default)]
80+
pub image_built_at: Option<String>,
81+
#[serde(default)]
82+
pub toolchain_rust: Option<String>,
83+
#[serde(default)]
84+
pub toolchain_buck2: Option<String>,
85+
#[serde(default)]
86+
pub toolchain_python: Option<String>,
87+
#[serde(default)]
88+
pub kernel: Option<String>,
6789
}
6890

6991
#[derive(Clone)]

mono/src/api/router/orion_runner_router.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,17 @@ async fn get_runner_status(
257257
log_file: sched.log_file,
258258
error: sched.error,
259259
uptime_secs: sched.uptime_secs,
260+
image_path: sched.image_path,
261+
image_digest: sched.image_digest,
262+
image_cpus: sched.image_cpus,
263+
image_memory_mb: sched.image_memory_mb,
264+
image_disk_gb: sched.image_disk_gb,
265+
image_name: sched.image_name,
266+
image_built_at: sched.image_built_at,
267+
toolchain_rust: sched.toolchain_rust,
268+
toolchain_buck2: sched.toolchain_buck2,
269+
toolchain_python: sched.toolchain_python,
270+
kernel: sched.kernel,
260271
}))))
261272
}
262273

moon/apps/web/hooks/OrionClient/useGetRunnerStatus.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import type { RunnerStatusResponse } from '@gitmono/types/generated'
55
import { legacyApiClient } from '@/utils/queryClient'
66

77
export function useGetRunnerStatus(vmId: string | null, phase: string | null) {
8-
const shouldPoll = !!vmId && phase === 'provisioning'
8+
const shouldPoll = !!vmId && (phase === 'provisioning' || phase === 'running')
99
const query = legacyApiClient.v1.getApiOrionRunnersById()
1010

1111
return useQuery<RunnerStatusResponse, Error>({
@@ -19,7 +19,8 @@ export function useGetRunnerStatus(vmId: string | null, phase: string | null) {
1919
return result.data
2020
},
2121
enabled: !!vmId,
22-
refetchInterval: shouldPoll ? 5000 : false,
22+
// Provisioning needs frequent polls; running only for uptime refresh.
23+
refetchInterval: shouldPoll ? (phase === 'running' ? 15000 : 5000) : false,
2324
staleTime: 0
2425
})
2526
}

0 commit comments

Comments
 (0)