| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426 | /*!* Ext JS Library 4.0* Copyright(c) 2006-2011 Sencha Inc.* licensing@sencha.com* http://www.sencha.com/license*/Ext.define('MyDesktop.SystemStatus', {    extend: 'Ext.ux.desktop.Module',    requires: [        'Ext.chart.*'    ],    id: 'systemstatus',    refreshRate: 500,    init : function() {        // No launcher means we don't appear on the Start Menu...//        this.launcher = {//            text: 'SystemStatus',//            iconCls:'cpustats'//        };        Ext.chart.theme.Memory = Ext.extend(Ext.chart.theme.Base, {            constructor: function(config) {                Ext.chart.theme.Memory.superclass.constructor.call(this, Ext.apply({                    colors: [ 'rgb(244, 16, 0)',                              'rgb(248, 130, 1)',                              'rgb(0, 7, 255)',                              'rgb(84, 254, 0)']                }, config));            }        });    },    createNewWindow: function () {        var me = this,            desktop = me.app.getDesktop();        me.cpuLoadData = [];        me.cpuLoadStore = Ext.create('store.json', {            fields: ['core1', 'core2', 'time']        });        me.memoryArray = ['Wired', 'Active', 'Inactive', 'Free'];        me.memoryStore = Ext.create('store.json', {                fields: ['name', 'memory'],                data: me.generateData(me.memoryArray)            });        me.pass = 0;        me.processArray = ['explorer', 'monitor', 'charts', 'desktop', 'Ext3', 'Ext4'];        me.processesMemoryStore = Ext.create('store.json', {            fields: ['name', 'memory'],            data: me.generateData(me.processArray)        });        me.generateCpuLoad();        return desktop.createWindow({            id: 'systemstatus',            title: 'System Status',            width: 800,            height: 600,            animCollapse:false,            constrainHeader:true,            border: false,            layout: {                type: 'hbox',                align: 'stretch'                },            bodyStyle: {                'background-color': '#FFF'            },            listeners: {                afterrender: {                    fn: me.updateCharts,                    delay: 100                },                destroy: function () {                    clearTimeout(me.updateTimer);                    me.updateTimer = null;                },                scope: me            },            items: [{                flex: 1,                xtype: 'container',                layout: {                    type: 'vbox',                    align: 'stretch'                },                items: [                    me.createCpu1LoadChart(),                    me.createCpu2LoadChart()                ]            }, {                flex: 1,                xtype: 'container',                layout: {                    type: 'vbox',                    align: 'stretch'                },                items: [                    me.createMemoryPieChart(),                    me.createProcessChart()                ]            }]        });    },    createWindow : function() {        var win = this.app.getDesktop().getWindow(this.id);        if (!win) {            win = this.createNewWindow();        }        return win;    },    createCpu1LoadChart: function () {        return {            flex: 1,            xtype: 'chart',            theme: 'Category1',            animate: false,            store: this.cpuLoadStore,            legend: {                position: 'bottom'            },            axes: [{                type: 'Numeric',                position: 'left',                minimum: 0,                maximum: 100,                fields: ['core1'],                title: 'CPU Load',                grid: true,                labelTitle: {                    font: '13px Arial'                },                label: {                    font: '11px Arial'                }            }],            series: [{                title: 'Core 1 (3.4GHz)',                type: 'line',                lineWidth: 4,                showMarkers: false,                fill: true,                axis: 'left',                xField: 'time',                yField: 'core1',                style: {                    'stroke-width': 1                }            }]        };    },    createCpu2LoadChart: function () {        return {            flex: 1,            xtype: 'chart',            theme: 'Category2',            animate: false,            store: this.cpuLoadStore,            legend: {                position: 'bottom'            },            axes: [{                type: 'Numeric',                position: 'left',                minimum: 0,                maximum: 100,                grid: true,                fields: ['core2'],                title: 'CPU Load',                labelTitle: {                    font: '13px Arial'                },                label: {                    font: '11px Arial'                }            }],            series: [{                title: 'Core 2 (3.4GHz)',                type: 'line',                lineWidth: 4,                showMarkers: false,                fill: true,                axis: 'left',                xField: 'time',                yField: 'core2',                style: {                    'stroke-width': 1                }            }]        };    },    createMemoryPieChart: function () {        var me = this;        return {            flex: 1,            xtype: 'chart',            animate: {                duration: 250            },            store: this.memoryStore,            shadow: true,            legend: {                position: 'right'            },            insetPadding: 40,            theme: 'Memory:gradients',            series: [{                donut: 30,                type: 'pie',                field: 'memory',                showInLegend: true,                tips: {                    trackMouse: true,                    width: 140,                    height: 28,                    renderer: function(storeItem, item) {                        //calculate percentage.                        var total = 0;                        me.memoryStore.each(function(rec) {                            total += rec.get('memory');                        });                        this.setTitle(storeItem.get('name') + ': ' +                            Math.round(storeItem.get('memory') / total * 100) + '%');                    }                },                highlight: {                    segment: {                        margin: 20                    }                },                labelTitle: {                    font: '13px Arial'                },                label: {                    field: 'name',                    display: 'rotate',                    contrast: true,                    font: '12px Arial'                }            }]        };    },    createProcessChart: function () {        return {            flex: 1,            xtype: 'chart',            theme: 'Category1',            store: this.processesMemoryStore,            animate: {                easing: 'ease-in-out',                duration: 750            },            axes: [{                type: 'Numeric',                position: 'left',                minimum: 0,                maximum: 10,                fields: ['memory'],                title: 'Memory',                labelTitle: {                    font: '13px Arial'                },                label: {                    font: '11px Arial'                }            },{                type: 'Category',                position: 'bottom',                fields: ['name'],                title: 'System Processes',                labelTitle: {                    font: 'bold 14px Arial'                },                label: {                    rotation: {                        degrees: 45                    }                }            },{                type: 'Numeric',                position: 'top',                fields: ['memory'],                title: 'Memory Usage',                labelTitle: {                    font: 'bold 14px Arial'                },                label: {                    fill: '#FFFFFF',                    stroke: '#FFFFFF'                },                axisStyle: {                    fill: '#FFFFFF',                    stroke: '#FFFFFF'                }            }],            series: [{                title: 'Processes',                type: 'column',                xField: 'name',                yField: 'memory',                renderer: function(sprite, record, attr, index, store) {                    var lowColor = Ext.draw.Color.fromString('#b1da5a'),                        value = record.get('memory'),                        color;                    if (value > 5) {                        color = lowColor.getDarker((value - 5) / 15).toString();                    } else {                        color = lowColor.getLighter(((5 - value) / 20)).toString();                    }                    if (value >= 8) {                        color = '#CD0000';                    }                    return Ext.apply(attr, {                        fill: color                    });                }            }]        };    },    generateCpuLoad: function () {        var me = this,            data = me.cpuLoadData;        function generate(factor) {            var value = factor + ((Math.floor(Math.random() * 2) % 2) ? -1 : 1) * Math.floor(Math.random() * 9);            if (value < 0 || value > 100) {                value = 50;            }            return value;        }        if (data.length === 0) {            data.push({                core1: 0,                core2: 0,                time: 0            });            for (var i = 1; i < 100; i++) {                data.push({                    core1: generate(data[i - 1].core1),                    core2: generate(data[i - 1].core2),                    time: i                });            }            me.cpuLoadStore.loadData(data);        } else {            me.cpuLoadStore.data.removeAt(0);            me.cpuLoadStore.data.each(function(item, key) {                item.data.time = key;            });            var lastData = me.cpuLoadStore.last().data;            me.cpuLoadStore.loadData([{                core1: generate(lastData.core1),                core2: generate(lastData.core2),                time: lastData.time + 1            }], true);        }    },    generateData: function (names) {        var data = [],            i,            rest = names.length, consume;        for (i = 0; i < names.length; i++) {            consume = Math.floor(Math.random() * rest * 100) / 100 + 2;            rest = rest - (consume - 5);            data.push({                name: names[i],                memory: consume            });        }        return data;    },    updateCharts: function () {        var me = this;        clearTimeout(me.updateTimer);        me.updateTimer = setTimeout(function() {            var start = new Date().getTime();            if (me.pass % 3 === 0) {                me.memoryStore.loadData(me.generateData(me.memoryArray));            }            if (me.pass % 5 === 0) {                me.processesMemoryStore.loadData(me.generateData(me.processArray));            }            me.generateCpuLoad();            var end = new Date().getTime();            // no more than 25% average CPU load            me.refreshRate = Math.max(me.refreshRate, (end - start) * 4);            me.updateCharts();            me.pass++;        }, me.refreshRate);    }});
 |