Public dry run dryrun-a43e907efd9d
Source commit: a43e907efd9d1561c23fe73499478e881f868355 Public tree identity: sha256:453dea30195485dd8939f575a69b39f4bb7acd84c4df23f8aa29b55d044f2673
This commit is contained in:
commit
6f52bb46cd
210 changed files with 77158 additions and 0 deletions
111
crates/clusterflux-cli/src/quota.rs
Normal file
111
crates/clusterflux-cli/src/quota.rs
Normal file
|
|
@ -0,0 +1,111 @@
|
|||
use std::path::PathBuf;
|
||||
|
||||
use anyhow::Result;
|
||||
use serde_json::{json, Value};
|
||||
|
||||
use crate::client::{
|
||||
authenticated_or_local_trusted_request, list_attached_nodes_if_available_with_session,
|
||||
list_task_events_if_available_with_session, stored_session_for_coordinator, JsonLineSession,
|
||||
};
|
||||
use crate::config::{effective_project_scope, read_cli_session, read_project_config};
|
||||
use crate::process_events::{quota_current_usage, quota_limits_value, quota_next_blocked_action};
|
||||
use crate::QuotaStatusArgs;
|
||||
|
||||
pub(crate) fn quota_status_report(args: QuotaStatusArgs, cwd: PathBuf) -> Result<Value> {
|
||||
let config = read_project_config(&cwd)?;
|
||||
let stored_session = read_cli_session(&cwd)?;
|
||||
let mut effective_scope = effective_project_scope(&args.scope, config.as_ref());
|
||||
if effective_scope.coordinator.is_none() {
|
||||
effective_scope.coordinator = stored_session
|
||||
.as_ref()
|
||||
.filter(|session| session.session_secret.is_some())
|
||||
.map(|session| session.coordinator.clone());
|
||||
}
|
||||
if let Some(bound_session) = effective_scope
|
||||
.coordinator
|
||||
.as_deref()
|
||||
.and_then(|coordinator| {
|
||||
stored_session_for_coordinator(coordinator, stored_session.as_ref())
|
||||
})
|
||||
{
|
||||
effective_scope.tenant = bound_session.tenant.clone();
|
||||
effective_scope.project = bound_session.project.clone();
|
||||
effective_scope.user = bound_session.user.clone();
|
||||
}
|
||||
let coordinator = effective_scope.coordinator.clone();
|
||||
let attached_nodes = list_attached_nodes_if_available_with_session(
|
||||
coordinator.as_deref(),
|
||||
&effective_scope,
|
||||
stored_session.as_ref(),
|
||||
)?;
|
||||
let task_events = list_task_events_if_available_with_session(
|
||||
coordinator.as_deref(),
|
||||
&effective_scope,
|
||||
None,
|
||||
stored_session.as_ref(),
|
||||
)?;
|
||||
let quota_status = if let Some(coordinator) = coordinator.as_deref() {
|
||||
let mut session = JsonLineSession::connect(coordinator)?;
|
||||
Some(session.request(authenticated_or_local_trusted_request(
|
||||
coordinator,
|
||||
stored_session.as_ref(),
|
||||
json!({ "type": "quota_status" }),
|
||||
json!({
|
||||
"type": "quota_status",
|
||||
"tenant": effective_scope.tenant,
|
||||
"project": effective_scope.project,
|
||||
"actor_user": effective_scope.user,
|
||||
}),
|
||||
)?)?)
|
||||
} else {
|
||||
None
|
||||
};
|
||||
let mut current_usage = quota_current_usage(&attached_nodes, task_events.as_ref());
|
||||
if let (Some(object), Some(status)) = (current_usage.as_object_mut(), quota_status.as_ref()) {
|
||||
object.insert(
|
||||
"scoped_resource_usage".to_owned(),
|
||||
status.get("usage").cloned().unwrap_or(Value::Null),
|
||||
);
|
||||
object.insert(
|
||||
"window_started_epoch_seconds".to_owned(),
|
||||
status
|
||||
.get("window_started_epoch_seconds")
|
||||
.cloned()
|
||||
.unwrap_or(Value::Null),
|
||||
);
|
||||
}
|
||||
let limits = quota_status
|
||||
.as_ref()
|
||||
.and_then(|status| status.pointer("/limits/limits"))
|
||||
.cloned()
|
||||
.unwrap_or_else(quota_limits_value);
|
||||
let window_seconds = quota_status
|
||||
.as_ref()
|
||||
.and_then(|status| status.get("window_seconds"))
|
||||
.cloned()
|
||||
.unwrap_or(Value::Null);
|
||||
let quota_tier = quota_status
|
||||
.as_ref()
|
||||
.and_then(|status| status.get("policy_label"))
|
||||
.cloned()
|
||||
.unwrap_or(Value::Null);
|
||||
Ok(json!({
|
||||
"command": "quota status",
|
||||
"tenant": effective_scope.tenant,
|
||||
"project": effective_scope.project,
|
||||
"user": effective_scope.user,
|
||||
"coordinator": coordinator,
|
||||
"project_config": config,
|
||||
"policy_surface": "generic public quota categories; hosted tuning remains private policy",
|
||||
"limits": limits,
|
||||
"window_seconds": window_seconds,
|
||||
"current_usage": current_usage,
|
||||
"attached_nodes": attached_nodes,
|
||||
"task_events": task_events,
|
||||
"next_blocked_action": quota_next_blocked_action(¤t_usage),
|
||||
"quota_configuration_source": if quota_status.is_some() { "coordinator" } else { "unavailable_offline" },
|
||||
"quota_tier": quota_tier,
|
||||
"private_abuse_heuristics_exposed": false,
|
||||
"quota_response": quota_status,
|
||||
}))
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue