Added a CPU activity monitoring plugin (only works on NetBSD for now)
This commit is contained in:
parent
9754a44d6c
commit
aca1375191
|
@ -1,4 +1,4 @@
|
||||||
TARGETS = clock.a clock.so lock.a lock.so logout.a logout.so main.a main.so
|
TARGETS = clock.a clock.so cpu.a cpu.so lock.a lock.so logout.a logout.so main.a main.so
|
||||||
PREFIX = /usr/local
|
PREFIX = /usr/local
|
||||||
DESTDIR =
|
DESTDIR =
|
||||||
LIBDIR = $(PREFIX)/lib
|
LIBDIR = $(PREFIX)/lib
|
||||||
|
@ -29,6 +29,17 @@ clock.a: $(clock_OBJS)
|
||||||
clock.so: $(clock_OBJS)
|
clock.so: $(clock_OBJS)
|
||||||
$(LD) -o clock.so -Wl,-soname,clock.so.0 $(clock_OBJS)
|
$(LD) -o clock.so -Wl,-soname,clock.so.0 $(clock_OBJS)
|
||||||
|
|
||||||
|
cpu_OBJS = cpu.o
|
||||||
|
cpu_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
|
||||||
|
cpu_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)
|
||||||
|
|
||||||
|
cpu.a: $(cpu_OBJS)
|
||||||
|
$(AR) cpu.a $(cpu_OBJS)
|
||||||
|
$(RANLIB) cpu.a
|
||||||
|
|
||||||
|
cpu.so: $(cpu_OBJS)
|
||||||
|
$(LD) -o cpu.so -Wl,-soname,cpu.so.0 $(cpu_OBJS)
|
||||||
|
|
||||||
lock_OBJS = lock.o
|
lock_OBJS = lock.o
|
||||||
lock_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
|
lock_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
|
||||||
lock_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)
|
lock_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)
|
||||||
|
@ -65,6 +76,9 @@ main.so: $(main_OBJS)
|
||||||
clock.o: clock.c
|
clock.o: clock.c
|
||||||
$(CC) $(clock_CFLAGS) -c clock.c
|
$(CC) $(clock_CFLAGS) -c clock.c
|
||||||
|
|
||||||
|
cpu.o: cpu.c
|
||||||
|
$(CC) $(cpu_CFLAGS) -c cpu.c
|
||||||
|
|
||||||
lock.o: lock.c
|
lock.o: lock.c
|
||||||
$(CC) $(lock_CFLAGS) -c lock.c
|
$(CC) $(lock_CFLAGS) -c lock.c
|
||||||
|
|
||||||
|
@ -75,7 +89,7 @@ main.o: main.c
|
||||||
$(CC) $(main_CFLAGS) -c main.c
|
$(CC) $(main_CFLAGS) -c main.c
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
$(RM) $(clock_OBJS) $(lock_OBJS) $(logout_OBJS) $(main_OBJS)
|
$(RM) $(clock_OBJS) $(cpu_OBJS) $(lock_OBJS) $(logout_OBJS) $(main_OBJS)
|
||||||
|
|
||||||
distclean: clean
|
distclean: clean
|
||||||
$(RM) $(TARGETS)
|
$(RM) $(TARGETS)
|
||||||
|
@ -87,6 +101,11 @@ install: all
|
||||||
$(LN) -s clock.so.0.0 $(DESTDIR)$(LIBDIR)/Panel/applets/clock.so.0
|
$(LN) -s clock.so.0.0 $(DESTDIR)$(LIBDIR)/Panel/applets/clock.so.0
|
||||||
$(LN) -s clock.so.0.0 $(DESTDIR)$(LIBDIR)/Panel/applets/clock.so
|
$(LN) -s clock.so.0.0 $(DESTDIR)$(LIBDIR)/Panel/applets/clock.so
|
||||||
$(MKDIR) $(DESTDIR)$(LIBDIR)/Panel/applets
|
$(MKDIR) $(DESTDIR)$(LIBDIR)/Panel/applets
|
||||||
|
$(INSTALL) -m 0644 cpu.a $(DESTDIR)$(LIBDIR)/Panel/applets/cpu.a
|
||||||
|
$(INSTALL) -m 0755 cpu.so $(DESTDIR)$(LIBDIR)/Panel/applets/cpu.so.0.0
|
||||||
|
$(LN) -s cpu.so.0.0 $(DESTDIR)$(LIBDIR)/Panel/applets/cpu.so.0
|
||||||
|
$(LN) -s cpu.so.0.0 $(DESTDIR)$(LIBDIR)/Panel/applets/cpu.so
|
||||||
|
$(MKDIR) $(DESTDIR)$(LIBDIR)/Panel/applets
|
||||||
$(INSTALL) -m 0644 lock.a $(DESTDIR)$(LIBDIR)/Panel/applets/lock.a
|
$(INSTALL) -m 0644 lock.a $(DESTDIR)$(LIBDIR)/Panel/applets/lock.a
|
||||||
$(INSTALL) -m 0755 lock.so $(DESTDIR)$(LIBDIR)/Panel/applets/lock.so.0.0
|
$(INSTALL) -m 0755 lock.so $(DESTDIR)$(LIBDIR)/Panel/applets/lock.so.0.0
|
||||||
$(LN) -s lock.so.0.0 $(DESTDIR)$(LIBDIR)/Panel/applets/lock.so.0
|
$(LN) -s lock.so.0.0 $(DESTDIR)$(LIBDIR)/Panel/applets/lock.so.0
|
||||||
|
@ -107,6 +126,10 @@ uninstall:
|
||||||
$(RM) $(DESTDIR)$(LIBDIR)/Panel/applets/clock.so.0.0
|
$(RM) $(DESTDIR)$(LIBDIR)/Panel/applets/clock.so.0.0
|
||||||
$(RM) $(DESTDIR)$(LIBDIR)/Panel/applets/clock.so.0
|
$(RM) $(DESTDIR)$(LIBDIR)/Panel/applets/clock.so.0
|
||||||
$(RM) $(DESTDIR)$(LIBDIR)/Panel/applets/clock.so
|
$(RM) $(DESTDIR)$(LIBDIR)/Panel/applets/clock.so
|
||||||
|
$(RM) $(DESTDIR)$(LIBDIR)/Panel/applets/cpu.a
|
||||||
|
$(RM) $(DESTDIR)$(LIBDIR)/Panel/applets/cpu.so.0.0
|
||||||
|
$(RM) $(DESTDIR)$(LIBDIR)/Panel/applets/cpu.so.0
|
||||||
|
$(RM) $(DESTDIR)$(LIBDIR)/Panel/applets/cpu.so
|
||||||
$(RM) $(DESTDIR)$(LIBDIR)/Panel/applets/lock.a
|
$(RM) $(DESTDIR)$(LIBDIR)/Panel/applets/lock.a
|
||||||
$(RM) $(DESTDIR)$(LIBDIR)/Panel/applets/lock.so.0.0
|
$(RM) $(DESTDIR)$(LIBDIR)/Panel/applets/lock.so.0.0
|
||||||
$(RM) $(DESTDIR)$(LIBDIR)/Panel/applets/lock.so.0
|
$(RM) $(DESTDIR)$(LIBDIR)/Panel/applets/lock.so.0
|
||||||
|
|
136
src/applets/cpu.c
Normal file
136
src/applets/cpu.c
Normal file
|
@ -0,0 +1,136 @@
|
||||||
|
/* $Id$ */
|
||||||
|
/* Copyright (c) 2009 Pierre Pronchery <khorben@defora.org> */
|
||||||
|
/* This file is part of DeforaOS Desktop Panel */
|
||||||
|
/* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3 of the License.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include <sys/time.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#ifdef __NetBSD__
|
||||||
|
# include <sys/sysctl.h>
|
||||||
|
#endif
|
||||||
|
#include "panel.h"
|
||||||
|
#include "../../config.h"
|
||||||
|
|
||||||
|
|
||||||
|
/* Cpu */
|
||||||
|
/* private */
|
||||||
|
/* types */
|
||||||
|
typedef struct _Cpu
|
||||||
|
{
|
||||||
|
GtkWidget * scale;
|
||||||
|
guint timeout;
|
||||||
|
#ifdef __NetBSD__
|
||||||
|
int used;
|
||||||
|
int total;
|
||||||
|
#endif
|
||||||
|
} Cpu;
|
||||||
|
|
||||||
|
|
||||||
|
/* prototypes */
|
||||||
|
static GtkWidget * _cpu_init(PanelApplet * applet);
|
||||||
|
static void _cpu_destroy(PanelApplet * applet);
|
||||||
|
|
||||||
|
/* callbacks */
|
||||||
|
static gboolean _on_timeout(gpointer data);
|
||||||
|
|
||||||
|
|
||||||
|
/* public */
|
||||||
|
/* variables */
|
||||||
|
PanelApplet applet =
|
||||||
|
{
|
||||||
|
NULL,
|
||||||
|
_cpu_init,
|
||||||
|
_cpu_destroy,
|
||||||
|
PANEL_APPLET_POSITION_END,
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* private */
|
||||||
|
/* functions */
|
||||||
|
/* cpu_init */
|
||||||
|
static GtkWidget * _cpu_init(PanelApplet * applet)
|
||||||
|
{
|
||||||
|
GtkWidget * ret;
|
||||||
|
Cpu * cpu;
|
||||||
|
PangoFontDescription * desc;
|
||||||
|
GtkWidget * widget;
|
||||||
|
|
||||||
|
if((cpu = malloc(sizeof(*cpu))) == NULL)
|
||||||
|
return NULL;
|
||||||
|
applet->priv = cpu;
|
||||||
|
ret = gtk_hbox_new(FALSE, 0);
|
||||||
|
desc = pango_font_description_new();
|
||||||
|
pango_font_description_set_weight(desc, PANGO_WEIGHT_BOLD);
|
||||||
|
widget = gtk_label_new("CPU:");
|
||||||
|
gtk_widget_modify_font(widget, desc);
|
||||||
|
gtk_box_pack_start(GTK_BOX(ret), widget, FALSE, FALSE, 0);
|
||||||
|
cpu->scale = gtk_vscale_new_with_range(0, 100, 1);
|
||||||
|
gtk_widget_set_sensitive(cpu->scale, FALSE);
|
||||||
|
gtk_range_set_inverted(GTK_RANGE(cpu->scale), TRUE);
|
||||||
|
gtk_scale_set_value_pos(GTK_SCALE(cpu->scale), GTK_POS_RIGHT);
|
||||||
|
gtk_box_pack_start(GTK_BOX(ret), cpu->scale, FALSE, FALSE, 0);
|
||||||
|
cpu->timeout = g_timeout_add(500, _on_timeout, cpu);
|
||||||
|
#ifdef __NetBSD__
|
||||||
|
cpu->used = 0;
|
||||||
|
cpu->total = 0;
|
||||||
|
#endif
|
||||||
|
_on_timeout(cpu);
|
||||||
|
pango_font_description_free(desc);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* cpu_destroy */
|
||||||
|
static void _cpu_destroy(PanelApplet * applet)
|
||||||
|
{
|
||||||
|
Cpu * cpu = applet->priv;
|
||||||
|
|
||||||
|
g_source_remove(cpu->timeout);
|
||||||
|
free(cpu);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* callbacks */
|
||||||
|
/* on_timeout */
|
||||||
|
static gboolean _on_timeout(gpointer data)
|
||||||
|
{
|
||||||
|
#ifdef __NetBSD__
|
||||||
|
Cpu * cpu = data;
|
||||||
|
int mib[] = { CTL_KERN, KERN_CP_TIME };
|
||||||
|
uint64_t cpu_time[CPUSTATES];
|
||||||
|
size_t size = sizeof(cpu_time);
|
||||||
|
int used;
|
||||||
|
int total;
|
||||||
|
gdouble value;
|
||||||
|
|
||||||
|
if(sysctl(mib, 2, &cpu_time, &size, NULL, 0) < 0)
|
||||||
|
return TRUE;
|
||||||
|
used = cpu_time[CP_USER] + cpu_time[CP_SYS] + cpu_time[CP_NICE]
|
||||||
|
+ cpu_time[CP_INTR];
|
||||||
|
total = used + cpu_time[CP_IDLE];
|
||||||
|
if(cpu->used == 0)
|
||||||
|
value = 0;
|
||||||
|
else
|
||||||
|
value = 100 * (used - cpu->used) / (total - cpu->total);
|
||||||
|
cpu->used = used;
|
||||||
|
cpu->total = total;
|
||||||
|
gtk_range_set_value(GTK_RANGE(cpu->scale), value);
|
||||||
|
#endif
|
||||||
|
return TRUE;
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
targets=clock,lock,logout,main
|
targets=clock,cpu,lock,logout,main
|
||||||
cppflags_force=-I ../../include
|
cppflags_force=-I ../../include
|
||||||
cflags_force=`pkg-config --cflags gtk+-2.0` -fPIC
|
cflags_force=`pkg-config --cflags gtk+-2.0` -fPIC
|
||||||
cflags=-Wall -g -O2 -pedantic
|
cflags=-Wall -g -O2 -pedantic
|
||||||
|
@ -8,6 +8,12 @@ type=library
|
||||||
sources=clock.c
|
sources=clock.c
|
||||||
install=$(LIBDIR)/Panel/applets
|
install=$(LIBDIR)/Panel/applets
|
||||||
|
|
||||||
|
|
||||||
|
[cpu]
|
||||||
|
type=library
|
||||||
|
sources=cpu.c
|
||||||
|
install=$(LIBDIR)/Panel/applets
|
||||||
|
|
||||||
[lock]
|
[lock]
|
||||||
type=library
|
type=library
|
||||||
sources=lock.c
|
sources=lock.c
|
||||||
|
|
|
@ -118,7 +118,8 @@ static gboolean _on_idle(gpointer data)
|
||||||
{
|
{
|
||||||
Panel * panel = data;
|
Panel * panel = data;
|
||||||
/* FIXME load all plugins, a configuration file or ask the user */
|
/* FIXME load all plugins, a configuration file or ask the user */
|
||||||
const char * plugins[] = { "main", "lock", "logout", "clock", NULL };
|
const char * plugins[] = { "cpu", "clock", "lock", "logout", "main",
|
||||||
|
NULL };
|
||||||
size_t i;
|
size_t i;
|
||||||
Plugin * plugin;
|
Plugin * plugin;
|
||||||
PanelApplet * applet;
|
PanelApplet * applet;
|
||||||
|
@ -151,7 +152,7 @@ static gboolean _on_idle(gpointer data)
|
||||||
widget, FALSE, TRUE, 2);
|
widget, FALSE, TRUE, 2);
|
||||||
gtk_box_reorder_child(GTK_BOX(
|
gtk_box_reorder_child(GTK_BOX(
|
||||||
panel->hbox),
|
panel->hbox),
|
||||||
widget, -1);
|
widget, 0);
|
||||||
break;
|
break;
|
||||||
case PANEL_APPLET_POSITION_START:
|
case PANEL_APPLET_POSITION_START:
|
||||||
gtk_box_pack_start(GTK_BOX(panel->hbox),
|
gtk_box_pack_start(GTK_BOX(panel->hbox),
|
||||||
|
|
Loading…
Reference in New Issue
Block a user