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