prvng_core/nulib/taskservs/status.nu
Jesús Pérez 316622a78f
merge(refactor/lazy-loading): ADR-025 lazy-loading complete
557 files merged. Conflicts resolved:
  - CHANGELOG.md: took refactor/lazy-loading (session changelog)
  - versions.ncl: took refactor/lazy-loading (adds typedialog entries)
2026-04-17 23:09:56 +01:00

127 lines
4.9 KiB
Text

use dag-executor.nu [load-dag]
use ../workspace/state.nu [state-read, state-node-get]
use ../lib_provisioning/config/accessor.nu *
use ../lib_provisioning/utils/settings.nu [find_get_settings, settings_with_env]
def state-icon [s: string]: nothing -> string {
match $s {
"completed" => $"(_ansi green)✅(_ansi reset)",
"running" => $"(_ansi yellow)🔄(_ansi reset)",
"failed" => $"(_ansi red)❌(_ansi reset)",
"blocked" => $"(_ansi red_dimmed)⊘(_ansi reset)",
_ => $"(_ansi default_dimmed)⏳(_ansi reset)",
}
}
def state-col [s: string]: nothing -> string {
match $s {
"completed" => (_ansi green),
"running" => (_ansi yellow),
"failed" => (_ansi red),
"blocked" => (_ansi red_dimmed),
_ => (_ansi default_dimmed),
}
}
def fmt-ts [ts: string]: nothing -> string {
if ($ts | is-empty) { "—" } else { $ts | str replace "T" " " | str replace "Z" "" }
}
# Show DAG formula execution progress — which taskservs completed, pending, failed
export def "main status" [
--infra (-i): string = ""
--settings (-s): string = ""
--server: string = ""
] {
let curr_settings = (settings_with_env (find_get_settings --infra $infra --settings $settings))
let workspace_path = ($curr_settings.src_path? | default $env.PWD)
let dag = (load-dag $curr_settings)
if not $dag.has_dag {
_print "No DAG found — no formula state to show."
return
}
let st = (state-read $workspace_path)
for formula in $dag.formulas {
if ($server | is-not-empty) and $formula.server != $server { continue }
let all_done = ($formula.nodes | all {|n|
let ns = (state-node-get $workspace_path $formula.server $n.taskserv.name)
$ns.state == "completed"
})
let tag = if $all_done {
$"(_ansi green)[complete](_ansi reset)"
} else {
$"(_ansi yellow)[in progress](_ansi reset)"
}
_print $"▶ (_ansi green_bold)($formula.id)(_ansi reset) on (_ansi cyan_bold)($formula.server)(_ansi reset) ($tag)"
for node in $formula.nodes {
let ns = (state-node-get $workspace_path $formula.server $node.taskserv.name)
let icon = (state-icon $ns.state)
let col = (state-col $ns.state)
let name_pad = ($node.taskserv.name | fill -a l -w 20)
let st_pad = ($ns.state | fill -a l -w 10)
let ts = if $ns.state == "completed" { fmt-ts $ns.ended_at } else { "" }
let extra = if ($ns.blocker? | default "" | is-not-empty) {
$" ← blocked by (_ansi red)($ns.blocker)(_ansi reset)"
} else { "" }
_print $" ($icon) ($col)($name_pad)(_ansi reset) ($col)($st_pad)(_ansi reset) ($ts)($extra)"
}
_print ""
}
}
# List all taskservs in the DAG with their state
export def "main list" [
--infra (-i): string = ""
--settings (-s): string = ""
--server: string = ""
--out: string = ""
] {
let curr_settings = (settings_with_env (find_get_settings --infra $infra --settings $settings))
let workspace_path = ($curr_settings.src_path? | default $env.PWD)
let dag = (load-dag $curr_settings)
if not $dag.has_dag {
_print "No DAG found."
return
}
let rows = ($dag.formulas | each {|formula|
if ($server | is-not-empty) and $formula.server != $server { [] } else {
$formula.nodes | each {|node|
let ns = (state-node-get $workspace_path $formula.server $node.taskserv.name)
{
taskserv: $node.taskserv.name,
server: $formula.server,
state: $ns.state,
profile: ($node.taskserv.profile? | default "default"),
depends_on: ($node.depends_on? | default [] | each {|d| $d.node_id } | str join ","),
ended: (fmt-ts $ns.ended_at),
actor: ($ns.actor?.identity? | default ""),
}
}
}
} | flatten)
if $out == "json" { $rows | to json; return }
if $out == "yaml" { $rows | to yaml; return }
_print $"(_ansi default_dimmed)TASKSERV SERVER STATE PROFILE DEPENDS-ON ENDED(_ansi reset)"
for row in $rows {
let col = (state-col $row.state)
let icon = (state-icon $row.state)
_print (
$"($icon) ($col)($row.taskserv | fill -a l -w 20)(_ansi reset)" +
$" (_ansi cyan)($row.server | fill -a l -w 17)(_ansi reset)" +
$" ($col)($row.state | fill -a l -w 10)(_ansi reset)" +
$" ($row.profile | fill -a l -w 10)" +
$" ($row.depends_on | fill -a l -w 20)" +
$" ($row.ended)"
)
}
}