From 244e9b2c6f667b23817b638d846234c5631dc1cf Mon Sep 17 00:00:00 2001 From: Michael Mead Date: Sat, 27 May 2017 21:31:11 -0500 Subject: [PATCH] Begin cleanup from new GUI --- {src/api/static/js => old}/colors.js | 0 old/dashboard.html | 202 ++++ old/dashboard.js | 618 ++++++++++ {src/api => old}/dashboard/changelog.txt | 0 .../documentation/css/documentation.css | 0 .../documentation/documentation.html | 0 {src/api/static/css => old}/default.css | 4 +- {src/api/static => old}/index.html | 4 +- src/api/index.py | 12 +- .../static/css/{dash.css => dashboard.css} | 16 - src/api/static/css/reflect.css | 26 - src/api/static/js/dashboard.js | 1013 +++++++---------- src/api/static/js/{dash.js => default.js} | 17 - src/api/static/js/demo.js | 315 ----- src/api/templates/assets/img/background.jpg | Bin 39026 -> 0 bytes src/api/templates/assets/img/faces/face-0.jpg | Bin 17964 -> 0 bytes src/api/templates/assets/img/faces/face-1.jpg | Bin 20568 -> 0 bytes src/api/templates/assets/img/faces/face-2.jpg | Bin 55860 -> 0 bytes src/api/templates/assets/img/faces/face-3.jpg | Bin 41590 -> 0 bytes .../templates/assets/sass/paper/_alerts.scss | 13 +- src/api/templates/dash.html | 405 ------- src/api/templates/dashboard.html | 528 ++++++--- .../assets => }/sass/paper-dashboard.scss | 0 src/sass/paper/_alerts.scss | 64 ++ .../assets => }/sass/paper/_buttons.scss | 0 .../assets => }/sass/paper/_cards.scss | 0 .../assets => }/sass/paper/_chartist.scss | 0 .../sass/paper/_checkbox-radio.scss | 0 .../assets => }/sass/paper/_dropdown.scss | 0 .../assets => }/sass/paper/_footers.scss | 0 .../assets => }/sass/paper/_inputs.scss | 0 .../assets => }/sass/paper/_misc.scss | 0 .../assets => }/sass/paper/_mixins.scss | 0 .../assets => }/sass/paper/_navbars.scss | 0 .../assets => }/sass/paper/_responsive.scss | 0 .../sass/paper/_sidebar-and-main-panel.scss | 0 .../assets => }/sass/paper/_tables.scss | 0 .../assets => }/sass/paper/_typography.scss | 0 .../assets => }/sass/paper/_variables.scss | 0 .../sass/paper/mixins/_buttons.scss | 0 .../assets => }/sass/paper/mixins/_cards.scss | 0 .../sass/paper/mixins/_chartist.scss | 0 .../assets => }/sass/paper/mixins/_icons.scss | 0 .../sass/paper/mixins/_inputs.scss | 0 .../sass/paper/mixins/_labels.scss | 0 .../sass/paper/mixins/_navbars.scss | 0 .../sass/paper/mixins/_sidebar.scss | 0 .../assets => }/sass/paper/mixins/_tabs.scss | 0 .../sass/paper/mixins/_transparency.scss | 0 .../sass/paper/mixins/_vendor-prefixes.scss | 0 50 files changed, 1649 insertions(+), 1588 deletions(-) rename {src/api/static/js => old}/colors.js (100%) create mode 100644 old/dashboard.html create mode 100644 old/dashboard.js rename {src/api => old}/dashboard/changelog.txt (100%) rename {src/api => old}/dashboard/documentation/css/documentation.css (100%) rename {src/api => old}/dashboard/documentation/documentation.html (100%) rename {src/api/static/css => old}/default.css (99%) rename {src/api/static => old}/index.html (78%) rename src/api/static/css/{dash.css => dashboard.css} (99%) delete mode 100644 src/api/static/css/reflect.css mode change 100644 => 100755 src/api/static/js/dashboard.js rename src/api/static/js/{dash.js => default.js} (89%) delete mode 100755 src/api/static/js/demo.js delete mode 100644 src/api/templates/assets/img/background.jpg delete mode 100644 src/api/templates/assets/img/faces/face-0.jpg delete mode 100644 src/api/templates/assets/img/faces/face-1.jpg delete mode 100644 src/api/templates/assets/img/faces/face-2.jpg delete mode 100644 src/api/templates/assets/img/faces/face-3.jpg delete mode 100644 src/api/templates/dash.html rename src/{api/templates/assets => }/sass/paper-dashboard.scss (100%) create mode 100644 src/sass/paper/_alerts.scss rename src/{api/templates/assets => }/sass/paper/_buttons.scss (100%) rename src/{api/templates/assets => }/sass/paper/_cards.scss (100%) rename src/{api/templates/assets => }/sass/paper/_chartist.scss (100%) rename src/{api/templates/assets => }/sass/paper/_checkbox-radio.scss (100%) rename src/{api/templates/assets => }/sass/paper/_dropdown.scss (100%) rename src/{api/templates/assets => }/sass/paper/_footers.scss (100%) rename src/{api/templates/assets => }/sass/paper/_inputs.scss (100%) rename src/{api/templates/assets => }/sass/paper/_misc.scss (100%) rename src/{api/templates/assets => }/sass/paper/_mixins.scss (100%) rename src/{api/templates/assets => }/sass/paper/_navbars.scss (100%) rename src/{api/templates/assets => }/sass/paper/_responsive.scss (100%) rename src/{api/templates/assets => }/sass/paper/_sidebar-and-main-panel.scss (100%) rename src/{api/templates/assets => }/sass/paper/_tables.scss (100%) rename src/{api/templates/assets => }/sass/paper/_typography.scss (100%) rename src/{api/templates/assets => }/sass/paper/_variables.scss (100%) rename src/{api/templates/assets => }/sass/paper/mixins/_buttons.scss (100%) rename src/{api/templates/assets => }/sass/paper/mixins/_cards.scss (100%) rename src/{api/templates/assets => }/sass/paper/mixins/_chartist.scss (100%) rename src/{api/templates/assets => }/sass/paper/mixins/_icons.scss (100%) rename src/{api/templates/assets => }/sass/paper/mixins/_inputs.scss (100%) rename src/{api/templates/assets => }/sass/paper/mixins/_labels.scss (100%) rename src/{api/templates/assets => }/sass/paper/mixins/_navbars.scss (100%) rename src/{api/templates/assets => }/sass/paper/mixins/_sidebar.scss (100%) rename src/{api/templates/assets => }/sass/paper/mixins/_tabs.scss (100%) rename src/{api/templates/assets => }/sass/paper/mixins/_transparency.scss (100%) rename src/{api/templates/assets => }/sass/paper/mixins/_vendor-prefixes.scss (100%) diff --git a/src/api/static/js/colors.js b/old/colors.js similarity index 100% rename from src/api/static/js/colors.js rename to old/colors.js diff --git a/old/dashboard.html b/old/dashboard.html new file mode 100644 index 0000000..29f8fd9 --- /dev/null +++ b/old/dashboard.html @@ -0,0 +1,202 @@ + + + + + +
+
+
+ +
Python Virtual Environment Analysis
+ +
Last Lookup
+
+ +
+
+
+
+
+
+
+ +
+
+
+
+ +
Folder Analysis/Monitoring
+
Powered By Machine Learning
+
+
+
+ + + +
+
+
+
+
+
+
+
+
+
+ +
+ +
+
+
+ + + + + + + + --> diff --git a/old/dashboard.js b/old/dashboard.js new file mode 100644 index 0000000..9dff311 --- /dev/null +++ b/old/dashboard.js @@ -0,0 +1,618 @@ +var MONTHS = { 1: 'Jan', 2: 'Feb', 3: 'Mar', 4: 'Apr', 5: 'May', 6: 'Jun', 7: 'Jul', 8: 'Aug', 9: 'Sep', 10: 'Oct', 11: 'Nov', 12: 'Dec' } +var monitor = {} +monitor.utils = {} +monitor.utils.get = {} +monitor.utils.get.time = function (item) { + // date = ([item.day + '-' + MONTHS[item.month] + '-' + item.year, hour + ':' + item.minute]).join(' ') + var hour = item.hour > 9 ? item.hour : ('0' + item.hour) + if (hour > 12) { + var units = 'PM' + } else { + var units = 'AM' + } + return ([hour+':'+item.minute,units]).join(' ') +} +monitor.utils.get.dateTime = function (item) { + var time = monitor.utils.get.time(item) + return ([item.day+'-'+MONTHS[item.month]+'-'+item.year,time]).join(' ') +} +monitor.processes = {} +monitor.processes.fetch = function(){ + var httpclient = HttpClient.instance() + httpclient.get(HTTP_CONTEXT+'/get/processes',monitor.processes.init); + +} + +monitor.processes.init = function (x) { + + var r = JSON.parse(x.responseText) + monitor.processes.summary.init(r) + var keys = jx.utils.keys(r) + jx.dom.set.value('menu','') + jx.utils.patterns.visitor(keys,function(label){ + var div = jx.dom.get.instance('DIV') + var frame= jx.dom.get.instance('DIV') + var i = jx.dom.get.instance('I') + i.className = 'fa fa-chevron-right left' + + div.innerHTML = label + frame.data = r[label] + frame.label = label + frame.appendChild(i) + frame.appendChild(div) + frame.className = 'menu-item' + frame.onclick = function () { + monitor.processes.render(this.label, this.data); + jx.dom.set.value('trends_chart','') + //monitor.processes.trend.init(this.label) + } + jx.dom.append('menu',frame) + }) + // + // Auto start the first item in the menu + // This is designed not to let the user wander or wonder what is going on + // + var nodes = jx.dom.get.children('menu') + if (nodes.length > 0) { + nodes[0].click() + } else { + // + // We should hide the panes for this + // + jx.dom.hide('apps') + } + monitor.sandbox.init() + // setTimeout(monitor.sandbox.init,1000) +} + +/** +* This function renders the grid of processes being monitored, +* @param label label the list of processes belongs to +* @param data dataset of a selected set of processes (works a bit like top) +*/ +monitor.processes.render = function(label,data) { + + data = jx.utils.patterns.visitor(data,function(row){ + var status = {"idle":'',"running":'',"crash":''} + + if (!row.status.match(/class/)) { + row.status_id = row.status + row.status = status[row.status] + + } + return row + }) + jx.dom.set.value('latest_processes','') ; + jx.dom.set.value('latest_processes_label', label) + + var options = { + width: "90%", height:'auto', autoload:true + } + options.paging = true + options.pageSize = 4 + options.pageIndex = 1 + options.pageButtonCount = 4 + options.pagerContainer = '#latest_process_pager' + options.pagerFormat= "{prev} Page {pageIndex} of {pageCount} {next}" + options.pagePrevText= '' + options.pageNextText= " " + + options.data = data + options.rowClass = function (item, index,evt) { + + return 'small' + } + options.rowClick = function(args){ + var item = args.item + var id = jx.dom.get.value('latest_processes_label') + var app = item.label + monitor.processes.trend.init(id, app) + + if (item.anomaly == true) { + jx.dom.show('has_anomaly') + } else { + jx.dom.hide('has_anomaly') + } + // var hour = item.hour < 10? ('0'+item.hour): item.hour + // date = ([item.day + '-' + MONTHS[item.month] + '-' + item.year, hour + ':' + item.minute]).join(' ') + + jx.dom.set.value('node_last_lookup',monitor.utils.get.dateTime(item)) + + } + + options.autoload = true + options.fields = [ + { name: 'label', type: 'text', title: "Process", headercss: "small bold", css: "small"}, + { name: "cpu_usage", type: "number", title: "CPU", headercss: "small bold" , width:'64px'}, + { name: "memory_usage", type: "text", title: "Mem. Used", type: "number", headercss: "small bold" }, + { name: "proc_count", type: "number", title: "Proc Count", headercss: "small bold" }, + {name:"status",type:"text",title:"Status",headercss:"small bold",align:"center", width:'64px'} + ] + var grid = $('#latest_processes').jsGrid(options) ; + // + // We need to auto click the first row + $('#latest_processes').find('.jsgrid-row')[0].click() + +} + +monitor.processes.trend = {} +monitor.processes.trend.init = function (label,app) { + var httpclient = HttpClient.instance() + var uri = HTTP_CONTEXT+'/trends?id='+label+'&app='+encodeURIComponent(app) + httpclient.get(uri, function (x) { + var logs = JSON.parse(x.responseText) + var dom = jx.dom.get.instance('trend_info'); + dom.logs = logs + jx.dom.set.value('trend_info',app.trim()) + // jx.dom.set.attribute(label,'logs',logs) + monitor.processes.trend.render(logs,null,app) + }) +} +monitor.processes.trend.render = function (logs, key,label) { + // if (key == null) { + // key = 'memory_usage' + // } + // if (logs == null || label == null){ + + // logs = jx.dom.get.instance('trend_info').logs + // label= jx.dom.get.value('trend_info') ; + // } + var frame = $('#trends_chart') + jx.dom.set.value('trends_chart','') + var context = jx.dom.get.instance('CANVAS') + context.width = $(frame).width() + context.height= $(frame).height() + + var conf = { type: 'line',responsive:true } + conf.data = {} + conf.options = { legend: { position: 'bottom' } } + conf.options.scales = {} + conf.options.scales.yAxes = [ + {id:'0',scaleLabel:{display:true,labelString:'CPU & MEMORY %'},ticks:{min:0,max:100,beginAtZero:true},gridLines: {display:false}} + // {id:'1',position:'right',scaleLabel:{display:true,labelString:'PROCESS COUNT'},ticks:{min:0,stepSize:1,beginAtZero:true},gridLines: {display:false}} + ] + conf.options.scales.xAxes = [ + { + + gridLines: {display:false}, + + time: { + format:'HH:mm' + } + + } + + ] + conf.data.datasets = [ ] + var x_axis = [] + var _x = {} + // var _y = {} + var cpu = {label: 'CPU Usage (%)', data: [] ,backgroundColor:'transparent',borderColor:COLORS[187],fill:false,borderWidth:1} + var mem = {label : 'Memory Usage(%)',data:[],backgroundColor:'transparent',borderColor:COLORS[32],fill:false,borderWidth:1} + // var proc= {yAxisID:'1',label : 'Proc Count',data:[],backgroundColor:'transparent',borderColor:COLORS[542],fill:false,borderWidth:1} + // var months={1:"Jan",2:"Feb",3:"Mar",4:"Apr",5:"May",6:"Jun",7:"Jul",8:"Aug",9:"Sep",10:"Oct",11:"Nov",12:"Dec"} + jx.utils.patterns.visitor(logs,function(item){ + //x = new Date(item.year,item.month-1,item.day,item.hour,item.minute) + // day = item.day.length > 1? (['0',item.day]).join(''): item.day + // month = months[item.month] + // x = ([month, day, item.hour + ':' + item.minute]).join(' ') + x = monitor.utils.get.time(item).replace(/AM|PM/g,'') + y = item[key] + if (_x[x] == null ){//||(_x[x] == null && _y[y] == null)) { + _x[x] = 1 + // _y[y] = 1 + x_axis.push(x) + cpu.data.push({ x: x, y: item.cpu_usage }) + mem.data.push({x:x,y:item.memory_usage}) + console.log(item.cpu_usage) + console.log(item.memory_usage) + // proc.data.push({x:x,y:item.proc_count}) + // return {x:x,y:y} + + } + + }) + + var item = logs[logs.length - 1] + jx.dom.set.value('trend_last_lookup',monitor.utils.get.dateTime(item)) + + conf.data.datasets = [cpu,mem] + x_axis = jx.utils.unique(x_axis) + conf.data.labels = x_axis + // console.log(conf) + jx.dom.append('trends_chart',context) + var chart = new Chart(context,conf) + +} + +monitor.processes.summary = {} +monitor.processes.summary.init = function(logs){ + var xr = 0, xc = 0, xi = 0 + var series = {} + //var colors = [COLORS[11], COLORS[1], COLORS[2]] + COLORS = ["#00BFFF", "#b2beb5", "#ffa812"] + colors = [COLORS[0], COLORS[2], COLORS[1]] + RUNNING_COLOR = COLORS[0] + // RUNNING_COLOR = #0072BB + IDLE_COLOR = COLORS[1] + CRASH_COLOR=COLORS[2] + + var i = 0; + var date = null; + for( label in logs ){ + var rows = logs[label] + series[label] = {data:[0,0,0],label:label} + + jx.utils.patterns.visitor(rows,function(item){ + if (date == null) { + + // date = new Date(item.year,item.month-1,item.day,item.hour,item.minute) + // date = ([item.day + '-' + MONTHS[item.month] + '-' + item.year, item.hour + ':' + item.minute]).join(' ') + date = monitor.utils.get.dateTime(item) + } + if (item.status == 'running'){ + xr += 1 + }else if(item.status == 'idle'){ + xi += 1 + }else{ + xc += 1 + } + }) + + } + var data = {labels:['Running','Crash','Idle'],datasets:[{data:[xr,xc,xi],backgroundColor:[RUNNING_COLOR,CRASH_COLOR,IDLE_COLOR/**COLORS[11],COLORS[2],COLORS[100]*/]}]} + var context = jx.dom.get.instance('CANVAS') + context.id = 'doughnut' + jx.dom.set.value('total-running', xr) + jx.dom.set.value('total-crash', xc) + jx.dom.set.value('total-idle', xi) + // jx.dom.set.value('total-apps', xr + xi + xc) + + + jx.dom.set.value('app-summary-date', date) + jx.dom.set.value('summary_chart','') + jx.dom.append('summary_chart', context) + $("#doughnut").attr('width', 50) + $("#doughnut").attr('height', 50) + + var conf = {}//width:100,height:100}//width:'auto',height:$('#process_summary').height} + + conf.type = 'doughnut' + conf.responsive = true + conf.data = data + conf.options = { legend: { position: 'right' }, repsonsive: true } + var _chart = new Chart(context,conf) + + $('#summary_chart').click(function (evt) { + console.log(_chart) + console.log($(_chart)) + var activePoints = $(_chart).getSegmentsAtEvent(evt); + console.log(activePoints) + }) + jx.dom.set.value('summary_ranking','') + context = jx.dom.get.instance('CANVAS') + jx.dom.append('summary_ranking',context) + + conf = { type: 'bar', responsive: true } + + conf.options={scales:{xAxes:[{gridLines: {display:false}}],yAxes:[{gridLines: {display:false},scaleLabel:{display:true,labelString:'PROCESS COUNTS'} }] }} + conf.options.legend ={position:'right'} + /* + conf.data = {labels:['Running','Idle','Crash']} + var labels = jx.utils.keys(series) + + var i = 0 + conf.data.datasets = jx.utils.patterns.visitor(labels,function(id){ + series[id].backgroundColor = COLORS[i++] + return series[id]}) + chart = new Chart(context,conf); + */ + var labels = jx.utils.keys(logs) + conf.data = { labels: labels, backgroundColor:colors } + var xr = [], xi = [], xc = [],xr_bg = [],xc_bg = [],xi_bg = [] + jx.utils.patterns.visitor(labels, function (id) { + + var rows = logs[id] + var index = xr.length + xr_bg[index] = RUNNING_COLOR + xi_bg[index] = IDLE_COLOR + xc_bg[index] = CRASH_COLOR + if (xr[index] == null) { + xr[index] = 0 + xc[index] = 0 + xi[index] = 0 + } + + jx.utils.patterns.visitor(logs[id], function (row) { + + if (row.status.match(/running/i)) { + xr[index] += 1 + + } else if (row.status.match(/idle/i)) { + xi[index] += 1 + + } else { + xc[index] += 1 + + } + }) + }) + + conf.data.datasets = [{ label: 'Running', data:xr,backgroundColor:xr_bg},{label:'Crash',data:xc,backgroundColor:xc_bg},{label:'Idle',data:xi,backgroundColor:xi_bg} ] + chart = new Chart(context, conf) + +} + +monitor.sandbox = {} +monitor.sandbox.init = function () { + jx.dom.hide('inspect_sandbox') + var httpclient = HttpClient.instance() + httpclient.get(HTTP_CONTEXT+'/sandbox', function (x) { + + var r = JSON.parse(x.responseText) + + if (r.length > 0) { + jx.dom.show('sandbox') + monitor.sandbox.render(r); + } else { + jx.dom.hide('sandbox') + } + }) +} +monitor.sandbox.render = function (logs) { + // months = { 1: 'Jan', 2: 'Feb', 3: 'Mar', 4: 'Apr', 5: 'May', 6: 'Jun', 7: 'Jul', 8: 'Aug', 9: 'Sep', 10: 'Oct', 11: 'Nov', 12: 'Dec' } + + // var d = ([logs[0].day, '-', MONTHS[logs[0].month], '-', logs[0].year, ' ', logs[0].hour, ':', logs[0].minute]).join('') + var item = logs[logs.length -1] + jx.dom.set.value('sandbox_date', monitor.utils.get.dateTime(item)) + + var options = { width: $('#sandbox_status').width()-8, height: 'auto' } + options.data = jx.utils.patterns.visitor(logs, function (item) { + if (item.value == 100) { + item.status = '' + } else { + item.status = '' + } + return item + }) + options.paging = true + options.pageSize = 4 + options.pageIndex = 1 + options.pageButtonCount = 4 + options.pagerContainer = '#folders_pager' + options.pagerFormat = "{prev} Page {pageIndex} of {pageCount} {next}" + options.pagePrevText = '' + options.pageNextText = " "; + options.rowClass = function (item) { + + if (item.value < 70) { + return 'bad' + } else if (item.value < 100) { + return 'warning' + } else { + return 'good' + } + } + options.rowClick = function (args) { + var item = args.item; + if (item.missing.length > 0) { + var form = jx.dom.get.instance('FORM') + var dom = jx.dom.get.instance('INPUT') + dom.type = 'hidden' + dom.name = 'missing' + dom.value = JSON.stringify(item.missing) + + form.action = HTTP_CONTEXT+'/download' + form.method = 'POST' + form.appendChild(dom) + form.submit() + + } + } + options.fields = [ + {name:"status",title:"",width:20}, + { name: 'label',title:'Virtual Environment Label',type:'text',css:'small',headercss:'small bold' }, + { name: 'value', title:'Completeness %',type: 'number', css: 'small', headercss: 'small bold' } + + ] + var grid = $('#sandbox_status').jsGrid(options) + jx.dom.show('inspect_sandbox') + +} + + + +monitor.folders = {} +monitor.folders.init = function () { + var httpclient = HttpClient.instance() + httpclient.get(HTTP_CONTEXT+'/folders', function (x) { + var r = JSON.parse(x.responseText) + var data = [] + for (var id in r) { + var item = r[id] + // item.id = id + data = data.concat(item) + } + + monitor.folders.render.init(data) + }) +} +monitor.folders.search = {} +monitor.folders.search.reset = function () { + jx.dom.set.value('folder_search', '') + var data = jx.dom.get.attribute('folder_search', 'data') + monitor.folders.render.summary(data) + +} +monitor.folders.search.init = function(){ + var term = jx.dom.get.value('folder_search') + var data = jx.dom.get.attribute('folder_search', 'data') + + term = term.replace(/ /g,'') + if (term.length == 0) { + monitor.folders.render.summary(data) + } else if (term.length > 0) { + + data = jx.utils.patterns.visitor(data, function (row) { + pattern = "(.*" + term + ".*)" + + if (row.id.match(pattern)) { + return row + } + }) + monitor.folders.render.summary(data) + } +} +monitor.folders.render = {} +monitor.folders.render.init = function (data) { + jx.dom.set.attribute('folder_search','data',data) + monitor.folders.render.summary(data) +} +monitor.folders.show = {} +monitor.folders.show.plan = function () { + $('#folder_summary').slideUp(function () { + $('#folder_plan').slideDown() + }) + +} +monitor.folders.show.grid = function () { + $('#folder_plan').slideUp(function () { + $('#folder_summary').slideDown() + }) + +} +/*** + * This function is designed to establish a folder clean up strategy i.e : + * - We will look for anomalies given age,file size + * - We will also look for where most of the data is distributed (mode) + */ +monitor.folders.render.details = function (folder,data) { + // + // We need to normalize the data at this point so as to be able to show it all in the same chart + // jx.math.scale x: counts, y: measure ment + // + var r = [data.age, data.size] + var plans = [] + for (var i in r) { + var xy = r[i] + var mode = jx.math.mode(jx.utils.vector('x', xy)) + var yvalues = jx.utils.patterns.visitor(xy, function (row) { + if (row.x == mode) { + return row.y + } + }) + var sd = jx.math.sd(yvalues) + if (i == 0) { + prefix = 'age' + var mean = jx.math.mean(yvalues) + var max = (mean + (1.5 * sd)) + if (mean > 30 && mean < 365) { + divide_by = 30 + units = 'MONTHS' + } else if (mean > 365) { + divide_by=365 + units = 'YEARS' + } else { + divide_by = 1 + units = 'DAYS' + } + } else { + prefix = 'size' + var mean = jx.math.sum(yvalues) + var max = 0// (mean + (1.5 * sd)) + if (mean > 1000) { + divide_by = 1000 + units = 'GB' + } else { + divide_by = 1 + units = 'MB' + } + + } + if (isNaN(mean)) { + mean = 0 + } + // + // We need to assess the outliars i.e too old, too large + // + y = jx.utils.vector('y', xy) + var _mean = jx.math.mean(y) + var _sd = jx.math.sd(y) + var outlier = _mean < mean || max > (_mean + (1.5 * _sd)) + + plans.push({ 'label': prefix, 'max': max, 'sd': sd, 'mean': mean, 'count': yvalues.length, 'outlier': outlier }) + jx.dom.set.value(prefix + '_count', yvalues.length) + jx.dom.set.value(prefix + '_value', (mean/divide_by).toFixed(2)) + jx.dom.set.value(prefix+'_units',units) + monitor.folders.show.plan() + + } + + jx.dom.set.value('folder_name', folder) + + + + +} +monitor.folders.render.summary = function (data) { + + jx.dom.set.value('gridfolders', '') + var options = { + width: $('#gfolderframe').width()-8, height:'auto' + } + options.paging = true + options.pageSize = 4 + options.pageIndex = 1 + options.pageButtonCount = 4 + options.pagerContainer = '#folderspager' + options.pagerFormat= "{prev} Page {pageIndex} of {pageCount} {next}" + options.pagePrevText= '' + options.pageNextText= " " + + options.data = data + options.rowClass = function (item, index,evt) { + + return 'small' + } + options.rowClick = function(args){ + // var item = args.item + + // age = jx.utils.patterns.visitor(item.details.age, function (row) { + // return {y:row[0],x:row[1]} + // }) + // size = jx.utils.patterns.visitor(item.details.size, function (row) { + // return {y:row[0],x:row[1]} + // }) + + // monitor.folders.render.details(item.name,{age:age,size:size}) + } + // + // @TODO Add the units in days just in case + options.autoload = true + options.fields = [ + { name: 'id', type: 'text', title: "Host", headercss: "small bold", css: "small"}, + { name: 'name', type: 'text', title: "Folder Name", headercss: "small bold", css: "small"}, + + { name: "size", type: "number", title: "Folder Size", type: "number", headercss: "small bold" }, + { name: "count", type: "number", title: "File Count", type: "number", headercss: "small bold" } + ] + var grid = $('#gridfolders').jsGrid(options) ; + +} +monitor.menu = {} +monitor.menu.event = {} +monitor.menu.event.toggle = function () { + var dom = jx.dom.get.instance('menuframe') + var value = dom.style.marginLeft.trim() + + if (value==0 || value == "0px" || value == "") { + var width = -$(dom).width() - 20 + $('#menuframe').animate({marginLeft:"-20%"}) + } else { + $('#menuframe').animate({marginLeft:"0"}) + } + +} +/** + * Socket handler, check for learning status + */ diff --git a/src/api/dashboard/changelog.txt b/old/dashboard/changelog.txt similarity index 100% rename from src/api/dashboard/changelog.txt rename to old/dashboard/changelog.txt diff --git a/src/api/dashboard/documentation/css/documentation.css b/old/dashboard/documentation/css/documentation.css similarity index 100% rename from src/api/dashboard/documentation/css/documentation.css rename to old/dashboard/documentation/css/documentation.css diff --git a/src/api/dashboard/documentation/documentation.html b/old/dashboard/documentation/documentation.html similarity index 100% rename from src/api/dashboard/documentation/documentation.html rename to old/dashboard/documentation/documentation.html diff --git a/src/api/static/css/default.css b/old/default.css similarity index 99% rename from src/api/static/css/default.css rename to old/default.css index 0da1c4f..051a5bf 100644 --- a/src/api/static/css/default.css +++ b/old/default.css @@ -1,4 +1,4 @@ -body, .default { +/*body, .default { font-size:14px; font-family:sans-serif; font-weight:lighter; @@ -352,4 +352,4 @@ background-image: linear-gradient(to bottom, #CAD5E0 0%, #F3F3F3 40%); and (-webkit-min-device-pixel-ratio: 3) and (orientation: landscape) { -} +}*/ diff --git a/src/api/static/index.html b/old/index.html similarity index 78% rename from src/api/static/index.html rename to old/index.html index 44b668b..978bd1d 100644 --- a/src/api/static/index.html +++ b/old/index.html @@ -1,4 +1,4 @@ - + diff --git a/src/api/index.py b/src/api/index.py index 4b86598..535986e 100644 --- a/src/api/index.py +++ b/src/api/index.py @@ -149,14 +149,6 @@ def requirements(): stream = "\n".join(json.loads(stream)) headers = {"content-disposition":"attachment; filename=requirements.txt"} return Response(stream,mimetype='text/plain',headers=headers) -@app.route('/old') -def old(): - context = PARAMS['context'] - if 'title' in PARAMS : - title = PARAMS['title'] - else: - title = 'Zulu OverWatch' - return render_template('dashboard.html',context=context,title=title) @app.route('/dashboard') def dashboard(): @@ -165,9 +157,7 @@ def dashboard(): title = PARAMS['title'] else: title = 'Dashboard' - return render_template('dash.html',context=context,title=title) - - + return render_template('dashboard.html',context=context,title=title) """ This function is designed to trigger learning for anomaly detection diff --git a/src/api/static/css/dash.css b/src/api/static/css/dashboard.css similarity index 99% rename from src/api/static/css/dash.css rename to src/api/static/css/dashboard.css index 3f30ecc..4513ca2 100644 --- a/src/api/static/css/dash.css +++ b/src/api/static/css/dashboard.css @@ -1,19 +1,3 @@ -/*! - - ========================================================= - * Paper Dashboard - v1.1.2 - ========================================================= - - * Product Page: http://www.creative-tim.com/product/paper-dashboard - * Copyright 2017 Creative Tim (http://www.creative-tim.com) - * Licensed under MIT (https://github.com/creativetimofficial/paper-dashboard/blob/master/LICENSE.md) - - ========================================================= - - * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - - */ -/* light colors - used for select dropdown */ .ct-blue { stroke: #7A9E9F !important; } diff --git a/src/api/static/css/reflect.css b/src/api/static/css/reflect.css deleted file mode 100644 index 5772167..0000000 --- a/src/api/static/css/reflect.css +++ /dev/null @@ -1,26 +0,0 @@ -.block { - border: 1px solid black; - display: block; - min-width: 450px; - min-height: 250px; -} - -.jsgrid-cell { overflow:scroll; } - -.sidebar { - display: block; -} - -#doughnut { - max-height: 310px; - max-width: 310px; -} - -/* ----------- working media query (laptop) ----------- */ - -@media screen - and (max-device-width: 1900px) { - .block { - display: block; - } - } diff --git a/src/api/static/js/dashboard.js b/src/api/static/js/dashboard.js old mode 100644 new mode 100755 index 7ba5df0..2feae31 --- a/src/api/static/js/dashboard.js +++ b/src/api/static/js/dashboard.js @@ -1,614 +1,405 @@ -var MONTHS = { 1: 'Jan', 2: 'Feb', 3: 'Mar', 4: 'Apr', 5: 'May', 6: 'Jun', 7: 'Jul', 8: 'Aug', 9: 'Sep', 10: 'Oct', 11: 'Nov', 12: 'Dec' } -var monitor = {} -monitor.utils = {} -monitor.utils.get = {} -monitor.utils.get.time = function (item) { - // date = ([item.day + '-' + MONTHS[item.month] + '-' + item.year, hour + ':' + item.minute]).join(' ') - var hour = item.hour > 9 ? item.hour : ('0' + item.hour) - if (hour > 12) { - var units = 'PM' - } else { - var units = 'AM' - } - return ([hour+':'+item.minute,units]).join(' ') -} -monitor.utils.get.dateTime = function (item) { - var time = monitor.utils.get.time(item) - return ([item.day+'-'+MONTHS[item.month]+'-'+item.year,time]).join(' ') -} -monitor.processes = {} -monitor.processes.fetch = function(){ - var httpclient = HttpClient.instance() - httpclient.get(HTTP_CONTEXT+'/get/processes',monitor.processes.init); - -} - -monitor.processes.init = function (x) { - - var r = JSON.parse(x.responseText) - monitor.processes.summary.init(r) - var keys = jx.utils.keys(r) - jx.dom.set.value('menu','') - jx.utils.patterns.visitor(keys,function(label){ - var div = jx.dom.get.instance('DIV') - var frame= jx.dom.get.instance('DIV') - var i = jx.dom.get.instance('I') - i.className = 'fa fa-chevron-right left' - - div.innerHTML = label - frame.data = r[label] - frame.label = label - frame.appendChild(i) - frame.appendChild(div) - frame.className = 'menu-item' - frame.onclick = function () { - monitor.processes.render(this.label, this.data); - jx.dom.set.value('trends_chart','') - //monitor.processes.trend.init(this.label) - } - jx.dom.append('menu',frame) - }) - // - // Auto start the first item in the menu - // This is designed not to let the user wander or wonder what is going on - // - var nodes = jx.dom.get.children('menu') - if (nodes.length > 0) { - nodes[0].click() - } else { - // - // We should hide the panes for this - // - jx.dom.hide('apps') - } - monitor.sandbox.init() - // setTimeout(monitor.sandbox.init,1000) -} - -/** -* This function renders the grid of processes being monitored, -* @param label label the list of processes belongs to -* @param data dataset of a selected set of processes (works a bit like top) -*/ -monitor.processes.render = function(label,data) { - - data = jx.utils.patterns.visitor(data,function(row){ - var status = {"idle":'',"running":'',"crash":''} - if (!row.status.match(/class/)) { - row.status_id = row.status - row.status = status[row.status] - - } - return row - }) - jx.dom.set.value('latest_processes','') ; - jx.dom.set.value('latest_processes_label', label) - - var options = { - width: "90%", height:'auto', autoload:true - } - options.paging = true - options.pageSize = 4 - options.pageIndex = 1 - options.pageButtonCount = 4 - options.pagerContainer = '#latest_process_pager' - options.pagerFormat= "{prev} Page {pageIndex} of {pageCount} {next}" - options.pagePrevText= '' - options.pageNextText= " " - - options.data = data - options.rowClass = function (item, index,evt) { - - return 'small' - } - options.rowClick = function(args){ - var item = args.item - var id = jx.dom.get.value('latest_processes_label') - var app = item.label - monitor.processes.trend.init(id, app) - - if (item.anomaly == true) { - jx.dom.show('has_anomaly') - } else { - jx.dom.hide('has_anomaly') - } - // var hour = item.hour < 10? ('0'+item.hour): item.hour - // date = ([item.day + '-' + MONTHS[item.month] + '-' + item.year, hour + ':' + item.minute]).join(' ') - - jx.dom.set.value('node_last_lookup',monitor.utils.get.dateTime(item)) - - } - - options.autoload = true - options.fields = [ - { name: 'label', type: 'text', title: "Process", headercss: "small bold", css: "small"}, - { name: "cpu_usage", type: "number", title: "CPU", headercss: "small bold" , width:'64px'}, - { name: "memory_usage", type: "text", title: "Mem. Used", type: "number", headercss: "small bold" }, - { name: "proc_count", type: "number", title: "Proc Count", headercss: "small bold" }, - {name:"status",type:"text",title:"Status",headercss:"small bold",align:"center", width:'64px'} - ] - var grid = $('#latest_processes').jsGrid(options) ; - // - // We need to auto click the first row - $('#latest_processes').find('.jsgrid-row')[0].click() -} - -monitor.processes.trend = {} -monitor.processes.trend.init = function (label,app) { - var httpclient = HttpClient.instance() - var uri = HTTP_CONTEXT+'/trends?id='+label+'&app='+encodeURIComponent(app) - httpclient.get(uri, function (x) { - var logs = JSON.parse(x.responseText) - var dom = jx.dom.get.instance('trend_info'); - dom.logs = logs - jx.dom.set.value('trend_info',app.trim()) - // jx.dom.set.attribute(label,'logs',logs) - monitor.processes.trend.render(logs,null,app) - }) -} -monitor.processes.trend.render = function (logs, key,label) { - // if (key == null) { - // key = 'memory_usage' - // } - // if (logs == null || label == null){ - - // logs = jx.dom.get.instance('trend_info').logs - // label= jx.dom.get.value('trend_info') ; - // } - var frame = $('#trends_chart') - jx.dom.set.value('trends_chart','') - var context = jx.dom.get.instance('CANVAS') - context.width = $(frame).width() - context.height= $(frame).height() - - var conf = { type: 'line',responsive:true } - conf.data = {} - conf.options = { legend: { position: 'bottom' } } - conf.options.scales = {} - conf.options.scales.yAxes = [ - {id:'0',scaleLabel:{display:true,labelString:'CPU & MEMORY %'},ticks:{min:0,max:100,beginAtZero:true},gridLines: {display:false}} - // {id:'1',position:'right',scaleLabel:{display:true,labelString:'PROCESS COUNT'},ticks:{min:0,stepSize:1,beginAtZero:true},gridLines: {display:false}} - ] - conf.options.scales.xAxes = [ - { - - gridLines: {display:false}, - - time: { - format:'HH:mm' - } - - } - - ] - conf.data.datasets = [ ] - var x_axis = [] - var _x = {} - // var _y = {} - var cpu = {label: 'CPU Usage (%)', data: [] ,backgroundColor:'transparent',borderColor:COLORS[187],fill:false,borderWidth:1} - var mem = {label : 'Memory Usage(%)',data:[],backgroundColor:'transparent',borderColor:COLORS[32],fill:false,borderWidth:1} - // var proc= {yAxisID:'1',label : 'Proc Count',data:[],backgroundColor:'transparent',borderColor:COLORS[542],fill:false,borderWidth:1} - // var months={1:"Jan",2:"Feb",3:"Mar",4:"Apr",5:"May",6:"Jun",7:"Jul",8:"Aug",9:"Sep",10:"Oct",11:"Nov",12:"Dec"} - jx.utils.patterns.visitor(logs,function(item){ - //x = new Date(item.year,item.month-1,item.day,item.hour,item.minute) - // day = item.day.length > 1? (['0',item.day]).join(''): item.day - // month = months[item.month] - // x = ([month, day, item.hour + ':' + item.minute]).join(' ') - x = monitor.utils.get.time(item).replace(/AM|PM/g,'') - y = item[key] - if (_x[x] == null ){//||(_x[x] == null && _y[y] == null)) { - _x[x] = 1 - // _y[y] = 1 - x_axis.push(x) - cpu.data.push({ x: x, y: item.cpu_usage }) - mem.data.push({x:x,y:item.memory_usage}) - // proc.data.push({x:x,y:item.proc_count}) - // return {x:x,y:y} - - } - - }) - - var item = logs[logs.length - 1] - jx.dom.set.value('trend_last_lookup',monitor.utils.get.dateTime(item)) - - conf.data.datasets = [cpu,mem] - x_axis = jx.utils.unique(x_axis) - conf.data.labels = x_axis - // console.log(conf) - jx.dom.append('trends_chart',context) - var chart = new Chart(context,conf) - -} - -monitor.processes.summary = {} -monitor.processes.summary.init = function(logs){ - var xr = 0, xc = 0, xi = 0 - var series = {} - //var colors = [COLORS[11], COLORS[1], COLORS[2]] - COLORS = ["#00BFFF", "#b2beb5", "#ffa812"] - colors = [COLORS[0], COLORS[2], COLORS[1]] - RUNNING_COLOR = COLORS[0] - // RUNNING_COLOR = #0072BB - IDLE_COLOR = COLORS[1] - CRASH_COLOR=COLORS[2] - - var i = 0; - var date = null; - for( label in logs ){ - var rows = logs[label] - series[label] = {data:[0,0,0],label:label} - - jx.utils.patterns.visitor(rows,function(item){ - if (date == null) { - - // date = new Date(item.year,item.month-1,item.day,item.hour,item.minute) - // date = ([item.day + '-' + MONTHS[item.month] + '-' + item.year, item.hour + ':' + item.minute]).join(' ') - date = monitor.utils.get.dateTime(item) - } - if (item.status == 'running'){ - xr += 1 - }else if(item.status == 'idle'){ - xi += 1 - }else{ - xc += 1 - } - }) - - } - var data = {labels:['Running','Crash','Idle'],datasets:[{data:[xr,xc,xi],backgroundColor:[RUNNING_COLOR,CRASH_COLOR,IDLE_COLOR/**COLORS[11],COLORS[2],COLORS[100]*/]}]} - var context = jx.dom.get.instance('CANVAS') - context.id = 'doughnut' - jx.dom.set.value('total-running', xr) - jx.dom.set.value('total-crash', xc) - jx.dom.set.value('total-idle', xi) - // jx.dom.set.value('total-apps', xr + xi + xc) - - - jx.dom.set.value('app-summary-date', date) - jx.dom.set.value('summary_chart','') - jx.dom.append('summary_chart', context) - $("#doughnut").attr('width', 50) - $("#doughnut").attr('height', 50) - - var conf = {}//width:100,height:100}//width:'auto',height:$('#process_summary').height} - - conf.type = 'doughnut' - conf.responsive = true - conf.data = data - conf.options = { legend: { position: 'right' }, repsonsive: true } - var _chart = new Chart(context,conf) - - $('#summary_chart').click(function (evt) { - console.log(_chart) - console.log($(_chart)) - var activePoints = $(_chart).getSegmentsAtEvent(evt); - console.log(activePoints) - }) - jx.dom.set.value('summary_ranking','') - context = jx.dom.get.instance('CANVAS') - jx.dom.append('summary_ranking',context) - - conf = { type: 'bar', responsive: true } - - conf.options={scales:{xAxes:[{gridLines: {display:false}}],yAxes:[{gridLines: {display:false},scaleLabel:{display:true,labelString:'PROCESS COUNTS'} }] }} - conf.options.legend ={position:'right'} - /* - conf.data = {labels:['Running','Idle','Crash']} - var labels = jx.utils.keys(series) - - var i = 0 - conf.data.datasets = jx.utils.patterns.visitor(labels,function(id){ - series[id].backgroundColor = COLORS[i++] - return series[id]}) - chart = new Chart(context,conf); - */ - var labels = jx.utils.keys(logs) - conf.data = { labels: labels, backgroundColor:colors } - var xr = [], xi = [], xc = [],xr_bg = [],xc_bg = [],xi_bg = [] - jx.utils.patterns.visitor(labels, function (id) { - - var rows = logs[id] - var index = xr.length - xr_bg[index] = RUNNING_COLOR - xi_bg[index] = IDLE_COLOR - xc_bg[index] = CRASH_COLOR - if (xr[index] == null) { - xr[index] = 0 - xc[index] = 0 - xi[index] = 0 - } - - jx.utils.patterns.visitor(logs[id], function (row) { - - if (row.status.match(/running/i)) { - xr[index] += 1 - - } else if (row.status.match(/idle/i)) { - xi[index] += 1 - - } else { - xc[index] += 1 - - } - }) - }) - - conf.data.datasets = [{ label: 'Running', data:xr,backgroundColor:xr_bg},{label:'Crash',data:xc,backgroundColor:xc_bg},{label:'Idle',data:xi,backgroundColor:xi_bg} ] - chart = new Chart(context, conf) - -} - -monitor.sandbox = {} -monitor.sandbox.init = function () { - jx.dom.hide('inspect_sandbox') - var httpclient = HttpClient.instance() - httpclient.get(HTTP_CONTEXT+'/sandbox', function (x) { - - var r = JSON.parse(x.responseText) - - if (r.length > 0) { - jx.dom.show('sandbox') - monitor.sandbox.render(r); - } else { - jx.dom.hide('sandbox') - } - }) -} -monitor.sandbox.render = function (logs) { - // months = { 1: 'Jan', 2: 'Feb', 3: 'Mar', 4: 'Apr', 5: 'May', 6: 'Jun', 7: 'Jul', 8: 'Aug', 9: 'Sep', 10: 'Oct', 11: 'Nov', 12: 'Dec' } - - // var d = ([logs[0].day, '-', MONTHS[logs[0].month], '-', logs[0].year, ' ', logs[0].hour, ':', logs[0].minute]).join('') - var item = logs[logs.length -1] - jx.dom.set.value('sandbox_date', monitor.utils.get.dateTime(item)) - - var options = { width: $('#sandbox_status').width()-8, height: 'auto' } - options.data = jx.utils.patterns.visitor(logs, function (item) { - if (item.value == 100) { - item.status = '' - } else { - item.status = '' - } - return item - }) - options.paging = true - options.pageSize = 4 - options.pageIndex = 1 - options.pageButtonCount = 4 - options.pagerContainer = '#folders_pager' - options.pagerFormat = "{prev} Page {pageIndex} of {pageCount} {next}" - options.pagePrevText = '' - options.pageNextText = " "; - options.rowClass = function (item) { - - if (item.value < 70) { - return 'bad' - } else if (item.value < 100) { - return 'warning' - } else { - return 'good' - } - } - options.rowClick = function (args) { - var item = args.item; - if (item.missing.length > 0) { - var form = jx.dom.get.instance('FORM') - var dom = jx.dom.get.instance('INPUT') - dom.type = 'hidden' - dom.name = 'missing' - dom.value = JSON.stringify(item.missing) - - form.action = HTTP_CONTEXT+'/download' - form.method = 'POST' - form.appendChild(dom) - form.submit() - - } - } - options.fields = [ - {name:"status",title:"",width:20}, - { name: 'label',title:'Virtual Environment Label',type:'text',css:'small',headercss:'small bold' }, - { name: 'value', title:'Completeness %',type: 'number', css: 'small', headercss: 'small bold' } - - ] - var grid = $('#sandbox_status').jsGrid(options) - jx.dom.show('inspect_sandbox') - -} - - -monitor.folders = {} -monitor.folders.init = function () { - var httpclient = HttpClient.instance() - httpclient.get(HTTP_CONTEXT+'/folders', function (x) { - var r = JSON.parse(x.responseText) - var data = [] - for (var id in r) { - var item = r[id] - // item.id = id - data = data.concat(item) - } - - monitor.folders.render.init(data) - }) -} -monitor.folders.search = {} -monitor.folders.search.reset = function () { - jx.dom.set.value('folder_search', '') - var data = jx.dom.get.attribute('folder_search', 'data') - monitor.folders.render.summary(data) - -} -monitor.folders.search.init = function(){ - var term = jx.dom.get.value('folder_search') - var data = jx.dom.get.attribute('folder_search', 'data') - - term = term.replace(/ /g,'') - if (term.length == 0) { - monitor.folders.render.summary(data) - } else if (term.length > 0) { - - data = jx.utils.patterns.visitor(data, function (row) { - pattern = "(.*" + term + ".*)" - - if (row.id.match(pattern)) { - return row - } - }) - monitor.folders.render.summary(data) - } -} -monitor.folders.render = {} -monitor.folders.render.init = function (data) { - jx.dom.set.attribute('folder_search','data',data) - monitor.folders.render.summary(data) -} -monitor.folders.show = {} -monitor.folders.show.plan = function () { - $('#folder_summary').slideUp(function () { - $('#folder_plan').slideDown() - }) - -} -monitor.folders.show.grid = function () { - $('#folder_plan').slideUp(function () { - $('#folder_summary').slideDown() - }) - -} -/*** - * This function is designed to establish a folder clean up strategy i.e : - * - We will look for anomalies given age,file size - * - We will also look for where most of the data is distributed (mode) - */ -monitor.folders.render.details = function (folder,data) { - // - // We need to normalize the data at this point so as to be able to show it all in the same chart - // jx.math.scale x: counts, y: measure ment - // - var r = [data.age, data.size] - var plans = [] - for (var i in r) { - var xy = r[i] - var mode = jx.math.mode(jx.utils.vector('x', xy)) - var yvalues = jx.utils.patterns.visitor(xy, function (row) { - if (row.x == mode) { - return row.y - } - }) - var sd = jx.math.sd(yvalues) - if (i == 0) { - prefix = 'age' - var mean = jx.math.mean(yvalues) - var max = (mean + (1.5 * sd)) - if (mean > 30 && mean < 365) { - divide_by = 30 - units = 'MONTHS' - } else if (mean > 365) { - divide_by=365 - units = 'YEARS' - } else { - divide_by = 1 - units = 'DAYS' - } - } else { - prefix = 'size' - var mean = jx.math.sum(yvalues) - var max = 0// (mean + (1.5 * sd)) - if (mean > 1000) { - divide_by = 1000 - units = 'GB' - } else { - divide_by = 1 - units = 'MB' - } - - } - if (isNaN(mean)) { - mean = 0 - } - // - // We need to assess the outliars i.e too old, too large - // - y = jx.utils.vector('y', xy) - var _mean = jx.math.mean(y) - var _sd = jx.math.sd(y) - var outlier = _mean < mean || max > (_mean + (1.5 * _sd)) - - plans.push({ 'label': prefix, 'max': max, 'sd': sd, 'mean': mean, 'count': yvalues.length, 'outlier': outlier }) - jx.dom.set.value(prefix + '_count', yvalues.length) - jx.dom.set.value(prefix + '_value', (mean/divide_by).toFixed(2)) - jx.dom.set.value(prefix+'_units',units) - monitor.folders.show.plan() - - } - - jx.dom.set.value('folder_name', folder) - - - - -} -monitor.folders.render.summary = function (data) { - - jx.dom.set.value('gridfolders', '') - var options = { - width: $('#gfolderframe').width()-8, height:'auto' - } - options.paging = true - options.pageSize = 4 - options.pageIndex = 1 - options.pageButtonCount = 4 - options.pagerContainer = '#folderspager' - options.pagerFormat= "{prev} Page {pageIndex} of {pageCount} {next}" - options.pagePrevText= '' - options.pageNextText= " " - - options.data = data - options.rowClass = function (item, index,evt) { - - return 'small' - } - options.rowClick = function(args){ - // var item = args.item - - // age = jx.utils.patterns.visitor(item.details.age, function (row) { - // return {y:row[0],x:row[1]} - // }) - // size = jx.utils.patterns.visitor(item.details.size, function (row) { - // return {y:row[0],x:row[1]} - // }) - - // monitor.folders.render.details(item.name,{age:age,size:size}) - } - // - // @TODO Add the units in days just in case - options.autoload = true - options.fields = [ - { name: 'id', type: 'text', title: "Host", headercss: "small bold", css: "small"}, - { name: 'name', type: 'text', title: "Folder Name", headercss: "small bold", css: "small"}, - - { name: "size", type: "number", title: "Folder Size", type: "number", headercss: "small bold" }, - { name: "count", type: "number", title: "File Count", type: "number", headercss: "small bold" } - ] - var grid = $('#gridfolders').jsGrid(options) ; - -} -monitor.menu = {} -monitor.menu.event = {} -monitor.menu.event.toggle = function () { - var dom = jx.dom.get.instance('menuframe') - var value = dom.style.marginLeft.trim() - - if (value==0 || value == "0px" || value == "") { - var width = -$(dom).width() - 20 - $('#menuframe').animate({marginLeft:"-20%"}) - } else { - $('#menuframe').animate({marginLeft:"0"}) - } +type = ['','info','success','warning','danger']; + +dashboard = { + initPickColor: function(){ + $('.pick-class-label').click(function(){ + var new_class = $(this).attr('new-class'); + var old_class = $('#display-buttons').attr('data-class'); + var display_div = $('#display-buttons'); + if(display_div.length) { + var display_buttons = display_div.find('.btn'); + display_buttons.removeClass(old_class); + display_buttons.addClass(new_class); + display_div.attr('data-class', new_class); + } + }); + }, + + initChartist: function(){ + var getData = $.get('/get/1'); + getData.done(function(results) { + var data = JSON.parse(results) + var app = data['apps@osx']; + + function getCpuUsage (app){ + cpu_usage = [] + for (var i in app){ + cpu_usage.push(app[i].cpu_usage) + + } + return cpu_usage + } + + function getMemoryUsage (app){ + memory_usage = [] + for (var i in app){ + memory_usage.push(app[i].memory_usage) + + } + return memory_usage + } + + function getStatus (app){ + statusList = [] + for (var i in app){ + statusList.push(app[i].status) + } + return statusList + } +// monitoring apps chart + var dataChart = { + labels: ['9:00AM', '12:00AM', '3:00PM', '6:00PM', '9:00PM', '12:00PM', '3:00AM', '6:00AM'], + series: [ + [287, 385, 490, 562, 594, 626, 698, 895, 952], + [67, 152, 193, 240, 387, 435, 535, 642, 744], + [23, 113, 67, 108, 190, 239, 307, 410, 410], + ] + }; + + var optionsChart = { + lineSmooth: false, + low: 0, + high: 1000, + showArea: true, + height: "245px", + axisX: { + showGrid: false, + }, + lineSmooth: Chartist.Interpolation.simple({ + divisor: 3 + }), + showLine: true, + showPoint: false, + }; + + var responsiveChart = [ + ['screen and (max-width: 640px)', { + axisX: { + labelInterpolationFnc: function (value) { + return value[0]; + } + } + }] + ]; + + Chartist.Line('#chartHours', dataChart, optionsChart, responsiveChart); + +// cpu and memory -------------------------- + cpu_usage = getCpuUsage(app) + memory_usage = getMemoryUsage(app) + var data = { + labels: ['Jan', 'Feb', 'Mar', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], + series: [ + cpu_usage,memory_usage + // [542, 543, 520, 680, 653, 753, 326, 434, 568, 610, 756, 895], + // [230, 293, 380, 480, 503, 553, 600, 664, 698, 710, 736, 795] + ] + }; + + var options = { + seriesBarDistance: 10, + axisX: { + showGrid: false + }, + height: "245px" + }; + + var responsiveOptions = [ + ['screen and (max-width: 640px)', { + seriesBarDistance: 5, + axisX: { + labelInterpolationFnc: function (value) { + return value[0]; + } + } + }] + ]; + + Chartist.Line('#chartActivity', data, options, responsiveOptions); + + var dataPreferences = { + series: [ + [25, 30, 20, 25] + ] + }; + + var optionsPreferences = { + donut: true, + donutWidth: 40, + startAngle: 0, + total: 100, + showLabel: false, + axisX: { + showGrid: false + } + }; + + Chartist.Pie('#chartPreferences', dataPreferences, optionsPreferences); + +//summary by group pie chart + status = getStatus(app) + statusList = status.split(','); + + statusByNum = getStatusByType(statusList) + + function getStatusByType(statusList){ + running = 0; + idle = 0; + crash = 0; + + for (var n in statusList){ + if (statusList[n] == 'running'){ + running += 1; + }; + if (statusList[n] == 'idle'){ + idle += 1; + }; + if (statusList[n] == 'crash'){ + crash += 1; + }; + } + statusList = [running, idle, crash]; + return statusList + } + + percentage = getStatusPercent(statusByNum); + + function getStatusPercent(statusByNum){ + let total = 0 + for (var i in statusByNum){ + total += statusByNum[i]; + } + + percent = [] + for (var i in statusByNum){ + percent.push(total / statusByNum[i]) + } + total = 100 + let percentage = [] + for (var i in percent){ + percentage.push(total/percent[i]) + } + for (var i in percentage){ + if (percentage[i] == 0){ + percentage.pop(percentage[i]); + } + } + return percentage + } + + for (i in percentage){ + percentage[i] = percentage[i].toString()+'%'; + } + + Chartist.Pie('#chartPreferences', { + labels: percentage, + series: statusByNum + }); + }) +}, +// End chartist function + + initGoogleMaps: function(){ + var myLatlng = new google.maps.LatLng(40.748817, -73.985428); + var mapOptions = { + zoom: 13, + center: myLatlng, + scrollwheel: false, //we disable de scroll over the map, it is a really annoing when you scroll through page + styles: [{"featureType":"water","stylers":[{"saturation":43},{"lightness":-11},{"hue":"#0088ff"}]},{"featureType":"road","elementType":"geometry.fill","stylers":[{"hue":"#ff0000"},{"saturation":-100},{"lightness":99}]},{"featureType":"road","elementType":"geometry.stroke","stylers":[{"color":"#808080"},{"lightness":54}]},{"featureType":"landscape.man_made","elementType":"geometry.fill","stylers":[{"color":"#ece2d9"}]},{"featureType":"poi.park","elementType":"geometry.fill","stylers":[{"color":"#ccdca1"}]},{"featureType":"road","elementType":"labels.text.fill","stylers":[{"color":"#767676"}]},{"featureType":"road","elementType":"labels.text.stroke","stylers":[{"color":"#ffffff"}]},{"featureType":"poi","stylers":[{"visibility":"off"}]},{"featureType":"landscape.natural","elementType":"geometry.fill","stylers":[{"visibility":"on"},{"color":"#b8cb93"}]},{"featureType":"poi.park","stylers":[{"visibility":"on"}]},{"featureType":"poi.sports_complex","stylers":[{"visibility":"on"}]},{"featureType":"poi.medical","stylers":[{"visibility":"on"}]},{"featureType":"poi.business","stylers":[{"visibility":"simplified"}]}] + + } + var map = new google.maps.Map(document.getElementById("map"), mapOptions); + + var marker = new google.maps.Marker({ + position: myLatlng, + title:"Hello World!" + }); + + // To add the marker to the map, call setMap(); + marker.setMap(map); + }, + + showNotification: function(from, align){ + color = Math.floor((Math.random() * 4) + 1); + + $.notify({ + icon: "ti-gift", + message: "Welcome to Paper Dashboard - a beautiful freebie for every web developer." + + },{ + type: type[color], + timer: 4000, + placement: { + from: from, + align: align + } + }); + }, + initDocumentationCharts: function(){ + // init single simple line chart + var dataPerformance = { + labels: ['6pm','9pm','11pm', '2am', '4am', '8am', '2pm', '5pm', '8pm', '11pm', '4am'], + series: [ + [1, 6, 8, 7, 4, 7, 8, 12, 16, 17, 14, 13] + ] + }; + + var optionsPerformance = { + showPoint: false, + lineSmooth: true, + height: "200px", + axisX: { + showGrid: false, + showLabel: true + }, + axisY: { + offset: 40, + }, + low: 0, + high: 16, + height: "250px" + }; + + Chartist.Line('#chartPerformance', dataPerformance, optionsPerformance); + + // init single line with points chart + var dataStock = { + labels: ['\'07','\'08','\'09', '\'10', '\'11', '\'12', '\'13', '\'14', '\'15'], + series: [ + [22.20, 34.90, 42.28, 51.93, 62.21, 80.23, 62.21, 82.12, 102.50, 107.23] + ] + }; + + var optionsStock = { + lineSmooth: false, + height: "200px", + axisY: { + offset: 40, + labelInterpolationFnc: function(value) { + return '$' + value; + } + + }, + low: 10, + height: "250px", + high: 110, + classNames: { + point: 'ct-point ct-green', + line: 'ct-line ct-green' + } + }; + + Chartist.Line('#chartStock', dataStock, optionsStock); + + // init multiple lines chart + var dataChart = { + labels: ['9:00AM', '12:00AM', '3:00PM', '6:00PM', '9:00PM', '12:00PM', '3:00AM', '6:00AM'], + series: [ + [287, 385, 490, 562, 594, 626, 698, 895, 952], + [67, 152, 193, 240, 387, 435, 535, 642, 744], + [23, 113, 67, 108, 190, 239, 307, 410, 410] + ] + }; + + var optionsChart = { + lineSmooth: false, + low: 0, + high: 1000, + showArea: true, + height: "245px", + axisX: { + showGrid: false, + }, + lineSmooth: Chartist.Interpolation.simple({ + divisor: 3 + }), + showLine: true, + showPoint: false, + }; + + var responsiveChart = [ + ['screen and (max-width: 640px)', { + axisX: { + labelInterpolationFnc: function (value) { + return value[0]; + } + } + }] + ]; + + Chartist.Line('#chartHours', dataChart, optionsChart, responsiveChart); + + // pie chart + Chartist.Pie('#chartPreferences', { + labels: ['62%','32%','6%'], + series: [62, 32, 6] + }); + + // bar chart + var dataViews = { + labels: ['Jan', 'Feb', 'Mar', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], + series: [ + [542, 443, 320, 780, 553, 453, 326, 434, 568, 610, 756, 895] + ] + }; + + var optionsViews = { + seriesBarDistance: 10, + classNames: { + bar: 'ct-bar' + }, + axisX: { + showGrid: false, + + }, + height: "250px" + + }; + + var responsiveOptionsViews = [ + ['screen and (max-width: 640px)', { + seriesBarDistance: 5, + axisX: { + labelInterpolationFnc: function (value) { + return value[0]; + } + } + }] + ]; + + Chartist.Bar('#chartViews', dataViews, optionsViews, responsiveOptionsViews); + + // multiple bars chart + var data = { + labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], + series: [ + [542, 543, 520, 680, 653, 753, 326, 434, 568, 610, 756, 895], + [230, 293, 380, 480, 503, 553, 600, 664, 698, 710, 736, 795] + ] + }; + + var options = { + seriesBarDistance: 10, + axisX: { + showGrid: false + }, + height: "245px" + }; + + var responsiveOptions = [ + ['screen and (max-width: 640px)', { + seriesBarDistance: 5, + axisX: { + labelInterpolationFnc: function (value) { + return value[0]; + } + } + }] + ]; + + Chartist.Line('#chartActivity', data, options, responsiveOptions); + + } } -/** - * Socket handler, check for learning status - */ diff --git a/src/api/static/js/dash.js b/src/api/static/js/default.js similarity index 89% rename from src/api/static/js/dash.js rename to src/api/static/js/default.js index 8af52df..f8b6e22 100644 --- a/src/api/static/js/dash.js +++ b/src/api/static/js/default.js @@ -1,20 +1,3 @@ -/*! - - ========================================================= - * Paper Dashboard - v1.1.2 - ========================================================= - - * Product Page: http://www.creative-tim.com/product/paper-dashboard - * Copyright 2017 Creative Tim (http://www.creative-tim.com) - * Licensed under MIT (https://github.com/creativetimofficial/paper-dashboard/blob/master/LICENSE.md) - - ========================================================= - - * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - - */ - - var fixedTop = false; var transparent = true; var navbar_initialized = false; diff --git a/src/api/static/js/demo.js b/src/api/static/js/demo.js deleted file mode 100755 index 725fa11..0000000 --- a/src/api/static/js/demo.js +++ /dev/null @@ -1,315 +0,0 @@ -type = ['','info','success','warning','danger']; - - -demo = { - initPickColor: function(){ - $('.pick-class-label').click(function(){ - var new_class = $(this).attr('new-class'); - var old_class = $('#display-buttons').attr('data-class'); - var display_div = $('#display-buttons'); - if(display_div.length) { - var display_buttons = display_div.find('.btn'); - display_buttons.removeClass(old_class); - display_buttons.addClass(new_class); - display_div.attr('data-class', new_class); - } - }); - }, - - initChartist: function(){ - - var dataSales = { - labels: ['9:00AM', '12:00AM', '3:00PM', '6:00PM', '9:00PM', '12:00PM', '3:00AM', '6:00AM'], - series: [ - [287, 385, 490, 562, 594, 626, 698, 895, 952], - [67, 152, 193, 240, 387, 435, 535, 642, 744], - [23, 113, 67, 108, 190, 239, 307, 410, 410] - ] - }; - - var optionsSales = { - lineSmooth: false, - low: 0, - high: 1000, - showArea: true, - height: "245px", - axisX: { - showGrid: false, - }, - lineSmooth: Chartist.Interpolation.simple({ - divisor: 3 - }), - showLine: true, - showPoint: false, - }; - - var responsiveSales = [ - ['screen and (max-width: 640px)', { - axisX: { - labelInterpolationFnc: function (value) { - return value[0]; - } - } - }] - ]; - - Chartist.Line('#chartHours', dataSales, optionsSales, responsiveSales); - - - var data = { - labels: ['Jan', 'Feb', 'Mar', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], - series: [ - [542, 543, 520, 680, 653, 753, 326, 434, 568, 610, 756, 895], - [230, 293, 380, 480, 503, 553, 600, 664, 698, 710, 736, 795] - ] - }; - - var options = { - seriesBarDistance: 10, - axisX: { - showGrid: false - }, - height: "245px" - }; - - var responsiveOptions = [ - ['screen and (max-width: 640px)', { - seriesBarDistance: 5, - axisX: { - labelInterpolationFnc: function (value) { - return value[0]; - } - } - }] - ]; - - Chartist.Line('#chartActivity', data, options, responsiveOptions); - - var dataPreferences = { - series: [ - [25, 30, 20, 25] - ] - }; - - var optionsPreferences = { - donut: true, - donutWidth: 40, - startAngle: 0, - total: 100, - showLabel: false, - axisX: { - showGrid: false - } - }; - - Chartist.Pie('#chartPreferences', dataPreferences, optionsPreferences); - - Chartist.Pie('#chartPreferences', { - labels: ['62%','32%','6%'], - series: [62, 32, 6] - }); - }, - - initGoogleMaps: function(){ - var myLatlng = new google.maps.LatLng(40.748817, -73.985428); - var mapOptions = { - zoom: 13, - center: myLatlng, - scrollwheel: false, //we disable de scroll over the map, it is a really annoing when you scroll through page - styles: [{"featureType":"water","stylers":[{"saturation":43},{"lightness":-11},{"hue":"#0088ff"}]},{"featureType":"road","elementType":"geometry.fill","stylers":[{"hue":"#ff0000"},{"saturation":-100},{"lightness":99}]},{"featureType":"road","elementType":"geometry.stroke","stylers":[{"color":"#808080"},{"lightness":54}]},{"featureType":"landscape.man_made","elementType":"geometry.fill","stylers":[{"color":"#ece2d9"}]},{"featureType":"poi.park","elementType":"geometry.fill","stylers":[{"color":"#ccdca1"}]},{"featureType":"road","elementType":"labels.text.fill","stylers":[{"color":"#767676"}]},{"featureType":"road","elementType":"labels.text.stroke","stylers":[{"color":"#ffffff"}]},{"featureType":"poi","stylers":[{"visibility":"off"}]},{"featureType":"landscape.natural","elementType":"geometry.fill","stylers":[{"visibility":"on"},{"color":"#b8cb93"}]},{"featureType":"poi.park","stylers":[{"visibility":"on"}]},{"featureType":"poi.sports_complex","stylers":[{"visibility":"on"}]},{"featureType":"poi.medical","stylers":[{"visibility":"on"}]},{"featureType":"poi.business","stylers":[{"visibility":"simplified"}]}] - - } - var map = new google.maps.Map(document.getElementById("map"), mapOptions); - - var marker = new google.maps.Marker({ - position: myLatlng, - title:"Hello World!" - }); - - // To add the marker to the map, call setMap(); - marker.setMap(map); - }, - - showNotification: function(from, align){ - color = Math.floor((Math.random() * 4) + 1); - - $.notify({ - icon: "ti-gift", - message: "Welcome to Paper Dashboard - a beautiful freebie for every web developer." - - },{ - type: type[color], - timer: 4000, - placement: { - from: from, - align: align - } - }); - }, - initDocumentationCharts: function(){ - // init single simple line chart - var dataPerformance = { - labels: ['6pm','9pm','11pm', '2am', '4am', '8am', '2pm', '5pm', '8pm', '11pm', '4am'], - series: [ - [1, 6, 8, 7, 4, 7, 8, 12, 16, 17, 14, 13] - ] - }; - - var optionsPerformance = { - showPoint: false, - lineSmooth: true, - height: "200px", - axisX: { - showGrid: false, - showLabel: true - }, - axisY: { - offset: 40, - }, - low: 0, - high: 16, - height: "250px" - }; - - Chartist.Line('#chartPerformance', dataPerformance, optionsPerformance); - - // init single line with points chart - var dataStock = { - labels: ['\'07','\'08','\'09', '\'10', '\'11', '\'12', '\'13', '\'14', '\'15'], - series: [ - [22.20, 34.90, 42.28, 51.93, 62.21, 80.23, 62.21, 82.12, 102.50, 107.23] - ] - }; - - var optionsStock = { - lineSmooth: false, - height: "200px", - axisY: { - offset: 40, - labelInterpolationFnc: function(value) { - return '$' + value; - } - - }, - low: 10, - height: "250px", - high: 110, - classNames: { - point: 'ct-point ct-green', - line: 'ct-line ct-green' - } - }; - - Chartist.Line('#chartStock', dataStock, optionsStock); - - // init multiple lines chart - var dataSales = { - labels: ['9:00AM', '12:00AM', '3:00PM', '6:00PM', '9:00PM', '12:00PM', '3:00AM', '6:00AM'], - series: [ - [287, 385, 490, 562, 594, 626, 698, 895, 952], - [67, 152, 193, 240, 387, 435, 535, 642, 744], - [23, 113, 67, 108, 190, 239, 307, 410, 410] - ] - }; - - var optionsSales = { - lineSmooth: false, - low: 0, - high: 1000, - showArea: true, - height: "245px", - axisX: { - showGrid: false, - }, - lineSmooth: Chartist.Interpolation.simple({ - divisor: 3 - }), - showLine: true, - showPoint: false, - }; - - var responsiveSales = [ - ['screen and (max-width: 640px)', { - axisX: { - labelInterpolationFnc: function (value) { - return value[0]; - } - } - }] - ]; - - Chartist.Line('#chartHours', dataSales, optionsSales, responsiveSales); - - // pie chart - Chartist.Pie('#chartPreferences', { - labels: ['62%','32%','6%'], - series: [62, 32, 6] - }); - - // bar chart - var dataViews = { - labels: ['Jan', 'Feb', 'Mar', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], - series: [ - [542, 443, 320, 780, 553, 453, 326, 434, 568, 610, 756, 895] - ] - }; - - var optionsViews = { - seriesBarDistance: 10, - classNames: { - bar: 'ct-bar' - }, - axisX: { - showGrid: false, - - }, - height: "250px" - - }; - - var responsiveOptionsViews = [ - ['screen and (max-width: 640px)', { - seriesBarDistance: 5, - axisX: { - labelInterpolationFnc: function (value) { - return value[0]; - } - } - }] - ]; - - Chartist.Bar('#chartViews', dataViews, optionsViews, responsiveOptionsViews); - - // multiple bars chart - var data = { - labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], - series: [ - [542, 543, 520, 680, 653, 753, 326, 434, 568, 610, 756, 895], - [230, 293, 380, 480, 503, 553, 600, 664, 698, 710, 736, 795] - ] - }; - - var options = { - seriesBarDistance: 10, - axisX: { - showGrid: false - }, - height: "245px" - }; - - var responsiveOptions = [ - ['screen and (max-width: 640px)', { - seriesBarDistance: 5, - axisX: { - labelInterpolationFnc: function (value) { - return value[0]; - } - } - }] - ]; - - Chartist.Line('#chartActivity', data, options, responsiveOptions); - - } - -} diff --git a/src/api/templates/assets/img/background.jpg b/src/api/templates/assets/img/background.jpg deleted file mode 100644 index 0fc579721ede68b54706998a4e4e1a8282186341..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39026 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 diff --git a/src/api/templates/assets/img/faces/face-0.jpg b/src/api/templates/assets/img/faces/face-0.jpg deleted file mode 100644 index 5a9348ef38d148e575595b0cfd2b6ba550c880e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17964 zcmeHu2V7IhxBsNmdlxiP1qDJ0P3Z)P(yLuV5<)0RNCE=7irBlNqR6UaRI(B zZ83b_0NU>=0kBY$J-u1{I5s&ffiLEZ68HkLZzPo*%wTePNEp~t?5J)O7dLw<+0Ne0 z(aFt$0syWMBh6PL0iY1uum55pZh(e)A&!W_^HD; zFg5A|p${zr(5K{<`8N^){?@^VV@@=EH83X1C5 zs!B?#+IpIr+M1er>Po2Vdq@M{`WR(JMP(IbH5C;#Efp0NEyPpNk|t6ACkiB|fw~+h z1cf+^F~F*0aOxPzeOO2ZNe#vmq9kBY2LU4v2QXMXfk={*S5SnN|8*n=U~#fYHGsim za9BK+KqAT!a7qp^QXPjMu3<;;4rgc@r_Qw}YOUF}-^avMJK{{7gQGB~&X;7C8`;(R ziYcP%6djmn?zc9IMXTN}cG9hne#q`VIREU;v`4S~E!Gt;IJCZ|;c-vN;d6~`y)p6W z3-fkVo^N{c#yKFCGh@+)(jym|pT1QGSS&<~M=_Cz1S$$)xSa+bB1kpXB-qbgqlF+i z6H(XYU>esd%*pkQ)MkntUzrgR03>s2bv*>JU6)0Rb`rB6_CxqF0*e6%k~=^Nhvumc zJi&{4x|u82&$Wk_!Px1{U-ThjG|q?Z7VM?l{64aTjuBlg%! zy{L|->K&MevscV{`?ff*O}BYXSmmiAmiJ@z+ZUJF8eKnq)p6pS0M^Xkl6tHq;G}yZ zT7cnbi8!vixuTU#hsG`G#HJPGi@N{N%Xl(T^~C)ph7!=!LAUx!XaETLgSB{v7Ks!R<$Uwr$@_4P;2 z{r+C3{Jw)>ws2SDn~>_vc|E%%V9&_dN8zh)+?`bAGDiJ1?OnoXd~Q?ixsSA=bxzG@ zTbQr&KbH(GSpWQH`_XIbRc1|kzX#&4NYHMro9cUD$mshNi#rzWr@usu4apt5D(vdT z3x}7N9im>n$1Z$s!=IBgmTy|t^XcmHWmB(=8#nP3b!>bl2*eL$XH)Ezu;^SkME7`wP~F?|Rl+Vbn6G z+vZbSWGU;|%8%M#njP0ne&gOD0rg3=04DBQfqysoBz5kS+Vlt|e>blBRF6*t=oj)x6re!>4Ex z@U~e3%*NAAk7l>E+`d2mwcGy7H{DKdEv}fRv)QxV8jBe+8ADo~CZ}@xZ0g#uVU4Dy zI}Uz0x~i^m@3NI!d!jS1)@FQqvTCitq5OFZ&l(qob{Bt%N-dmQXoxAK2im2MJkN5z z_x2a(ckfjnZ!ea1zX4#)-vEQC|6_ggw&aD%!h!kA!G;1{eCWY=GjuprL;XP>8s~;G z)4m0=1!-a!L?&F|n=FiE^U_jeH1doH@bN{Sbe@kq(U4yg8FCUHXJ5}7c6sR3n{L6$8bf<-2?_-S!o{1zmLx&R^XPduOGKg;hkJq2YGBouA<#5f*%PfB367x$Bjl$EzG4yiLN15P>+6L|v`9pI zD9VF6lo@GaegK=t7Ba+a7G!{^Oo42iRgelJ93+M=9c};Z^5fEk$%6)Hm@#7fuQ|aY z&fq~D8jX=Gj$&}Wl2T!^VLEn(m@W#83J#JDN^&yxSHkiMd|{S%GM6K>l&ZAwfigD4 zL1MAv8ENPsDWA?3ioYWsBV&Ipt{BJhPizajfqX%n_UcJh~&mG~<9pTR%;m;l6&mAGM`}{w;BSdG5;c!v_AR7KL z$aJ9!yy1e358~jWj10oiC7Kw9MJOeJ5}JP_K?c4c5=a-vXb#dtW{C3Ki%w@S7$5MkS z!2(})0yi*A$d1ekiDG6YFKG?ZjeUUw#H;s zM4aSqjGlgy#|MXzefdH*nQB9^W>TCeWG6ctI|oN+XXjC5c%)0QrP$lr*<0H=yE)jq zQ7Gg-XAE-_vf|w${QUd!f+2U~zCz8IF~eqtgAHHEv9)t`bwza8+gn2kYf&ao%*e3j ziA-b~{MaIxzUrqp*VQA(orY$>}oxvfYi5b9ifti?uy93ZBE; zJGZ%D04VTMu z^LKIfx3hD0q&VACoLubed?-#nE)-W6J71c=w;#<%me!BYOhYPNmX?L2b^d2*rP~We z^8ZK&>=XlqmTB;Yr4Yf|6!mo(9|ot7O6GbXMML0G>|7{=i{?u8r@44LI=E6Pb~Ii7ZZ{|;&CcGR;_B$=;_GBjv$wPJcBJ|G_|u&1sWevyM@Q<9Q~JApZ4y^U zs>1$krGs2ih#8wQKur#iMb926ve_oG}oxf2#73O({R0KP~Xn0zWPA(*i#&@Y4eS zhb%C#*=6(K(qabO%1R!p`oYb?w6KU!e|iuN-IuF6G6aHTEWFuBftQQ$Zk0TK!bCFZ zcX-933)F!VaA7b-0`IV}Ah^l?fqT;=y)C(Ejp+J;(2v;aEVxyLX9QtTAdV$sra<}- zJasl;3WV_Xk#Ga@O=gG%2;Bo|Eg=L5kDKKXnj@tR5jsvvQ&5?x2zaGP^n-75DKQvA zc=Muy=qIN$IZ%&^0MZm5i_3#_A*4Ov3Jl(LsI)+OR7wgT(yGW|_lUSbdN_k<1|zOt zCxgN1r=?|qDPhKaTQ4;5pY&3a)1bXjhaAN#B?to};8P3Qtt^Q@4xu4-%yC{^NGPP? z#SrEq7rn_r={pH&fyki@BHzgr`63sO@G1`rSPVbpY7N>FtCN-#?cGP)GlY;r<*^}L zF+Hk}juY}D`t)Pd*&7-0%>?9i@hOAibOCVX&+=I_#%8%Mwk|XU^a#Po_L`@Qbs6)(@Q}wkdb_GHcSSJ zK@ZYi;)JL`X$`77(rNMt3Jn2dV z-0Pi3I$=l};}0(@g@6Ok!>s!_vJ|ms3=jH|APc+zJSZdTPv?WivOzlJf9~f>(^`Xg zG&UVgkp!N=98&NGcn|z&d=T`#;NKqaf_IgrBdf}A5@|#~Vj$6X%SQ2l%CoCHka%I*-P^a~y7_g9dcHaCTS?qv+(Fz0+!@>@+;Q9yK*pWI9mQS6oj~Y5 z%>Jl#IQ_XrptehbW#GzWC>4};$|qT4f1fR}n20N15(Y(R!qG9m>4!vuh1Pv8OVn*p9l zH|(0L0XT7knI=q^%Hfd*0lo~O3VVh=d==INjDTgbhqK6N;00)4EC>ZrU;>y5t)2i< zAnF-l7MKebf@NSeSPwRVtzbJS1G~Wia0DC&XTW)I1->%d2=2nR(FUG_F7O6?gfA43 zFv=KBj6P-<#tbtOV~=sccwlIlAWQ^i0%kgfgW+M)Ftaf8Fv~Exm`#{%n4OsYm}8hT zm`j*C%xz37rXACb`GCb?m9Sb^Bdj^r7VCob#*V{AVW(g@*i>v5c0P6`b|bb3y9-;1 zJ%hc1ZN#=X+iwng~#Kq%;xY@X+xIA1DZV#>s*7Z$X3$7FQ z9#6z;;>mbx*ggaC(Re046+aul9KQ))hOfle;BVqv@m=^Y1Z9FDVI;wgKqrhRa0oL9 z3ki9I9fZS#bFfFX5#A7qL>;09(HZv53B*L=OyY9lX5wDrX<{Am5wVv`O8g|JXzDmAUzD@q4g1Ul*g1bVLLZZT4g^db(6wWE!Q+TbYsA#O{su-@wRm@i0 zsJKt@qGGG!dnFAeDPAlD3dabOiY_9C3JW*M!yi$3m@>%5v%I{P( zRcut~DlC;bDg`Q)D)lNaRpnL9RJ~QFs%EL?sUB3VRqa%hS2I`hRb!~lRx40Drq-<1 ztFEbTryi=FqP|?cT>X;zGYyi4xdu&xr7>S)yT)0KN18ZI6HQ-Drsh1&V$E}!ZCXSv z3oW`ip1y+*wc`ec2YevL|18p$2Gd1T!v!YJ2KyirA?nyrbZmlba%_&+ytFm7ooKtp_JZvf3YC&fDW=@D)36(Bmt$9D*KKcQ&$KVFZ*Wj{ z@OPNwaMaUxE^(ndz;CJFb(#h(nzo7d zz~9)P<6q(56+jJ`8E`s~5I8PyO<*(Kh|Z+%q<4*V9{bDKnsG|wBFAkS_b|vRNElQV zj13+eyf*k=h*=0P2B*!N2 zO_58Po^p(*!As)R@Q3m<_;rGjf`x*XRJYXisa?Wx!W|-vXo~2lSPL$7uBMGhTaeb8 z?vY-Q{%%IhjDs2K8N7_EnO2!gGM{GoXO+yv&t%T5o;7^d+*z%^c>l6(HfDC*?CLot zbLP)!%MQpco2xK4Y3{WgN=|N0&%D@qRr8JJXU~7MAYehoLY0NWh0TjbFWR~oznHuD z`VxmF`AfbmWi7qDjIu0m*{9{q<(F63t=PCivNC?<^;J%*wyY+u=B;j8z1zTSwC(4r98*Hts4|Jq-|)~7_{+dzG?pI{7;(_HZ>Ob6zu)g@Yf~3 zzTM2)T))L@%bu-9TbFJ9P{=L3wJl&3fJ%`K={d!pQ@X|_5WoBj9k%S{HM<*PuJ2v)Mb=Byq!@t@5R(gE+@q!cDCsv(Q zI642MhJ$l3SMpfOIx|8*u^=EGS-8|nwZ@AJJ(pc9N z-E^yYa&yZq)~#o^lW)JelYZyp-RygWdrR-D-Oqbq_@L-_%is65IJKN;^=rNQF!JHu zN6bghAB!G;YMcK=`AOc>VNZ8HvwwEH-M{@t$E1$7=Yr=SI~TrCfAQwWMh<;};pOW*0gD|_$q{=$dY4^KbN_(b}&@w4UU zsxRZd+>@k8B*=L^x)#7e9}8c51l^_Zoig}xrsfU!zLJV`|Ak7RAJ+6yaJhj}(&r#r zx<^CfoB$~Gg7?YU00f-|U<>@4L0Snuk>z)k7r;6=^#36TaiVw!dz8Q^3E|S@oka55 z2)?#e1;A&aMDlU7MDn>9uG?<|a5`1G??a@CYVhqQON6?9l{g-G4t9e+a`A$E=|?UD zZ#rTj3BSrfeJtv5SR8cF!y^tyKpmX7NhJ7XOrPtM$3r0!0Z$kdBa`@>rv&}TIC9&4M4K<)|3l3W@y0=UDn8NGwC|xvtPSTr}b5YgRW_u zp0A@>j)J~0(wv#=M=gpvU?6g;uD75$`#6^FQ#Ei_W#Y>iM z%->YDv;63>s*9H{-@1M0S$oI3_aD>&{3-{Uk%+_Nh$Iq*3n8lm{BVMX9nrfhoIyf9 z&4J(LoRPDy(`q$&<)a-Tuj3F`FEq`m&Ry%PE1FkyfNAC!`S2js+z)=96K$a||B#-( z!3aw$CubK|H~)Y@`q&r*Ejyl*z)cjVrO$wH7A#x@5v^OFw*jKsUR<)H6hb>(c?6<6 zTXXLG1qktGLt|4j#QErP+mojdZ1?M)-ZyU{oYzWFceZWye4Pf*m|=~km~Jo3GFo59U3dt--YotXNxqVeVb`Y}z?I5?;O zaI0zh7j-xPSa;EH4O>p`iRd6IXSe26oatKP^whzi;$Xi2?>6=`9my}9+>TVGFwd`h zY_Km_|8nBSk(MnLCHaY#SjALrINJF~S!jIe=_#eU+N`Dc1GS~ep+@Z| z;^Q_yD4@nJs5$UbfB2oiw}Feq*z5I!JeiD#c z>ZGvmxU))8HRZ!7Tb0s@6O}wnw-=YL>MTwz3-f3_M~)QxR^4A)@qxXi%;7=o37ug} z8s^v+=c>PqjNSIybotyJ&5hZe-i%wRqnFHcd>B-B^`h(Lc^>Rp&UQB@D35&~-IIOq zW>Zl+C8xL7C)r>T8!%?Zux_rTmFW@ zn~F;2TAd;o-Fm0GVv$t|Yy*BDx4+la?6@x2Tbp?yji*ize;vKoVZh7{E7=imqRo;bZYOd+c)DnfE zE^RSiV?QPN-q2k5yxi6JV3~eIsckqjC5Jw;WE{ooRcPD&JXf!S$<|DPm^@_Yz4DvJ zmCBCd89Tzo%{K1T@Ri#s4_Ca_YfN#!JoAWp&4QfGWvYuCax;sK2^sm@L>qQT#Exc< z@*LgvYozr`YUm3!voxm_xc$+xBnw?xy4l}Zs?ZP=Z*RxKOTG4s5;-_0JPm!o}C zG_{df(V$ICLNO?ApUO+8RP#HH<H%N3sX-yhR}<)8O>6%afPXx%{#yY4A5Fe}w%+k6K<6xFeojzGm6g`cHI|ll zN~-zmudSzj%*`xHYG}RI{Bj)--y zO8z)-mbPXVf9D@H*Mn{@*`{0kpr|!x%UT;wyZ)@zmd{=rEt}#$mxG()S>thXf{M6l zX+ld_oXc#>P@}0sCTagNs_H^`fbqpe&qf43>K$898(U7Dl469{h>nd82nbgDeN=DA z{-RafQC^0X%Ku{?T-@~JB;KISpstjd0rvLiUff7gmAhe$8d;IJH3= zUk(}7d)q2?1>=0Tl6^@|wEyT^n$y3Wd30W@nKs!fd-3_17aME*j;@@vXX#rx^Z6@g z>lpIYWA2XCer^$sH^&qt$$7qN zGFx&@KI(?qn54p$gsAY| r5r+4(4*s(p+CLvdzYFv)ng4uv{7W_8Ey(|mJBt6l6}~o&ty`9^(N*~`He05mm$O8@{6 z14NLM06y4)fd2ppBX9!O1^^of)9>~z$c0}#cp#4u0M-Bt_(4I0aqZJ!J2J!pAo$fc z4SaS0r29btz)gMpRDdCE;B4CVNH-+f9_hlSq$|dzX$^I7#=?NGppdAPprn+L5Sx&Q zl%S}Tun+*?zl0o(i@^ZEOT6FmyAshf64FsPCf*A!TNsRdbkps0n0l^heVQj$%Ab12P2#JVENXbCw z|C0y-@bHg`)BuD4f{#alcY=tJ_yj(=2uP&CCtyD*bVA{#^(hY5+rosWqf&|#Il0d0 zyt5GzMcwICB03kXyYg)niWZ}NRebmS)hBu|<@c#>;&fg56Y#Z?dkx+0lj|znPt)$d ziTTj;{pah_#@?w716z;a*z~fdzUfT~RYN<^khqNU=KddBGyonRs4W3bCnCZVVmKAp zg-#NH8n|+tIw5>J>NHk^cRHObB3w4#P~U>?jrFKq<@QVoKx{vmdOf z<_Ojs&HRShfnn`A@eHvx`ZrV@UN=UR#lA7DtdfT2`kuuA>xTFnd-FN6rLc+elhyX` z8XY_{+=!%pu)5zf_)$J+(btaw%+$2<{Y`hrJ7tTD8@io5vow6(n2g4Xvc5W~o32dm zK@C})I25QFqf^@b^l4=8usw9fq|KbtWA?78cwc|@PE)DRx%$bFxhKrzw&tl@&$RI| z06}p%S4O3pYy9{ma?WW9udSdlX-j7Y1HAQzcm8b8Wj>Wt=Hu)nsaj3HS`%oJx~qZ# z;-g;>9M4ycD_R%R@q7MSAqUPJoXf zNbad>rv|aqy{A>0=OUb9qT3kZ1rB^JvV3SAjcbfAPU?>N>tO)KTHW-4PZm`_?7l`b zZH6Or16JiWQAL@W&oit0{dGd^T;Z@+`P?zqvmxOPqfNHs{z=^{z#Z4Rhc~waXiw>{r zhWT0RtM^&t4y0)fdkS(I3O1T{jrp@*98Jt782j#+-3WrTXg7b%IR9u(XpAqtFQgx;5h6O*FQ&k7 zjp;25GZje#cffU%yAYl3sEBNx@^G8^Lq4&LbK{n~$w7Lz;hx-NBt>U)CLA%)I7o#dgAT4|gv!923Oq!~sCXiool`Sk0$@<>ealvuEv4y2Trxgf( z>=D1mXW-9jdGWA0VCsTDV~!N7K}ibX<)5D-7m{LE$Px|xa_Oqq8Jnwno5!lSq9?kl zctT8TZ^FKJhDO-l(7cm<(ZN4fTD~t_&Fn?3`aFKw0m9x_O8-1l*W}nfcc63+FY6Z1 zjHSNi41LuePkx_NwaGA#ONh{0+NiJ7m6DF?9+70%?ntZNk-y#5qafpOpRPMf+57Yr zW6eCOyv47j4QMmEi-#go40GmWi*L$3v^39mo=td>t`t~8QGQrfB~hL6)A_j>y-=a6 z>ABMKp{6HG9!&vIPo&SA2J;P~!m^<}MCs=cvCpyuzGnSg6im!L%8z7{IQP{I#)~%` zn+3{Z{Stl4UX~&eu)E%u#Jev|*p3dfvDj4CQ8?Ogq zx{v&*H#fjHCnF#L!2qh45-)Be9bku-hSV-j)@8!VGY9=Rf(D9f%c$Y=pl2A$s;k zN(AE2z9?l}YRu$k!^tat#ss%lR@`*-imUon8>~xsq*-FamrCz0F_rVG2UHFwO-5{( z5{_lLb}wo<Xy5BHJtBuALjd82I|epS4%TQv{u7o#gmOc47Bnz!o!*d+ALZf4^Gy0%4QF$crNCb zNA0QRRwyAJWCsPlo6rXxMU8^aBh3m@Cz%hJ(v60z@+N1D9c6mlc1L&i%$Gk7CDYgi z%Y8c&EqeL&A+cv&n%l4xve%E4p8#gmZn5*Dr{a0Y(xI-uW~e(?Ol)y9c*tS^OwaEx zlWQU_Md($hhEG}LlVe?NJYJCs7J+eby|U@lzK*!LGvta^TYMPY71*aS_Eg->=_ShBQ`fRFhFOOoR@)T zN3vW<*p0KV0(%e6lLyj@6A9fhs?S$VS5uJ}boPPE7pV*pe1K_6nAhB}V$teyCc8dl!G zdhV3jodeVP&(G+$X%9cnY%l*T9+xYSRb6)~n3)j50Cm*?FCp8uv_&Z;hg*YM_hQ3f=ATEuf+^gwFKqE`3d`XG#U z+1{i3W0at7#slaTjt3(&y9!1n&pRjBn&jhKg%221r^&n2xcZdA-%%Gay}y>hQ$%r9 zj(b^!aMe5Xh#TakGx~XSlIMK8MRmGcll51Ix!RlKb`8wKa_!$SfFVo$u4C}~w<#}t zsnWZbnr7k;^TH1nLJz9P_iK}1o6zrs&-?50%&TaWGdX6>KK4iydM5jNFEEh(UAw|= zZu9WNs9ruAJKfr?An!AGXD3Vcn{xKc7-_h@ckAa|KrIm``b69X;M_BL*?so-afW=J!7FS zdJuCAd`0bLWOI&Xg^_I4LlS!!AivbbCxG^Z&2uRRCFx*d?%glDT8CZs-_v0lY2diR zvwnv3O$2Okewws81q|S~!&wz*oI(17agiSJrr*mUmdvqpEY-+kk9#(otjh;7xBsmy z!`e9cDOxjG-FbTPXJ5W$Z~oo*iM^F%vM-AcJ`3N^9(ERYECA2`^Tc^^VxJGdpP?6hLVCVb25Pmk>Q|NCUjmY% zVllui=bFwgUmr)m9#?LIX8#t= z(LZD}{B28eCI@f#$mis_ZQGhdLn1zX$~Yul-laNxKhujxEb1fm_6~&bUC$YC9i7AU zZRo|dW^rZAy>9dmoHKwAs`hF~#11CNSfoO|3(jQB1X^AkPsISeq3@$_G&eM}2*hp} zCq@h>m#=qzJ6xYE!!1@j|I~FO%C#G&+}E>$h4N@Vc!9N zjA`7#0Lb*Jm~Sl?3jOZ-2k$xU@`WRJy4RKk;-+^Z)|31EBl0H>N>XhnZ}a;L49Pw1 zoD(@r)T@#;9G1GlqIG`A$o#-cy#6rWLNwZQ$8yDe&tGm!UGAgfA-elepa28htb5n9 zD#8$@Wi-oer~j_6XlQPygmQTdo*Z8tm^122Rq(TQH<-7~KTc;kLqG4(BUE)+$gd+h z<;#k1QgY(Y(TMwdbuE)S0vn$78};u3veo>uqcdmZFoT#yI@Dk9?jrnxz-2`>O@ec{ zS4nDI{kIB7lfogMfHjtmeU}CRG8Yv1!ms7-=Hl)Kg4kdKpoBo_!kyinj@#I$j;f*( z_NnIV20x}@+c=z)9UJzk>7t0RK_U@Y$y7MGx(;4gc0~s_EFQ~qG#(sv!`cb1r);DL zqOj~Z{iLxBkYcdn6*2I(iUoJuZk&c|Xwoo!IR0UbNE=5Ig=<*f7< z;OzDnpkaeR|EAoqbMyEOC_5pp{szEl{v}!w>S(8Ba|;TNe`LU8%iv>G(t)wD!I17Y z^2o1P5LZ-D&i{r}MEpCSA_}Ib@9d_+se{0J;&)L*z}Ws1UI&eE!{N2P5b`>|*-1U% zP&Xv%sqvFb)kqOyfz9dZ+tW? z)_eGixHk2#I1S|ZiSz7v9F6jb8(Yf-{qi{l4u_3XdEq!2e#0y{sp~kH1XqI<1h-Pa z7#6mW9=ia5;CMH1*lU1*tu07FfHfF-0t@69CgoYeZ;UVwZvxiGJYqNu-(MJ<%xw?` z02ctj{KtYngC+k*66XI84QC6iXaJ1o;bup06bHjv>S(tJVp{+n^vJIdDWDHH18#r=_(1@000!^@ zU@-8v^|8Fi<=3Xbfye!iX}IU#8IB3Rl*EG0?g;ETft@U&4bt5ihW?k`26e*@jWYvw zi6W5Bb|8!^*roh;SkVpX^b5wS0_fP;AJefgAsXQTg`*7+8rTg1`NudXa5NB&J!yz= zfZEl+$tJQxA>Cd6fg(hr9PAvNf9*4JWnHXvEgTM%L1FFghE#<+!%^05a2SXH^t@e; zPg2q&W-JCvQ9C+M|8LJ9-yMbc+Yt;7j5Yp0F`8(*zaP_}(X0_}de(OT;G%@W!G3Tr zH#PJ%Jxz_{V~6+{{SRgmdnC$70pVbGY$>Xv$zMB0gL)9b;I`K8xMPsS1CDb059|iV z=zp@4+1M!|5lGbEj7xJQUs3fp0qg?YKssY>P2z@h0l)mv@Z*JnrI8}Qh4gP&avP)@ zxS;+GPX@Z!{$JT~JMaQl7(fnw@Z?r-?W5gBgKI;M&N2dQto~?0AMIN#KR|`uq1dhR zYY#!}0U+}&h{pry!RYp%==Y!K_n+wZ^*_snEJ=k^wKWJRb1>`vO zKX9-CN`NkK6bQtPa1;$A0`Ibc7qTD#<{M?6y_=hhlz@OUn%^3Ge~urDbQ18gb`cQb z7Zd=l$a%R~LmlC6Y&LK(79_*5TwTw><^Yr7Fci}i)O1mT+dEwILBVx>ZsEjKnJO>H(MBnr+Z z#xKYR6%-d_6Bpta5)qYuDl@u7w-D2g>YcQEiEZ) zDE4nmG8|B>E8#GXUucK_WTgLbqDLY)}#(Z4L9 zXl?h~7P8p&`(Lg>1yK=6F+m|^2{DnQF%b^`-cwmfSVd4$RP?fvxUjOYkdT6?vXY{T zvbeCAvZRQpsMvqqQ$ zAo%$BCkRfE5E7D5kdly6P+{|=sK9J1u>5+EA3^`@_Zz~z|D7iVCKes#Nqqpi!9Rdw z^})W||0={JghVGu!Nenc2uK5~ztK(*f_Nf)V(>BvAs&PP+wq7B!OjNElmggjPLT+n zq&}@JbcU85m%)S&W>Mi2p1>ml<>T0B2#EkNkLr{H$7y1=o7U8VU@p~}C`BC+T28K% zqHi|QsiG&bX(CV z-&Rr4uTGyRe&2PJwFCi^wXjzJ>fZul#(58MxAHF4WR}qJ!#=jWasqD(;Aiic25k`) zA&8(28~{L>c8~GOr0lciqB);fACC|KP(i2Pwk^_$>oqSlxR+~g)pm6drkAgoKN_&$ zzBCM50PrfWlT9ovvg?#FOqLYzh1J~6$t%u)kB%5-0w;WFOiH08@mcoCgAE^?a`Pvb z3cN4mP&|$)$ht5>+ip_x7GSsj*p+Ww-#*&{4diZq9(N?#4yKs7cR4!%DjwT6pvJ1{xMh{N3npR3n!gDQ5j>fvTSN(9g$~$h5 z!fwG)V?*u@0I ztXJ$bWrsc6E8m%1rRBM?hU}ECW(ovdMhpS3V4VOCHLl`M`*V=E%srpz(o=gIDX;MT z<#W#Q_~32U%9Zn+<3Y^ZHV;+TStdWlnN`)py#}sF8B&`IpVm01#!vt1<|Efh-8^}r z9z5cRuLSbGE5Q6&`Rjbu+f~WbI%a2?^`w|2gwsXt@@En`SBl>$qBi>Y{PTl)%0V5M z2N$e)sJZDpH+fBk*!&3Zh^$vWbQ>9S@BWs=Yo+|EEz~RWY5@JYIGEgW(`6EJ_r$gL zld5hhu#`#fD=HD%+l*z>_f3V_E#w5BHC*kN3bvmWt&AwW*z@es6`upIr}i94R}`e2 zU4z5voEr(#9v-C7QS-(zs1P@oJq^2|K%}XMDA2g-nq2W*;(n^z^+$dZ8^n~4lg~5l z3@Kk;FKuCmtf^dh>W#A$n8S#*6ref{XSuZUfI4W7mz<-;iqbK|V+9IoR)OH)9 ziEl6OlYUoIKHmjTE#9WqChY{yB(aU;w1(cNb9$PJ^E>xvI_e6!pbB;o5~nKPdZkhXV5mDSm^tFM4s%=Pkl^ z>|9f;Yx34j-g>F>K{06lLp&#Y&zoJu^~mmM&1m-6OUVl@QYcRzm%!YdpTv{#>-9ZR z&mDFnR&vvu61~yjqnY56rmFR(slFtQC7Wk@d#P^S znqg|QO!bEHM{U|K%25h7g2H_&Z>xCEepk^XTX-K~(*COUToZUXT%dd5#^tUA;|CS* z3NIyD++x9_rx>aI0NMBRE8%?g=s}G|U8-Z*t>*S7pV=lhj#IN`F1CH{=9$l!OeG9q z_6bdi!z`m!0(<>*uUu+S!EfCoEPp<#h|DSV&3>nf0azEphBa*@rrfEDX!)zf8a7!% z+M`;Qd;&?KJe38x`dQ}2fsp60S4q?6Uzw}cc_nBIix34oB|mNZK6oaYti67IGoc7U zOLfydmC+ZDctNHnT(I6|IzYBtoc%Tn!Sr=VeNAKdmVaiiI;74wr&lKbzW43VmK{z@ zVdq`~9ulYuVsfvuim^bq&G0EO`4h?zEtzD(00wvh@zR~{`$?r2M)aT z8U-XnlNaZrqO56HBW%^j4Z`!@c=A26l|ri9m7S*vvKE^pJzKcSlM|X<*5Gg{ zsV@)8ch>HPhlR>?(Cm2IxkEelVx%fvy3h>qf+6dK%?Vvo#lgrA-rf_F3A%2ZH!*;t zp0QWH#d}|i<;QY1^ZdV#K|De^;NW&gOLgm+Mh%Bbp(MeoRLx5A)iA0{R3VD5(v@P! zA55RfjG7Vser1QE`=&y<>_nff! zBj4rAj=U@i*JT+kdR@ou=Nq1tp{N|Y+X*M$r1tq{r0lYMk6$p%frkv`Ob_o2jBc89 zaIvwON{~RQB;IpIYYm+w+m;Z$Y(>l`(=&eooliZidEq+wCCHvb-N}v<4Yc>=diTD% zmOW>jiZ54^A3MD1=q#4ICORzP>}b-bM!Kiqq29tCQQYHH9p;+VNa6XeZ1*cl&}oGD z+ZU&l>rW!*+3^~)=%SqJ6D(Ja9GO&ti0t^vjrlq();6*jA90^+vh5xZd2AZs#5^lU z-}i1eEWIUz6%=VA>5kL%?S7Mhl|7tO7~uxU;sPk$@qW_JbsD~FTDoM!l~OlOn$7=0er~p;QR0EquElG)lRp+qIC*EFaoYchD7PrMog_FWz`4ypZo& z?iLoC_nENq=VB-yY>2N^!hzbdF*ejDAWiwynP#pe?RQzht5)dKoT03mT=$a{y~EY> z3MblPm8)My{NQ7o79rH;FVjLKjaM!2Cxp-4?T|Qdzmt+imo6a3<9p^tmvE@xDXNU% zvOc8u#+9vSOTjB;>hiaOCeE}xZB-{xt^8ny9(~j8@^XRtxq?^C7)yI;#*`jUPG$@@ zqthyt!tD*JC8KKOLyvOH!aX;%_@BSs>L|~cA`thfdZyzS z%b!40>Uk<{o4($Tu(qXA&x^~~Q)|Xdw%~mLn7~xl@(uF&5(U-Ks)9hkgJNG&R&|Pe z*GjxkvWvhaj4#ySH9@06E=i6$ZxXjMD_|6v{lPYUVq~f$cKAM}=dEcTMq{bY>u%v_ zx+kek-|ZPCtf*`|X5@V12M7GCt1HiJ9<RH-d@JP+QLJ13-W z^iw#~dnI?QGyk88h{aw2}0ciux^*C*5t?OzTk+HjB)$ z;&nFRUn{IiU;`(!Wqjr-jHaRn+8G6R+;)8I9kj;>2V&mPU9|dkEj}=l%#h7r?ooJZ z2zQ02c-t1$gG9;O#ZUqakd?`l5GY%F$Uj9yeE5{-Vu|5-L1FwU?FL$?0 zGoF^cZe_X;?%aI%**az0}(9RbigtP2E=~(K1cnyNpQuALNI+&ln$6Tv6BP9q&sxZGhxIcR5!iJ3-GwmbgNXidc{n>u1 z^{6jimQl#G)6<3Do6FJSOiesOu~MoQZPZU9lx2lCR|5qaKl^Szp3c{0D9i1BZ%m{T zeyEWzn-;p8)_0~p?q&+R0T&A*@Iz82DnjtUd2GU0ZbN)*B>%G|XN5NF){y3vmzlmn z4L_djC-J0i&~^`0tDY(qA5mL;E-Rkv(!jR5dftk#M1*S2flS0tZSHXUE6+WW@ z$rp?Ha#VwA*_nrm9vWv!vubB|K3R#V6bN=E`!rabf0MtrM8!lPrQ>oL_vW2sb9Kth zHM$WUsD$lQPFe-Ocu3PU$Gwm))1`*@BRMPba zw?fIB-zE<;(=D3UFhCDWnTNWx`|>jLecozmPm`Ga zse~pW-Pwg}&DEl%u=~#?$E+y~3ou?}=aZ%%DT^KNQS>DuE zY`3_0#<7D}h9c{lZbl&R-ILic>qd>1qnYdL?P&v>hjsvUSO z_sKwOW#6o3Oe&#daR*%B;iv~-9wST1mAhQfz2pl^>bfK!I}Qlh67-)~J~+9z2xj-& zcJHBwdr)3^FKT$okckotE-e&ZWxd9VXJw>)2po+`N>thGy2!OP&p>(KtRTvX$T+OCa;W(oU7M=bS{Ptqq)$7kzviBYb%<6p0cYDZ zl2>JNc!wA@z`Jo7Meq08W9?C+BQe*bt8!0x@Vk~jogpl*uDJE#S-j4U3FIt2=W>6t4m1jabYeBETNk(+e@g~%9VN7c9%-uFEx|?ALf7N)BbJX&= z2BHoc(bTf~Yv=)%mz5C-WoVLTxh$ov3$fXzc~YA&H{NKKIe!JV@Va>sX;l(kBw`^> zbh^k?mrjwLLNDX~9nzt9jGKB}3~#&3k&PdpyQ8%-#-))L@7f{Pm^NUyEw^(nTklH^ zc)jRW;n|_6f0%5AVj26WQoKF<-W$r>TTXU|s*;pbxNwOzFRWZ*Q-Zx>o9gK-pEK?7 zvys>Hd%jLfyBZmL)~Pmjw^Lt8_nizT{Y0bMmf5W-xHB)O+LOZb7+@^;?c+lW zsemheyLF5O!x5vD*BK;aEgKH|Z!OoeIw6cW52|*Q8EZlcpXhwJM1gu9Sj}j3$=trc z%9DZ?Z%lxbFi)5LhP-M!1F~I3r`1q&`BA-S3Cx0?kl9-0&ifBJ;$V>?R+`vMg-nJ+KHoH9jn#q_k_c z>*n2`B;h@^6j(_U9&6ORXkGT5|FxzDpXO|^?5%HB%K;sI~xaCNxxO* zyM*ulE>)*(I!mH5Y*;LvNKNrt-PEgu+vy3x`fD8?_#FXPrd!7bq^h6XTDo4KE^)6a z$)%la_l`8R0wm^XumR+0FtAa!EnQbCOw;q%A4tbE zoGj#w5Sh^SvL`z$>*%A_ws>)7I)r|;Y-cy>JKAXI z@-X@CR?k41nB0C<=(z`9WnNe;daMV3+Rj|0AMgX?IahqX;qxR} z@tu{Ab_HAtk#l*e4w(yDy34F(%p1W&d&RldQ%zRF@;15m76=~de|j^p>wRHmzlSw3 z*AHpux|-fSNV}jrH6~wPTL905Wn_-=nNpd2NT=6rP>D9SP-eW7tMaIgr8R`<>6h-% zA&Je6Q%^stPY%SjYE8V3-{R6tucs`_7z?3TV%)w`H<7$2!Rab)0KdKEPufikzjJ-% znV)knIajy~F{x@4r@mi+>g-h3#>T6npCv)(LPzBfDIsja^C=y>hm)*D+iUIt4%5R< zrCvkDMJM%6W-^dhc2~WoXKHKvx)4%9lrKIp!myi{vDy1(SS+@5cEdE)MWQU0m+EmI z-P1`+MYnDDkK$`LYb42}pYZSvz!;^j_f7HV$`Y`Q>NUB>AR6;}JtTShBZ#|R-#y(5 zeJb+7ut_*qDVE)BW3g|tuGhFVg%dd(K z5@nZ`8VtTH@~hQWY%=c}bQfa3vTV-q>WJK7B7i-cSK15!NVCSwdH`J+ic2VWZysxVV`yU~~DQoLrr*O^OX0fGVOKjDm zZcht3m9@P=%LHBY^B8ERwe+|oc+dMrUCDL#Xx-iFQ{C#t7ry4XZra6oKCelXRr^>` zI@IIH+AR>-KShy#yVMEazE&OW;u=6}+Fj(ZtP{4nR?TYQk+!nK+B4tR@)<#X^PSD* zoG6#!GW)At18C+PvKzAwwst6na|$Dyfcrs8f%^R~HhIc%1H#Vh)Q6GhY7}ZSB)yzDg=cnpcwD^0^6z%sHF> zMQd877h41$_lwwG650}ClFbdOA=le4hQTZy6gIS#s2Ct~lrn>ns*hVx6g74%hy_33 z{vF=i)YmxmmnWI^T!*{OecmnlUA5u07-{Znf=2qWXPx|z{ONwr;RonUE{WVr8N}JT z54CshMies*yN`Zp8%~JD=^9TICXSiEj_QT$2#E>ual*zh*2A^{ diff --git a/src/api/templates/assets/img/faces/face-2.jpg b/src/api/templates/assets/img/faces/face-2.jpg deleted file mode 100644 index 7e7055c4092857a3becbcf71ab4d000bee3046e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55860 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

}jqT9a87Gr7+?h^eGZ{c3$&g=BO0>qPl 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 - - - - - - Monitor - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - -
- - - -
-
-
-
-
-
-
-
-
- -
-
-
-
-

Capacity

- 105GB -
-
-
- -
-
-
-
-
-
-
-
-
- -
-
-
-
-

Revenue

- $1,345 -
-
-
- -
-
-
-
-
-
-
-
-
- -
-
-
-
-

Errors

- 23 -
-
-
- -
-
-
-
-
-
-
-
-
- -
-
-
-
-

Followers

- +45 -
-
-
- -
-
-
-
-
- -
-
-
-

Users Behavior

-

24 Hours performance

-
-
-
- -
-
-
-
-
-
-
-
-

Email Statistics

-

Last Campaign Performance

-
-
-
- - -
-
-
-
-
-
-

2015 Sales

-

All products including Taxes

-
-
-
- - -
-
-
-
-
-
- - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/api/templates/dashboard.html b/src/api/templates/dashboard.html index ff6f9a4..b6197b0 100644 --- a/src/api/templates/dashboard.html +++ b/src/api/templates/dashboard.html @@ -1,202 +1,378 @@ - - - - - - - - - - - - - - - - - - - - - - -{{title}} - - -
-
{{title}}
-
The Phi Technology LLC
-
- + + + + + -
-
-
-
Monitoring - -
-
Last Lookup
-
-
-
-
-
-
-
-
-
+ Monitor -
-
-
-
Application Summary By Status
-
Latest Lookup
-
- -
-
-
-
Total Applications that have:
-
-
Running
-
Crash
-
Idle
- - -
-
-
- -
-
-
-
+ + -
-
-
-
Application Summary By Groups
-
-
-
-
-
-
-
-
-
CPU & Memory Usage Trend for
-
Last Lookup
+ + + + -
+ + - - - -
-
-
-
-
- -
Python Virtual Environment Analysis
- -
Last Lookup
-
- -
-
-
-
-
-
-
-
-
-
-
- -
Folder Analysis/Monitoring
-
Powered By Machine Learning
-
-
-
- - - -
-
-
-
-
-
-
-
-
+ + + + + + + + + + + + +
+ -
-
-
+ + + + + + + + - + diff --git a/src/api/templates/assets/sass/paper-dashboard.scss b/src/sass/paper-dashboard.scss similarity index 100% rename from src/api/templates/assets/sass/paper-dashboard.scss rename to src/sass/paper-dashboard.scss diff --git a/src/sass/paper/_alerts.scss b/src/sass/paper/_alerts.scss new file mode 100644 index 0000000..b583509 --- /dev/null +++ b/src/sass/paper/_alerts.scss @@ -0,0 +1,64 @@ +.alert{ + border: 0; + border-radius: 0; + color: #FFFFFF; + padding: 10px 15px; + font-size: 14px; + + .container &{ + border-radius: 4px; + + } + .navbar &{ + border-radius: 0; + left: 0; + position: absolute; + right: 0; + top: 85px; + width: 100%; + z-index: 3; + } + .navbar:not(.navbar-transparent) &{ + top: 70px; + } + + span[data-notify="icon"]{ + font-size: 30px; + display: block; + left: 15px; + position: absolute; + top: 50%; + margin-top: -20px; + } + + .close ~ span{ + display: block; + max-width: 89%; + } + + &[data-notify="container"]{ + padding: 10px 10px 10px 20px; + border-radius: $border-radius-base; + } + + &.alert-with-icon{ + padding-left: 65px; + } +} +.alert-info{ + background-color: $bg-info; + color: $info-states-color; +} +.alert-success { + background-color: $bg-success; + color: $success-states-color; +} +.alert-warning { + background-color: $bg-warning; + color: $warning-states-color; +} +.alert-danger { + background-color: $bg-danger; + color: $danger-states-color; +} + diff --git a/src/api/templates/assets/sass/paper/_buttons.scss b/src/sass/paper/_buttons.scss similarity index 100% rename from src/api/templates/assets/sass/paper/_buttons.scss rename to src/sass/paper/_buttons.scss diff --git a/src/api/templates/assets/sass/paper/_cards.scss b/src/sass/paper/_cards.scss similarity index 100% rename from src/api/templates/assets/sass/paper/_cards.scss rename to src/sass/paper/_cards.scss diff --git a/src/api/templates/assets/sass/paper/_chartist.scss b/src/sass/paper/_chartist.scss similarity index 100% rename from src/api/templates/assets/sass/paper/_chartist.scss rename to src/sass/paper/_chartist.scss diff --git a/src/api/templates/assets/sass/paper/_checkbox-radio.scss b/src/sass/paper/_checkbox-radio.scss similarity index 100% rename from src/api/templates/assets/sass/paper/_checkbox-radio.scss rename to src/sass/paper/_checkbox-radio.scss diff --git a/src/api/templates/assets/sass/paper/_dropdown.scss b/src/sass/paper/_dropdown.scss similarity index 100% rename from src/api/templates/assets/sass/paper/_dropdown.scss rename to src/sass/paper/_dropdown.scss diff --git a/src/api/templates/assets/sass/paper/_footers.scss b/src/sass/paper/_footers.scss similarity index 100% rename from src/api/templates/assets/sass/paper/_footers.scss rename to src/sass/paper/_footers.scss diff --git a/src/api/templates/assets/sass/paper/_inputs.scss b/src/sass/paper/_inputs.scss similarity index 100% rename from src/api/templates/assets/sass/paper/_inputs.scss rename to src/sass/paper/_inputs.scss diff --git a/src/api/templates/assets/sass/paper/_misc.scss b/src/sass/paper/_misc.scss similarity index 100% rename from src/api/templates/assets/sass/paper/_misc.scss rename to src/sass/paper/_misc.scss diff --git a/src/api/templates/assets/sass/paper/_mixins.scss b/src/sass/paper/_mixins.scss similarity index 100% rename from src/api/templates/assets/sass/paper/_mixins.scss rename to src/sass/paper/_mixins.scss diff --git a/src/api/templates/assets/sass/paper/_navbars.scss b/src/sass/paper/_navbars.scss similarity index 100% rename from src/api/templates/assets/sass/paper/_navbars.scss rename to src/sass/paper/_navbars.scss diff --git a/src/api/templates/assets/sass/paper/_responsive.scss b/src/sass/paper/_responsive.scss similarity index 100% rename from src/api/templates/assets/sass/paper/_responsive.scss rename to src/sass/paper/_responsive.scss diff --git a/src/api/templates/assets/sass/paper/_sidebar-and-main-panel.scss b/src/sass/paper/_sidebar-and-main-panel.scss similarity index 100% rename from src/api/templates/assets/sass/paper/_sidebar-and-main-panel.scss rename to src/sass/paper/_sidebar-and-main-panel.scss diff --git a/src/api/templates/assets/sass/paper/_tables.scss b/src/sass/paper/_tables.scss similarity index 100% rename from src/api/templates/assets/sass/paper/_tables.scss rename to src/sass/paper/_tables.scss diff --git a/src/api/templates/assets/sass/paper/_typography.scss b/src/sass/paper/_typography.scss similarity index 100% rename from src/api/templates/assets/sass/paper/_typography.scss rename to src/sass/paper/_typography.scss diff --git a/src/api/templates/assets/sass/paper/_variables.scss b/src/sass/paper/_variables.scss similarity index 100% rename from src/api/templates/assets/sass/paper/_variables.scss rename to src/sass/paper/_variables.scss diff --git a/src/api/templates/assets/sass/paper/mixins/_buttons.scss b/src/sass/paper/mixins/_buttons.scss similarity index 100% rename from src/api/templates/assets/sass/paper/mixins/_buttons.scss rename to src/sass/paper/mixins/_buttons.scss diff --git a/src/api/templates/assets/sass/paper/mixins/_cards.scss b/src/sass/paper/mixins/_cards.scss similarity index 100% rename from src/api/templates/assets/sass/paper/mixins/_cards.scss rename to src/sass/paper/mixins/_cards.scss diff --git a/src/api/templates/assets/sass/paper/mixins/_chartist.scss b/src/sass/paper/mixins/_chartist.scss similarity index 100% rename from src/api/templates/assets/sass/paper/mixins/_chartist.scss rename to src/sass/paper/mixins/_chartist.scss diff --git a/src/api/templates/assets/sass/paper/mixins/_icons.scss b/src/sass/paper/mixins/_icons.scss similarity index 100% rename from src/api/templates/assets/sass/paper/mixins/_icons.scss rename to src/sass/paper/mixins/_icons.scss diff --git a/src/api/templates/assets/sass/paper/mixins/_inputs.scss b/src/sass/paper/mixins/_inputs.scss similarity index 100% rename from src/api/templates/assets/sass/paper/mixins/_inputs.scss rename to src/sass/paper/mixins/_inputs.scss diff --git a/src/api/templates/assets/sass/paper/mixins/_labels.scss b/src/sass/paper/mixins/_labels.scss similarity index 100% rename from src/api/templates/assets/sass/paper/mixins/_labels.scss rename to src/sass/paper/mixins/_labels.scss diff --git a/src/api/templates/assets/sass/paper/mixins/_navbars.scss b/src/sass/paper/mixins/_navbars.scss similarity index 100% rename from src/api/templates/assets/sass/paper/mixins/_navbars.scss rename to src/sass/paper/mixins/_navbars.scss diff --git a/src/api/templates/assets/sass/paper/mixins/_sidebar.scss b/src/sass/paper/mixins/_sidebar.scss similarity index 100% rename from src/api/templates/assets/sass/paper/mixins/_sidebar.scss rename to src/sass/paper/mixins/_sidebar.scss diff --git a/src/api/templates/assets/sass/paper/mixins/_tabs.scss b/src/sass/paper/mixins/_tabs.scss similarity index 100% rename from src/api/templates/assets/sass/paper/mixins/_tabs.scss rename to src/sass/paper/mixins/_tabs.scss diff --git a/src/api/templates/assets/sass/paper/mixins/_transparency.scss b/src/sass/paper/mixins/_transparency.scss similarity index 100% rename from src/api/templates/assets/sass/paper/mixins/_transparency.scss rename to src/sass/paper/mixins/_transparency.scss diff --git a/src/api/templates/assets/sass/paper/mixins/_vendor-prefixes.scss b/src/sass/paper/mixins/_vendor-prefixes.scss similarity index 100% rename from src/api/templates/assets/sass/paper/mixins/_vendor-prefixes.scss rename to src/sass/paper/mixins/_vendor-prefixes.scss