Added Services Page, Bug fix to Website Creation!
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 1.3 KiB |
@@ -618,6 +618,7 @@
|
||||
|
||||
<li><a href="{% url 'litespeedStatus' %}" title="{% trans 'LiteSpeed Status' %}"><span>{% trans "LiteSpeed Status" %}</span></a></li>
|
||||
<li><a href="{% url 'cyberCPMainLogFile' %}" title="{% trans 'CyberPanel Main Log File' %}"><span>{% trans "CyberPanel Main Log File" %}</span></a></li>
|
||||
<li><a href="{% url 'services' %}" title="{% trans 'Services Status' %}"><span>{% trans "Services Status" %}</span></a></li>
|
||||
|
||||
|
||||
</ul>
|
||||
|
||||
1
cyberpanel.min.js
vendored
Normal file
@@ -277,6 +277,7 @@ app.controller('deleteDatabase', function($scope,$http) {
|
||||
|
||||
|
||||
});
|
||||
|
||||
/* Java script code to delete database ends here */
|
||||
|
||||
|
||||
|
||||
@@ -681,7 +681,7 @@ class preFlightsChecks:
|
||||
cmd = []
|
||||
|
||||
cmd.append("wget")
|
||||
cmd.append("http://cyberpanel.net/CyberPanel.1.6.0.tar.gz")
|
||||
cmd.append("http://cyberpanel.net/CyberPanelTemp.tar.gz")
|
||||
|
||||
res = subprocess.call(cmd)
|
||||
|
||||
@@ -700,7 +700,7 @@ class preFlightsChecks:
|
||||
|
||||
cmd.append("tar")
|
||||
cmd.append("zxf")
|
||||
cmd.append("CyberPanel.1.6.0.tar.gz")
|
||||
cmd.append("CyberPanelTemp.tar.gz")
|
||||
|
||||
res = subprocess.call(cmd)
|
||||
|
||||
|
||||
BIN
serverStatus/static/images/litespeed.png
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
serverStatus/static/images/mariadb.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
serverStatus/static/images/powerdns.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
serverStatus/static/images/pureftpd.png
Normal file
|
After Width: | Height: | Size: 47 KiB |
@@ -277,3 +277,164 @@ app.controller('readCyberCPLogFile', function($scope,$http) {
|
||||
|
||||
|
||||
/* Java script code to read log file ends here */
|
||||
|
||||
|
||||
/* Java script code to read log file ends here */
|
||||
|
||||
/* Services */
|
||||
|
||||
app.controller('servicesManager', function($scope,$http) {
|
||||
|
||||
$scope.services = false;
|
||||
$scope.btnDisable = false;
|
||||
$scope.actionLoader = false;
|
||||
|
||||
function getServiceStatus(){
|
||||
$scope.btnDisable = true;
|
||||
|
||||
url = "/serverstatus/servicesStatus";
|
||||
|
||||
$http.post(url).then(ListInitialDatas, cantLoadInitialDatas);
|
||||
|
||||
|
||||
function ListInitialDatas(response) {
|
||||
|
||||
if (response.data.status.litespeed) {
|
||||
$scope.olsStatus = "Running";
|
||||
$scope.olsStats = true;
|
||||
$scope.olsStart = false;
|
||||
$scope.olsStop = true;
|
||||
$scope.olsMem = Math.round(parseInt(response.data.memUsage.litespeed) / 1048576) + " MB";
|
||||
}
|
||||
else {
|
||||
$scope.olsStatus = "Stopped";
|
||||
$scope.olsStats = false;
|
||||
$scope.olsStart = true;
|
||||
$scope.olsStop = false;
|
||||
}
|
||||
|
||||
// Update SQL stats
|
||||
|
||||
if (response.data.status.mysql) {
|
||||
$scope.sqlStatus = "Running";
|
||||
$scope.sqlStats = true;
|
||||
$scope.sqlStart = false;
|
||||
$scope.sqlStop = true;
|
||||
$scope.sqlMem = Math.round(parseInt(response.data.memUsage.mysql) / 1048576) + " MB";
|
||||
}
|
||||
else {
|
||||
$scope.sqlStatus = "Stopped";
|
||||
$scope.sqlStats = false;
|
||||
$scope.sqlStart = true;
|
||||
$scope.sqlStop = false;
|
||||
}
|
||||
|
||||
// Update DNS stats
|
||||
|
||||
if (response.data.status.powerdns) {
|
||||
$scope.dnsStatus = "Running";
|
||||
$scope.dnsStats = true;
|
||||
$scope.dnsStart = false;
|
||||
$scope.dnsStop = true;
|
||||
$scope.dnsMem = Math.round(parseInt(response.data.memUsage.powerdns) / 1048576) + " MB";
|
||||
}
|
||||
else {
|
||||
$scope.dnsStatus = "Stopped";
|
||||
$scope.dnsStats = false;
|
||||
$scope.dnsStart = true;
|
||||
$scope.dnsStop = false;
|
||||
}
|
||||
|
||||
// Update FTP stats
|
||||
|
||||
if (response.data.status.pureftp) {
|
||||
$scope.ftpStatus = "Running";
|
||||
$scope.ftpStats = true;
|
||||
$scope.ftpStart = false;
|
||||
$scope.ftpStop = true;
|
||||
$scope.ftpMem = Math.round(parseInt(response.data.memUsage.pureftp) / 1048576) + " MB";
|
||||
}
|
||||
else {
|
||||
$scope.ftpStatus = "Stopped";
|
||||
$scope.ftpStats = false;
|
||||
$scope.ftpStart = true;
|
||||
$scope.ftpStop = false;
|
||||
}
|
||||
|
||||
$scope.services = true;
|
||||
|
||||
$scope.btnDisable = false;
|
||||
|
||||
}
|
||||
function cantLoadInitialDatas(response) {
|
||||
$scope.couldNotConnect = true;
|
||||
|
||||
}
|
||||
|
||||
};
|
||||
getServiceStatus();
|
||||
|
||||
$scope.serviceAction = function(serviceName, action){
|
||||
$scope.ActionProgress = true;
|
||||
$scope.btnDisable = true;
|
||||
$scope.ActionSuccessfull = false;
|
||||
$scope.ActionFailed = false;
|
||||
$scope.couldNotConnect = false;
|
||||
$scope.actionLoader = true;
|
||||
|
||||
url = "/serverstatus/servicesAction";
|
||||
|
||||
var data = {
|
||||
service:serviceName,
|
||||
action:action
|
||||
};
|
||||
|
||||
var config = {
|
||||
headers : {
|
||||
'X-CSRFToken': getCookie('csrftoken')
|
||||
}
|
||||
};
|
||||
|
||||
$http.post(url, data,config).then(ListInitialDatas, cantLoadInitialDatas);
|
||||
|
||||
function ListInitialDatas(response) {
|
||||
console.log(response.data);
|
||||
|
||||
if(response.data.serviceAction == 1){
|
||||
setTimeout(function() {
|
||||
getServiceStatus();
|
||||
setTimeout(function() {
|
||||
$scope.ActionSuccessfull = true;
|
||||
$scope.ActionFailed = false;
|
||||
$scope.couldNotConnect = false;
|
||||
$scope.actionLoader = false;
|
||||
$scope.btnDisable = false;
|
||||
},1000)
|
||||
}, 3000);
|
||||
}
|
||||
else{
|
||||
setTimeout(function() {
|
||||
getServiceStatus();
|
||||
setTimeout(function() {
|
||||
$scope.ActionSuccessfull = false;
|
||||
$scope.ActionFailed = true;
|
||||
$scope.couldNotConnect = false;
|
||||
$scope.actionLoader = false;
|
||||
$scope.btnDisable = false;
|
||||
},1000)
|
||||
}, 5000);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
function cantLoadInitialDatas(response) {
|
||||
$scope.ActionSuccessfull = false;
|
||||
$scope.ActionFailed = false;
|
||||
$scope.couldNotConnect = true;
|
||||
$scope.actionLoader = false;
|
||||
$scope.btnDisable = false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
145
serverStatus/templates/serverStatus/services.html
Normal file
@@ -0,0 +1,145 @@
|
||||
{% extends "baseTemplate/index.html" %}
|
||||
{% load i18n %}
|
||||
{% block title %}{% trans "Services - CyberPanel" %}{% endblock %}
|
||||
{% block content %}
|
||||
|
||||
{% load static %}
|
||||
{% get_current_language as LANGUAGE_CODE %}
|
||||
<!-- Current language: {{ LANGUAGE_CODE }} -->
|
||||
|
||||
|
||||
<style>
|
||||
.serviceImg { text-align:center; }
|
||||
.serviceImg img { bottom: 63px; width: 100px; margin-top: -65px; background: white; padding: 10px; height: 100px;}
|
||||
.service-panel { margin-top: 63px; border: 0; background: #38b4bf; }
|
||||
.service-panel .panel-body { height: 188px; }
|
||||
.serviceDetails { color: white; text-align:center; margin-top: 15px;}
|
||||
.serviceActionBtn { margin: 10px; }
|
||||
</style>
|
||||
|
||||
<div ng-controller="servicesManager" class="container">
|
||||
|
||||
<div id="page-title">
|
||||
<h2>Services <img ng-show="actionLoader" src="/static/images/loading.gif"></h2>
|
||||
|
||||
<p>Show stats for services and actions (Start, Stop, Restart)</p>
|
||||
</div>
|
||||
|
||||
<div >
|
||||
<div class="row">
|
||||
<div class="col-sm-6 col-md-6">
|
||||
<div class="panel panel-default service-panel">
|
||||
<div class="panel-body">
|
||||
<div class="serviceImg">
|
||||
<img src="{% static 'images/litespeed.png' %}" alt="OpenLitespeed" class="img-circle">
|
||||
</div>
|
||||
<div class="serviceDetails">
|
||||
<div class="serviceHeading">
|
||||
<h5><b>OpenLitespeed</b></h5>
|
||||
<span class="help-block" ng-bind="olsStatus">Stopped</span>
|
||||
</div>
|
||||
<div class="serviceActionBtn">
|
||||
<button type="button" class="btn btn-success" ng-disabled="btnDisable" ng-show="olsStart" ng-click="serviceAction('lsws','start')" data-toggle="tooltip" title="Start!"><i class="glyph-icon icon-play" aria-hidden="true"></i></button>
|
||||
<button type="button" class="btn btn-warning" ng-disabled="btnDisable" ng-show="olsStop" ng-click="serviceAction('lsws','stop')" data-toggle="tooltip" title="Stop!"><i class="glyph-icon icon-pause" aria-hidden="true"></i></button>
|
||||
<button type="button" class="btn btn-default" ng-disabled="btnDisable" ng-click="serviceAction('lsws','restart')" data-toggle="tooltip" title="Restart!"><i class="glyph-icon icon-refresh" aria-hidden="true"></i></button>
|
||||
</div>
|
||||
<div ng-show="olsStats">
|
||||
<p>Memory Usage: <span ng-bind="olsMem"></span></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-6 col-md-6">
|
||||
<div class="panel panel-default service-panel">
|
||||
<div class="panel-body">
|
||||
<div class="serviceImg">
|
||||
<img src="{% static 'images/mariadb.png' %}" alt="MariaDB" class="img-circle">
|
||||
</div>
|
||||
<div class="serviceDetails">
|
||||
<div class="serviceHeading">
|
||||
<h5><b>MariaDB</b></h5>
|
||||
<span class="help-block" ng-bind="sqlStatus">Stopped</span>
|
||||
</div>
|
||||
<div class="serviceActionBtn">
|
||||
<button type="button" class="btn btn-success" ng-disabled="btnDisable" ng-show="sqlStart" ng-click="serviceAction('mysql','start')" data-toggle="tooltip" title="Start!"><i class="glyph-icon icon-play" aria-hidden="true"></i></button>
|
||||
<button type="button" class="btn btn-warning" ng-disabled="btnDisable" ng-show="sqlStop" ng-click="serviceAction('mysql','stop')" data-toggle="tooltip" title="Stop!"><i class="glyph-icon icon-pause" aria-hidden="true"></i></button>
|
||||
<button type="button" class="btn btn-default" ng-disabled="btnDisable" ng-click="serviceAction('mysql','restart')" data-toggle="tooltip" title="Restart!"><i class="glyph-icon icon-refresh" aria-hidden="true"></i></button>
|
||||
</div>
|
||||
<div ng-show="sqlStats">
|
||||
<p>Memory Usage: <span ng-bind="sqlMem"></span></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="row">
|
||||
|
||||
<div class="col-sm-6 col-md-6">
|
||||
<div class="panel panel-default service-panel">
|
||||
<div class="panel-body">
|
||||
<div class="serviceImg">
|
||||
<img src="{% static 'images/powerdns.png' %}" alt="PowerDNS" class="img-circle">
|
||||
</div>
|
||||
<div class="serviceDetails">
|
||||
<div class="serviceHeading">
|
||||
<h5><b>PowerDNS</b></h5>
|
||||
<span class="help-block" ng-bind="dnsStatus">Stopped</span>
|
||||
</div>
|
||||
<div class="serviceActionBtn">
|
||||
<button type="button" class="btn btn-success" ng-disabled="btnDisable" ng-show="dnsStart" ng-click="serviceAction('pdns','start')" data-toggle="tooltip" title="Start!"><i class="glyph-icon icon-play" aria-hidden="true"></i></button>
|
||||
<button type="button" class="btn btn-warning" ng-disabled="btnDisable" ng-show="dnsStop" ng-click="serviceAction('pdns','stop')" data-toggle="tooltip" title="Stop!"><i class="glyph-icon icon-pause" aria-hidden="true"></i></button>
|
||||
<button type="button" class="btn btn-default" ng-disabled="btnDisable" ng-click="serviceAction('pdns','restart')" data-toggle="tooltip" title="Restart!"><i class="glyph-icon icon-refresh" aria-hidden="true"></i></button>
|
||||
</div>
|
||||
<div ng-show="dnsStats">
|
||||
<p>Memory Usage: <span ng-bind="dnsMem"></span></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-6 col-md-6">
|
||||
<div class="panel panel-default service-panel">
|
||||
<div class="panel-body">
|
||||
<div class="serviceImg">
|
||||
<img src="{% static 'images/pureftpd.png' %}" alt="PureFTPd" class="img-circle">
|
||||
</div>
|
||||
<div class="serviceDetails">
|
||||
<div class="serviceHeading">
|
||||
<h5><b>PureFTPd</b></h5>
|
||||
<span class="help-block" ng-bind="dnsStatus">Stopped</span>
|
||||
</div>
|
||||
<div class="serviceActionBtn">
|
||||
<button type="button" class="btn btn-success" ng-disabled="btnDisable" ng-show="ftpStart" ng-click="serviceAction('pure-ftpd','start')" data-toggle="tooltip" title="Start!"><i class="glyph-icon icon-play" aria-hidden="true"></i></button>
|
||||
<button type="button" class="btn btn-warning" ng-disabled="btnDisable" ng-show="ftpStop" ng-click="serviceAction('pure-ftpd','stop')" data-toggle="tooltip" title="Stop!"><i class="glyph-icon icon-pause" aria-hidden="true"></i></button>
|
||||
<button type="button" class="btn btn-default" ng-disabled="btnDisable" ng-click="serviceAction('pure-ftpd','restart')" data-toggle="tooltip" title="Restart!"><i class="glyph-icon icon-refresh" aria-hidden="true"></i></button>
|
||||
</div>
|
||||
<div ng-show="ftpStats">
|
||||
<p>Memory Usage: <span ng-bind="ftpMem"></span></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label"></label>
|
||||
<div class="col-sm-4">
|
||||
<div ng-show="ActionFailed" class="alert alert-danger">
|
||||
<p class="ng-binding">Action Failed</p>
|
||||
</div>
|
||||
<div ng-show="ActionSuccessfull" class="alert alert-success ng-hide">
|
||||
<p class="ng-binding">Action Completed</p>
|
||||
</div>
|
||||
<div ng-show="couldNotConnect" class="alert alert-danger ng-hide">
|
||||
<p>Could not connect to server. Please refresh this page.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
{% endblock %}
|
||||
@@ -8,6 +8,8 @@ urlpatterns = [
|
||||
url(r'^cyberCPMainLogFile', views.cyberCPMainLogFile, name='cyberCPMainLogFile'),
|
||||
url(r'^getFurtherDataFromLogFile',views.getFurtherDataFromLogFile,name='getFurtherDataFromLogFile'),
|
||||
|
||||
|
||||
url(r'^servicesStatus', views.servicesStatus, name='servicesStatus'),
|
||||
url(r'^servicesAction', views.servicesAction, name='servicesAction'),
|
||||
url(r'^services', views.services, name='services'),
|
||||
|
||||
]
|
||||
@@ -9,6 +9,9 @@ from loginSystem.views import loadLoginPage
|
||||
import json
|
||||
import subprocess
|
||||
from loginSystem.models import Administrator
|
||||
import psutil
|
||||
import shlex
|
||||
import socket
|
||||
# Create your views here.
|
||||
|
||||
|
||||
@@ -150,3 +153,168 @@ def getFurtherDataFromLogFile(request):
|
||||
status = {"logstatus":0,"error":"Could not fetch data from log file, please see CyberCP main log file through command line."}
|
||||
logging.CyberCPLogFileWriter.writeToFile(str(msg) + "[getFurtherDataFromLogFile]")
|
||||
return HttpResponse("Not Logged in as admin")
|
||||
|
||||
|
||||
def services(request):
|
||||
try:
|
||||
userID = request.session['userID']
|
||||
|
||||
admin = Administrator.objects.get(pk=userID)
|
||||
|
||||
if admin.type == 3:
|
||||
return HttpResponse("You don't have enough priviliges to access this page.")
|
||||
|
||||
return render(request, 'serverStatus/services.html')
|
||||
except KeyError:
|
||||
return redirect(loadLoginPage)
|
||||
|
||||
|
||||
def servicesStatus(request):
|
||||
try:
|
||||
userID = request.session['userID']
|
||||
|
||||
admin = Administrator.objects.get(pk=userID)
|
||||
|
||||
if admin.type == 3:
|
||||
final = {'error': 1, "error_message": "Not enough privilege"}
|
||||
final_json = json.dumps(final)
|
||||
return HttpResponse(final_json)
|
||||
|
||||
lsStatus = []
|
||||
sqlStatus = []
|
||||
dnsStatus = []
|
||||
ftpStatus = []
|
||||
mailStatus = []
|
||||
|
||||
processlist = subprocess.check_output(['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)
|
||||
|
||||
# mysql status
|
||||
|
||||
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],
|
||||
'postfix': mailStatus[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:
|
||||
val = request.session['userID']
|
||||
|
||||
admin = Administrator.objects.get(pk=val)
|
||||
|
||||
if admin.type == 3:
|
||||
final = {'serviceAction': 0, "error_message": "Not enough privilege"}
|
||||
final_json = json.dumps(final)
|
||||
return HttpResponse(final_json)
|
||||
|
||||
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
|
||||
|
||||
if service not in ["lsws", "mysql", "pdns", "pure-ftpd"]:
|
||||
|
||||
final_dic = {'serviceAction': 0, "error_message": "Invalid Service"}
|
||||
final_json = json.dumps(final_dic)
|
||||
return HttpResponse(final_json)
|
||||
|
||||
else:
|
||||
|
||||
command = 'sudo systemctl %s %s' % (action, service)
|
||||
cmd = shlex.split(command)
|
||||
res = subprocess.call(cmd)
|
||||
|
||||
p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
|
||||
result = p.communicate()[0]
|
||||
|
||||
if res != 0:
|
||||
final_dic = {'serviceAction': 0, "error_message": "Error while performing action"}
|
||||
final_json = json.dumps(final_dic)
|
||||
return HttpResponse(final_json)
|
||||
else:
|
||||
final_dic = {'serviceAction': 1, "error_message": 0}
|
||||
final_json = json.dumps(final_dic)
|
||||
return HttpResponse(final_json)
|
||||
|
||||
except BaseException, msg:
|
||||
final_dic = {'serviceAction': 0, 'error_message': str(msg)}
|
||||
final_json = json.dumps(final_dic)
|
||||
return HttpResponse(final_json)
|
||||
except KeyError, msg:
|
||||
final_dic = {'serviceAction': 0, 'error_message': str(msg)}
|
||||
final_json = json.dumps(final_dic)
|
||||
return HttpResponse(final_json)
|
||||
|
||||
1
static/baseTemplate/assets/bootstrap/js/test.js
Normal file
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 1.3 KiB |
@@ -277,6 +277,7 @@ app.controller('deleteDatabase', function($scope,$http) {
|
||||
|
||||
|
||||
});
|
||||
|
||||
/* Java script code to delete database ends here */
|
||||
|
||||
|
||||
|
||||
BIN
static/images/litespeed.png
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
static/images/mariadb.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
static/images/powerdns.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
static/images/pureftpd.png
Normal file
|
After Width: | Height: | Size: 47 KiB |
@@ -277,3 +277,164 @@ app.controller('readCyberCPLogFile', function($scope,$http) {
|
||||
|
||||
|
||||
/* Java script code to read log file ends here */
|
||||
|
||||
|
||||
/* Java script code to read log file ends here */
|
||||
|
||||
/* Services */
|
||||
|
||||
app.controller('servicesManager', function($scope,$http) {
|
||||
|
||||
$scope.services = false;
|
||||
$scope.btnDisable = false;
|
||||
$scope.actionLoader = false;
|
||||
|
||||
function getServiceStatus(){
|
||||
$scope.btnDisable = true;
|
||||
|
||||
url = "/serverstatus/servicesStatus";
|
||||
|
||||
$http.post(url).then(ListInitialDatas, cantLoadInitialDatas);
|
||||
|
||||
|
||||
function ListInitialDatas(response) {
|
||||
|
||||
if (response.data.status.litespeed) {
|
||||
$scope.olsStatus = "Running";
|
||||
$scope.olsStats = true;
|
||||
$scope.olsStart = false;
|
||||
$scope.olsStop = true;
|
||||
$scope.olsMem = Math.round(parseInt(response.data.memUsage.litespeed) / 1048576) + " MB";
|
||||
}
|
||||
else {
|
||||
$scope.olsStatus = "Stopped";
|
||||
$scope.olsStats = false;
|
||||
$scope.olsStart = true;
|
||||
$scope.olsStop = false;
|
||||
}
|
||||
|
||||
// Update SQL stats
|
||||
|
||||
if (response.data.status.mysql) {
|
||||
$scope.sqlStatus = "Running";
|
||||
$scope.sqlStats = true;
|
||||
$scope.sqlStart = false;
|
||||
$scope.sqlStop = true;
|
||||
$scope.sqlMem = Math.round(parseInt(response.data.memUsage.mysql) / 1048576) + " MB";
|
||||
}
|
||||
else {
|
||||
$scope.sqlStatus = "Stopped";
|
||||
$scope.sqlStats = false;
|
||||
$scope.sqlStart = true;
|
||||
$scope.sqlStop = false;
|
||||
}
|
||||
|
||||
// Update DNS stats
|
||||
|
||||
if (response.data.status.powerdns) {
|
||||
$scope.dnsStatus = "Running";
|
||||
$scope.dnsStats = true;
|
||||
$scope.dnsStart = false;
|
||||
$scope.dnsStop = true;
|
||||
$scope.dnsMem = Math.round(parseInt(response.data.memUsage.powerdns) / 1048576) + " MB";
|
||||
}
|
||||
else {
|
||||
$scope.dnsStatus = "Stopped";
|
||||
$scope.dnsStats = false;
|
||||
$scope.dnsStart = true;
|
||||
$scope.dnsStop = false;
|
||||
}
|
||||
|
||||
// Update FTP stats
|
||||
|
||||
if (response.data.status.pureftp) {
|
||||
$scope.ftpStatus = "Running";
|
||||
$scope.ftpStats = true;
|
||||
$scope.ftpStart = false;
|
||||
$scope.ftpStop = true;
|
||||
$scope.ftpMem = Math.round(parseInt(response.data.memUsage.pureftp) / 1048576) + " MB";
|
||||
}
|
||||
else {
|
||||
$scope.ftpStatus = "Stopped";
|
||||
$scope.ftpStats = false;
|
||||
$scope.ftpStart = true;
|
||||
$scope.ftpStop = false;
|
||||
}
|
||||
|
||||
$scope.services = true;
|
||||
|
||||
$scope.btnDisable = false;
|
||||
|
||||
}
|
||||
function cantLoadInitialDatas(response) {
|
||||
$scope.couldNotConnect = true;
|
||||
|
||||
}
|
||||
|
||||
};
|
||||
getServiceStatus();
|
||||
|
||||
$scope.serviceAction = function(serviceName, action){
|
||||
$scope.ActionProgress = true;
|
||||
$scope.btnDisable = true;
|
||||
$scope.ActionSuccessfull = false;
|
||||
$scope.ActionFailed = false;
|
||||
$scope.couldNotConnect = false;
|
||||
$scope.actionLoader = true;
|
||||
|
||||
url = "/serverstatus/servicesAction";
|
||||
|
||||
var data = {
|
||||
service:serviceName,
|
||||
action:action
|
||||
};
|
||||
|
||||
var config = {
|
||||
headers : {
|
||||
'X-CSRFToken': getCookie('csrftoken')
|
||||
}
|
||||
};
|
||||
|
||||
$http.post(url, data,config).then(ListInitialDatas, cantLoadInitialDatas);
|
||||
|
||||
function ListInitialDatas(response) {
|
||||
console.log(response.data);
|
||||
|
||||
if(response.data.serviceAction == 1){
|
||||
setTimeout(function() {
|
||||
getServiceStatus();
|
||||
setTimeout(function() {
|
||||
$scope.ActionSuccessfull = true;
|
||||
$scope.ActionFailed = false;
|
||||
$scope.couldNotConnect = false;
|
||||
$scope.actionLoader = false;
|
||||
$scope.btnDisable = false;
|
||||
},1000)
|
||||
}, 3000);
|
||||
}
|
||||
else{
|
||||
setTimeout(function() {
|
||||
getServiceStatus();
|
||||
setTimeout(function() {
|
||||
$scope.ActionSuccessfull = false;
|
||||
$scope.ActionFailed = true;
|
||||
$scope.couldNotConnect = false;
|
||||
$scope.actionLoader = false;
|
||||
$scope.btnDisable = false;
|
||||
},1000)
|
||||
}, 5000);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
function cantLoadInitialDatas(response) {
|
||||
$scope.ActionSuccessfull = false;
|
||||
$scope.ActionFailed = false;
|
||||
$scope.couldNotConnect = true;
|
||||
$scope.actionLoader = false;
|
||||
$scope.btnDisable = false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
@@ -51,7 +51,7 @@
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">{% trans "Domain Name" %}</label>
|
||||
<div class="col-sm-6">
|
||||
<input ng-pattern="/([\da-z\.-]+\.[a-z\.]{2,6}|[\d\.]+)([\/:?=&#]{1}[\da-z\.-]+)*[\/\?]?$/i" name="dom" type="text" class="form-control" ng-model="domainNameCreate" placeholder="{% trans "Do not enter WWW, it will be auto created!" %}" required>
|
||||
<input ng-pattern="/*/i" name="dom" type="text" class="form-control" ng-model="domainNameCreate" placeholder="{% trans "Do not enter WWW, it will be auto created!" %}" required>
|
||||
</div>
|
||||
<div ng-show="websiteCreationForm.dom.$error.pattern" class="current-pack">{% trans "Invalid Domain (Note: You don't need to add 'http' or 'https')" %}</div>
|
||||
</div>
|
||||
|
||||
@@ -16,12 +16,59 @@
|
||||
|
||||
<div class="panel">
|
||||
<div class="panel-body">
|
||||
|
||||
|
||||
<h3 class="title-hero">
|
||||
{% trans "Available Functions" %}
|
||||
</h3>
|
||||
|
||||
|
||||
|
||||
<div class="example-box-wrapper">
|
||||
<div class="row">
|
||||
|
||||
{% if type == 3 %}
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-md-4">
|
||||
<a href="{% url 'listWebsites' %}" title="{% trans 'List Websites' %}" class="tile-box tile-box-shortcut btn-primary">
|
||||
<div class="tile-header">
|
||||
{% trans "List Websites" %}
|
||||
</div>
|
||||
<div class="tile-content-wrapper">
|
||||
<i class="glyph-icon icon-dashboard"></i>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col-md-4">
|
||||
<a href="{% url 'modifyWebsite' %}" title="{% trans 'Modify Website' %}" class="tile-box tile-box-shortcut btn-primary">
|
||||
<div class="tile-header">
|
||||
{% trans "Modify Website" %}
|
||||
</div>
|
||||
<div class="tile-content-wrapper">
|
||||
<i class="glyph-icon icon-dashboard"></i>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
<a href="{% url 'deleteWebsite' %}" title="{% trans 'Delete Website' %}" class="tile-box tile-box-shortcut btn-primary">
|
||||
<div class="tile-header">
|
||||
{% trans "Delete Website" %}
|
||||
</div>
|
||||
<div class="tile-content-wrapper">
|
||||
<i class="glyph-icon icon-dashboard"></i>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
{% else %}
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
<a href="{% url 'createWebsite' %}" title="{% trans 'Create Website' %}" class="tile-box tile-box-shortcut btn-primary">
|
||||
<div class="tile-header">
|
||||
@@ -60,11 +107,7 @@
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="row">
|
||||
|
||||
|
||||
{% if viewStatus == 1 %}
|
||||
<div class="row">
|
||||
|
||||
<div class="col-md-4">
|
||||
<a href="{% url 'siteState' %}" title="{% trans 'Suspend/Unsuspend Website' %}" class="tile-box tile-box-shortcut btn-primary">
|
||||
@@ -77,10 +120,9 @@
|
||||
</a>
|
||||
</div>
|
||||
|
||||
{% endif %}
|
||||
|
||||
|
||||
<div class="col-md-4">
|
||||
<div class="col-md-4">
|
||||
<a href="{% url 'deleteWebsite' %}" title="{% trans 'Delete Website' %}" class="tile-box tile-box-shortcut btn-primary">
|
||||
<div class="tile-header">
|
||||
{% trans "Delete Website" %}
|
||||
@@ -89,12 +131,14 @@
|
||||
<i class="glyph-icon icon-dashboard"></i>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -32,12 +32,7 @@ def loadWebsitesHome(request):
|
||||
|
||||
admin = Administrator.objects.get(pk=val)
|
||||
|
||||
viewStatus = 1
|
||||
|
||||
if admin.type == 3:
|
||||
viewStatus = 0
|
||||
|
||||
return render(request,'websiteFunctions/index.html',{"viewStatus":viewStatus})
|
||||
return render(request,'websiteFunctions/index.html',{"type":admin.type})
|
||||
except KeyError:
|
||||
return redirect(loadLoginPage)
|
||||
|
||||
@@ -50,6 +45,12 @@ def createWebsite(request):
|
||||
packages = admin.package_set.all()
|
||||
packagesName = []
|
||||
|
||||
if admin.type == 3:
|
||||
final = {'error': 1, "error_message": "Not enough privilege"}
|
||||
final_json = json.dumps(final)
|
||||
return HttpResponse(final_json)
|
||||
|
||||
|
||||
for items in packages:
|
||||
packagesName.append(items.packageName)
|
||||
|
||||
|
||||