mirror of
				https://github.com/usmannasir/cyberpanel.git
				synced 2025-10-31 02:15:55 +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) |