mirror of
https://github.com/usmannasir/cyberpanel.git
synced 2025-10-26 07:46:35 +01:00
357 lines
11 KiB
Python
357 lines
11 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
from django.shortcuts import redirect, HttpResponse
|
|
from loginSystem.views import loadLoginPage
|
|
from plogical.acl import ACLManager
|
|
from .CLManagerMain import CLManagerMain
|
|
import json
|
|
from websiteFunctions.models import Websites
|
|
from plogical.processUtilities import ProcessUtilities
|
|
import os
|
|
from packages.models import Package
|
|
from .models import CLPackages
|
|
import subprocess
|
|
import multiprocessing
|
|
import pwd
|
|
from plogical.CyberCPLogFileWriter import CyberCPLogFileWriter as logging
|
|
# Create your views here.
|
|
|
|
def CageFS(request):
|
|
try:
|
|
templateName = 'CLManager/listWebsites.html'
|
|
c = CLManagerMain(request, templateName)
|
|
return c.renderC()
|
|
except KeyError:
|
|
return redirect(loadLoginPage)
|
|
|
|
def submitCageFSInstall(request):
|
|
try:
|
|
|
|
userID = request.session['userID']
|
|
currentACL = ACLManager.loadedACL(userID)
|
|
|
|
if currentACL['admin'] == 1:
|
|
pass
|
|
else:
|
|
return ACLManager.loadErrorJson()
|
|
|
|
c = CLManagerMain(request, None, 'submitCageFSInstall')
|
|
c.start()
|
|
|
|
data_ret = {'status': 1, 'error_message': 'None'}
|
|
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 getFurtherAccounts(request):
|
|
try:
|
|
userID = request.session['userID']
|
|
wm = CLManagerMain()
|
|
return wm.getFurtherAccounts(userID, json.loads(request.body))
|
|
except KeyError:
|
|
return redirect(loadLoginPage)
|
|
|
|
def enableOrDisable(request):
|
|
try:
|
|
|
|
userID = request.session['userID']
|
|
currentACL = ACLManager.loadedACL(userID)
|
|
|
|
if currentACL['admin'] == 1:
|
|
pass
|
|
else:
|
|
return ACLManager.loadErrorJson()
|
|
|
|
data = json.loads(request.body)
|
|
|
|
if data['toggle'] == 1:
|
|
cageFSPath = '/home/cyberpanel/cagefs'
|
|
if os.path.exists(cageFSPath):
|
|
os.remove(cageFSPath)
|
|
else:
|
|
writeToFile = open(cageFSPath, 'w')
|
|
writeToFile.writelines('enable')
|
|
writeToFile.close()
|
|
|
|
data_ret = {'status': 1, 'error_message': 'None', 'success': 'Default status successfully changed changed.'}
|
|
json_data = json.dumps(data_ret)
|
|
return HttpResponse(json_data)
|
|
|
|
if data['all'] == 0:
|
|
if data['mode'] == 1:
|
|
website = Websites.objects.get(domain=data['domain'])
|
|
command = '/usr/sbin/cagefsctl --enable %s' % (website.externalApp)
|
|
else:
|
|
website = Websites.objects.get(domain=data['domain'])
|
|
command = '/usr/sbin/cagefsctl --disable %s' % (website.externalApp)
|
|
|
|
ProcessUtilities.executioner(command)
|
|
data_ret = {'status': 1, 'error_message': 'None', 'success': 'Changes successfully applied.'}
|
|
json_data = json.dumps(data_ret)
|
|
return HttpResponse(json_data)
|
|
else:
|
|
c = CLManagerMain(request, None, 'enableOrDisable', data)
|
|
c.start()
|
|
|
|
data_ret = {'status': 1, 'error_message': 'None', 'success': 'Job started in background, refresh in few seconds to see the status.'}
|
|
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 CreatePackage(request):
|
|
try:
|
|
userID = request.session['userID']
|
|
currentACL = ACLManager.loadedACL(userID)
|
|
templateName = 'CLManager/createPackage.html'
|
|
packageList = ACLManager.loadPackages(userID, currentACL)
|
|
data = {}
|
|
data['packList'] = packageList
|
|
c = CLManagerMain(request, templateName, None, data)
|
|
return c.renderC()
|
|
except KeyError:
|
|
return redirect(loadLoginPage)
|
|
|
|
def submitCreatePackage(request):
|
|
try:
|
|
|
|
userID = request.session['userID']
|
|
currentACL = ACLManager.loadedACL(userID)
|
|
|
|
if currentACL['admin'] == 1:
|
|
pass
|
|
else:
|
|
return ACLManager.loadErrorJson()
|
|
|
|
data = json.loads(request.body)
|
|
|
|
selectedPackage = data['selectedPackage']
|
|
|
|
package = Package.objects.get(packageName=selectedPackage)
|
|
|
|
if package.clpackages_set.all().count() == 1:
|
|
data_ret = {'status': 0, 'error_message': 'This package already have one associated CloudLinux Package.'}
|
|
json_data = json.dumps(data_ret)
|
|
return HttpResponse(json_data)
|
|
|
|
name = data['name']
|
|
SPEED = data['SPEED']
|
|
VMEM = data['VMEM']
|
|
PMEM = data['PMEM']
|
|
IO = data['IO']
|
|
IOPS = data['IOPS']
|
|
EP = data['EP']
|
|
NPROC = data['NPROC']
|
|
INODESsoft = data['INODESsoft']
|
|
INODEShard = data['INODEShard']
|
|
|
|
clPackage = CLPackages(name=name, owner=package, speed=SPEED, vmem=VMEM, pmem=PMEM, io=IO, iops=IOPS, ep=EP, nproc=NPROC, inodessoft=INODESsoft, inodeshard=INODEShard)
|
|
clPackage.save()
|
|
|
|
command = 'sudo lvectl package-set %s --speed=%s --pmem=%s --io=%s --nproc=%s --iops=%s --vmem=%s --ep=%s' % (name, SPEED, PMEM, IO, NPROC, IOPS, VMEM, EP)
|
|
ProcessUtilities.executioner(command)
|
|
|
|
command = 'sudo lvectl apply all'
|
|
ProcessUtilities.popenExecutioner(command)
|
|
|
|
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 listPackages(request):
|
|
try:
|
|
templateName = 'CLManager/listPackages.html'
|
|
c = CLManagerMain(request, templateName)
|
|
return c.renderC()
|
|
except KeyError:
|
|
return redirect(loadLoginPage)
|
|
|
|
def fetchPackages(request):
|
|
try:
|
|
userID = request.session['userID']
|
|
wm = CLManagerMain()
|
|
return wm.fetchPackages(ACLManager.loadedACL(userID))
|
|
except KeyError:
|
|
return redirect(loadLoginPage)
|
|
|
|
def deleteCLPackage(request):
|
|
try:
|
|
|
|
userID = request.session['userID']
|
|
currentACL = ACLManager.loadedACL(userID)
|
|
|
|
if currentACL['admin'] == 1:
|
|
pass
|
|
else:
|
|
return ACLManager.loadErrorJson()
|
|
|
|
data = json.loads(request.body)
|
|
|
|
name = data['name']
|
|
|
|
clPackage = CLPackages.objects.get(name=name)
|
|
clPackage.delete()
|
|
|
|
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 saveSettings(request):
|
|
try:
|
|
|
|
userID = request.session['userID']
|
|
currentACL = ACLManager.loadedACL(userID)
|
|
|
|
if currentACL['admin'] == 1:
|
|
pass
|
|
else:
|
|
return ACLManager.loadErrorJson()
|
|
|
|
data = json.loads(request.body)
|
|
|
|
name = data['name']
|
|
SPEED = data['SPEED']
|
|
VMEM = data['VMEM']
|
|
PMEM = data['PMEM']
|
|
IO = data['IO']
|
|
IOPS = data['IOPS']
|
|
EP = data['EP']
|
|
NPROC = data['NPROC']
|
|
INODESsoft = data['INODESsoft']
|
|
INODEShard = data['INODEShard']
|
|
|
|
clPackage = CLPackages.objects.get(name=name)
|
|
clPackage.speed = SPEED
|
|
clPackage.vmem = VMEM
|
|
clPackage.pmem = PMEM
|
|
clPackage.io = IO
|
|
clPackage.iops = IOPS
|
|
clPackage.ep = EP
|
|
clPackage.nproc = NPROC
|
|
clPackage.inodessoft = INODESsoft
|
|
clPackage.inodeshard = INODEShard
|
|
clPackage.save()
|
|
|
|
command = 'sudo lvectl package-set %s --speed=%s --pmem=%s --io=%s --nproc=%s --iops=%s --vmem=%s --ep=%s' % (
|
|
name, SPEED, PMEM, IO, NPROC, IOPS, VMEM, EP)
|
|
ProcessUtilities.executioner(command)
|
|
|
|
command = 'sudo lvectl apply all'
|
|
ProcessUtilities.popenExecutioner(command)
|
|
|
|
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 monitorUsage(request):
|
|
try:
|
|
templateName = 'CLManager/monitorUsage.html'
|
|
c = CLManagerMain(request, templateName)
|
|
return c.renderC()
|
|
except KeyError:
|
|
return redirect(loadLoginPage)
|
|
|
|
def websiteContainerLimit(request, domain):
|
|
try:
|
|
templateName = 'CLManager/websiteContainerLimit.html'
|
|
data = {}
|
|
data['domain'] = domain
|
|
c = CLManagerMain(request, templateName, None, data)
|
|
return c.renderC()
|
|
except KeyError:
|
|
return redirect(loadLoginPage)
|
|
|
|
def getUsageData(request):
|
|
try:
|
|
|
|
userID = request.session['userID']
|
|
currentACL = ACLManager.loadedACL(userID)
|
|
|
|
if currentACL['admin'] == 1:
|
|
pass
|
|
else:
|
|
return ACLManager.loadErrorJson()
|
|
|
|
data = json.loads(request.body)
|
|
domain = data['domain']
|
|
website = Websites.objects.get(domain=domain)
|
|
uid = pwd.getpwnam(website.externalApp).pw_uid
|
|
|
|
try:
|
|
type = data['type']
|
|
finalData = {}
|
|
finalData['status'] = 1
|
|
|
|
try:
|
|
if type == 'memory':
|
|
|
|
command = 'sudo lveps -o id:10,mem:10'
|
|
output = ProcessUtilities.outputExecutioner(command).splitlines()
|
|
for items in output:
|
|
if items.find(website.externalApp) > -1:
|
|
finalData['memory'] = int(items.split(' ')[-1])
|
|
break
|
|
|
|
elif type == 'io':
|
|
|
|
finalData['readRate'] = 0
|
|
finalData['writeRate'] = 0
|
|
|
|
command = 'sudo lveps -o id:10,iops:10'
|
|
output = ProcessUtilities.outputExecutioner(command).splitlines()
|
|
for items in output:
|
|
if items.find(website.externalApp) > -1:
|
|
finalData['readRate'] = int(items.split(' ')[-1])
|
|
break
|
|
|
|
except:
|
|
finalData['memory'] = '0'
|
|
finalData['readRate'] = 0
|
|
finalData['writeRate'] = 0
|
|
except:
|
|
|
|
finalData = {}
|
|
finalData['status'] = 1
|
|
|
|
command = 'sudo lveps -o id:10,cpu:10 -d'
|
|
output = ProcessUtilities.outputExecutioner(command).splitlines()
|
|
|
|
for items in output:
|
|
if items.find(website.externalApp) > -1:
|
|
finalData['cpu'] = int(items.split(' ')[-1].rstrip('%'))
|
|
break
|
|
|
|
final_json = json.dumps(finalData)
|
|
return HttpResponse(final_json)
|
|
|
|
except BaseException as msg:
|
|
data_ret = {'status': 0, 'error_message': str(msg), 'cpu': 0, 'memory':0}
|
|
json_data = json.dumps(data_ret)
|
|
return HttpResponse(json_data) |