An ActivityWatch watcher that monitors CPU, RAM, disk, network, and sensor usage. It is basically a psutil
wrapper for ActivityWatch. I have only left out some information that was too detailed.
It creates a data dump every n
seconds. (n
can be changed in the config, default 5 seconds). Here is an example data dump:
Expand to see the data dump
{ "cpu": { "times": { "user": 1322.13, "nice": 8.4, "system": 295.14, "idle": 70291.32, "iowait": 88.89, "irq": 0.0, "softirq": 46.51, "steal": 0.0, "guest": 0.0 }, "times_percent": { "user": 8.0, "nice": 0.0, "system": 1.8, "idle": 88.5, "iowait": 0.9, "irq": 0.0, "softirq": 0.9, "steal": 0.0, "guest": 0.0 }, "percent": [ 1.0, 7.0, 2.0, 1.0, 2.0, 1.0, 0.0, 1.0, 0.0, 1.0, 4.0, 9.1, 2.9, 1.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 2.0, 0.0, 1.0, 0.0 ], "count_logical": 24, "count": 12, "stats": { "ctx_switches": 37394300, "interrupts": 17828493, "soft_interrupts": 5348055, "syscalls": 0 }, "freq": { "current": 2511.235, "min": 2200.0, "max": 3700.0 }, "loadavg": [ 0.41, 0.4, 0.45 ] }, "memory": { "virtual": { "total": 33646522368, "available": 25273651200, "percent": 24.9, "used": 7725912064, "free": 20975898624, "active": 2285453312, "inactive": 9401901056, "buffers": 254865408, "cached": 4689846272, "shared": 196804608 }, "swap": { "total": 17179865088, "used": 0, "free": 17179865088, "percent": 0.0, "sin": 0, "sout": 0 } }, "disk": { "usage": { "total": 1967397240832, "used": 179485396992, "free": 1687902023680, "percent": 9.6 }, "io_counters": { "read_count": 106909, "write_count": 82554, "read_bytes": 4226650624, "write_bytes": 1836332032, "read_time": 14305, "write_time": 106840, "read_merged_count": 30221, "write_merged_count": 83702, "busy_time": 141588 } }, "network": { "io_counters": { "lo": { "bytes_sent": 3811967, "bytes_recv": 3811967, "packets_sent": 33176, "packets_recv": 33176, "errin": 0, "errout": 0, "dropin": 0, "dropout": 0 }, "enp39s0": { "bytes_sent": 7710002, "bytes_recv": 101937768, "packets_sent": 62853, "packets_recv": 90218, "errin": 0, "errout": 0, "dropin": 972, "dropout": 0 }, "wlo1": { "bytes_sent": 781046, "bytes_recv": 987573, "packets_sent": 5576, "packets_recv": 5028, "errin": 0, "errout": 0, "dropin": 23, "dropout": 0 }, "br-b9a41ca7844a": { "bytes_sent": 0, "bytes_recv": 0, "packets_sent": 0, "packets_recv": 0, "errin": 0, "errout": 0, "dropin": 0, "dropout": 0 }, "br-303b82cbab45": { "bytes_sent": 0, "bytes_recv": 0, "packets_sent": 0, "packets_recv": 0, "errin": 0, "errout": 0, "dropin": 0, "dropout": 0 }, "docker0": { "bytes_sent": 0, "bytes_recv": 0, "packets_sent": 0, "packets_recv": 0, "errin": 0, "errout": 0, "dropin": 0, "dropout": 0 }, "vmnet1": { "bytes_sent": 0, "bytes_recv": 0, "packets_sent": 499, "packets_recv": 0, "errin": 0, "errout": 0, "dropin": 0, "dropout": 0 }, "vmnet8": { "bytes_sent": 0, "bytes_recv": 0, "packets_sent": 501, "packets_recv": 0, "errin": 0, "errout": 0, "dropin": 0, "dropout": 0 } }, "net_if_stats": { "lo": { "isup": true, "duplex": 0, "speed": 0, "mtu": 65536 }, "enp39s0": { "isup": true, "duplex": 2, "speed": 1000, "mtu": 1500 }, "wlo1": { "isup": true, "duplex": 0, "speed": 0, "mtu": 1500 }, "br-b9a41ca7844a": { "isup": false, "duplex": 0, "speed": 65535, "mtu": 1500 }, "br-303b82cbab45": { "isup": false, "duplex": 0, "speed": 65535, "mtu": 1500 }, "docker0": { "isup": false, "duplex": 0, "speed": 65535, "mtu": 1500 }, "vmnet1": { "isup": true, "duplex": 0, "speed": 0, "mtu": 1500 }, "vmnet8": { "isup": true, "duplex": 0, "speed": 0, "mtu": 1500 } } }, "sensors": { "temperatures": { "nvme": [ { "label": "Composite", "current": 39.85, "high": 81.85, "critical": 84.85 }, { "label": "Sensor 1", "current": 39.85, "high": 65261.85, "critical": 65261.85 }, { "label": "Sensor 2", "current": 44.85, "high": 65261.85, "critical": 65261.85 }, { "label": "Composite", "current": 38.85, "high": 81.85, "critical": 84.85 }, { "label": "Sensor 1", "current": 38.85, "high": 65261.85, "critical": 65261.85 }, { "label": "Sensor 2", "current": 45.85, "high": 65261.85, "critical": 65261.85 } ], "k10temp": [ { "label": "Tctl", "current": 45.75, "high": null, "critical": null }, { "label": "Tdie", "current": 45.75, "high": null, "critical": null } ], "iwlwifi_1": [ { "label": "", "current": 38.0, "high": null, "critical": null } ] }, "fans": {} }, "other": { "users": [ { "name": "alwin", "terminal": ":1", "host": ":1", "started": 1629982080.0, "pid": 11504 } ], "boot_time": 1629980632.0 } }
On supported devices, you also see fan and battery metrics.
- Download the latest release here.
- Unzip as
aw-watcher-utilization
folder. - Move the folder to the directly ActivityWatch is installed (depends on your setup). For example, on Windows:
C:\Users\<USER>\AppData\Local\activitywatch\activitywatch\aw-watcher-utilization
- Go to the config directory. In the
aw-qt
directory, find theaw-qt.toml
file. - Add the
aw-watcher-utilization
toautostart_modules
to enable auto-start. Make sure to remove the#
before autostart_modules in case there are any. It should look like this:
aw-qt.toml
:
[aw-qt]
autostart_modules = ["aw-server", "aw-watcher-afk", "aw-watcher-window", "aw-watcher-utilization"]
- [Linux & MacOS only]: Make the executable file in the
aw-watcher-utilization
folder executable:
chmod +x ./aw-watcher-utilization
- (Optional, but recommended) Enable custom visualizations (See next section)
- Add the following section to your
aw-server.toml
file in the config directory:
[server.custom_static]
aw-watcher-utilization = "/home/user/path/to/aw-watcher-utilization/visualization"
For example on Windows:
[server.custom_static]
aw-watcher-utilization = '''C:\Users\<USER>\AppData\Local\activitywatch\activitywatch\aw-watcher-utilization\visualization'''
- Do not forget to change the path to your path and make sure you added it to
aw-server.toml
NOTaw-qt.toml
. - Restart ActivityWatch
- Add custom visualizations from the Activity Watch GUI:
Activity > Edit View > Add Visualization > Custom Visualization
- Enter
aw-watcher-utilization
for the watcher name and pick one of the following titles of the next section.
- Enjoy!
Title: cpu_percent
Unfortunately, I have a limited number of computers, so bug reports are always very welcome!
See DEV_SETUP.md
.
Thanks in advance!