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/openvpn.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import plugins
import time
from openvpn_status import parse_status


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

    def run(self, config):
        '''
        OpenVPN monitoring, needs access to openvpn-status.log file.
        pip install openvpn-status
        or
        pip3 install openvpn-status

        In /etc/agent360.ini to enable put:
        [openvpn]
        enabled = yes
        status_path = /etc/openvpn/openvpn-status.log

        test the plugin by running: sudo -u agent360 agent360 test OpenVPN

        If you are having permission issues try to run the agent as root user:
        https://docs.360monitoring.com/docs/run-the-monitoring-agent-as-the-root-user
        '''
        openvpn_clients = {}
        last_value = {}
        prev_cache = self.get_agent_cache()  # Get absolute values from previous check

        try:
            with open(config.get('openvpn', 'status_path')) as logfile:
                status = parse_status(logfile.read())
        except Exception as e:
            return e

        try:
            openvpn_clients['containers'] = len(status.client_list.items())
            for key, client in status.client_list.items():
                 client.common_name = client.common_name.replace('.', '-')
                 openvpn_clients[client.common_name] = {}
                 bytes_out = int(client.bytes_sent)
                 bytes_in = int(client.bytes_received)
                 openvpn_clients[client.common_name]['net_out_bytes'] = self.absolute_to_per_second('%s_%s' % (client.common_name, 'net_out_bytes'), bytes_out, prev_cache)
                 openvpn_clients[client.common_name]['net_in_bytes'] = self.absolute_to_per_second('%s_%s' % (client.common_name, 'net_in_bytes'), bytes_in, prev_cache)

                 last_value['%s_%s' % (client.common_name, 'net_in_bytes')] = bytes_in
                 last_value['%s_%s' % (client.common_name, 'net_out_bytes')] = bytes_out
        except Exception as e:
            return e

        last_value['ts'] = time.time()
        self.set_agent_cache(last_value)

        return openvpn_clients

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