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
|
||||
DESTDIR =
|
||||
LIBDIR = $(PREFIX)/lib
|
||||
|
@ -29,6 +29,17 @@ clock.a: $(clock_OBJS)
|
|||
clock.so: $(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_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
|
||||
lock_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)
|
||||
|
@ -65,6 +76,9 @@ main.so: $(main_OBJS)
|
|||
clock.o: clock.c
|
||||
$(CC) $(clock_CFLAGS) -c clock.c
|
||||
|
||||
cpu.o: cpu.c
|
||||
$(CC) $(cpu_CFLAGS) -c cpu.c
|
||||
|
||||
lock.o: lock.c
|
||||
$(CC) $(lock_CFLAGS) -c lock.c
|
||||
|
||||
|
@ -75,7 +89,7 @@ main.o: main.c
|
|||
$(CC) $(main_CFLAGS) -c main.c
|
||||
|
||||
clean:
|
||||
$(RM) $(clock_OBJS) $(lock_OBJS) $(logout_OBJS) $(main_OBJS)
|
||||
$(RM) $(clock_OBJS) $(cpu_OBJS) $(lock_OBJS) $(logout_OBJS) $(main_OBJS)
|
||||
|
||||
distclean: clean
|
||||
$(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
|
||||
$(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 0755 lock.so $(DESTDIR)$(LIBDIR)/Panel/applets/lock.so.0.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
|
||||
$(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.so.0.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
|
||||
cflags_force=`pkg-config --cflags gtk+-2.0` -fPIC
|
||||
cflags=-Wall -g -O2 -pedantic
|
||||
|
@ -8,6 +8,12 @@ type=library
|
|||
sources=clock.c
|
||||
install=$(LIBDIR)/Panel/applets
|
||||
|
||||
|
||||
[cpu]
|
||||
type=library
|
||||
sources=cpu.c
|
||||
install=$(LIBDIR)/Panel/applets
|
||||
|
||||
[lock]
|
||||
type=library
|
||||
sources=lock.c
|
||||
|
|
|
@ -118,7 +118,8 @@ static gboolean _on_idle(gpointer data)
|
|||
{
|
||||
Panel * panel = data;
|
||||
/* 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;
|
||||
Plugin * plugin;
|
||||
PanelApplet * applet;
|
||||
|
@ -151,7 +152,7 @@ static gboolean _on_idle(gpointer data)
|
|||
widget, FALSE, TRUE, 2);
|
||||
gtk_box_reorder_child(GTK_BOX(
|
||||
panel->hbox),
|
||||
widget, -1);
|
||||
widget, 0);
|
||||
break;
|
||||
case PANEL_APPLET_POSITION_START:
|
||||
gtk_box_pack_start(GTK_BOX(panel->hbox),
|
||||
|
|
Loading…
Reference in New Issue
Block a user