3 * Copyright(c) 2006-2011 Sencha Inc.
5 * http://www.sencha.com/license
8 Ext.define('MyDesktop.SystemStatus', {
9 extend: 'Ext.ux.desktop.Module',
18 // No launcher means we don't appear on the Start Menu...
20 // text: 'SystemStatus',
21 // iconCls:'cpustats',
22 // handler : this.createWindow,
26 Ext.chart.theme.Memory = Ext.extend(Ext.chart.theme.Base, {
27 constructor: function(config) {
28 Ext.chart.theme.Memory.superclass.constructor.call(this, Ext.apply({
29 colors: [ 'rgb(244, 16, 0)',
38 createNewWindow: function () {
40 desktop = me.app.getDesktop();
43 me.cpuLoadStore = Ext.create('store.json', {
44 fields: ['core1', 'core2']
47 me.memoryArray = ['Wired', 'Active', 'Inactive', 'Free'];
48 me.memoryStore = Ext.create('store.json', {
49 fields: ['name', 'memory'],
50 data: me.generateData(me.memoryArray)
54 me.processArray = ['explorer', 'monitor', 'charts', 'desktop', 'Ext3', 'Ext4'];
55 me.processesMemoryStore = Ext.create('store.json', {
56 fields: ['name', 'memory'],
57 data: me.generateData(me.processArray)
62 return desktop.createWindow({
64 title: 'System Status',
76 destroy: function () {
77 clearTimeout(me.updateTimer);
78 me.updateTimer = null;
98 me.createCpu1LoadChart(),
99 me.createCpu2LoadChart()
111 me.createMemoryPieChart(),
112 me.createProcessChart()
119 createWindow : function() {
120 var win = this.app.getDesktop().getWindow(this.id);
122 win = this.createNewWindow();
128 createCpu1LoadChart: function () {
134 store: this.cpuLoadStore,
154 title: 'Core 1 (3.4GHz)',
169 createCpu2LoadChart: function () {
175 store: this.cpuLoadStore,
195 title: 'Core 2 (3.4GHz)',
210 createMemoryPieChart: function () {
219 store: this.memoryStore,
226 theme: 'Memory:gradients',
236 renderer: function(storeItem, item) {
237 //calculate percentage.
239 me.memoryStore.each(function(rec) {
240 total += rec.get('memory');
242 this.setTitle(storeItem.get('name') + ': ' +
243 Math.round(storeItem.get('memory') / total * 100) + '%');
264 createProcessChart: function () {
269 store: this.processesMemoryStore,
271 easing: 'ease-in-out',
291 title: 'System Processes',
293 font: 'bold 14px Arial'
304 title: 'Memory Usage',
306 font: 'bold 14px Arial'
322 renderer: function(sprite, record, attr, index, store) {
323 var lowColor = Ext.draw.Color.fromString('#b1da5a'),
324 value = record.get('memory'),
328 color = lowColor.getDarker((value - 5) / 15).toString();
330 color = lowColor.getLighter(((5 - value) / 20)).toString();
337 return Ext.apply(attr, {
345 generateCpuLoad: function () {
347 data = me.cpuLoadData;
349 function generate(factor) {
350 var value = factor + ((Math.floor(Math.random() * 2) % 2) ? -1 : 1) * Math.floor(Math.random() * 9);
352 if (value < 0 || value > 100) {
359 if (data.length === 0) {
366 for (var i = 1; i < 100; i++) {
368 core1: generate(data[i - 1].core1),
369 core2: generate(data[i - 1].core2),
374 me.cpuLoadStore.loadData(data);
376 me.cpuLoadStore.data.removeAt(0);
377 me.cpuLoadStore.data.each(function(item, key) {
378 item.data.time = key;
381 var lastData = me.cpuLoadStore.last().data;
382 me.cpuLoadStore.loadData([{
383 core1: generate(lastData.core1),
384 core2: generate(lastData.core2),
385 time: lastData.time + 1
391 generateData: function (names) {
394 rest = names.length, consume;
396 for (i = 0; i < names.length; i++) {
397 consume = Math.floor(Math.random() * rest * 100) / 100 + 2;
398 rest = rest - (consume - 5);
408 updateCharts: function () {
410 clearTimeout(me.updateTimer);
411 me.updateTimer = setTimeout(function() {
412 if (me.pass % 3 === 0) {
413 me.memoryStore.loadData(me.generateData(me.memoryArray));
416 if (me.pass % 5 === 0) {
417 me.processesMemoryStore.loadData(me.generateData(me.processArray));
420 me.generateCpuLoad();