Files
peardata/shared/metrics-deep.js
T
Raven Scott 1458915d78
CI / test (push) Successful in 56s
Release rolling / release (push) Successful in 7m4s
Docker work
2026-07-19 13:13:45 -04:00

687 lines
19 KiB
JavaScript

/**
* Extended host chart catalog (deep /proc + /sys coverage).
* Merged into STATIC_CHART_DEFS by shared/metrics.js.
*/
/** @typedef {import('./metrics.js').ChartDef} ChartDef */
/** @type {ChartDef[]} */
export const DEEP_STATIC_CHARTS = [
// ── Memory deep ───────────────────────────────────────────
{
id: 'mem.zswap',
name: 'mem.zswap',
context: 'mem.zswap',
title: 'Zswap usage',
units: 'MiB',
family: 'zswap',
chartType: 'stacked',
priority: 248,
plugin: 'proc',
dimensions: [
{ id: 'in_ram', name: 'in_ram', algorithm: 'absolute' },
{ id: 'on_disk', name: 'on_disk', algorithm: 'absolute' },
],
},
{
id: 'mem.hwcorrupt',
name: 'mem.hwcorrupt',
context: 'mem.hwcorrupt',
title: 'Hardware corrupted memory',
units: 'MiB',
family: 'hardware',
chartType: 'line',
priority: 249,
plugin: 'proc',
dimensions: [{ id: 'HardwareCorrupted', name: 'HardwareCorrupted', algorithm: 'absolute' }],
},
{
id: 'mem.hugepages',
name: 'mem.hugepages',
context: 'mem.hugepages',
title: 'HugePages',
units: 'MiB',
family: 'hugepages',
chartType: 'stacked',
priority: 252,
plugin: 'proc',
dimensions: [
{ id: 'free', name: 'free', algorithm: 'absolute' },
{ id: 'used', name: 'used', algorithm: 'absolute' },
{ id: 'surplus', name: 'surplus', algorithm: 'absolute' },
{ id: 'reserved', name: 'reserved', algorithm: 'absolute' },
],
},
{
id: 'mem.thp',
name: 'mem.thp',
context: 'mem.thp',
title: 'Transparent HugePages',
units: 'MiB',
family: 'thp',
chartType: 'stacked',
priority: 253,
plugin: 'proc',
dimensions: [
{ id: 'anonymous', name: 'anonymous', algorithm: 'absolute' },
{ id: 'shmem', name: 'shmem', algorithm: 'absolute' },
],
},
{
id: 'mem.thp_details',
name: 'mem.thp_details',
context: 'mem.thp_details',
title: 'Transparent HugePages details',
units: 'MiB',
family: 'thp',
chartType: 'line',
priority: 254,
plugin: 'proc',
dimensions: [
{ id: 'ShmemPmdMapped', name: 'ShmemPmdMapped', algorithm: 'absolute' },
{ id: 'FileHugePages', name: 'FileHugePages', algorithm: 'absolute' },
{ id: 'FilePmdMapped', name: 'FilePmdMapped', algorithm: 'absolute' },
],
},
{
id: 'mem.reclaiming',
name: 'mem.reclaiming',
context: 'mem.reclaiming',
title: 'Memory reclaiming (LRU)',
units: 'MiB',
family: 'reclaiming',
chartType: 'stacked',
priority: 255,
plugin: 'proc',
dimensions: [
{ id: 'Active', name: 'Active', algorithm: 'absolute' },
{ id: 'Inactive', name: 'Inactive', algorithm: 'absolute' },
{ id: 'Active_anon', name: 'Active_anon', algorithm: 'absolute' },
{ id: 'Inactive_anon', name: 'Inactive_anon', algorithm: 'absolute' },
{ id: 'Active_file', name: 'Active_file', algorithm: 'absolute' },
{ id: 'Inactive_file', name: 'Inactive_file', algorithm: 'absolute' },
{ id: 'Unevictable', name: 'Unevictable', algorithm: 'absolute' },
{ id: 'Mlocked', name: 'Mlocked', algorithm: 'absolute' },
],
},
{
id: 'mem.oom_kill',
name: 'mem.oom_kill',
context: 'mem.oom_kill',
title: 'OOM kills',
units: 'kills/s',
family: 'oom',
chartType: 'line',
priority: 256,
plugin: 'proc',
dimensions: [{ id: 'kills', name: 'kills', algorithm: 'incremental' }],
},
{
id: 'mem.balloon',
name: 'mem.balloon',
context: 'mem.balloon',
title: 'Memory balloon',
units: 'KiB/s',
family: 'balloon',
chartType: 'line',
priority: 257,
plugin: 'proc',
dimensions: [
{ id: 'inflate', name: 'inflate', algorithm: 'incremental' },
{ id: 'deflate', name: 'deflate', algorithm: 'incremental' },
{ id: 'migrate', name: 'migrate', algorithm: 'incremental' },
],
},
{
id: 'mem.zswapio',
name: 'mem.zswapio',
context: 'mem.zswapio',
title: 'Zswap I/O',
units: 'KiB/s',
family: 'zswap',
chartType: 'area',
priority: 258,
plugin: 'proc',
dimensions: [
{ id: 'in', name: 'in', algorithm: 'incremental' },
{ id: 'out', name: 'out', algorithm: 'incremental' },
],
},
{
id: 'mem.numa',
name: 'mem.numa',
context: 'mem.numa',
title: 'NUMA events',
units: 'events/s',
family: 'numa',
chartType: 'line',
priority: 259,
plugin: 'proc',
dimensions: [
{ id: 'local', name: 'local', algorithm: 'incremental' },
{ id: 'foreign', name: 'foreign', algorithm: 'incremental' },
{ id: 'interleave', name: 'interleave', algorithm: 'incremental' },
{ id: 'other', name: 'other', algorithm: 'incremental' },
{ id: 'pte_updates', name: 'pte_updates', algorithm: 'incremental' },
{ id: 'pages_migrated', name: 'pages_migrated', algorithm: 'incremental' },
],
},
{
id: 'mem.thp_faults',
name: 'mem.thp_faults',
context: 'mem.thp_faults',
title: 'THP fault events',
units: 'events/s',
family: 'thp',
chartType: 'line',
priority: 260,
plugin: 'proc',
dimensions: [
{ id: 'alloc', name: 'alloc', algorithm: 'incremental' },
{ id: 'fallback', name: 'fallback', algorithm: 'incremental' },
{ id: 'fallback_charge', name: 'fallback_charge', algorithm: 'incremental' },
],
},
{
id: 'mem.thp_split',
name: 'mem.thp_split',
context: 'mem.thp_split',
title: 'THP split events',
units: 'events/s',
family: 'thp',
chartType: 'line',
priority: 261,
plugin: 'proc',
dimensions: [
{ id: 'split', name: 'split', algorithm: 'incremental' },
{ id: 'failed', name: 'failed', algorithm: 'incremental' },
{ id: 'split_pmd', name: 'split_pmd', algorithm: 'incremental' },
],
},
{
id: 'mem.ksm',
name: 'mem.ksm',
context: 'mem.ksm',
title: 'Kernel Same-page Merging',
units: 'MiB',
family: 'ksm',
chartType: 'stacked',
priority: 262,
plugin: 'proc',
dimensions: [
{ id: 'shared', name: 'shared', algorithm: 'absolute' },
{ id: 'sharing', name: 'sharing', algorithm: 'absolute' },
{ id: 'unshared', name: 'unshared', algorithm: 'absolute' },
{ id: 'volatile', name: 'volatile', algorithm: 'absolute' },
],
},
{
id: 'mem.ksm_cow',
name: 'mem.ksm_cow',
context: 'mem.ksm_cow',
title: 'KSM copy-on-write',
units: 'KiB/s',
family: 'ksm',
chartType: 'line',
priority: 263,
plugin: 'proc',
dimensions: [
{ id: 'swapin', name: 'swapin', algorithm: 'incremental' },
{ id: 'write', name: 'write', algorithm: 'incremental' },
],
},
// ── PSI full + stall ──────────────────────────────────────
{
id: 'system.cpu_full_pressure',
name: 'system.cpu_full_pressure',
context: 'system.cpu_full_pressure',
title: 'CPU Full Pressure',
units: 'percentage',
family: 'pressure',
chartType: 'line',
priority: 801,
plugin: 'proc',
dimensions: [
{ id: 'full10', name: 'full10', algorithm: 'absolute' },
{ id: 'full60', name: 'full60', algorithm: 'absolute' },
{ id: 'full300', name: 'full300', algorithm: 'absolute' },
],
},
{
id: 'system.memory_full_pressure',
name: 'system.memory_full_pressure',
context: 'system.memory_full_pressure',
title: 'Memory Full Pressure',
units: 'percentage',
family: 'pressure',
chartType: 'line',
priority: 811,
plugin: 'proc',
dimensions: [
{ id: 'full10', name: 'full10', algorithm: 'absolute' },
{ id: 'full60', name: 'full60', algorithm: 'absolute' },
{ id: 'full300', name: 'full300', algorithm: 'absolute' },
],
},
{
id: 'system.io_full_pressure',
name: 'system.io_full_pressure',
context: 'system.io_full_pressure',
title: 'I/O Full Pressure',
units: 'percentage',
family: 'pressure',
chartType: 'line',
priority: 821,
plugin: 'proc',
dimensions: [
{ id: 'full10', name: 'full10', algorithm: 'absolute' },
{ id: 'full60', name: 'full60', algorithm: 'absolute' },
{ id: 'full300', name: 'full300', algorithm: 'absolute' },
],
},
// ── Softnet / ICMP / TCP advanced ─────────────────────────
{
id: 'system.softnet_stat',
name: 'system.softnet_stat',
context: 'system.softnet_stat',
title: 'Softnet statistics',
units: 'events/s',
family: 'softnet',
chartType: 'line',
priority: 780,
plugin: 'proc',
dimensions: [
{ id: 'processed', name: 'processed', algorithm: 'incremental' },
{ id: 'dropped', name: 'dropped', algorithm: 'incremental' },
{ id: 'squeezed', name: 'squeezed', algorithm: 'incremental' },
{ id: 'received_rps', name: 'received_rps', algorithm: 'incremental' },
{ id: 'flow_limit', name: 'flow_limit', algorithm: 'incremental' },
],
},
{
id: 'ipv4.icmp',
name: 'ipv4.icmp',
context: 'ipv4.icmp',
title: 'IPv4 ICMP messages',
units: 'messages/s',
family: 'icmp',
chartType: 'line',
priority: 755,
plugin: 'proc',
dimensions: [
{ id: 'received', name: 'received', algorithm: 'incremental' },
{ id: 'sent', name: 'sent', algorithm: 'incremental' },
],
},
{
id: 'ipv4.icmp_errors',
name: 'ipv4.icmp_errors',
context: 'ipv4.icmp_errors',
title: 'IPv4 ICMP errors',
units: 'messages/s',
family: 'icmp',
chartType: 'line',
priority: 756,
plugin: 'proc',
dimensions: [
{ id: 'InErrors', name: 'InErrors', algorithm: 'incremental' },
{ id: 'OutErrors', name: 'OutErrors', algorithm: 'incremental' },
{ id: 'InCsumErrors', name: 'InCsumErrors', algorithm: 'incremental' },
],
},
{
id: 'ip.tcpsyncookies',
name: 'ip.tcpsyncookies',
context: 'ip.tcpsyncookies',
title: 'TCP SYN cookies',
units: 'cookies/s',
family: 'tcp',
chartType: 'line',
priority: 730,
plugin: 'proc',
dimensions: [
{ id: 'received', name: 'received', algorithm: 'incremental' },
{ id: 'sent', name: 'sent', algorithm: 'incremental' },
{ id: 'failed', name: 'failed', algorithm: 'incremental' },
],
},
{
id: 'ip.tcp_syn_queue',
name: 'ip.tcp_syn_queue',
context: 'ip.tcp_syn_queue',
title: 'TCP SYN queue',
units: 'packets/s',
family: 'tcp',
chartType: 'line',
priority: 731,
plugin: 'proc',
dimensions: [
{ id: 'drops', name: 'drops', algorithm: 'incremental' },
{ id: 'cookies', name: 'cookies', algorithm: 'incremental' },
],
},
{
id: 'ip.tcp_accept_queue',
name: 'ip.tcp_accept_queue',
context: 'ip.tcp_accept_queue',
title: 'TCP accept queue',
units: 'events/s',
family: 'tcp',
chartType: 'line',
priority: 732,
plugin: 'proc',
dimensions: [
{ id: 'overflows', name: 'overflows', algorithm: 'incremental' },
{ id: 'drops', name: 'drops', algorithm: 'incremental' },
],
},
{
id: 'ip.tcpconnaborts',
name: 'ip.tcpconnaborts',
context: 'ip.tcpconnaborts',
title: 'TCP connection aborts',
units: 'aborts/s',
family: 'tcp',
chartType: 'line',
priority: 733,
plugin: 'proc',
dimensions: [
{ id: 'baddata', name: 'baddata', algorithm: 'incremental' },
{ id: 'userclosed', name: 'userclosed', algorithm: 'incremental' },
{ id: 'nomemory', name: 'nomemory', algorithm: 'incremental' },
{ id: 'timeout', name: 'timeout', algorithm: 'incremental' },
{ id: 'linger', name: 'linger', algorithm: 'incremental' },
{ id: 'failed', name: 'failed', algorithm: 'incremental' },
],
},
{
id: 'ip.tcpofo',
name: 'ip.tcpofo',
context: 'ip.tcpofo',
title: 'TCP out-of-order queue',
units: 'packets/s',
family: 'tcp',
chartType: 'line',
priority: 734,
plugin: 'proc',
dimensions: [
{ id: 'inqueue', name: 'inqueue', algorithm: 'incremental' },
{ id: 'dropped', name: 'dropped', algorithm: 'incremental' },
{ id: 'merged', name: 'merged', algorithm: 'incremental' },
{ id: 'pruned', name: 'pruned', algorithm: 'incremental' },
],
},
{
id: 'ip.tcpreorders',
name: 'ip.tcpreorders',
context: 'ip.tcpreorders',
title: 'TCP reorders',
units: 'packets/s',
family: 'tcp',
chartType: 'line',
priority: 735,
plugin: 'proc',
dimensions: [
{ id: 'timestamp', name: 'timestamp', algorithm: 'incremental' },
{ id: 'sack', name: 'sack', algorithm: 'incremental' },
{ id: 'fack', name: 'fack', algorithm: 'incremental' },
{ id: 'reno', name: 'reno', algorithm: 'incremental' },
],
},
{
id: 'ip.tcphandshake',
name: 'ip.tcphandshake',
context: 'ip.tcphandshake',
title: 'TCP handshake issues',
units: 'events/s',
family: 'tcp',
chartType: 'line',
priority: 736,
plugin: 'proc',
dimensions: [
{ id: 'EstabResets', name: 'EstabResets', algorithm: 'incremental' },
{ id: 'OutRsts', name: 'OutRsts', algorithm: 'incremental' },
{ id: 'AttemptFails', name: 'AttemptFails', algorithm: 'incremental' },
{ id: 'SynRetrans', name: 'SynRetrans', algorithm: 'incremental' },
],
},
{
id: 'ip.tcpmemorypressures',
name: 'ip.tcpmemorypressures',
context: 'ip.tcpmemorypressures',
title: 'TCP memory pressures',
units: 'events/s',
family: 'tcp',
chartType: 'line',
priority: 737,
plugin: 'proc',
dimensions: [{ id: 'pressures', name: 'pressures', algorithm: 'incremental' }],
},
]
export function makeDiskAwaitChart(disk) {
return {
id: `disk_await.${disk}`,
name: `disk_await.${disk}`,
context: 'disk.await',
title: `Disk ${disk} average wait time`,
units: 'milliseconds/operation',
family: disk,
chartType: 'line',
priority: 2030,
plugin: 'proc',
dimensions: [
{ id: 'reads', name: 'reads', algorithm: 'absolute' },
{ id: 'writes', name: 'writes', algorithm: 'absolute' },
],
}
}
export function makeDiskAvgszChart(disk) {
return {
id: `disk_avgsz.${disk}`,
name: `disk_avgsz.${disk}`,
context: 'disk.avgsz',
title: `Disk ${disk} average operation size`,
units: 'KiB/operation',
family: disk,
chartType: 'line',
priority: 2040,
plugin: 'proc',
dimensions: [
{ id: 'reads', name: 'reads', algorithm: 'absolute' },
{ id: 'writes', name: 'writes', algorithm: 'absolute' },
],
}
}
export function makeDiskQopsChart(disk) {
return {
id: `disk_qops.${disk}`,
name: `disk_qops.${disk}`,
context: 'disk.qops',
title: `Disk ${disk} queued operations`,
units: 'operations',
family: disk,
chartType: 'line',
priority: 2050,
plugin: 'proc',
dimensions: [{ id: 'operations', name: 'operations', algorithm: 'absolute' }],
}
}
export function makeDiskBusyChart(disk) {
return {
id: `disk_busy.${disk}`,
name: `disk_busy.${disk}`,
context: 'disk.busy',
title: `Disk ${disk} busy time`,
units: 'milliseconds',
family: disk,
chartType: 'area',
priority: 2060,
plugin: 'proc',
dimensions: [{ id: 'busy', name: 'busy', algorithm: 'incremental' }],
}
}
export function makeDiskIotimeChart(disk) {
return {
id: `disk_iotime.${disk}`,
name: `disk_iotime.${disk}`,
context: 'disk.iotime',
title: `Disk ${disk} I/O time`,
units: 'milliseconds/s',
family: disk,
chartType: 'line',
priority: 2070,
plugin: 'proc',
dimensions: [
{ id: 'reads', name: 'reads', algorithm: 'incremental' },
{ id: 'writes', name: 'writes', algorithm: 'incremental' },
],
}
}
export function makeDiskDiscardChart(disk) {
return {
id: `disk_discard.${disk}`,
name: `disk_discard.${disk}`,
context: 'disk.discard',
title: `Disk ${disk} discards`,
units: 'operations/s',
family: disk,
chartType: 'line',
priority: 2080,
plugin: 'proc',
dimensions: [
{ id: 'operations', name: 'operations', algorithm: 'incremental' },
{ id: 'sectors', name: 'sectors', algorithm: 'incremental' },
],
}
}
export function makeNetSpeedChart(iface) {
return {
id: `net_speed.${iface}`,
name: `net_speed.${iface}`,
context: 'net.speed',
title: `Interface ${iface} link speed`,
units: 'kilobits/s',
family: iface,
chartType: 'line',
priority: 3040,
plugin: 'proc',
dimensions: [{ id: 'speed', name: 'speed', algorithm: 'absolute' }],
}
}
export function makeCpuFreqChart() {
return {
id: 'cpu.cpufreq',
name: 'cpu.cpufreq',
context: 'cpu.cpufreq',
title: 'CPU frequency',
units: 'MHz',
family: 'cpufreq',
chartType: 'line',
priority: 180,
plugin: 'proc',
dimensions: [],
}
}
export function makeCgroupCpuChart(id, title) {
const safe = String(id).replace(/[^a-zA-Z0-9_.-]/g, '_').slice(0, 96)
const display = title || safe
return {
id: `cgroup.cpu.${safe}`,
name: `cgroup.cpu.${safe}`,
context: 'cgroup.cpu',
title: `${display} · CPU`,
units: 'percentage',
family: display,
chartType: 'area',
priority: 6000,
plugin: 'cgroups',
dimensions: [
{ id: 'user', name: 'user', algorithm: 'absolute' },
{ id: 'system', name: 'system', algorithm: 'absolute' },
],
}
}
export function makeCgroupMemChart(id, title) {
const safe = String(id).replace(/[^a-zA-Z0-9_.-]/g, '_').slice(0, 96)
const display = title || safe
return {
id: `cgroup.mem.${safe}`,
name: `cgroup.mem.${safe}`,
context: 'cgroup.mem',
title: `${display} · memory`,
units: 'MiB',
family: display,
chartType: 'area',
priority: 6100,
plugin: 'cgroups',
dimensions: [
{ id: 'usage', name: 'usage', algorithm: 'absolute' },
{ id: 'limit', name: 'limit', algorithm: 'absolute' },
],
}
}
export function makeCgroupIoChart(id, title) {
const safe = String(id).replace(/[^a-zA-Z0-9_.-]/g, '_').slice(0, 96)
const display = title || safe
return {
id: `cgroup.io.${safe}`,
name: `cgroup.io.${safe}`,
context: 'cgroup.io',
title: `${display} · I/O`,
units: 'KiB/s',
family: display,
chartType: 'area',
priority: 6200,
plugin: 'cgroups',
dimensions: [
{ id: 'read', name: 'read', algorithm: 'incremental' },
{ id: 'write', name: 'write', algorithm: 'incremental' },
],
}
}
export function makeSensorTempChart(chip, label) {
const id = `${chip}_${label}`.replace(/[^a-zA-Z0-9_.-]/g, '_').slice(0, 64)
return {
id: `sensors.temp.${id}`,
name: `sensors.temp.${id}`,
context: 'sensors.temperature',
title: `Temperature ${chip} ${label}`,
units: 'Celsius',
family: chip,
chartType: 'line',
priority: 7000,
plugin: 'sensors',
dimensions: [{ id: 'temperature', name: 'temperature', algorithm: 'absolute' }],
}
}
export function makeThermalZoneChart(zone, type) {
const id = String(zone).replace(/[^a-zA-Z0-9_.-]/g, '_')
return {
id: `sensors.thermal.${id}`,
name: `sensors.thermal.${id}`,
context: 'sensors.thermal',
title: `Thermal zone ${type || id}`,
units: 'Celsius',
family: type || id,
chartType: 'line',
priority: 7010,
plugin: 'sensors',
dimensions: [{ id: 'temperature', name: 'temperature', algorithm: 'absolute' }],
}
}