UNPKG

silk-gui

Version:

GUI for developers and Node OS

310 lines (299 loc) 8.58 kB
<!DOCTYPE html> <html> <head> <link href="/bc/materialize/bin/materialize.css" rel="stylesheet"> <title>Task Manager</title> <style> body { -webkit-user-select: none; } .page { position: absolute; top: 0px; left: 0px; width: 100%; height: 100%; overflow: scroll; padding-top: 50px; box-sizing: border-box; } #apps ul li { height: 50px; margin-bottom: 10px; width: 80%; max-width: 300px; position: relative; } #apps ul li img { max-height: 40px; max-width: 40px; margin-top: 5px; vertical-align: middle; margin-right: 15px; } #apps ul li span { vertical-align: middle; } #apps ul li .btn-flat { position: absolute; right: 0px; vertical-align: middle; opacity: 0; transition: .15s all; } #apps ul li:hover .btn-flat { opacity: 1; } /* tabs */ .tabs { z-index:5; background-color: white; } .tabs, .tabs a { color: #53D31D !important; } .tabs .indicator { background-color: #53D31D; } /* hide other tabs on load */ #processes { display: none; } </style> </head> <body> <div class="container"> <div class="row"> <div class="col s12"> <ul class="tabs"> <li class="tab col s3"><a class="" href="#apps">Apps</a></li> <li class="tab col s3"><a class="" href="#processes">Processes</a></li> <li class="tab col s3"><a class="active" href="#performance">Performance</a></li> </ul> </div> </div> </div> <div id="apps" class="page"> <div class="container"> <ul> <li v-repeat="apps"><img v-attr="src: icon"><span>{{name}}</span> <a class="btn-flat waves-effect waves-red" v-on="click: restart(this)">Restart</a> </li> </ul> <a class="btn-flat waves-effect waves-red reload">Reload</a> </div> </div> <div id="processes" class="page"> <div class="container"> <table> <thead><tr><th>User</th><th>PID</th><th>CPU</th><th>Memory</th><th>Command</th></tr></thead> <tbody> <tr v-repeat="processes"> <td>{{user}}</td> <td>{{pid}}</td> <td>{{cpu}}</td> <td>{{mem}}</td> <td>{{command}}</td> </tr> </tbody> </table> <a class="btn-flat waves-effect waves-red reload">Reload</a> </div> </div> <div id="performance" class="page"> <div class="container"> <h5>CPU Usage</h5> <canvas id="cpuUsageChart" width="400" height="100"></canvas> <div><span class="cpu-used"></span></div> <h5>RAM Usage</h5> <canvas id="memUsageChart" width="400" height="100"></canvas> <div><span class="mem-used"></span> mb / <span class="mem-total"></span> mb</div> <a class="btn-flat waves-effect waves-red reload">Reload</a> </div> </div> <script src="/bc/chart.js"></script> <script src="//cdn.jsdelivr.net/sockjs/0.3.4/sockjs.min.js"></script> <script src="/bc/jquery"></script> <script src="/bc/materialize/bin/materialize.js"></script> <script src="/bc/Tablesaw/dist/tablesaw.js"></script> <script src="/js/call.js"></script> <script src="/bc/vue"></script> <script> var taskManager = new Vue({ el: '#apps', data: { apps: [] }, methods: { 'restart': function(app){ methods.call('taskManager/restart', {path: app.path}, function(err, data){ alert(err); alert(data); }); } } }); function sort(a,b) { if (a.name < b.name) return -1; if (a.name > b.name) return 1; return 0; } methods.call("taskManager/apps", {}, function (err, data) { if (err) { console.log(err); } data.sort(sort); // alert(JSON.stringify(data)); taskManager.$data.apps = data; }); $(".reload").click(function () { location.reload(); }); /* processes */ // refreshed every 5 seconds since it is a little slow var processes = new Vue({ el: "#processes", data: { processes: [] }, methods: { kill: function (process) { } } }); function updateProcesses () { methods.call("taskManager/processes", null, function (err, data) { //console.log(data); var result = 0; data.forEach(function (item, index) { if(item.command === "Google Chrome Helper" || item.command === "Google Chrome") { result += 1; } }); //console.log('data', result); result = 0; processes.$data.processes = data; processes.$data.processes.forEach(function (item, index) { if(item.command === "Google Chrome Helper" || item.command === "Google Chrome") { result += 1; } }); //console.log('vue data',result); setTimeout(updateProcesses, 5000); }); } updateProcesses(); /* performance */ Chart.defaults.global.animation = false; Chart.defaults.global.showTooltips = false; //Chart.defaults.global.responsive = true; /* cpu usage */ var cpuUsage = memUsage = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; var ctx = $("#cpuUsageChart").get(0).getContext("2d"); var data = { labels: [" ", " ", " ", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""], datasets: [ { label: "CPU", fillColor: "rgba(83, 210, 30, 0.35)", strokeColor: "rgba(220,220,220,0)", pointColor: "rgba(220,220,220,0)", pointStrokeColor: "rgba(0,0,0,0)", pointHighlightFill: "rgba(0,0,0,0)", pointHighlightStroke: "rgba(220,220,220,0)", data: cpuUsage } ] }; var cpuChart = new Chart(ctx).Line(data, {bezierCurve: false, scaleOverride: true, scaleSteps: 5, scaleStepWidth: 20, scaleStartValue: 0 }); var getCpu = function () { methods.listen("taskManager/cpuUsage", {}, function (err, data) { data = data * 100; data = Math.floor(data); cpuUsage.push(data); cpuUsage.shift(); //console.log(cpuUsage); cpuChart.removeData(); cpuChart.addData([data], " "); //cpuChart.datasets[0].data = cpuUsage; //cpuChart.update(); $('.cpu-used').text(data + '%'); setTimeout(getCpu, 1); }); }; getCpu(); // memory var totalMem = 0; var memChart; function initMem () { methods.call("taskManager/totalMemory", {}, function (err, data) { if(err) { alert(err); } totalMem = data; $('.mem-total').text(totalMem); var chartData = { labels: [" ", " ", " ", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""], datasets: [ { label: "Memory", fillColor: "rgba(37, 101, 212, 0.35)", strokeColor: "rgba(220,220,220,0)", pointColor: "rgba(220,220,220,0)", pointStrokeColor: "rgba(0,0,0,0)", pointHighlightFill: "rgba(0,0,0,0)", pointHighlightStroke: "rgba(220,220,220,0)", data: memUsage } ] }; var memContext = $("#memUsageChart").get(0).getContext("2d"); // calculate number of steps var amount = 500; var steps = data / 500; if (steps > 20) { amount = 5000; steps = data / 5000; } else if(steps > 8) { amount = 2000; steps = data / 2000; } // add another step if there is a remainder if((data % amount) > 0) { steps += 1; } memChart = new Chart(memContext).Line(chartData, {bezierCurve: false, scaleOverride: true, scaleSteps: steps, scaleStepWidth: amount, scaleStartValue: 0 }); // if we don't do this, the memory chart isn't shown. $('.tabs').tabs('select_tab', 'apps'); getMem(); console.log('init mem'); }); } function getMem () { methods.call('taskManager/freeMemory', {}, function (err, data) { if(err) { alert(err); } //console.log(data); memChart.removeData(); memChart.addData([totalMem - data], " "); $('.mem-used').text(totalMem - Math.round(data)); setTimeout(getMem, 1000); }); } initMem(); </script> </body> </html>