mirror of
https://github.com/xzeldon/htop.git
synced 2025-07-14 21:14:35 +03:00
Add a new DynamicMeter class for runtime Meter extension
This commit is based on exploratory work by Sohaib Mohamed. The end goal is two-fold - to support addition of Meters we build via configuration files for both the PCP platform and for scripts ( https://github.com/htop-dev/htop/issues/526 ) Here, we focus on generic code and the PCP support. A new class DynamicMeter is introduced - it uses the special case 'param' field handling that previously was used only by the CPUMeter, such that every runtime-configured Meter is given a unique identifier. Unlike with the CPUMeter this is used internally only. When reading/writing to htoprc instead of CPU(N) - where N is an integer param (CPU number) - we use the string name for each meter. For example, if we have a configuration for a DynamicMeter for some Redis metrics, we might read and write "Dynamic(redis)". This identifier is subsequently matched (back) up to the configuration file so we're able to re-create arbitrary user configurations. The PCP platform configuration file format is fairly simple. We expand configs from several directories, including the users homedir alongside htoprc (below htop/meters/) and also /etc/pcp/htop/meters. The format will be described via a new pcp-htop(5) man page, but its basically ini-style and each Meter has one or more metric expressions associated, as well as specifications for labels, color and so on via a dot separated notation for individual metrics within the Meter. A few initial sample configuration files are provided below ./pcp/meters that give the general idea. The PCP "derived" metric specification - see pmRegisterDerived(3) - is used as the syntax for specifying metrics in PCP DynamicMeters.
This commit is contained in:
9
pcp/meters/entropy
Normal file
9
pcp/meters/entropy
Normal file
@ -0,0 +1,9 @@
|
||||
#
|
||||
# pcp-htop(1) configuration file - see pcp-htop(5)
|
||||
#
|
||||
|
||||
[entropy]
|
||||
caption = Entropy
|
||||
avail.metric = kernel.all.entropy.avail / kernel.all.entropy.poolsize * 100
|
||||
avail.label = avail
|
||||
avail.suffix = %
|
11
pcp/meters/freespace
Normal file
11
pcp/meters/freespace
Normal file
@ -0,0 +1,11 @@
|
||||
#
|
||||
# pcp-htop(1) configuration file - see pcp-htop(5)
|
||||
#
|
||||
|
||||
[freespace]
|
||||
caption = Freespace
|
||||
description = Filesystem space
|
||||
used.metric = sum(filesys.used)
|
||||
used.color = blue
|
||||
free.metric = sum(filesys.free)
|
||||
free.color = green
|
13
pcp/meters/ipc
Normal file
13
pcp/meters/ipc
Normal file
@ -0,0 +1,13 @@
|
||||
#
|
||||
# pcp-htop(1) configuration file - see pcp-htop(5)
|
||||
#
|
||||
|
||||
[ipc]
|
||||
caption = SysV IPC
|
||||
description = SysV IPC counts
|
||||
msg.metric = ipc.msg.used_queues
|
||||
msg.color = blue
|
||||
sem.metric = ipc.sem.used_sem
|
||||
sem.color = green
|
||||
shm.metric = ipc.shm.used_ids
|
||||
shm.color = cyan
|
15
pcp/meters/locks
Normal file
15
pcp/meters/locks
Normal file
@ -0,0 +1,15 @@
|
||||
#
|
||||
# pcp-htop(1) configuration file - see pcp-htop(5)
|
||||
#
|
||||
|
||||
[locks]
|
||||
caption = File locks
|
||||
description = VFS file locks
|
||||
posix.metric = vfs.locks.posix.count
|
||||
posix.color = blue
|
||||
flock.metric = vfs.locks.flock.count
|
||||
flock.color = green
|
||||
readlock.metric = vfs.locks.posix.read + vfs.locks.flock.read
|
||||
readlock.color = red
|
||||
writelock.metric = vfs.locks.posix.write + vfs.locks.flock.write
|
||||
writelock.color = yellow
|
11
pcp/meters/memcache
Normal file
11
pcp/meters/memcache
Normal file
@ -0,0 +1,11 @@
|
||||
#
|
||||
# pcp-htop(1) configuration file - see pcp-htop(5)
|
||||
#
|
||||
|
||||
[memcache]
|
||||
caption = Memcache
|
||||
description = Memcache Hits
|
||||
hit.metric = sum(memcache.hits)
|
||||
hit.color = green
|
||||
miss.metric = sum(memcache.misses)
|
||||
miss.color = blue
|
73
pcp/meters/mysql
Normal file
73
pcp/meters/mysql
Normal file
@ -0,0 +1,73 @@
|
||||
#
|
||||
# pcp-htop(1) configuration file - see pcp-htop(5)
|
||||
#
|
||||
|
||||
[mysql_io]
|
||||
caption = MySQL I/O
|
||||
recv.metric = mysql.status.bytes_received
|
||||
recv.color = green
|
||||
recv.label = recv
|
||||
sent.metric = mysql.status.bytes_sent
|
||||
sent.color = blue
|
||||
sent.label = sent
|
||||
|
||||
[mysql_keys]
|
||||
caption = MySQL keys
|
||||
description = MySQL key status
|
||||
key_blocks_used.metric = mysql.status.key_blocks_used
|
||||
key_blocks_used.label = color
|
||||
key_blocks_used.label = used
|
||||
key_reads.metric = mysql.status.key_reads
|
||||
key_reads.label = read
|
||||
key_reads.color = green
|
||||
key_writes.metric = mysql.status.key_writes
|
||||
key_writes.label = writ
|
||||
key_writes.color = blue
|
||||
key_read_requests.metric = mysql.status.key_read_requests
|
||||
key_read_requests.label = rreq
|
||||
key_read_requests.color = green
|
||||
key_write_requests.metric = mysql.status.key_write_requests
|
||||
key_write_requests.label = wreq
|
||||
key_write_requests.color = blue
|
||||
|
||||
[innodb_buffer]
|
||||
caption = InnoDB pool
|
||||
description = InnoDB buffer pool
|
||||
created.metric = mysql.status.innodb_pages_created
|
||||
created.label = cr
|
||||
created.color = yellow
|
||||
read.metric = mysql.status.innodb_pages_read
|
||||
read.label = rd
|
||||
read.color = greed
|
||||
written.metric = mysql.status.innodb_pages_written
|
||||
written.label = wr
|
||||
written.color = red
|
||||
|
||||
[innodb_io]
|
||||
caption = InnoDB I/O
|
||||
description = InnoDB I/O operations
|
||||
read.metric = mysql.status.innodb_data_read
|
||||
read.label = rd
|
||||
read.color = green
|
||||
written.metric = mysql.status.innodb_data.writes
|
||||
written.label = wr
|
||||
written.color = blue
|
||||
sync.metric = mysql.status.innodb_data_fsyncs
|
||||
sync.label = sync
|
||||
sync.color = cyan
|
||||
|
||||
[innodb_ops]
|
||||
caption = InnoDB ops
|
||||
description = InnoDB operations
|
||||
inserted.metric = mysql.status.innodb_rows_inserted
|
||||
inserted.label = ins
|
||||
inserted.color = blue
|
||||
updated.metric = mysql.status.innodb_rows_updated
|
||||
updated.label = upd
|
||||
updated.color = cyan
|
||||
deleted.metric = mysql.status.innodb_rows_deleted
|
||||
deleted.label = del
|
||||
deleted.color = red
|
||||
read.metric = mysql.status.innodb_rows_read
|
||||
read.label = rd
|
||||
read.color = green
|
21
pcp/meters/postfix
Normal file
21
pcp/meters/postfix
Normal file
@ -0,0 +1,21 @@
|
||||
#
|
||||
# pcp-htop(1) configuration file - see pcp-htop(5)
|
||||
#
|
||||
|
||||
[postfix]
|
||||
caption = Postfix
|
||||
incoming.metric = sum(postfix.queues.incoming)
|
||||
incoming.color = green
|
||||
incoming.label = in
|
||||
active.metric = sum(postfix.queues.active)
|
||||
active.color = blue
|
||||
active.label = act
|
||||
deferred.metric = sum(postfix.queues.deferred)
|
||||
deferred.color = cyan
|
||||
deferred.label = dfr
|
||||
bounce.metric = sum(postfix.queues.maildrop)
|
||||
bounce.color = red
|
||||
bounce.label = bnc
|
||||
hold.metric = sum(postfix.queues.hold)
|
||||
hold.color = yellow
|
||||
hold.label = hold
|
41
pcp/meters/redis
Normal file
41
pcp/meters/redis
Normal file
@ -0,0 +1,41 @@
|
||||
#
|
||||
# pcp-htop(1) configuration file - see pcp-htop(5)
|
||||
#
|
||||
|
||||
[redisxact]
|
||||
caption = Redis xact
|
||||
description = Redis transactions
|
||||
tps.metric = redis.instantaneous_ops_per_sec
|
||||
tps.color = green
|
||||
|
||||
[redismem]
|
||||
caption = Redis mem
|
||||
description = Redis memory
|
||||
lua.metric = redis.used_memory_lua
|
||||
lua.color = magenta
|
||||
lua.label = lua:
|
||||
used.metric = redis.used_memory
|
||||
used.color = blue
|
||||
used.label = used:
|
||||
|
||||
[redisclient]
|
||||
caption = Redis clients
|
||||
description = Redis clients
|
||||
type = bar
|
||||
blocked.metric = redis.blocked_clients
|
||||
blocked.color = blue
|
||||
blocked.label = blk
|
||||
clients.metric = redis.connected_clients
|
||||
clients.color = green
|
||||
clients.label = conn
|
||||
|
||||
[redisconn]
|
||||
caption = Redis conn
|
||||
description = Redis connections
|
||||
type = bar
|
||||
reject.metric = redis.rejected_connections
|
||||
reject.color = magenta
|
||||
reject.label = fail/s
|
||||
total.metric = redis.total_connections_received
|
||||
total.color = blue
|
||||
total.label = conn/s
|
22
pcp/meters/tcp
Normal file
22
pcp/meters/tcp
Normal file
@ -0,0 +1,22 @@
|
||||
#
|
||||
# pcp-htop(1) configuration file - see pcp-htop(5)
|
||||
#
|
||||
|
||||
[tcp]
|
||||
caption = TCP
|
||||
description = TCP sockets
|
||||
listen.metric = network.tcpconn.listen
|
||||
listen.color = green
|
||||
listen.label = lis
|
||||
active.metric = network.tcpconn.established
|
||||
active.color = blue
|
||||
active.label = act
|
||||
syn.metric = network.tcpconn.syn_sent + network.tcpconn.syn_recv + network.tcpconn.last_ack
|
||||
syn.color = cyan
|
||||
syn.label = syn
|
||||
wait.metric = network.tcpconn.time_wait
|
||||
wait.color = red
|
||||
wait.label = tim
|
||||
close.metric = network.tcpconn.fin_wait1 + network.tcpconn.fin_wait2 + network.tcpconn.close + network.tcpconn.close_wait + network.tcpconn.closing
|
||||
close.color = yellow
|
||||
close.label = clo
|
Reference in New Issue
Block a user