3 This file is part of Ext JS 4
5 Copyright (c) 2011 Sencha Inc
7 Contact: http://www.sencha.com/contact
9 GNU General Public License Usage
10 This file may be used under the terms of the GNU General Public License version 3.0 as published by the Free Software Foundation and appearing in the file LICENSE included in the packaging of this file. Please review the following information to ensure the GNU General Public License version 3.0 requirements will be met: http://www.gnu.org/copyleft/gpl.html.
12 If you are unsure which license is appropriate for your use, please contact the sales department at http://www.sencha.com/contact.
17 * Copyright(c) 2006-2011 Sencha Inc.
18 * licensing@sencha.com
19 * http://www.sencha.com/license
22 Ext.define('MyDesktop.SystemStatus', {
23 extend: 'Ext.ux.desktop.Module',
34 // No launcher means we don't appear on the Start Menu...
36 // text: 'SystemStatus',
37 // iconCls:'cpustats',
38 // handler : this.createWindow,
42 Ext.chart.theme.Memory = Ext.extend(Ext.chart.theme.Base, {
43 constructor: function(config) {
44 Ext.chart.theme.Memory.superclass.constructor.call(this, Ext.apply({
45 colors: [ 'rgb(244, 16, 0)',
54 createNewWindow: function () {
56 desktop = me.app.getDesktop();
59 me.cpuLoadStore = Ext.create('store.json', {
60 fields: ['core1', 'core2']
63 me.memoryArray = ['Wired', 'Active', 'Inactive', 'Free'];
64 me.memoryStore = Ext.create('store.json', {
65 fields: ['name', 'memory'],
66 data: me.generateData(me.memoryArray)
70 me.processArray = ['explorer', 'monitor', 'charts', 'desktop', 'Ext3', 'Ext4'];
71 me.processesMemoryStore = Ext.create('store.json', {
72 fields: ['name', 'memory'],
73 data: me.generateData(me.processArray)
78 return desktop.createWindow({
80 title: 'System Status',
92 destroy: function () {
93 clearTimeout(me.updateTimer);
94 me.updateTimer = null;
114 me.createCpu1LoadChart(),
115 me.createCpu2LoadChart()
127 me.createMemoryPieChart(),
128 me.createProcessChart()
135 createWindow : function() {
136 var win = this.app.getDesktop().getWindow(this.id);
138 win = this.createNewWindow();
144 createCpu1LoadChart: function () {
150 store: this.cpuLoadStore,
170 title: 'Core 1 (3.4GHz)',
185 createCpu2LoadChart: function () {
191 store: this.cpuLoadStore,
211 title: 'Core 2 (3.4GHz)',
226 createMemoryPieChart: function () {
235 store: this.memoryStore,
242 theme: 'Memory:gradients',
252 renderer: function(storeItem, item) {
253 //calculate percentage.
255 me.memoryStore.each(function(rec) {
256 total += rec.get('memory');
258 this.setTitle(storeItem.get('name') + ': ' +
259 Math.round(storeItem.get('memory') / total * 100) + '%');
280 createProcessChart: function () {
285 store: this.processesMemoryStore,
287 easing: 'ease-in-out',
307 title: 'System Processes',
309 font: 'bold 14px Arial'
320 title: 'Memory Usage',
322 font: 'bold 14px Arial'
338 renderer: function(sprite, record, attr, index, store) {
339 var lowColor = Ext.draw.Color.fromString('#b1da5a'),
340 value = record.get('memory'),
344 color = lowColor.getDarker((value - 5) / 15).toString();
346 color = lowColor.getLighter(((5 - value) / 20)).toString();
353 return Ext.apply(attr, {
361 generateCpuLoad: function () {
363 data = me.cpuLoadData;
365 function generate(factor) {
366 var value = factor + ((Math.floor(Math.random() * 2) % 2) ? -1 : 1) * Math.floor(Math.random() * 9);
368 if (value < 0 || value > 100) {
375 if (data.length === 0) {
382 for (var i = 1; i < 100; i++) {
384 core1: generate(data[i - 1].core1),
385 core2: generate(data[i - 1].core2),
390 me.cpuLoadStore.loadData(data);
392 me.cpuLoadStore.data.removeAt(0);
393 me.cpuLoadStore.data.each(function(item, key) {
394 item.data.time = key;
397 var lastData = me.cpuLoadStore.last().data;
398 me.cpuLoadStore.loadData([{
399 core1: generate(lastData.core1),
400 core2: generate(lastData.core2),
401 time: lastData.time + 1
407 generateData: function (names) {
410 rest = names.length, consume;
412 for (i = 0; i < names.length; i++) {
413 consume = Math.floor(Math.random() * rest * 100) / 100 + 2;
414 rest = rest - (consume - 5);
424 updateCharts: function () {
426 clearTimeout(me.updateTimer);
427 me.updateTimer = setTimeout(function() {
428 var start = new Date().getTime();
429 if (me.pass % 3 === 0) {
430 me.memoryStore.loadData(me.generateData(me.memoryArray));
433 if (me.pass % 5 === 0) {
434 me.processesMemoryStore.loadData(me.generateData(me.processArray));
437 me.generateCpuLoad();
439 var end = new Date().getTime();
441 // no more than 25% average CPU load
442 me.refreshRate = Math.max(me.refreshRate, (end - start) * 4);