mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-25 17:12:03 +00:00
72 lines
2.6 KiB
Bash
Executable File
72 lines
2.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -e
|
|
|
|
if [ "$1" == "--help" ] || [ -z "$1" ]; then
|
|
cat <<EOF >&2
|
|
SELECT data from 'system.asynchronous_loader' table and render .svg graph of load jobs using 'dot' graphviz tool.
|
|
USAGE: async_loader_graph CLICKHOUSE_CLIENT CLIENT_OPTIONS
|
|
EXAMPLES:
|
|
$ async_loader_graph clickhouse-client > async_loader.svg
|
|
EOF
|
|
exit 1
|
|
fi
|
|
|
|
CLICKHOUSE_CLIENT="$@"
|
|
|
|
(
|
|
|
|
echo 'digraph {'
|
|
echo 'rankdir=LR;'
|
|
|
|
$CLICKHOUSE_CLIENT --query='select job, job_id, status, is_blocked, is_ready, is_executing, pool, dependencies from system.asynchronous_loader FORMAT JSON' \
|
|
| jq -r '
|
|
.data[]
|
|
| { "FgLoad": "box", "BgLoad": "hexagon", "BgStartup": "ellipse" } as $shape
|
|
| { "PENDING": "white", "OK": "lightgreen", "FAILED": "red", "CANCELED": "darkred" } as $fillcolor
|
|
| [ "black", "blue", "orange", "yellow" ] as $color
|
|
| (.job_id | tostring) as $self
|
|
| [
|
|
# Nodes
|
|
$self + " [label=\"" + .job +
|
|
"\", shape=\"" + $shape[.pool] +
|
|
"\", style=\"filled\", fillcolor=\"" + $fillcolor[.status] +
|
|
"\", penwidth=\"3.0\", color=\"" + $color[.is_blocked + .is_ready * 2 + .is_executing * 3] +
|
|
"\"];",
|
|
|
|
# Edges
|
|
(.dependencies[] | ($self + " -> " + (. | tostring) + ";"))
|
|
]
|
|
| join("\n")
|
|
'
|
|
|
|
cat <<LEGEND
|
|
subgraph cluster0 {
|
|
label="LEGEND"
|
|
subgraph cluster1 {
|
|
label="POOL"
|
|
FgLoad[shape="box" penwidth="3.0"];
|
|
BgLoad[shape="hexagon" penwidth="3.0"];
|
|
BgStartup[shape="ellipse" penwidth="3.0"];
|
|
}
|
|
subgraph cluster2 {
|
|
label="STATUS"
|
|
PENDING[shape="ellipse" penwidth="3.0" style="filled" fillcolor="white"];
|
|
OK[shape="ellipse" penwidth="3.0" style="filled" fillcolor="lightgreen"];
|
|
FAILED[shape="ellipse" penwidth="3.0" style="filled" fillcolor="red"];
|
|
CANCELED[shape="ellipse" penwidth="3.0" style="filled" fillcolor="darkred"];
|
|
}
|
|
subgraph cluster3 {
|
|
label="STATE"
|
|
is_assigned[shape="ellipse" penwidth="3.0" style="filled" fillcolor="white" color="black"];
|
|
is_blocked[shape="ellipse" penwidth="3.0" style="filled" fillcolor="white" color="blue"];
|
|
is_ready[shape="ellipse" penwidth="3.0" style="filled" fillcolor="white" color="orange"];
|
|
is_executing[shape="ellipse" penwidth="3.0" style="filled" fillcolor="white" color="yellow"];
|
|
}
|
|
FgLoad -> PENDING -> is_assigned [style="invis"]
|
|
}
|
|
LEGEND
|
|
|
|
echo '}' # digraph
|
|
|
|
) | dot -Tsvg
|