systemMonitor: new extension
https://bugzilla.gnome.org/show_bug.cgi?id=634080
This commit is contained in:
+6
-1
@@ -21,7 +21,7 @@ GLIB_GSETTINGS
|
||||
ADDITIONAL_PACKAGES=
|
||||
|
||||
dnl keep this in sync with extensions/Makefile.am
|
||||
ALL_EXTENSIONS="example alternate-tab xrandr-indicator windowsNavigator auto-move-windows dock user-theme alternative-status-menu gajim drive-menu places-menu"
|
||||
ALL_EXTENSIONS="example systemMonitor alternate-tab xrandr-indicator windowsNavigator auto-move-windows dock user-theme alternative-status-menu gajim drive-menu places-menu"
|
||||
AC_SUBST(ALL_EXTENSIONS, [$ALL_EXTENSIONS])
|
||||
DEFAULT_EXTENSIONS="alternate-tab windowsNavigator dock alternative-status-menu drive-menu places-menu"
|
||||
AC_ARG_ENABLE([extensions],
|
||||
@@ -39,6 +39,10 @@ ADDITIONAL_PACKAGES=
|
||||
ENABLED_EXTENSIONS=
|
||||
for e in $enable_extensions; do
|
||||
case $e in
|
||||
systemMonitor)
|
||||
ENABLED_EXTENSIONS="$ENABLED_EXTENSIONS $e"
|
||||
ADDITIONAL_PACKAGES="$ADDITIONAL_PAGKAGES libgtop-2.0 >= 2.28.3"
|
||||
;;
|
||||
xrandr-indicator)
|
||||
ENABLED_EXTENSIONS="$ENABLED_EXTENSIONS $e"
|
||||
ADDITIONAL_PACKAGES="$ADDITIONAL_PAGKAGES gnome-desktop-3.0 >= 2.91.6"
|
||||
@@ -68,6 +72,7 @@ AC_CONFIG_FILES([
|
||||
extensions/dock/Makefile
|
||||
extensions/drive-menu/Makefile
|
||||
extensions/example/Makefile
|
||||
extensions/systemMonitor/Makefile
|
||||
extensions/windowsNavigator/Makefile
|
||||
extensions/gajim/Makefile
|
||||
extensions/places-menu/Makefile
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
EXTENSION_ID = systemMonitor
|
||||
|
||||
include ../../extension.mk
|
||||
@@ -0,0 +1,133 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const GTop = imports.gi.GTop;
|
||||
const Lang = imports.lang;
|
||||
const Mainloop = imports.mainloop;
|
||||
const St = imports.gi.St;
|
||||
const Shell = imports.gi.Shell;
|
||||
|
||||
const Main = imports.ui.main;
|
||||
|
||||
function Indicator() {
|
||||
this._init();
|
||||
}
|
||||
|
||||
Indicator.prototype = {
|
||||
_init: function() {
|
||||
this._initValues();
|
||||
this.actor = new St.DrawingArea({ style_class: "extension-systemMonitor-indicator-area",
|
||||
reactive: true});
|
||||
this.actor.connect('repaint', Lang.bind(this, this._draw));
|
||||
this.actor.connect('button-press-event', function() {
|
||||
let app = Shell.AppSystem.get_default().get_app("gnome-system-monitor.desktop");
|
||||
app.open_new_window(-1);
|
||||
});
|
||||
|
||||
Mainloop.timeout_add(250, Lang.bind(this, function () {
|
||||
this._updateValues();
|
||||
this.actor.queue_repaint();
|
||||
return true;
|
||||
}));
|
||||
},
|
||||
|
||||
_initValues: function() {
|
||||
},
|
||||
|
||||
_updateValues: function() {
|
||||
},
|
||||
|
||||
_draw: function(area) {
|
||||
let [width, height] = area.get_surface_size();
|
||||
let themeNode = this.actor.get_theme_node();
|
||||
let cr = area.get_context();
|
||||
for (let i = this.values.length - 1; i >= 0; i--) {
|
||||
let color = themeNode.get_color(this.values[i].color);
|
||||
cr.moveTo(0, height);
|
||||
let k;
|
||||
for (k = 0; k < this.values[i].values.length; k++) {
|
||||
cr.lineTo(k, (1 - this.values[i].values[k]) * height);
|
||||
}
|
||||
if (k > width)
|
||||
this.values[i].values.shift();
|
||||
cr.lineTo(k, height);
|
||||
cr.lineTo(0, height);
|
||||
cr.closePath();
|
||||
Clutter.cairo_set_source_color(cr, color);
|
||||
|
||||
cr.fill();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
function CpuIndicator() {
|
||||
this._init();
|
||||
}
|
||||
|
||||
CpuIndicator.prototype = {
|
||||
__proto__: Indicator.prototype,
|
||||
|
||||
_initValues: function() {
|
||||
this._prev = new GTop.glibtop_cpu;
|
||||
GTop.glibtop_get_cpu(this._prev);
|
||||
|
||||
this.values = [];
|
||||
this.values.push({color: "-cpu-user-color", values: []});
|
||||
this.values.push({color: "-cpu-sys-color", values: []});
|
||||
this.values.push({color: "-cpu-iowait-color", values: []});
|
||||
},
|
||||
|
||||
_updateValues: function() {
|
||||
let cpu = new GTop.glibtop_cpu;
|
||||
let t = 0.0;
|
||||
GTop.glibtop_get_cpu(cpu);
|
||||
let total = cpu.total - this._prev.total;
|
||||
let user = cpu.user - this._prev.user;
|
||||
let sys = cpu.sys - this._prev.sys;
|
||||
let iowait = cpu.iowait - this._prev.iowait;
|
||||
|
||||
t = user / total;
|
||||
this.values[0].values.push(t);
|
||||
|
||||
t += sys / total;
|
||||
this.values[1].values.push(t);
|
||||
t += iowait / total;
|
||||
this.values[2].values.push(t);
|
||||
|
||||
this._prev = cpu;
|
||||
}
|
||||
};
|
||||
|
||||
function MemoryIndicator() {
|
||||
this._init();
|
||||
}
|
||||
|
||||
MemoryIndicator.prototype = {
|
||||
__proto__: Indicator.prototype,
|
||||
|
||||
_initValues: function() {
|
||||
this.mem = new GTop.glibtop_mem;
|
||||
this.values = [];
|
||||
this.values.push({ color: "-mem-user-color", values: [] });
|
||||
this.values.push({ color: "-mem-other-color", values: [] });
|
||||
this.values.push({ color: "-mem-cached-color", values: [] });
|
||||
},
|
||||
|
||||
_updateValues: function() {
|
||||
GTop.glibtop_get_mem(this.mem);
|
||||
|
||||
let t = this.mem.user / this.mem.total;
|
||||
this.values[0].values.push(t);
|
||||
t += (this.mem.used - this.mem.user - this.mem.cached) / this.mem.total;
|
||||
this.values[1].values.push(t);
|
||||
t += this.mem.cached / this.mem.total;
|
||||
this.values[2].values.push(t);
|
||||
}
|
||||
};
|
||||
|
||||
function main() {
|
||||
let box = new St.BoxLayout({ style_class: 'extension-systemMonitor-container' });
|
||||
box.add((new CpuIndicator()).actor);
|
||||
box.add((new MemoryIndicator()).actor);
|
||||
Main.messageTray.actor.add_actor(box);
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"shell-version": ["@shell_current@"],
|
||||
"uuid": "@uuid@",
|
||||
"localedir": "@LOCALEDIR@",
|
||||
"original-author": "zaspire@rambler.ru",
|
||||
"name": "SystemMonitor",
|
||||
"description": "System Monitor",
|
||||
"url": "@url@"
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
.extension-systemMonitor-container {
|
||||
spacing: 5px;
|
||||
}
|
||||
|
||||
.extension-systemMonitor-indicator-area {
|
||||
border: 1px solid #000;
|
||||
width: 100px;
|
||||
height: 34px;
|
||||
-cpu-user-color: #f00;
|
||||
-cpu-sys-color: #0f0;
|
||||
-cpu-iowait-color: #00f;
|
||||
-mem-user-color: #ff0;
|
||||
-mem-cached-color: #0ff;
|
||||
-mem-other-color: #111;
|
||||
background-color: #fff;
|
||||
}
|
||||
Reference in New Issue
Block a user