GOLDEN HOUR
DIR: /usr/local/lib/python3.9/site-packages/agent360/plugins
UP
UPLOAD
Name
Size
Action
__init__.py
0 B
DEL
[ __pycache__ ]
-
DEL
apt-updates.py
1.23 KB
DEL
asterisk.py
1012 B
DEL
bind.py
732 B
DEL
bird.py
841 B
DEL
bitninja.py
1.27 KB
DEL
cloudlinux-dbgov.py
1.04 KB
DEL
cloudlinux.py
1020 B
DEL
cpanel.py
1.41 KB
DEL
cpu.py
1.97 KB
DEL
cpu_freq.py
583 B
DEL
dirsize.py
617 B
DEL
diskinodes.py
652 B
DEL
diskstatus-nvme.py
1.58 KB
DEL
diskstatus.py
1.96 KB
DEL
diskusage.py
4.04 KB
DEL
docker.py
3.36 KB
DEL
dovecot.py
1.27 KB
DEL
elasticsearch.py
4.24 KB
DEL
exim.py
484 B
DEL
fail2ban.py
831 B
DEL
gpu.py
959 B
DEL
haproxy.py
4.17 KB
DEL
httpd.py
2.73 KB
DEL
iostat.py
5.1 KB
DEL
janus.py
705 B
DEL
kamailio.py
556 B
DEL
litespeed.py
3.04 KB
DEL
loadavg.py
332 B
DEL
loggedin.py
400 B
DEL
mailq.py
528 B
DEL
mdstat.py
1.36 KB
DEL
megacli.py
2.72 KB
DEL
memcached.py
3.09 KB
DEL
memory.py
932 B
DEL
minecraft.py
2.35 KB
DEL
mongodb.py
5.63 KB
DEL
mysql.py
5.13 KB
DEL
network.py
2.72 KB
DEL
nginx.py
3.2 KB
DEL
openvpn.py
2.17 KB
DEL
phpfpm.py
2.72 KB
DEL
ping.py
3.09 KB
DEL
plesk-cgroups.py
6.18 KB
DEL
plugins.py
2.48 KB
DEL
postfix.py
1.73 KB
DEL
powerdns.py
4.56 KB
DEL
process.py
4.26 KB
DEL
proftpd.py
1.1 KB
DEL
rabbitmq.py
3.49 KB
DEL
redis_stat.py
5.48 KB
DEL
sleeper.py
244 B
DEL
swap.py
364 B
DEL
system.py
5.67 KB
DEL
tcpports.py
1.08 KB
DEL
temp.py
1.45 KB
DEL
unbound.py
3.24 KB
DEL
vms.py
6.2 KB
DEL
wp-toolkit.py
1.8 KB
DEL
yum-updates.py
810 B
DEL
Edit: plesk-cgroups.py
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import glob import pathlib import pwd import re import time import plugins class Plugin(plugins.BasePlugin): __name__ = 'plesk-cgroups' def run(self, *unused): accounting = {} cache = self.get_agent_cache() uid_re = re.compile('\d+') # This silently depends on cgroup mounted virtual file systems # and SystemD user slices sysfs_prefix = '/sys/fs/cgroup/' sysfs_suffix = 'user.slice/user-*.slice' for user_slice in ( glob.glob(sysfs_prefix + sysfs_suffix) + # cgroup v2 glob.glob(sysfs_prefix + 'systemd/' + sysfs_suffix) # cgroup v1 ): accounting[user_slice] = {} if not user_slice in cache: cache[user_slice] = {} accounting[user_slice]['uid'] = uid = \ int(uid_re.search(user_slice).group()) # Resolve uid to username try: accounting[user_slice]['username'] = pwd.getpwuid(uid).pw_name except KeyError: # There's no guarantee that the uid has a name pass # This silently depends on the corresponding CGroup controllers # being individually enabled # Memory accounting try: # cgroup v2 with pathlib.Path(user_slice, 'memory.current').open() as f: accounting[user_slice]['memory.current'] = \ int(f.read().strip()) except FileNotFoundError: try: # cgroup v1 with pathlib.Path( sysfs_prefix, 'memory', 'user.slice', 'user-{}.slice'.format(uid), 'memory.usage_in_bytes' ).open() as f: accounting[user_slice]['memory.usage_in_bytes'] = \ int(f.read().strip()) except FileNotFoundError: pass # IO accounting try: # cgroup v2 with pathlib.Path(user_slice, 'io.stat').open() as f: accounting[user_slice]['io.stat'] = a = {} if not 'io.stat' in cache[user_slice]: cache[user_slice]['io.stat'] = c = {} for line in f.readlines(): devnum, metrics = line.split(maxsplit=1) if not devnum in a: a[devnum] = {} a[devnum]['ts'] = time.time() if not devnum in c: c[devnum] = {} for kv in metrics.split(): k, v = kv.split('=') a[devnum][k] = self.absolute_to_per_second( k, int(v), c[devnum] ) c[devnum][k] = int(v) except FileNotFoundError: try: # cgroup v1 with pathlib.Path( sysfs_prefix, 'blkio', 'user.slice', 'user-{}.slice'.format(uid), 'blkio.throttle.io_service_bytes' ).open() as f: accounting[user_slice]\ ['blkio.throttle.io_service_bytes'] = a = {} if not 'blkio.throttle.io_service_bytes' \ in cache[user_slice]: cache[user_slice]\ ['blkio.throttle.io_service_bytes'] = c = {} for line in f.readlines(): try: devnum, k, v = line.split() except ValueError: # The last line is "Total", # it has only 2 values and is ignored pass if not devnum in a: a[devnum] = {} a[devnum]['ts'] = time.time() if not devnum in c: c[devnum] = {} a[devnum][k] = self.absolute_to_per_second( k, int(v), c[devnum] ) c[devnum][k] = int(v) except FileNotFoundError: pass # CPU accounting try: # cgroup v2 with pathlib.Path(user_slice, 'cpu.stat').open() as f: accounting[user_slice]['cpu.stat'] = a = {} if not 'cpu.stat' in cache[user_slice]: cache[user_slice]['cpu.stat'] = c = {} a['ts'] = time.time() for line in f.readlines(): k, v = line.split() a[k] = self.absolute_to_per_second(k, int(v), c) c[k] = int(v) except FileNotFoundError: try: # cgroup v1 with pathlib.Path( sysfs_prefix, 'cpu', 'user.slice', 'user-{}.slice'.format(uid), 'cpuacct.stat' ).open() as f: accounting[user_slice]['cpuacct.stat'] = a = {} if not 'cpuacct.stat' in cache[user_slice]: cache[user_slice]['cpuacct.stat'] = c = {} a['ts'] = time.time() for line in f.readlines(): k, v = line.split() a[k] = self.absolute_to_per_second(k, int(v), c) c[k] = int(v) except FileNotFoundError: pass self.set_agent_cache(cache) return accounting if __name__ == '__main__': Plugin().execute()
SAVE FILE
TERMINAL
EXEC