Files
CyberPanel/serverStatus/views.py

1259 lines
42 KiB
Python
Raw Normal View History

2017-10-24 19:16:36 +05:00
# -*- coding: utf-8 -*-
2019-12-10 15:09:10 +05:00
2017-10-24 19:16:36 +05:00
from django.shortcuts import render, redirect
2017-10-24 19:16:36 +05:00
from django.http import HttpResponse
import plogical.CyberCPLogFileWriter as logging
from loginSystem.views import loadLoginPage
import json
2020-04-30 18:18:48 +05:00
import subprocess, shlex
import psutil
import socket
2018-08-18 00:39:10 +05:00
from plogical.acl import ACLManager
2018-11-08 12:11:42 +05:00
import os
2018-11-09 22:01:28 +05:00
from plogical.virtualHostUtilities import virtualHostUtilities
import time
2019-12-12 11:04:05 +05:00
from . import serverStatusUtil
2018-11-09 22:01:28 +05:00
from plogical.processUtilities import ProcessUtilities
2018-12-13 04:23:08 +05:00
from plogical.httpProc import httpProc
2019-04-15 15:54:23 +05:00
from plogical.installUtilities import installUtilities
2017-10-24 19:16:36 +05:00
# Create your views here.
2019-11-02 19:29:02 +05:00
NOTHING = 0
BUNDLE = 2
EXPIRE = 3
2020-11-06 12:07:39 +05:00
### Version
VERSION = '2.0'
BUILD = 4
2017-10-24 19:16:36 +05:00
def serverStatusHome(request):
try:
userID = request.session['userID']
return render(request, 'serverStatus/index.html')
2017-10-24 19:16:36 +05:00
except KeyError:
return redirect(loadLoginPage)
def litespeedStatus(request):
2017-10-24 19:16:36 +05:00
try:
userID = request.session['userID']
2018-08-18 00:39:10 +05:00
currentACL = ACLManager.loadedACL(userID)
2017-10-24 19:16:36 +05:00
2018-08-18 00:39:10 +05:00
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadError()
2017-10-24 19:16:36 +05:00
processList = ProcessUtilities.getLitespeedProcessNumber()
2018-11-09 22:01:28 +05:00
OLS = 0
if ProcessUtilities.decideServer() == ProcessUtilities.OLS:
OLS = 1
2019-11-02 19:29:02 +05:00
message = 0
if request.META['QUERY_STRING'] == 'bundle':
message = ''
message = BUNDLE
elif request.META['QUERY_STRING'] == 'expire':
message = 'It looks like your license has expired. Kindly renew your license.'
message = EXPIRE
else:
message = NOTHING
2017-10-24 19:16:36 +05:00
try:
2019-03-21 23:26:42 +05:00
versionInformation = ProcessUtilities.outputExecutioner(["/usr/local/lsws/bin/lshttpd", "-v"]).split("\n")
2017-10-24 19:16:36 +05:00
lsversion = versionInformation[0]
modules = versionInformation[1]
counter = 0
loadedModules = []
for items in versionInformation:
if counter == 0 or counter == 1:
counter = counter + 1
continue
else:
loadedModules.append(items)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2017-10-24 19:16:36 +05:00
logging.CyberCPLogFileWriter.writeToFile(str(msg) + "[litespeedStatus]")
return render(request, "serverStatus/litespeedStatus.html", {"processList": processList,
"liteSpeedVersionStatus": "For some reaons not able to load version details, see CyberCP main log file.",
2019-11-02 19:29:02 +05:00
'OLS': OLS , 'message': message})
if (processList != 0):
2017-10-24 19:16:36 +05:00
dataForHtml = {"processList": processList, "lsversion": lsversion, "modules": modules,
2019-11-02 19:29:02 +05:00
"loadedModules": loadedModules, 'OLS': OLS, 'message': message}
return render(request, "serverStatus/litespeedStatus.html", dataForHtml)
2017-10-24 19:16:36 +05:00
else:
dataForHtml = {"lsversion": lsversion, "modules": modules,
2019-11-02 19:29:02 +05:00
"loadedModules": loadedModules, 'OLS': OLS, 'message': message}
return render(request, "serverStatus/litespeedStatus.html", dataForHtml)
2017-10-24 19:16:36 +05:00
2019-12-10 15:09:10 +05:00
except KeyError as msg:
2017-10-24 19:16:36 +05:00
logging.CyberCPLogFileWriter.writeToFile(str(msg) + "[litespeedStatus]")
return redirect(loadLoginPage)
def stopOrRestartLitespeed(request):
try:
userID = request.session['userID']
2018-08-18 00:39:10 +05:00
currentACL = ACLManager.loadedACL(userID)
2017-10-24 19:16:36 +05:00
2018-08-18 00:39:10 +05:00
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson('reboot', 0)
2017-10-24 19:16:36 +05:00
data = json.loads(request.body)
reboot = data['reboot']
if reboot == 1:
2019-04-15 15:54:23 +05:00
if installUtilities.reStartLiteSpeedSocket() == 1:
status = {"reboot": 1, "shutdown": 0}
2017-10-24 19:16:36 +05:00
else:
status = {"reboot": 0, "shutdown": 0, "error_message": "Please see CyberCP main log file."}
2017-10-24 19:16:36 +05:00
else:
2019-04-15 15:54:23 +05:00
if installUtilities.stopLiteSpeedSocket() == 1:
status = {"reboot": 0, "shutdown": 1}
2017-10-24 19:16:36 +05:00
else:
status = {"reboot": 0, "shutdown": 0, "error_message": "Please see CyberCP main log file."}
2017-10-24 19:16:36 +05:00
final_json = json.dumps(status)
return HttpResponse(final_json)
2019-12-10 15:09:10 +05:00
except KeyError as msg:
2017-10-24 19:16:36 +05:00
logging.CyberCPLogFileWriter.writeToFile(str(msg) + "[stopOrRestartLitespeed]")
return HttpResponse("Not Logged in as admin")
def cyberCPMainLogFile(request):
2017-10-24 19:16:36 +05:00
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2017-10-24 19:16:36 +05:00
2018-08-18 00:39:10 +05:00
currentACL = ACLManager.loadedACL(userID)
2017-10-24 19:16:36 +05:00
2018-08-18 00:39:10 +05:00
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadError()
2017-10-24 19:16:36 +05:00
return render(request, 'serverStatus/cybercpmainlogfile.html')
2017-10-24 19:16:36 +05:00
2019-12-10 15:09:10 +05:00
except KeyError as msg:
2017-10-24 19:16:36 +05:00
logging.CyberCPLogFileWriter.writeToFile(str(msg) + "[cyberCPMainLogFile]")
return redirect(loadLoginPage)
def getFurtherDataFromLogFile(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
2017-10-24 19:16:36 +05:00
2018-08-18 00:39:10 +05:00
if currentACL['admin'] == 1:
pass
2018-06-30 15:29:56 +05:00
else:
2018-08-18 00:39:10 +05:00
return ACLManager.loadErrorJson('logstatus', 0)
fewLinesOfLogFile = logging.CyberCPLogFileWriter.readLastNFiles(50, logging.CyberCPLogFileWriter.fileName)
2019-03-26 16:19:03 +05:00
2018-08-18 00:39:10 +05:00
fewLinesOfLogFile = str(fewLinesOfLogFile)
status = {"logstatus": 1, "logsdata": fewLinesOfLogFile}
final_json = json.dumps(status)
return HttpResponse(final_json)
2017-10-24 19:16:36 +05:00
2019-12-10 15:09:10 +05:00
except KeyError as msg:
status = {"logstatus": 0,
"error": "Could not fetch data from log file, please see CyberCP main log file through command line."}
2017-10-24 19:16:36 +05:00
logging.CyberCPLogFileWriter.writeToFile(str(msg) + "[getFurtherDataFromLogFile]")
return HttpResponse("Not Logged in as admin")
def services(request):
try:
userID = request.session['userID']
2018-08-18 00:39:10 +05:00
currentACL = ACLManager.loadedACL(userID)
2018-08-18 00:39:10 +05:00
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadError()
2018-11-09 22:01:28 +05:00
data = {}
if ProcessUtilities.decideServer() == ProcessUtilities.OLS:
data['serverName'] = 'OpenLiteSpeed'
else:
data['serverName'] = 'LiteSpeed Ent'
2019-01-08 18:09:24 +00:00
dockerInstallPath = '/usr/bin/docker'
if not os.path.exists(dockerInstallPath):
data['isDocker'] = False
else:
data['isDocker'] = True
2018-11-09 22:01:28 +05:00
return render(request, 'serverStatus/services.html', data)
except KeyError:
return redirect(loadLoginPage)
def servicesStatus(request):
try:
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson('serviceAction', 0)
lsStatus = []
sqlStatus = []
dnsStatus = []
ftpStatus = []
mailStatus = []
2019-01-08 18:09:24 +00:00
dockerStatus = []
2019-11-22 13:56:31 +05:00
processlist = ProcessUtilities.outputExecutioner('ps -A')
def getServiceStats(service):
if service in processlist:
return 1
else:
return 0
def getMemStats(service):
memCount = 0
for proc in psutil.process_iter():
if service in proc.name():
process = psutil.Process(proc.pid)
memCount += process.memory_info().rss
return memCount
### [1] status [2] mem
lsStatus.append(getServiceStats('litespeed'))
if getServiceStats('litespeed'):
lsStatus.append(getMemStats('litespeed'))
else:
lsStatus.append(0)
2019-01-08 18:09:24 +00:00
# Docker status
dockerStatus.append(getServiceStats('docker'))
# mysql status
2020-10-14 13:07:30 +05:00
if ProcessUtilities.decideDistro() == ProcessUtilities.centos:
mysqlResult = ProcessUtilities.outputExecutioner('systemctl status mysql')
if mysqlResult.find('active (running)') > -1:
sqlStatus.append(1)
sqlStatus.append(getMemStats('mariadbd'))
else:
sqlStatus.append(0)
sqlStatus.append(0)
else:
2020-10-14 13:07:30 +05:00
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
result = s.connect_ex(('127.0.0.1', 3306))
if result == 0:
sqlStatus.append(1)
else:
sqlStatus.append(0)
s.close()
if getServiceStats('mysql'):
sqlStatus.append(getMemStats('mysql'))
else:
sqlStatus.append(0)
dnsStatus.append(getServiceStats('pdns'))
if getServiceStats('pdns'):
dnsStatus.append(getMemStats('pdns'))
else:
dnsStatus.append(0)
ftpStatus.append(getServiceStats('pure-ftpd'))
if getServiceStats('pure-ftpd'):
ftpStatus.append(getMemStats('pure-ftpd'))
else:
ftpStatus.append(0)
mailStatus.append(getServiceStats('postfix'))
if getServiceStats('postfix'):
mailStatus.append(getMemStats('postfix'))
else:
mailStatus.append(0)
json_data = {'status':
{'litespeed': lsStatus[0],
'mysql': sqlStatus[0],
'powerdns': dnsStatus[0],
'pureftp': ftpStatus[0],
2019-01-08 18:09:24 +00:00
'postfix': mailStatus[0],
'docker': dockerStatus[0]},
'memUsage':
{'litespeed': lsStatus[1],
'mysql': sqlStatus[1],
'powerdns': dnsStatus[1],
'pureftp': ftpStatus[1],
'postfix': mailStatus[1]}}
return HttpResponse(json.dumps(json_data))
except KeyError:
return redirect(loadLoginPage)
def servicesAction(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
2018-08-18 00:39:10 +05:00
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson('serviceAction', 0)
try:
if request.method == 'POST':
data = json.loads(request.body)
service = data['service']
action = data['action']
if action not in ["stop", "start", "restart"]:
final_dic = {'serviceAction': 0, "error_message": "Invalid Action"}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
else:
pass
2019-01-08 18:09:24 +00:00
if service not in ["lsws", "mysql", "pdns", "pure-ftpd", "docker"]:
final_dic = {'serviceAction': 0, "error_message": "Invalid Service"}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
else:
2018-11-08 12:11:42 +05:00
if service == 'pure-ftpd':
if os.path.exists("/etc/lsb-release"):
service = 'pure-ftpd-mysql'
else:
service = 'pure-ftpd'
command = 'sudo systemctl %s %s' % (action, service)
2019-03-26 16:19:03 +05:00
ProcessUtilities.executioner(command)
2019-03-30 14:21:52 +05:00
final_dic = {'serviceAction': 1, "error_message": 0}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
final_dic = {'serviceAction': 0, 'error_message': str(msg)}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
2019-12-10 15:09:10 +05:00
except KeyError as msg:
final_dic = {'serviceAction': 0, 'error_message': str(msg)}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
2018-11-09 22:01:28 +05:00
def switchTOLSWS(request):
try:
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson('status', 0)
data = json.loads(request.body)
try:
licenseKey = data['licenseKey']
except:
licenseKey = 'trial'
2018-11-09 22:01:28 +05:00
execPath = "sudo /usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/serverStatus/serverStatusUtil.py"
execPath = execPath + " switchTOLSWS --licenseKey " + licenseKey
2018-11-09 22:01:28 +05:00
2019-03-26 16:19:03 +05:00
ProcessUtilities.popenExecutioner(execPath)
2018-11-09 22:01:28 +05:00
time.sleep(2)
data_ret = {'status': 1, 'error_message': "None", }
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-11-09 22:01:28 +05:00
data_ret = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def switchTOLSWSStatus(request):
try:
command = 'sudo cat ' + serverStatusUtil.ServerStatusUtil.lswsInstallStatusPath
2019-03-26 16:19:03 +05:00
output = ProcessUtilities.outputExecutioner(command)
2018-11-09 22:01:28 +05:00
if output.find('[404]') > -1:
2019-03-30 14:21:52 +05:00
command = "sudo rm -f " + serverStatusUtil.ServerStatusUtil.lswsInstallStatusPath
ProcessUtilities.popenExecutioner(command)
2019-06-08 21:41:43 +00:00
data_ret = {'status': 1, 'abort': 1, 'requestStatus': output, 'installed': 0}
2018-11-09 22:01:28 +05:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
elif output.find('[200]') > -1:
2019-03-30 14:21:52 +05:00
command = "sudo rm -f " + serverStatusUtil.ServerStatusUtil.lswsInstallStatusPath
ProcessUtilities.popenExecutioner(command)
2019-06-08 21:41:43 +00:00
data_ret = {'status': 1, 'abort': 1, 'requestStatus': output, 'installed': 1}
2018-11-09 22:01:28 +05:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
else:
2019-06-08 21:41:43 +00:00
data_ret = {'status': 1, 'abort': 0, 'requestStatus': output, 'installed': 0}
2018-11-09 22:01:28 +05:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2019-03-30 14:21:52 +05:00
command = "sudo rm -f " + serverStatusUtil.ServerStatusUtil.lswsInstallStatusPath
ProcessUtilities.popenExecutioner(command)
2019-06-08 21:41:43 +00:00
data_ret = {'status': 0,'abort': 1, 'requestStatus': str(msg), 'installed': 0}
2018-11-09 22:01:28 +05:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def licenseStatus(request):
try:
userID = request.session['userID']
try:
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson('status', 0)
command = 'sudo cat /usr/local/lsws/conf/serial.no'
2019-03-26 16:19:03 +05:00
serial = ProcessUtilities.outputExecutioner(command)
2018-11-09 22:01:28 +05:00
2020-08-31 23:52:47 +05:00
if serial.find('No such file or directory') > -1:
final_dic = {'status': 1, "erroMessage": 0, 'lsSerial': 'Trial License in use.', 'lsexpiration': 'Trial license expires 15 days after activation.'}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
2018-11-09 22:01:28 +05:00
command = 'sudo /usr/local/lsws/bin/lshttpd -V'
2019-03-26 16:19:03 +05:00
expiration = ProcessUtilities.outputExecutioner(command)
2018-11-09 22:01:28 +05:00
final_dic = {'status': 1, "erroMessage": 0, 'lsSerial': serial, 'lsexpiration': expiration}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
2020-08-31 23:52:47 +05:00
except BaseException as msg:
final_dic = {'status': 0, 'erroMessage': str(msg)}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
except KeyError as msg:
final_dic = {'status': 0, 'erroMessage': str(msg)}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
def refreshLicense(request):
try:
userID = request.session['userID']
try:
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson('status', 0)
command = 'sudo /usr/local/lsws/bin/lshttpd -V'
ProcessUtilities.outputExecutioner(command)
installUtilities.reStartLiteSpeed()
2020-08-31 23:52:47 +05:00
final_dic = {'status': 1}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
2018-11-09 22:01:28 +05:00
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-11-09 22:01:28 +05:00
final_dic = {'status': 0, 'erroMessage': str(msg)}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
2019-12-10 15:09:10 +05:00
except KeyError as msg:
2018-11-09 22:01:28 +05:00
final_dic = {'status': 0, 'erroMessage': str(msg)}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
2018-11-09 22:01:28 +05:00
def changeLicense(request):
try:
userID = request.session['userID']
try:
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson('status', 0)
data = json.loads(request.body)
newKey = data['newKey']
command = 'sudo chown -R cyberpanel:cyberpanel /usr/local/lsws/conf'
2019-03-26 16:19:03 +05:00
ProcessUtilities.executioner(command)
2018-11-09 22:01:28 +05:00
serialPath = '/usr/local/lsws/conf/serial.no'
serialFile = open(serialPath, 'w')
serialFile.write(newKey)
serialFile.close()
command = 'sudo chown -R lsadm:lsadm /usr/local/lsws/conf'
2019-03-26 16:19:03 +05:00
ProcessUtilities.executioner(command)
2018-11-09 22:01:28 +05:00
command = 'sudo /usr/local/lsws/bin/lshttpd -r'
2019-03-26 16:19:03 +05:00
ProcessUtilities.executioner(command)
2018-11-09 22:01:28 +05:00
command = 'sudo /usr/local/lsws/bin/lswsctrl restart'
2019-03-26 16:19:03 +05:00
ProcessUtilities.executioner(command)
2018-11-09 22:01:28 +05:00
final_dic = {'status': 1, "erroMessage": 'None'}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-12-13 04:23:08 +05:00
final_dic = {'status': 0, 'erroMessage': str(msg)}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
2019-12-10 15:09:10 +05:00
except KeyError as msg:
2018-12-13 04:23:08 +05:00
final_dic = {'status': 0, 'erroMessage': str(msg)}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
2018-12-13 04:23:08 +05:00
def topProcesses(request):
try:
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadError()
templateName = "serverStatus/topProcesses.html"
proc = httpProc(request, templateName)
return proc.renderPre()
2019-12-10 15:09:10 +05:00
except KeyError as msg:
2018-12-13 04:23:08 +05:00
logging.CyberCPLogFileWriter.writeToFile(str(msg) + "[litespeedStatus]")
return redirect(loadLoginPage)
def topProcessesStatus(request):
try:
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadError()
2018-12-13 04:23:08 +05:00
with open("/home/cyberpanel/top", "w") as outfile:
2019-03-26 16:19:03 +05:00
subprocess.call("top -n1 -b", shell=True, stdout=outfile)
2018-12-13 04:23:08 +05:00
data = open('/home/cyberpanel/top', 'r').readlines()
json_data = "["
checker = 0
counter = 0
loadAVG = data[0].split(' ')
2019-12-10 15:09:10 +05:00
loadAVG = [a for a in loadAVG if a != '']
2018-12-13 04:23:08 +05:00
loadNow = data[2].split(' ')
2019-12-10 15:09:10 +05:00
loadNow = [a for a in loadNow if a != '']
2018-12-13 04:23:08 +05:00
processes = data[1].split(' ')
2019-12-10 15:09:10 +05:00
processes = [a for a in processes if a != '']
2018-12-13 04:23:08 +05:00
for items in data:
counter = counter + 1
if counter <= 7:
continue
points = items.split(' ')
2019-12-10 15:09:10 +05:00
points = [a for a in points if a != '']
2018-12-13 04:23:08 +05:00
dic = {'PID': points[0], 'User': points[1], 'VIRT': points[4],
'RES': points[5], 'S': points[7], 'CPU': points[8], 'MEM': points[9],
'Time': points[10], 'Command': points[11]
}
if checker == 0:
json_data = json_data + json.dumps(dic)
checker = 1
else:
json_data = json_data + ',' + json.dumps(dic)
json_data = json_data + ']'
data = {}
data['status'] = 1
data['error_message'] = 'None'
data['data'] = json_data
## CPU
data['cpuNow'] = loadNow[1]
data['cpuOne'] = loadAVG[-3].rstrip(',')
data['cpuFive'] = loadAVG[-2].rstrip(',')
data['cpuFifteen'] = loadAVG[-1]
## CPU Time spent
data['ioWait'] = loadNow[9] + '%'
data['idleTime'] = loadNow[7] + '%'
data['hwInterrupts'] = loadNow[11] + '%'
data['Softirqs'] = loadNow[13] + '%'
## Memory
2020-05-02 17:51:01 +05:00
memoryInf0 = ProcessUtilities.outputExecutioner('free -m').splitlines()
2020-05-02 17:51:01 +05:00
memoryInf0[1] = list(filter(None, memoryInf0[1].split(' ')))
memoryInf0[2] = list(filter(None, memoryInf0[2].split(' ')))
2020-05-02 17:51:01 +05:00
2020-05-03 22:02:44 +05:00
try:
data['totalMemory'] = '%sMB' % (memoryInf0[1][1])
except:
data['totalMemory'] = '%sMB' % ('0')
try:
data['usedMemory'] = '%sMB' % (memoryInf0[1][2])
except:
data['usedMemory'] = '%sMB' % ('0')
2020-05-02 17:51:01 +05:00
try:
data['freeMemory'] = '%sMB' % (memoryInf0[1][3])
except:
data['freeMemory'] = '%sMB' % ('0')
2020-05-02 17:51:01 +05:00
try:
data['buffCache'] = '%sMB' % (memoryInf0[1][5])
except:
data['buffCache'] = '%sMB' % ('0')
2020-05-03 22:02:44 +05:00
2020-05-02 17:51:01 +05:00
## Swap
2020-05-03 22:02:44 +05:00
try:
data['swapTotalMemory'] = '%sMB' % (memoryInf0[2][1])
2020-05-03 22:02:44 +05:00
except:
data['swapTotalMemory'] = '%sMB' % ('0')
2018-12-13 04:23:08 +05:00
try:
data['swapUsedMemory'] = '%sMB' % (memoryInf0[2][2])
except:
data['swapUsedMemory'] = '%sMB' % ('0')
2020-05-03 22:02:44 +05:00
try:
data['swapFreeMemory'] = '%sMB' % (memoryInf0[2][3])
except:
data['swapFreeMemory'] = '%sMB' % ('0')
2020-05-02 17:51:01 +05:00
try:
data['swapBuffCache'] = '%sMB' % (memoryInf0[2][5])
except:
data['swapBuffCache'] = '%sMB' % ('0')
2020-05-02 17:51:01 +05:00
2018-12-13 04:23:08 +05:00
## Processes
data['totalProcesses'] = processes[1]
data['runningProcesses'] = processes[3]
data['sleepingProcesses'] = processes[5]
data['stoppedProcesses'] = processes[7]
data['zombieProcesses'] = processes[9]
## CPU Details
command = 'sudo cat /proc/cpuinfo'
2019-03-30 14:21:52 +05:00
output = ProcessUtilities.outputExecutioner(command).splitlines()
2018-12-13 04:23:08 +05:00
import psutil
data['cores'] = psutil.cpu_count()
for items in output:
if items.find('model name') > -1:
modelName = items.split(':')[1].strip(' ')
index = modelName.find('CPU')
data['modelName'] = modelName[0:index]
elif items.find('cpu MHz') > -1:
data['cpuMHZ'] = items.split(':')[1].strip(' ')
elif items.find('cache size') > -1:
data['cacheSize'] = items.split(':')[1].strip(' ')
break
2020-11-06 12:07:39 +05:00
ipFile = "/etc/cyberpanel/machineIP"
f = open(ipFile)
ipData = f.read()
ipAddress = ipData.split('\n', 1)[0]
data['ipAddress'] = ipAddress
data['CyberPanelVersion'] = 'v%s.%s' % (VERSION, str(BUILD))
if ProcessUtilities.decideDistro() == ProcessUtilities.cent8:
data['OS'] = 'Centos 8'
elif ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu20:
data['OS'] = 'Ubuntu 20.04'
elif ProcessUtilities.decideDistro() == ProcessUtilities.centos:
data['OS'] = 'Centos 7'
elif ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu:
data['OS'] = 'Ubuntu 18.04'
data['Kernel'] = ProcessUtilities.outputExecutioner('uname -r')
import shutil
total, used, free = shutil.disk_usage("/")
data['TotalDisk'] = '%s GB' % (total // (2 ** 30))
data['TotalDiskUsed'] = '%s GB' % (used // (2 ** 30))
data['TotalDiskFree'] =' %s GB' % (free // (2 ** 30))
2018-12-13 04:23:08 +05:00
final_json = json.dumps(data)
return HttpResponse(final_json)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-12-13 04:23:08 +05:00
data_ret = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def killProcess(request):
try:
userID = request.session['userID']
try:
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson('status', 0)
data = json.loads(request.body)
pid = data['pid']
ProcessUtilities.executioner('sudo kill ' + pid)
proc = httpProc(request, None)
return proc.ajax(1, None)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-11-09 22:01:28 +05:00
final_dic = {'status': 0, 'erroMessage': str(msg)}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
2019-12-10 15:09:10 +05:00
except KeyError as msg:
2018-11-09 22:01:28 +05:00
final_dic = {'status': 0, 'erroMessage': str(msg)}
final_json = json.dumps(final_dic)
2020-04-29 20:08:08 +05:00
return HttpResponse(final_json)
def packageManager(request):
try:
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadError()
templateName = "serverStatus/packageManager.html"
proc = httpProc(request, templateName)
return proc.renderPre()
except KeyError as msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg) + "[packageManager]")
2020-04-30 18:18:48 +05:00
return redirect(loadLoginPage)
def fetchPackages(request):
try:
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadError()
data = json.loads(request.body)
2020-05-02 17:51:01 +05:00
page = int(str(data['page']).rstrip('\n'))
2020-04-30 18:18:48 +05:00
recordsToShow = int(data['recordsToShow'])
type = data['type']
2020-04-30 18:18:48 +05:00
2020-05-15 01:07:04 +05:00
if ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu or ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu20:
2020-05-05 17:47:11 +05:00
command = 'apt-mark showhold'
locked = ProcessUtilities.outputExecutioner(command).split('\n')
2020-05-05 18:03:19 +05:00
if type == 'CyberPanel':
2020-05-05 18:03:19 +05:00
command = 'cat /usr/local/CyberCP/AllCPUbuntu.json'
packages = json.loads(ProcessUtilities.outputExecutioner(command))
2020-05-05 18:03:19 +05:00
else:
command = 'apt list --installed'
packages = ProcessUtilities.outputExecutioner(command).split('\n')
packages = packages[4:]
upgradePackages = []
if type == 'upgrade':
for pack in packages:
if pack.find('upgradable') > -1:
upgradePackages.append(pack)
2020-04-30 18:18:48 +05:00
2020-05-05 18:03:19 +05:00
packages = upgradePackages
2020-05-06 15:18:38 +05:00
2020-05-24 11:11:55 +01:00
elif ProcessUtilities.decideDistro() == ProcessUtilities.centos or ProcessUtilities.decideDistro() == ProcessUtilities.cent8:
2020-05-06 00:25:46 +05:00
2020-05-06 14:16:40 +05:00
### Check Package Lock status
if os.path.exists('/etc/yum.conf'):
yumConf = '/etc/yum.conf'
elif os.path.exists('/etc/yum/yum.conf'):
yumConf = '/etc/yum/yum.conf'
yumConfData = open(yumConf, 'r').read()
locked = []
if yumConfData.find('exclude') > -1:
data = open(yumConf, 'r').readlines()
for items in data:
if items.find('exclude') > -1:
locked = items.split('=')[1].rstrip('\n').split(' ')
break
2020-05-06 00:25:46 +05:00
if type == 'installed':
#### Cater for packages that need updates.
startForUpdate = 1
command = 'yum check-update'
updates = ProcessUtilities.outputExecutioner(command).split('\n')
for items in updates:
if items == '':
updates = updates[startForUpdate:]
break
else:
startForUpdate = startForUpdate + 1
## make list of packages that need update
updateNeeded = []
for items in updates:
updateNeeded.append(items.split(' ')[0])
###
command = 'yum list installed'
packages = ProcessUtilities.outputExecutioner(command).split('\n')
startFrom = 1
for items in packages:
if items.find('Installed Packages') > -1:
packages = packages[startFrom:]
break
else:
startFrom = startFrom + 1
elif type == 'upgrade':
#### Cater for packages that need updates.
startForUpdate = 1
command = 'yum check-update'
packages = ProcessUtilities.outputExecutioner(command).split('\n')
for items in packages:
if items == '':
packages = packages[startForUpdate:-1]
break
else:
startForUpdate = startForUpdate + 1
2020-05-06 15:18:38 +05:00
elif type == 'CyberPanel':
command = 'cat /usr/local/CyberCP/CPCent7repo.json'
packages = json.loads(ProcessUtilities.outputExecutioner(command))
2020-05-06 00:25:46 +05:00
## make list of packages that need update
2020-04-30 18:18:48 +05:00
#if os.path.exists(ProcessUtilities.debugPath):
# logging.CyberCPLogFileWriter.writeToFile('All packages: %s' % (str(packages)))
2020-04-30 18:18:48 +05:00
from s3Backups.s3Backups import S3Backups
pagination = S3Backups.getPagination(len(packages), recordsToShow)
endPageNumber, finalPageNumber = S3Backups.recordsPointer(page, recordsToShow)
finalPackages = packages[finalPageNumber:endPageNumber]
json_data = "["
checker = 0
2020-05-02 17:51:01 +05:00
counter = 0
2020-04-30 18:18:48 +05:00
if os.path.exists(ProcessUtilities.debugPath):
logging.CyberCPLogFileWriter.writeToFile('Final packages: %s' % (str(finalPackages)))
2020-05-01 23:05:04 +05:00
import re
2020-04-30 18:18:48 +05:00
for items in finalPackages:
2020-05-15 01:07:04 +05:00
if ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu or ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu20:
2020-05-06 00:25:46 +05:00
try:
if type == 'CyberPanel':
2020-05-06 00:25:46 +05:00
packageName = items['Package'].split('/')[0]
2020-05-06 00:25:46 +05:00
if packageName in locked:
lock = 1
else:
lock = 0
2020-05-06 00:25:46 +05:00
dic = {'package': packageName,
'version': items['Version'], 'lock': lock}
counter = counter + 1
if checker == 0:
json_data = json_data + json.dumps(dic)
checker = 1
else:
json_data = json_data + ',' + json.dumps(dic)
2020-05-05 17:47:11 +05:00
2020-05-05 18:03:19 +05:00
else:
2020-05-06 00:25:46 +05:00
nowSplitted = items.split('now')
2020-05-06 00:25:46 +05:00
upgrade = 'Not Needed'
if nowSplitted[1].split(' ')[3].find('upgradable') > -1:
current = nowSplitted[1].split(' ')
upgrade = '%s %s %s' % (current[3], current[4], current[5])
2020-05-05 18:03:19 +05:00
2020-05-06 00:25:46 +05:00
if nowSplitted[0].split('/')[0] in locked:
lock = 1
else:
lock = 0
2020-05-05 18:03:19 +05:00
2020-05-06 00:25:46 +05:00
dic = {'package': nowSplitted[0].split('/')[0], 'version': '%s %s' % (nowSplitted[1].split(' ')[1], nowSplitted[1].split(' ')[2]), 'upgrade': upgrade, 'lock': lock}
2020-05-05 18:03:19 +05:00
2020-05-06 00:25:46 +05:00
counter = counter + 1
if checker == 0:
json_data = json_data + json.dumps(dic)
checker = 1
else:
json_data = json_data + ',' + json.dumps(dic)
except BaseException as msg:
logging.CyberCPLogFileWriter.writeToFile('[ERROR] %s. [fetchPackages:773]' % (str(msg)))
2020-05-24 11:11:55 +01:00
elif ProcessUtilities.decideDistro() == ProcessUtilities.centos or ProcessUtilities.decideDistro() == ProcessUtilities.cent8:
2020-05-06 00:25:46 +05:00
try:
if type == 'installed' or type == 'upgrade':
2020-05-06 14:16:40 +05:00
###
2020-05-06 00:25:46 +05:00
details = items.split(' ')
details = [a for a in details if a != '']
if type == 'installed':
if details[0] in updateNeeded:
upgrade = 'Upgrade available'
else:
upgrade = 'Not needed.'
else:
upgrade = 'Upgrade available'
2020-05-05 18:03:19 +05:00
2020-05-06 14:16:40 +05:00
if details[0].split('.')[0] in locked:
lock = 1
else:
lock = 0
2020-05-06 00:25:46 +05:00
dic = {'package': details[0],
'version': details[1],
2020-05-06 14:16:40 +05:00
'upgrade': upgrade, 'lock': lock}
2020-05-05 18:03:19 +05:00
2020-05-06 00:25:46 +05:00
counter = counter + 1
if checker == 0:
json_data = json_data + json.dumps(dic)
checker = 1
else:
json_data = json_data + ',' + json.dumps(dic)
2020-05-06 15:18:38 +05:00
elif type == 'CyberPanel':
packageName = items['Package']
if packageName.split('.')[0] in locked:
lock = 1
else:
lock = 0
dic = {'package': packageName,
'version': items['Version'], 'lock': lock}
counter = counter + 1
if checker == 0:
json_data = json_data + json.dumps(dic)
checker = 1
else:
json_data = json_data + ',' + json.dumps(dic)
2020-05-06 00:25:46 +05:00
except BaseException as msg:
2020-05-06 14:16:40 +05:00
print(str(msg))
2020-05-06 00:25:46 +05:00
logging.CyberCPLogFileWriter.writeToFile('[ERROR] %s. [fetchPackages:839]' % (str(msg)))
2020-04-30 18:18:48 +05:00
json_data = json_data + ']'
2020-05-02 17:51:01 +05:00
data_ret = {'status': 1, 'packages': json_data, 'pagination': pagination, 'fetchedPackages': counter, 'totalPackages': len(packages)}
2020-04-30 18:18:48 +05:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2020-05-04 00:52:34 +05:00
except BaseException as msg:
data_ret = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def fetchPackageDetails(request):
try:
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadError()
data = json.loads(request.body)
package = data['package']
2020-05-15 01:07:04 +05:00
if ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu or ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu20:
2020-05-04 00:52:34 +05:00
command = 'apt-cache show %s' % (package)
packageDetails = ProcessUtilities.outputExecutioner(command)
2020-05-24 11:11:55 +01:00
elif ProcessUtilities.decideDistro() == ProcessUtilities.centos or ProcessUtilities.decideDistro() == ProcessUtilities.cent8:
2020-05-06 00:25:46 +05:00
command = 'yum info %s' % (package)
packageDetails = ProcessUtilities.outputExecutioner(command)
2020-05-04 00:52:34 +05:00
data_ret = {'status': 1, 'packageDetails': packageDetails}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2020-05-04 13:36:27 +05:00
except BaseException as msg:
data_ret = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def updatePackage(request):
try:
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadError()
data = json.loads(request.body)
package = data['package']
from serverStatus.serverStatusUtil import ServerStatusUtil
logging.CyberCPLogFileWriter.statusWriter(ServerStatusUtil.lswsInstallStatusPath,
'Starting package(s) upgrade..',
1)
extraArgs = {}
extraArgs['package'] = package
from plogical.applicationInstaller import ApplicationInstaller
background = ApplicationInstaller('updatePackage', extraArgs)
background.start()
time.sleep(2)
data_ret = {'status': 1}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2020-05-05 17:47:11 +05:00
except BaseException as msg:
data_ret = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def lockStatus(request):
try:
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadError()
data = json.loads(request.body)
package = data['package']
type = data['type']
2020-05-15 01:07:04 +05:00
if ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu or ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu20:
2020-05-05 17:47:11 +05:00
if type == 0:
command = 'apt-mark unhold %s' % (package)
ProcessUtilities.executioner(command)
else:
command = 'apt-mark hold %s' % (package)
ProcessUtilities.executioner(command)
2020-05-24 11:11:55 +01:00
elif ProcessUtilities.decideDistro() == ProcessUtilities.centos or ProcessUtilities.decideDistro() == ProcessUtilities.cent8:
2020-05-06 14:16:40 +05:00
package = package.split('.')[0]
if os.path.exists('/etc/yum.conf'):
yumConf = '/etc/yum.conf'
elif os.path.exists('/etc/yum/yum.conf'):
yumConf = '/etc/yum/yum.conf'
2020-05-26 17:32:52 +05:00
yumConfData = ProcessUtilities.outputExecutioner('cat %s' % (yumConf))
data = yumConfData.splitlines()
2020-05-06 14:16:40 +05:00
2020-05-26 17:32:52 +05:00
yumConfTmp = '/home/cyberpanel/yumTemp'
2020-05-06 14:16:40 +05:00
if type == 0:
2020-05-26 17:32:52 +05:00
writeToFile = open(yumConfTmp, 'w')
2020-05-06 14:16:40 +05:00
for items in data:
if items.find('exclude') > -1:
writeToFile.writelines(items.replace(package, ''))
else:
writeToFile.writelines(items)
writeToFile.close()
else:
if yumConfData.find('exclude') == -1:
2020-05-26 17:32:52 +05:00
writeToFile = open(yumConfTmp, 'a')
2020-05-06 14:16:40 +05:00
writeToFile.writelines('exclude=%s\n' % (package))
writeToFile.close()
else:
2020-05-26 17:32:52 +05:00
writeToFile = open(yumConfTmp, 'w')
2020-05-06 14:16:40 +05:00
for items in data:
if items.find('exclude') > -1:
excludeLine = items.strip('\n')
writeToFile.writelines('%s %s\n' % (excludeLine, package))
else:
writeToFile.writelines(items)
writeToFile.close()
2020-05-26 17:32:52 +05:00
command = 'mv %s %s' % (yumConfTmp, yumConf)
ProcessUtilities.executioner(command)
2020-05-05 17:47:11 +05:00
data_ret = {'status': 1}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException as msg:
data_ret = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def CyberPanelPort(request):
try:
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadError()
port = ProcessUtilities.fetchCurrentPort()
return render(request, 'serverStatus/changeCyberPanelPort.html', {'port': port})
except KeyError as msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg) + "[CyberPanelPort]")
return redirect(loadLoginPage)
def submitPortChange(request):
try:
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadError()
data = json.loads(request.body)
port = data['port']
## First Add Port to available firewall
from plogical.firewallUtilities import FirewallUtilities
from firewall.firewallManager import FirewallManager
from firewall.models import FirewallRules
csfPath = '/etc/csf'
if os.path.exists(csfPath):
fm = FirewallManager(request)
dataIn = {'protocol': 'TCP_IN', 'ports': port}
fm.modifyPorts(dataIn)
dataIn = {'protocol': 'TCP_OUT', 'ports': port}
fm.modifyPorts(dataIn)
else:
try:
updateFW = FirewallRules.objects.get(name="CPCustomPort")
FirewallUtilities.deleteRule("tcp", updateFW.port, "0.0.0.0/0")
updateFW.port = port
updateFW.save()
FirewallUtilities.addRule('tcp', port, "0.0.0.0/0")
except:
try:
newFireWallRule = FirewallRules(name="SSHCustom", port=port, proto="tcp")
newFireWallRule.save()
FirewallUtilities.addRule('tcp', port, "0.0.0.0/0")
command = 'firewall-cmd --permanent --remove-service=ssh'
ProcessUtilities.executioner(command)
except BaseException as msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg))
command = "echo '*:%s' > /usr/local/lscp/conf/bind.conf" % (port)
ProcessUtilities.executioner(command)
ProcessUtilities.executioner('systemctl restart lscpd')
data_ret = {'status': 1,}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2020-04-30 18:18:48 +05:00
except BaseException as msg:
data_ret = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)