mirror of
https://github.com/kernelkit/infix.git
synced 2026-07-22 01:13:00 +02:00
Merge pull request #1299 from kernelkit/statd-add-service-stat
Add service runtime statistics and table formatting framework
This commit is contained in:
@@ -38,7 +38,7 @@ MODULES=(
|
||||
"infix-firewall-services@2025-04-26.yang"
|
||||
"infix-firewall-icmp-types@2025-04-26.yang"
|
||||
"infix-meta@2025-12-10.yang"
|
||||
"infix-system@2025-10-18.yang"
|
||||
"infix-system@2025-12-02.yang"
|
||||
"infix-services@2025-12-10.yang"
|
||||
"ieee802-ethernet-interface@2019-06-21.yang"
|
||||
"infix-ethernet-interface@2024-02-27.yang"
|
||||
|
||||
@@ -28,6 +28,11 @@ module infix-system {
|
||||
contact "kernelkit@googlegroups.com";
|
||||
description "Infix augments and deviations to ietf-system.";
|
||||
|
||||
revision 2025-12-02 {
|
||||
description "Extend services with runtime statistics:
|
||||
- Add statistics container with memory-usage, uptime, restart-count";
|
||||
reference "internal";
|
||||
}
|
||||
revision 2025-10-18 {
|
||||
description "New system-state status:
|
||||
- Add system resource usage: memory, loadavg, filesystem usage
|
||||
@@ -508,6 +513,28 @@ module infix-system {
|
||||
description
|
||||
"Detailed current status of the process.";
|
||||
}
|
||||
|
||||
container statistics {
|
||||
description "Service resource usage and runtime statistics";
|
||||
config false;
|
||||
|
||||
leaf memory-usage {
|
||||
type uint64;
|
||||
units "bytes";
|
||||
description "Current memory usage in bytes";
|
||||
}
|
||||
|
||||
leaf uptime {
|
||||
type uint64;
|
||||
units "seconds";
|
||||
description "Time service has been running";
|
||||
}
|
||||
|
||||
leaf restart-count {
|
||||
type uint32;
|
||||
description "Number of service restarts";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -190,13 +190,6 @@ class PadNtpSource:
|
||||
poll = 14
|
||||
|
||||
|
||||
class PadService:
|
||||
name = 16
|
||||
status = 8
|
||||
pid = 8
|
||||
description = 40
|
||||
|
||||
|
||||
class PadWifiScan:
|
||||
ssid = 40
|
||||
encryption = 30
|
||||
@@ -218,6 +211,34 @@ class PadDiskUsage:
|
||||
avail = 12
|
||||
percent = 6
|
||||
|
||||
|
||||
def format_memory_bytes(bytes_val):
|
||||
"""Convert bytes to human-readable format"""
|
||||
if bytes_val == 0:
|
||||
return " "
|
||||
elif bytes_val < 1024:
|
||||
return f"{bytes_val}B"
|
||||
elif bytes_val < 1024 * 1024:
|
||||
return f"{bytes_val // 1024}K"
|
||||
elif bytes_val < 1024 * 1024 * 1024:
|
||||
return f"{bytes_val // (1024 * 1024):.1f}M"
|
||||
else:
|
||||
return f"{bytes_val // (1024 * 1024 * 1024):.1f}G"
|
||||
|
||||
|
||||
def format_uptime_seconds(seconds):
|
||||
"""Convert seconds to compact time format"""
|
||||
if seconds == 0:
|
||||
return " "
|
||||
elif seconds < 60:
|
||||
return f"{seconds}s"
|
||||
elif seconds < 3600:
|
||||
return f"{seconds // 60}m"
|
||||
elif seconds < 86400:
|
||||
return f"{seconds // 3600}h"
|
||||
else:
|
||||
return f"{seconds // 86400}d"
|
||||
|
||||
@classmethod
|
||||
def table_width(cls):
|
||||
"""Total width of disk usage table"""
|
||||
@@ -260,6 +281,89 @@ class PadFirewall:
|
||||
return cls.zone_locked + cls.zone_name + cls.zone_type + cls.zone_data \
|
||||
+ cls.zone_services
|
||||
|
||||
class Column:
|
||||
"""Column definition for SimpleTable"""
|
||||
def __init__(self, name, align='left', formatter=None):
|
||||
self.name = name
|
||||
self.align = align
|
||||
self.formatter = formatter
|
||||
|
||||
class SimpleTable:
|
||||
"""Simple table formatter that handles ANSI colors correctly and calculates dynamic column widths"""
|
||||
|
||||
def __init__(self, columns):
|
||||
self.columns = columns
|
||||
self.rows = []
|
||||
|
||||
@staticmethod
|
||||
def visible_width(text):
|
||||
"""Return visible character count, excluding ANSI escape sequences"""
|
||||
ansi_pattern = r'\x1b\[[0-9;]*m'
|
||||
clean_text = re.sub(ansi_pattern, '', str(text))
|
||||
return len(clean_text)
|
||||
|
||||
def row(self, *values):
|
||||
"""Store row data for later formatting"""
|
||||
if len(values) != len(self.columns):
|
||||
raise ValueError(f"Expected {len(self.columns)} values, got {len(values)}")
|
||||
self.rows.append(values)
|
||||
|
||||
def print(self, styled=True):
|
||||
"""Calculate widths and print complete table"""
|
||||
column_widths = self._calculate_column_widths()
|
||||
print(self._format_header(column_widths, styled))
|
||||
for row_data in self.rows:
|
||||
print(self._format_row(row_data, column_widths))
|
||||
|
||||
def _calculate_column_widths(self):
|
||||
"""Calculate maximum width needed for each column"""
|
||||
widths = [self.visible_width(col.name) for col in self.columns]
|
||||
|
||||
for row_data in self.rows:
|
||||
for i, (value, column) in enumerate(zip(row_data, self.columns)):
|
||||
formatted_value = column.formatter(value) if column.formatter else value
|
||||
value_width = self.visible_width(str(formatted_value))
|
||||
widths[i] = max(widths[i], value_width)
|
||||
|
||||
return widths
|
||||
|
||||
def _format_header(self, column_widths, styled=True):
|
||||
"""Generate formatted header row"""
|
||||
header_parts = []
|
||||
for i, column in enumerate(self.columns):
|
||||
width = column_widths[i]
|
||||
if column.align == 'right':
|
||||
header_parts.append(f"{column.name:>{width}} ")
|
||||
else:
|
||||
header_parts.append(f"{column.name:{width}} ")
|
||||
|
||||
header_str = ''.join(header_parts).rstrip()
|
||||
return Decore.invert(header_str) if styled else header_str
|
||||
|
||||
def _format_row(self, row_data, column_widths):
|
||||
"""Format a single data row"""
|
||||
row_parts = []
|
||||
for i, (value, column) in enumerate(zip(row_data, self.columns)):
|
||||
formatted_value = self._format_column_value(value, column, column_widths[i])
|
||||
row_parts.append(formatted_value)
|
||||
|
||||
return ''.join(row_parts).rstrip()
|
||||
|
||||
def _format_column_value(self, value, column, width):
|
||||
"""Format a single column value with proper alignment"""
|
||||
if column.formatter:
|
||||
value = column.formatter(value)
|
||||
|
||||
value_str = str(value)
|
||||
visible_len = self.visible_width(value_str)
|
||||
|
||||
if column.align == 'right':
|
||||
padding = width - visible_len
|
||||
return ' ' * max(0, padding) + value_str + ' '
|
||||
else:
|
||||
padding = width - visible_len
|
||||
return value_str + ' ' * max(0, padding) + ' '
|
||||
|
||||
|
||||
class Decore():
|
||||
@staticmethod
|
||||
@@ -1693,17 +1797,25 @@ def show_services(json):
|
||||
services_data = get_json_data({}, json, 'ietf-system:system-state', 'infix-system:services')
|
||||
services = services_data.get("service", [])
|
||||
|
||||
hdr = (f"{'NAME':<{PadService.name}}"
|
||||
f"{'STATUS':<{PadService.status}}"
|
||||
f"{'PID':>{PadService.pid -1}}"
|
||||
f" {'DESCRIPTION'}")
|
||||
print(Decore.invert(hdr))
|
||||
# This is the first usage of simple table. I assume this will be
|
||||
# copied so I left a lot of comments. If you copy it feel free
|
||||
# to be less verbose..
|
||||
service_table = SimpleTable([
|
||||
Column('NAME'),
|
||||
Column('STATUS'),
|
||||
Column('PID', 'right'),
|
||||
Column('MEM', 'right'),
|
||||
Column('UP', 'right'),
|
||||
Column('RST', 'right'),
|
||||
Column('DESCRIPTION')
|
||||
])
|
||||
|
||||
for svc in services:
|
||||
name = svc.get('name', '')
|
||||
status = svc.get('status', '')
|
||||
pid = svc.get('pid', 0)
|
||||
description = svc.get('description', '')
|
||||
stats = svc.get('statistics', {})
|
||||
|
||||
if status in ('running', 'active', 'done'):
|
||||
status_str = Decore.green(status)
|
||||
@@ -1712,13 +1824,19 @@ def show_services(json):
|
||||
else:
|
||||
status_str = Decore.yellow(status)
|
||||
|
||||
pid_str = str(pid) if pid > 0 else '-'
|
||||
pid_str = str(pid) if pid > 0 else ' '
|
||||
|
||||
row = f"{name:<{PadService.name}}"
|
||||
row += f"{status_str:<{PadService.status + 9}}"
|
||||
row += f"{pid_str:>{PadService.pid}}"
|
||||
row += f" {description}"
|
||||
print(row)
|
||||
memory_bytes = int(stats.get('memory-usage', 0))
|
||||
uptime_secs = int(stats.get('uptime', 0))
|
||||
restart_count = stats.get('restart-count', 0)
|
||||
|
||||
memory_str = format_memory_bytes(memory_bytes)
|
||||
uptime_str = format_uptime_seconds(uptime_secs)
|
||||
|
||||
service_table.row(name, status_str, pid_str, memory_str,
|
||||
uptime_str, restart_count, description)
|
||||
|
||||
service_table.print()
|
||||
|
||||
|
||||
def show_hardware(json):
|
||||
|
||||
@@ -189,7 +189,12 @@ def add_services(out):
|
||||
"pid": d["pid"],
|
||||
"name": d["identity"],
|
||||
"status": d["status"],
|
||||
"description": d["description"]
|
||||
"description": d["description"],
|
||||
"statistics": {
|
||||
"memory-usage": str(d.get("memory", 0)),
|
||||
"uptime": str(d.get("uptime", 0)),
|
||||
"restart-count": int(d.get("restarts", 0))
|
||||
}
|
||||
}
|
||||
services.append(entry)
|
||||
|
||||
|
||||
@@ -1,24 +1,24 @@
|
||||
[7mNAME STATUS PID DESCRIPTION[0m
|
||||
udevd [32mrunning[39m 1185 Device event daemon (udev)
|
||||
dbus [32mrunning[39m 2248 D-Bus message bus daemon
|
||||
confd [32mrunning[39m 3039 Configuration daemon
|
||||
netopeer [32mrunning[39m 3548 NETCONF server
|
||||
dnsmasq [32mrunning[39m 2249 DHCP/DNS proxy
|
||||
tty:hvc0 [32mrunning[39m 3559 Getty on hvc0
|
||||
iitod [32mrunning[39m 2340 LED daemon
|
||||
klishd [32mrunning[39m 3560 CLI backend daemon
|
||||
mdns-alias [32mrunning[39m 3617 mDNS alias advertiser
|
||||
mstpd [33mstopped[39m - Spanning Tree daemon
|
||||
rauc [32mrunning[39m 3564 Software update service
|
||||
resolvconf [32mdone[39m - Update DNS configuration
|
||||
statd [32mrunning[39m 3472 Status daemon
|
||||
staticd [32mrunning[39m 3653 Static routing daemon
|
||||
syslogd [32mrunning[39m 2241 System log daemon
|
||||
watchdogd [32mrunning[39m 2242 System watchdog daemon
|
||||
zebra [32mrunning[39m 3587 Zebra routing daemon
|
||||
mdns [32mrunning[39m 3616 Avahi mDNS-SD daemon
|
||||
chronyd [32mrunning[39m 3618 Chrony NTP v3/v4 daemon
|
||||
lldpd [32mrunning[39m 3633 LLDP daemon (IEEE 802.1ab)
|
||||
nginx [32mrunning[39m 3635 Web server
|
||||
rousette [32mrunning[39m 3636 RESTCONF server
|
||||
sshd [32mrunning[39m 3641 OpenSSH daemon
|
||||
[7mNAME STATUS PID MEM UP RST DESCRIPTION[0m
|
||||
udevd [32mrunning[39m 1185 23m 0 Device event daemon (udev)
|
||||
dbus [32mrunning[39m 2248 23m 0 D-Bus message bus daemon
|
||||
confd [32mrunning[39m 3039 23m 0 Configuration daemon
|
||||
netopeer [32mrunning[39m 3548 23m 0 NETCONF server
|
||||
dnsmasq [32mrunning[39m 2249 23m 0 DHCP/DNS proxy
|
||||
tty:hvc0 [32mrunning[39m 3559 23m 0 Getty on hvc0
|
||||
iitod [32mrunning[39m 2340 23m 0 LED daemon
|
||||
klishd [32mrunning[39m 3560 23m 0 CLI backend daemon
|
||||
mdns-alias [32mrunning[39m 3617 23m 0 mDNS alias advertiser
|
||||
mstpd [33mstopped[39m 0 Spanning Tree daemon
|
||||
rauc [32mrunning[39m 3564 23m 0 Software update service
|
||||
resolvconf [32mdone[39m 2 Update DNS configuration
|
||||
statd [32mrunning[39m 3472 23m 0 Status daemon
|
||||
staticd [32mrunning[39m 3653 23m 0 Static routing daemon
|
||||
syslogd [32mrunning[39m 2241 23m 0 System log daemon
|
||||
watchdogd [32mrunning[39m 2242 23m 0 System watchdog daemon
|
||||
zebra [32mrunning[39m 3587 23m 0 Zebra routing daemon
|
||||
mdns [32mrunning[39m 3616 23m 0 Avahi mDNS-SD daemon
|
||||
chronyd [32mrunning[39m 3618 23m 0 Chrony NTP v3/v4 daemon
|
||||
lldpd [32mrunning[39m 3633 23m 0 LLDP daemon (IEEE 802.1ab)
|
||||
nginx [32mrunning[39m 3635 23m 0 Web server
|
||||
rousette [32mrunning[39m 3636 23m 0 RESTCONF server
|
||||
sshd [32mrunning[39m 3641 23m 0 OpenSSH daemon
|
||||
|
||||
@@ -135,139 +135,254 @@
|
||||
"pid": 1185,
|
||||
"name": "udevd",
|
||||
"status": "running",
|
||||
"description": "Device event daemon (udev)"
|
||||
"description": "Device event daemon (udev)",
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"uptime": "1390",
|
||||
"restart-count": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"pid": 2248,
|
||||
"name": "dbus",
|
||||
"status": "running",
|
||||
"description": "D-Bus message bus daemon"
|
||||
"description": "D-Bus message bus daemon",
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"uptime": "1390",
|
||||
"restart-count": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"pid": 3039,
|
||||
"name": "confd",
|
||||
"status": "running",
|
||||
"description": "Configuration daemon"
|
||||
"description": "Configuration daemon",
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"uptime": "1390",
|
||||
"restart-count": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"pid": 3548,
|
||||
"name": "netopeer",
|
||||
"status": "running",
|
||||
"description": "NETCONF server"
|
||||
"description": "NETCONF server",
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"uptime": "1388",
|
||||
"restart-count": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"pid": 2249,
|
||||
"name": "dnsmasq",
|
||||
"status": "running",
|
||||
"description": "DHCP/DNS proxy"
|
||||
"description": "DHCP/DNS proxy",
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"uptime": "1390",
|
||||
"restart-count": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"pid": 3559,
|
||||
"name": "tty:hvc0",
|
||||
"status": "running",
|
||||
"description": "Getty on hvc0"
|
||||
"description": "Getty on hvc0",
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"uptime": "1388",
|
||||
"restart-count": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"pid": 2340,
|
||||
"name": "iitod",
|
||||
"status": "running",
|
||||
"description": "LED daemon"
|
||||
"description": "LED daemon",
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"uptime": "1390",
|
||||
"restart-count": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"pid": 3560,
|
||||
"name": "klishd",
|
||||
"status": "running",
|
||||
"description": "CLI backend daemon"
|
||||
"description": "CLI backend daemon",
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"uptime": "1388",
|
||||
"restart-count": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"pid": 3617,
|
||||
"name": "mdns-alias",
|
||||
"status": "running",
|
||||
"description": "mDNS alias advertiser "
|
||||
"description": "mDNS alias advertiser ",
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"uptime": "1388",
|
||||
"restart-count": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"pid": 0,
|
||||
"name": "mstpd",
|
||||
"status": "stopped",
|
||||
"description": "Spanning Tree daemon"
|
||||
"description": "Spanning Tree daemon",
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"uptime": "0",
|
||||
"restart-count": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"pid": 3564,
|
||||
"name": "rauc",
|
||||
"status": "running",
|
||||
"description": "Software update service"
|
||||
"description": "Software update service",
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"uptime": "1388",
|
||||
"restart-count": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"pid": 0,
|
||||
"name": "resolvconf",
|
||||
"status": "done",
|
||||
"description": "Update DNS configuration"
|
||||
"description": "Update DNS configuration",
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"uptime": "0",
|
||||
"restart-count": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"pid": 3472,
|
||||
"name": "statd",
|
||||
"status": "running",
|
||||
"description": "Status daemon"
|
||||
"description": "Status daemon",
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"uptime": "1389",
|
||||
"restart-count": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"pid": 3653,
|
||||
"name": "staticd",
|
||||
"status": "running",
|
||||
"description": "Static routing daemon"
|
||||
"description": "Static routing daemon",
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"uptime": "1388",
|
||||
"restart-count": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"pid": 2241,
|
||||
"name": "syslogd",
|
||||
"status": "running",
|
||||
"description": "System log daemon"
|
||||
"description": "System log daemon",
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"uptime": "1390",
|
||||
"restart-count": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"pid": 2242,
|
||||
"name": "watchdogd",
|
||||
"status": "running",
|
||||
"description": "System watchdog daemon"
|
||||
"description": "System watchdog daemon",
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"uptime": "1390",
|
||||
"restart-count": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"pid": 3587,
|
||||
"name": "zebra",
|
||||
"status": "running",
|
||||
"description": "Zebra routing daemon"
|
||||
"description": "Zebra routing daemon",
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"uptime": "1388",
|
||||
"restart-count": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"pid": 3616,
|
||||
"name": "mdns",
|
||||
"status": "running",
|
||||
"description": "Avahi mDNS-SD daemon"
|
||||
"description": "Avahi mDNS-SD daemon",
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"uptime": "1388",
|
||||
"restart-count": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"pid": 3618,
|
||||
"name": "chronyd",
|
||||
"status": "running",
|
||||
"description": "Chrony NTP v3/v4 daemon"
|
||||
"description": "Chrony NTP v3/v4 daemon",
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"uptime": "1388",
|
||||
"restart-count": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"pid": 3633,
|
||||
"name": "lldpd",
|
||||
"status": "running",
|
||||
"description": "LLDP daemon (IEEE 802.1ab)"
|
||||
"description": "LLDP daemon (IEEE 802.1ab)",
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"uptime": "1388",
|
||||
"restart-count": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"pid": 3635,
|
||||
"name": "nginx",
|
||||
"status": "running",
|
||||
"description": "Web server"
|
||||
"description": "Web server",
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"uptime": "1388",
|
||||
"restart-count": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"pid": 3636,
|
||||
"name": "rousette",
|
||||
"status": "running",
|
||||
"description": "RESTCONF server"
|
||||
"description": "RESTCONF server",
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"uptime": "1388",
|
||||
"restart-count": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"pid": 3641,
|
||||
"name": "sshd",
|
||||
"status": "running",
|
||||
"description": "OpenSSH daemon"
|
||||
"description": "OpenSSH daemon",
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"uptime": "1388",
|
||||
"restart-count": 0
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -90,144 +90,291 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"infix-system:resource-usage": {
|
||||
"filesystem": [
|
||||
{
|
||||
"available": "0",
|
||||
"mount-point": "/",
|
||||
"size": "70912",
|
||||
"used": "70912"
|
||||
},
|
||||
{
|
||||
"available": "79314",
|
||||
"mount-point": "/var",
|
||||
"size": "86459",
|
||||
"used": "267"
|
||||
},
|
||||
{
|
||||
"available": "12861",
|
||||
"mount-point": "/cfg",
|
||||
"size": "14073",
|
||||
"used": "66"
|
||||
}
|
||||
],
|
||||
"load-average": {
|
||||
"load-15min": "0.01",
|
||||
"load-1min": "0.16",
|
||||
"load-5min": "0.03"
|
||||
},
|
||||
"memory": {
|
||||
"available": "259640",
|
||||
"free": "187776",
|
||||
"total": "355076"
|
||||
}
|
||||
},
|
||||
"infix-system:services": {
|
||||
"service": [
|
||||
{
|
||||
"description": "Device event daemon (udev)",
|
||||
"name": "udevd",
|
||||
"pid": 1185,
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"restart-count": 0,
|
||||
"uptime": "1390"
|
||||
},
|
||||
"status": "running"
|
||||
},
|
||||
{
|
||||
"description": "D-Bus message bus daemon",
|
||||
"name": "dbus",
|
||||
"pid": 2248,
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"restart-count": 0,
|
||||
"uptime": "1390"
|
||||
},
|
||||
"status": "running"
|
||||
},
|
||||
{
|
||||
"description": "Configuration daemon",
|
||||
"name": "confd",
|
||||
"pid": 3039,
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"restart-count": 0,
|
||||
"uptime": "1390"
|
||||
},
|
||||
"status": "running"
|
||||
},
|
||||
{
|
||||
"description": "NETCONF server",
|
||||
"name": "netopeer",
|
||||
"pid": 3548,
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"restart-count": 0,
|
||||
"uptime": "1388"
|
||||
},
|
||||
"status": "running"
|
||||
},
|
||||
{
|
||||
"description": "DHCP/DNS proxy",
|
||||
"name": "dnsmasq",
|
||||
"pid": 2249,
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"restart-count": 0,
|
||||
"uptime": "1390"
|
||||
},
|
||||
"status": "running"
|
||||
},
|
||||
{
|
||||
"description": "Getty on hvc0",
|
||||
"name": "tty:hvc0",
|
||||
"pid": 3559,
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"restart-count": 0,
|
||||
"uptime": "1388"
|
||||
},
|
||||
"status": "running"
|
||||
},
|
||||
{
|
||||
"description": "LED daemon",
|
||||
"name": "iitod",
|
||||
"pid": 2340,
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"restart-count": 0,
|
||||
"uptime": "1390"
|
||||
},
|
||||
"status": "running"
|
||||
},
|
||||
{
|
||||
"description": "CLI backend daemon",
|
||||
"name": "klishd",
|
||||
"pid": 3560,
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"restart-count": 0,
|
||||
"uptime": "1388"
|
||||
},
|
||||
"status": "running"
|
||||
},
|
||||
{
|
||||
"description": "mDNS alias advertiser ",
|
||||
"name": "mdns-alias",
|
||||
"pid": 3617,
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"restart-count": 0,
|
||||
"uptime": "1388"
|
||||
},
|
||||
"status": "running"
|
||||
},
|
||||
{
|
||||
"description": "Spanning Tree daemon",
|
||||
"name": "mstpd",
|
||||
"pid": 0,
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"restart-count": 0,
|
||||
"uptime": "0"
|
||||
},
|
||||
"status": "stopped"
|
||||
},
|
||||
{
|
||||
"description": "Software update service",
|
||||
"name": "rauc",
|
||||
"pid": 3564,
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"restart-count": 0,
|
||||
"uptime": "1388"
|
||||
},
|
||||
"status": "running"
|
||||
},
|
||||
{
|
||||
"description": "Update DNS configuration",
|
||||
"name": "resolvconf",
|
||||
"pid": 0,
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"restart-count": 2,
|
||||
"uptime": "0"
|
||||
},
|
||||
"status": "done"
|
||||
},
|
||||
{
|
||||
"description": "Status daemon",
|
||||
"name": "statd",
|
||||
"pid": 3472,
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"restart-count": 0,
|
||||
"uptime": "1389"
|
||||
},
|
||||
"status": "running"
|
||||
},
|
||||
{
|
||||
"description": "Static routing daemon",
|
||||
"name": "staticd",
|
||||
"pid": 3653,
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"restart-count": 0,
|
||||
"uptime": "1388"
|
||||
},
|
||||
"status": "running"
|
||||
},
|
||||
{
|
||||
"description": "System log daemon",
|
||||
"name": "syslogd",
|
||||
"pid": 2241,
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"restart-count": 0,
|
||||
"uptime": "1390"
|
||||
},
|
||||
"status": "running"
|
||||
},
|
||||
{
|
||||
"description": "System watchdog daemon",
|
||||
"name": "watchdogd",
|
||||
"pid": 2242,
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"restart-count": 0,
|
||||
"uptime": "1390"
|
||||
},
|
||||
"status": "running"
|
||||
},
|
||||
{
|
||||
"description": "Zebra routing daemon",
|
||||
"name": "zebra",
|
||||
"pid": 3587,
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"restart-count": 0,
|
||||
"uptime": "1388"
|
||||
},
|
||||
"status": "running"
|
||||
},
|
||||
{
|
||||
"description": "Avahi mDNS-SD daemon",
|
||||
"name": "mdns",
|
||||
"pid": 3616,
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"restart-count": 0,
|
||||
"uptime": "1388"
|
||||
},
|
||||
"status": "running"
|
||||
},
|
||||
{
|
||||
"description": "Chrony NTP v3/v4 daemon",
|
||||
"name": "chronyd",
|
||||
"pid": 3618,
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"restart-count": 0,
|
||||
"uptime": "1388"
|
||||
},
|
||||
"status": "running"
|
||||
},
|
||||
{
|
||||
"description": "LLDP daemon (IEEE 802.1ab)",
|
||||
"name": "lldpd",
|
||||
"pid": 3633,
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"restart-count": 0,
|
||||
"uptime": "1388"
|
||||
},
|
||||
"status": "running"
|
||||
},
|
||||
{
|
||||
"description": "Web server",
|
||||
"name": "nginx",
|
||||
"pid": 3635,
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"restart-count": 0,
|
||||
"uptime": "1388"
|
||||
},
|
||||
"status": "running"
|
||||
},
|
||||
{
|
||||
"description": "RESTCONF server",
|
||||
"name": "rousette",
|
||||
"pid": 3636,
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"restart-count": 0,
|
||||
"uptime": "1388"
|
||||
},
|
||||
"status": "running"
|
||||
},
|
||||
{
|
||||
"description": "OpenSSH daemon",
|
||||
"name": "sshd",
|
||||
"pid": 3641,
|
||||
"statistics": {
|
||||
"memory-usage": "0",
|
||||
"restart-count": 0,
|
||||
"uptime": "1388"
|
||||
},
|
||||
"status": "running"
|
||||
}
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user