HEX
Server: LiteSpeed
System: Linux pl-rocket-da1.hostsila.org 4.18.0-477.27.2.lve.el8.x86_64 #1 SMP Wed Oct 11 12:32:56 UTC 2023 x86_64
User: etorby24eu (1588)
PHP: 8.3.23
Disabled: exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: //opt/node_parser/hooks/topstatsjson_lve.py
#!/usr/bin/python2.7
# -*- coding: utf-8 -*-

import os
import datetime
import json
import multiprocessing
import sys
import glob
import re
import socket
from pymemcache.client import base

client = base.Client(('194.28.84.9', 11211))
server_ip = socket.gethostbyname(socket.gethostname())

def _dcmon(user):
            fulld = []
            data = {}
            data2 = {}
            k = 0
            dcpumon_dir = '/opt/node_parser/dcpumon/'
            for i in range(1, 8):
                var = datetime.datetime.now() - datetime.timedelta(days=i - 1)
                if os.path.exists(dcpumon_dir + var.strftime('%Y/%b/%d')):
                   lines = open(dcpumon_dir + var.strftime('%Y/%b/%d'), 'r'
                             ).readlines()[2:]
                   date = open(dcpumon_dir + var.strftime('%Y/%b/%d'), 'r'
                            ).readlines()[1].strip()
                   data['date'] = date
                   for line in lines:
                    x = line.split('=')
                    data['user'] = x[0]
                    data['cpu'] = round(float(x[1]), 2)
                    data['mem'] = round(float(x[2]), 2)
                    data['mysql'] = round(float(x[3]), 1)
                    try:
                        data['proc1'] = '%CPU ' + x[4] + ' ' + x[5]
                    except:
                        data['proc1'] = None
                    try:
                        data['proc2'] = '%CPU ' + x[6] + ' ' + x[7]
                    except:
                        data['proc2'] = None
                    try:
                        data['proc3'] = '%CPU ' + x[8] + ' ' + x[9]
                    except:
                        data['proc3'] = None
                    fulld.append(data.copy())

            for j in fulld:
                if user == j['user']:
                    date2 = datetime.datetime.fromtimestamp(float(j['date'])).strftime('%Y-%m-%d')
                    data2[date2]={}
                    if j['proc1']:
                        data2[date2]['proc1'] = j['proc1'].strip()
                    if j['proc2']:
                        data2[date2]['proc2'] = j['proc2'].strip()
                    if j['proc3']:
                        data2[date2]['proc3'] = j['proc3'].strip()
            print json.dumps(data2)

def _summary():
        data_json =  os.popen('lveinfo --period 1h --order-by aCPU -d --show-columns ID aCPU aPMem lCPU -l 0 -j').read()
        data = json.loads(data_json)
        data['hostname'] = os.popen('hostname').read().strip()
        data['cpu_count'] = multiprocessing.cpu_count()
        data['lastdata'] = datetime.datetime.today().strftime("%Y-%m-%d %H:%M")
        print json.dumps(data)

def _account(account):
        data_json =  os.popen('lveinfo --period 24h  --show-columns ID From,To,aCPU,aPMem,lCPU  -d -u ' + account + ' --time-unit 1h -j').read()
        data = json.loads(data_json)
        data['hostname'] = os.popen('hostname').read().strip()
        data['cpu_count'] = multiprocessing.cpu_count()
        data['lastdata'] = datetime.datetime.today().strftime("%Y-%m-%d %H:%M")
        email = re.search('email=(.*)', open('/usr/local/directadmin/data/users/' + account + '/user.conf', 'r').read(), re.M | re.I)
        master_domain = re.search('domain=(.*)', open('/usr/local/directadmin/data/users/' + account + '/user.conf', 'r').read(), re.M | re.I)
        data['email'] = email.group(1).strip()
        data['master_domain'] = master_domain.group(1).strip()
        print json.dumps(data)

def _cron():
	count = 0
        lveinfobin = os.popen('/usr/bin/whereis  lveinfo |awk \'{print $2 }\'').read().strip()
        data_json =  os.popen(lveinfobin + ' --period 24h --order-by aCPU -d --show-columns ID aCPU aPMem lCPU  -l 0 -j').read()
        data_json_1h =  os.popen(lveinfobin + ' --period 1h --order-by aCPU -d --show-columns ID aCPU aPMem lCPU  -l 0 -j').read()
	data_h =  json.loads(data_json_1h)
        for var in data_h['data']:
                sum = var['aCPU'] * 100 / var['lCPU']
                if sum >= 25:
                        count+=1
        data = json.loads(data_json)
        data['hostname'] = os.popen('hostname').read().strip()
        data['cpu_count'] = multiprocessing.cpu_count()
        data['lastdata'] = datetime.datetime.today().strftime("%Y-%m-%d %H:%M")
	data['count'] = count
	client.set('topstatslve_' + server_ip.strip(), json.dumps(data),expire=3600)

def _peak():
        lveinfobin = os.popen('/usr/bin/whereis  lveinfo |awk \'{print $2 }\'').read().strip()
	os.popen(lveinfobin + ' --period 1h --order-by aCPU -d --show-columns ID aCPU aPMem lCPU -l 0 -j > /opt/node_parser/hooks/stats/`date +"%H"`.json')

	dir = '/opt/node_parser/hooks/stats'
	ndata = {}
	
	ndata['hostname'] = os.popen('hostname').read().strip()

	i=0
	os.chdir(dir)
	for file in glob.glob("*.json"):
		hour = file.split('.')
		hour = hour[0]
		with open(dir + '/' + file) as json_file:
			data = json.load(json_file)
			for var in data['data']:
				CPU = var['aCPU'] * 100 / var['lCPU']
				if CPU >= 5:
					ndata[i] = {}
					ndata[i]['hour'] = hour
					ndata[i]['ID'] = var['ID']
					ndata[i]['CPU'] = CPU
					ndata[i]['aCPU'] = var['aCPU']
					ndata[i]['lCPU'] = var['lCPU']
				i = i + 1
        client.set('topstatslvepeak_' + server_ip.strip(), json.dumps(ndata),expire=3600)

'''
main
'''

try:
        if sys.argv[1] == 'summary':
                _summary()
        elif sys.argv[1] == 'account':
                _account(sys.argv[2])
        elif sys.argv[1] == 'dcmon':
                _dcmon(sys.argv[2])
        elif sys.argv[1] == 'cron':
                _cron()
        elif sys.argv[1] == 'peak':
                _peak()
        else:
                False
except:
        False