Skip to content

Commit

Permalink
added tags to system status and control panel
Browse files Browse the repository at this point in the history
  • Loading branch information
pgigis committed Mar 27, 2019
1 parent 78ec302 commit 65a65a8
Show file tree
Hide file tree
Showing 6 changed files with 132 additions and 58 deletions.
2 changes: 1 addition & 1 deletion .env
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ WEBAPP_PORT=8000
ADMIN_USER=admin
ADMIN_PASS=admin123
ADMIN_EMAIL=admin@admin
JS_VERSION=0.1.2
JS_VERSION=0.1.3

# rabbitmq config
RABBITMQ_HOST=rabbitmq
Expand Down
4 changes: 2 additions & 2 deletions frontend/webapp/core/fetch_config.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import logging

import requests
import yaml
from webapp.utils import API_URI
from webapp.utils import flatten
from yaml import load as yload

log = logging.getLogger("webapp_logger")

Expand Down Expand Up @@ -33,7 +33,7 @@ def get_newest_config(self):
if "comment" in self.raw_json[0]:
self.config_comment = self.raw_json[0]["comment"]

self.config_yaml = yload(self.raw_config)
self.config_yaml = yaml.safe_load(self.raw_config)
except BaseException:
log.exception("exception")
return False
Expand Down
10 changes: 3 additions & 7 deletions frontend/webapp/core/modules.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import _thread
import logging
import time
from xmlrpc.client import ServerProxy
Expand Down Expand Up @@ -47,15 +46,12 @@ def call(self, module, action):
if action == "start":
modules = self.is_any_up_or_running(module, up=False)
for mod in modules:
_thread.start_new_thread(
self.server.supervisor.startProcess, (mod,)
)
self.server.supervisor.startProcess(mod)

elif action == "stop":
modules = self.is_any_up_or_running(module)
for mod in modules:
_thread.start_new_thread(
self.server.supervisor.stopProcess, (mod,)
)
self.server.supervisor.stopProcess(mod)
except Exception:
log.exception("exception")

Expand Down
48 changes: 48 additions & 0 deletions frontend/webapp/static/js/custom/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -233,3 +233,51 @@ function input_filter_prefix(value, dom){
}
return match_value;
}

function aggregate_status_of_modules(data, name_to_aggregate, index){ // eslint-disable-line no-unused-vars
var status = {
"on": 0,
"total": 0
}

while(data[index].name.includes(name_to_aggregate)){
if(data[index].running){
status['on']++;
}
status['total']++;
index++;
}

if(status['on'] == 0){
return [status['on'], status['total'], "off"];
}else if(status['on'] == status['total']){
return [status['on'], status['total'], "on"];
}else{
return [status['on'], status['total'], "semi"];
}
}

