HEX
Server: LiteSpeed
System: Linux atali.colombiahosting.com.co 5.14.0-570.12.1.el9_6.x86_64 #1 SMP PREEMPT_DYNAMIC Tue May 13 06:11:55 EDT 2025 x86_64
User: coopserp (1713)
PHP: 8.2.29
Disabled: dl,exec,passthru,proc_open,proc_close,shell_exec,memory_limit,system,popen,curl_multi_exec,show_source,symlink,link,leak,listen,diskfreespace,tmpfile,ignore_user_abord,highlight_file,source,show_source,fpaththru,virtual,posix_ctermid,posix_getcwd,posix_getegid,posix_geteuid,posix_getgid,posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid,posix,posix_getppid,posix_getpwnam,posix_getpwuid,posix_getrlimit,posix_getsid,posix_getuid,posix_isatty,posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid,posix_setpgid,posix_setsid,posix_setid,posix_times,posix_ttyname,posix_uname,proc_get_status,proc_nice,proc_terminate
Upload Files
File: //usr/local/lib/python3.9/site-packages/agent360/plugins/docker.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import plugins
import time


class Plugin(plugins.BasePlugin):
    __name__ = 'docker'

    def run(self, config):
        '''
        Docker monitoring, needs sudo access!
        Instructions at:
        https://docs.360monitoring.com/docs/docker-plugin
        '''
        containers = {}
        last_value = {}
        prev_cache = self.get_agent_cache()  # Get absolute values from previous check
        try:
            lines = [s.split(' / ') for s in os.popen('sudo docker stats --no-stream --no-trunc --format "{{.CPUPerc}} / {{.Name}} / {{.ID}} / {{.MemUsage}} / {{.NetIO}} / {{.BlockIO}} / {{.MemPerc}}"').read().splitlines()]
            for row in lines:
                container = {}
                container['cpu'] = row[0].strip('%')
                name = row[1]
                container_id = row[2]
                container['mem_usage_bytes'] = self.computerReadable(row[3])
                container['mem_total_bytes'] = self.computerReadable(row[4])
                container['net_in_bytes'] = self.absolute_to_per_second('%s_%s' % (name, 'net_in_bytes'), self.computerReadable(row[5]), prev_cache)
                container['net_out_bytes'] = self.absolute_to_per_second('%s_%s' % (name, 'net_out_bytes'), self.computerReadable(row[6]), prev_cache)
                container['disk_in_bytes'] = self.absolute_to_per_second('%s_%s' % (name, 'disk_in_bytes'), self.computerReadable(row[7]), prev_cache)
                container['disk_out_bytes'] = self.absolute_to_per_second('%s_%s' % (name, 'disk_out_bytes'), self.computerReadable(row[8]), prev_cache)
                container['mem_pct'] = row[9].strip('%')

                last_value['%s_%s' % (name, 'mem_usage_bytes')] = self.computerReadable(row[3])
                last_value['%s_%s' % (name, 'net_in_bytes')] = self.computerReadable(row[5])
                last_value['%s_%s' % (name, 'net_out_bytes')] = self.computerReadable(row[6])
                last_value['%s_%s' % (name, 'disk_in_bytes')] = self.computerReadable(row[7])
                last_value['%s_%s' % (name, 'disk_out_bytes')] = self.computerReadable(row[8])
                containers[name] = container
        except Exception as e:
            return e.message
        containers['containers'] = len(containers)
        last_value['ts'] = time.time()
        self.set_agent_cache(last_value)

        return containers

    def computerReadable(self, value):
        if value[-3:] == 'KiB':
            return float(value[:-3])*1024
        elif value[-3:] == 'MiB':
            return float(value[:-3])*1024*1024
        elif value[-3:] == 'GiB':
            return float(value[:-3])*1024*1024*1024
        elif value[-3:] == 'TiB':
            return float(value[:-3])*1024*1024*1024*1024
        elif value[-3:] == 'PiB':
            return float(value[:-3])*1024*1024*1024*1024*1024
        elif value[-2:] == 'kB':
            return float(value[:-2])*1024
        elif value[-2:] == 'MB':
            return float(value[:-2])*1024*1024
        elif value[-2:] == 'GB':
            return float(value[:-2])*1024*1024*1024
        elif value[-2:] == 'TB':
            return float(value[:-2])*1024*1024*1024*1024
        elif value[-2:] == 'PB':
            return float(value[:-2])*1024*1024*1024*1024*1024
        elif value[-1:] == 'B':
            return float(value[:-1])

if __name__ == '__main__':
    Plugin().execute()