function aggregate_status_of_modules_no_index(data, name_to_aggregate){ // eslint-disable-line no-unused-vars
var status = {
"on": 0,
"total": 0
}

for (var index = 0; index < data.length; index++){
while(index < data.length && data[index].name.includes(name_to_aggregate)){
if(data[index].running){
status['on']++;
}
status['total']++;
index++;
}
}

if(status['on'] == 0){
return "off";
}else if(status['on'] == status['total']){
return status['on'] + "/" + status['total'] + " On";
}else{
return status['on'] + "/" + status['total'];
}
}
62 changes: 27 additions & 35 deletions frontend/webapp/templates/index.htm
Original file line number Diff line number Diff line change
Expand Up @@ -208,8 +208,9 @@ <h1 class="page-header">Dashboard</h1>
for (var key in data['view_processes']) {

if(data['view_processes'][key].name.includes('_')){
var find_first = parseInt(data['view_processes'][key].name.split('_')[1]);

if(data['view_processes'][key].name.includes('_00')){
if(find_first == 0){
var name = data['view_processes'][key].name.split('_')[0];
$('#modules_states').append( // Append the parent multiple module
create_module_render_li(
Expand Down Expand Up @@ -288,7 +289,7 @@ <h1 class="page-header">Dashboard</h1>
html_code.push(obj.raw_name);
html_code.push('">');
}else{
html_code.push('style="display:none" ');
html_code.push('style="display:none;background-color:rgba(0,0,0,.05);" ');
html_code.push('parent="');
html_code.push(obj.parent_name);
html_code.push('" class="list-group-item"><div class="row"><div class="col-lg-4">');
Expand All @@ -298,58 +299,49 @@ <h1 class="page-header">Dashboard</h1>
html_code.push('</div><div class="col-lg-8">');
html_code.push('<div class="row"><div class="col-lg-4">');
if(obj.running == true){
html_code.push('<b style="color:#008000">On</b></div>');
if("parent_name" in obj){
html_code.push('<button type="button" class="btn btn-success btn-sm"> On </div>');
}else{
html_code.push('<button type="button" class="btn btn-success btn-sm"> On <span class="badge badge-light">1/1</span></button></div>');
}

var seconds_elapsed = elapsed_seconds(obj.timestamp);
html_code.push('<div class="col-lg-8"><time_passed elapsed="');
html_code.push(seconds_elapsed);
html_code.push('">');
html_code.push(calculate_time_passed(seconds_elapsed));
html_code.push('</time_passed></div></div>');
}else if(obj.running == "multiple"){

if(obj.multiple_status == "on"){
html_code.push('<b style="color:#008000">All On</b></div>');
}else if(obj.multiple_status == "off"){
html_code.push('<b style="color:#ff0000">All Off</b></div>');
if(obj.multiple_status[2] == "on"){
html_code.push('<button type="button" class="btn btn-success btn-sm"> On <span class="badge badge-light">');
html_code.push(obj.multiple_status[0] + "/" + obj.multiple_status[1]);
html_code.push('</span></button></div>');
}else if(obj.multiple_status[2] == "off"){
html_code.push('<button type="button" class="btn btn-danger btn-sm"> On <span class="badge badge-light">');
html_code.push(obj.multiple_status[0] + "/" + obj.multiple_status[1]);
html_code.push('</span></button></div>');
}else{
html_code.push('<b style="color:#ff8c00"> ');
html_code.push(obj.multiple_status);
html_code.push(' On</b></div>');
html_code.push('<button type="button" class="btn btn-warning btn-sm"> On <span class="badge badge-light">');
html_code.push(obj.multiple_status[0] + "/" + obj.multiple_status[1]);
html_code.push('</span></button></div>');
}
html_code.push('<div class="col-lg-8"><a id="view_multiple_');
html_code.push(obj.raw_name);
html_code.push('" href="#" onclick="multipleView(\'');
html_code.push(obj.raw_name);
html_code.push('\')">View instances</a></div></div>');
}else{
html_code.push('<b style="color:#ff0000">Off</b></div>');
html_code.push('<div class="col-lg-8"> </div></div>');
}
html_code.push('</div></div></li>');
return html_code.join('');
}

function aggregate_status_of_modules(data, name_to_aggregate, key){
var status = {
"on": 0,
"total": 0
}

while(data[key].name.includes(name_to_aggregate)){
if(data[key].running){
status['on']++;
if("parent_name" in obj){
html_code.push('<button type="button" class="btn btn-danger btn-sm"> Off </div>');
}else{
html_code.push('<button type="button" class="btn btn-danger btn-sm"> On <span class="badge badge-light">0/1</span></button></div>');
}
status['total']++;
key++;
}

if(status['on'] == 0){
return "off";
}else if(status['on'] == status['total']){
return "on";
}else{
return status['on'] + "/" + status['total'];
html_code.push('<div class="col-lg-8"> </div></div>');
}
html_code.push('</div></div></li>');
return html_code.join('');
}

function multipleView(name){
Expand Down
64 changes: 51 additions & 13 deletions frontend/webapp/views/admin/templates/system.htm
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,17 @@ <h1 class="page-header">System</h1>
<i class="fa fa-bell fa-fw"></i> Monitor Module
</div>
<div class="panel-body">
<label class="switch">
<input data-toggle="toggle" id="monitor_switch" name="monitor_switch" type="checkbox">
<span class="slider round"></span>
</label>
<div class="row">
<div class="col-lg-4 offset-lg-2">
<div id="module_monitor_instances_running"></div>
</div>
<div class="col-lg-4">
<label class="switch">
<input data-toggle="toggle" id="monitor_switch" name="monitor_switch" type="checkbox">
<span class="slider round"></span>
</label>
</div>
</div>
</div>
</div>
</div>
Expand All @@ -43,10 +50,17 @@ <h1 class="page-header">System</h1>
<i class="fa fa-bell fa-fw"></i> Detection Module
</div>
<div class="panel-body">
<label class="switch">
<input data-toggle="toggle" id="detection_switch" name="detection_switch" type="checkbox">
<span class="slider round"></span>
</label>
<div class="row">
<div class="col-lg-4 offset-lg-2">
<div id="module_detection_instances_running"></div>
</div>
<div class="col-lg-4">
<label class="switch">
<input data-toggle="toggle" id="detection_switch" name="detection_switch" type="checkbox">
<span class="slider round"></span>
</label>
</div>
</div>
</div>
</div>
</div>
Expand All @@ -59,10 +73,17 @@ <h1 class="page-header">System</h1>
<i class="fa fa-bell fa-fw"></i> Mitigation Module
</div>
<div class="panel-body">
<label class="switch">
<input data-toggle="toggle" id="mitigation_switch" name="mitigation_switch" type="checkbox">
<span class="slider round"></span>
</label>
<div class="row">
<div class="col-lg-4 offset-lg-2">
<div id="module_mitigation_instances_running"></div>
</div>
<div class="col-lg-4">
<label class="switch">
<input data-toggle="toggle" id="mitigation_switch" name="mitigation_switch" type="checkbox">
<span class="slider round"></span>
</label>
</div>
</div>
</div>
</div>
</div>
Expand Down Expand Up @@ -120,6 +141,7 @@ <h1 class="page-header">System</h1>
var comment_editor = null;
var valid_conf;
var valid_comment;
var modules_list = ['monitor', 'detection', 'mitigation'];

$('#config_action').on('click', function (event, state) {
if($(this).hasClass("btn-primary")){
Expand Down Expand Up @@ -182,22 +204,38 @@ <h1 class="page-header">System</h1>
}

function render_module_state(data) {
data = data["view_processes"]
var data = data["view_processes"];
var clean_data = [];
var agg_data = {};
for (var elem in data) {
var group = data[elem]['name'].split('_')[0];
if(modules_list.includes(group) == false){
continue;
}
clean_data.push(data[elem]);
if(group in agg_data){
agg_data[group] = agg_data[group] && data[elem]["running"];
}else{
agg_data[group] = data[elem]["running"];
}
}
clean_data.sort((str1, str2) => (str1['name'] < str2['name'] ? -1 : +(str1['name'] > str2['name'])));

for (var group in agg_data) {
if(agg_data[group]) {
$("#"+group+"_switch").prop("checked", true)
} else {
$("#"+group+"_switch").prop("checked", false)
}
var result = aggregate_status_of_modules_no_index(clean_data, group);

if(result[2] == "on"){
$("#module_" + group + "_instances_running").html('<button type="button" class="btn btn-success"> Active <span class="badge badge-light">' + result[0] + '/' + result[1] +'</span></button>');
}else if(result[2] == "off"){
$("#module_" + group + "_instances_running").html('<button type="button" class="btn btn-danger"> Active <span class="badge badge-light">' + result[0] + '/' + result[1] +'</span></button>');
}else{
$("#module_" + group + "_instances_running").html('<button type="button" class="btn btn-warning"> Active <span class="badge badge-light">' + result[0] + '/' + result[1] +'</span></button>');
}
}
}

Expand Down

0 comments on commit 65a65a8

Please sign in to comment.