update.c File Reference

#include <glib.h>
#include <gtk/gtk.h>
#include <signal.h>
#include "lininfo.h"
#include "support.h"
#include "lkmonitor.h"
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

Go to the source code of this file.

Functions

void update_mem ()
 Update mem pane.
void update_cpu ()
 Update cpu pane.
void update_cpu_mhz (void)
 Update mhz variable in cpu pane.
void update_devs ()
 Update devices pane.
void update_settings ()
 Update settings pane.
void update_misc ()
 Update misc pane.

Variables

GtkWidget * window1
mem_info mem
cpu_info cpu
dev_info devs
settings_info settings
stats_info stats
acpi_info acpi


Function Documentation

void update_cpu (  ) 

Update cpu pane.

Update gtk widgets for cpu panel This function updates labels to show recent values. Before, it calls to get_cpu_info to collect data

Definition at line 155 of file update.c.

References cpu_info::bogomips, cpu_info::cache, cpu, cpu_info::cpu_family, cpu_info::cpuid_level, cpu_info::flags, cpu_info::fpu, cpu_info::fpu_exception, get_cpu_info(), lookup_widget(), cpu_info::Mhz, cpu_info::model, cpu_info::model_name, cpu_info::processor, cpu_info::stepping, cpu_info::vendor_id, window1, and cpu_info::wp.

Referenced by main().

00156 {
00157 
00158   get_cpu_info (&cpu);
00159 
00160   GtkLabel *widget;
00161 
00162   /*Not updated so, we don't need thread locking*/
00163         
00164   widget = GTK_LABEL( lookup_widget (window1, "lbl_processor"));
00165   gtk_label_set_text (widget, (gchar *) cpu.processor);
00166 
00167   widget = GTK_LABEL( lookup_widget (window1, "lbl_vendor"));
00168   gtk_label_set_text (widget, (gchar *) cpu.vendor_id);
00169 
00170   widget = GTK_LABEL( lookup_widget (window1, "lbl_family"));
00171   gtk_label_set_text (widget, (gchar *) cpu.cpu_family);
00172 
00173 
00174   widget = GTK_LABEL( lookup_widget (window1, "lbl_model"));
00175   gtk_label_set_text (widget, (gchar *) cpu.model);
00176 
00177   widget = GTK_LABEL(lookup_widget (window1, "lbl_model_name"));
00178   gtk_label_set_text (widget, (gchar *) cpu.model_name);
00179 
00180   widget = GTK_LABEL( lookup_widget (window1, "lbl_stepping"));
00181   gtk_label_set_text (widget, (gchar *) cpu.stepping);
00182 
00183   widget = GTK_LABEL( lookup_widget (window1, "lbl_Mhz"));
00184   gtk_label_set_text (widget, (gchar *) cpu.Mhz);
00185 
00186   widget = GTK_LABEL( lookup_widget (window1, "lbl_cache"));
00187   gtk_label_set_text (widget, (gchar *) cpu.cache);
00188 
00189   widget = GTK_LABEL( lookup_widget (window1, "lbl_fpu"));
00190   gtk_label_set_text (widget, (gchar *) cpu.fpu);
00191 
00192   widget = GTK_LABEL( lookup_widget (window1, "lbl_fpu_exception"));
00193   gtk_label_set_text (widget, (gchar *) cpu.fpu_exception);
00194 
00195   widget = GTK_LABEL( lookup_widget (window1, "lbl_cpu_id_level"));
00196   gtk_label_set_text (widget, (gchar *) cpu.cpuid_level);
00197 
00198   widget = GTK_LABEL( lookup_widget (window1, "lbl_wp"));
00199   gtk_label_set_text (widget, (gchar *) cpu.wp);
00200 
00201   widget = GTK_LABEL( lookup_widget (window1, "lbl_bogomips"));
00202   gtk_label_set_text (widget, (gchar *) cpu.bogomips);
00203 
00204   widget = GTK_LABEL( lookup_widget (window1, "lbl_flags"));
00205   gtk_label_set_text (widget, (gchar *) cpu.flags);
00206 
00207  
00208 }

void update_cpu_mhz ( void   ) 

Update mhz variable in cpu pane.

Update MHz label in cpu pane This is the only dynamic feature in cpu pane.

Definition at line 213 of file update.c.

References get_mhz_info(), lookup_widget(), and window1.

Referenced by refresh().

00214 {
00215         GtkLabel *mhz_label;
00216         char str[10];
00217         
00218         get_mhz_info(str);
00219         
00220         gdk_threads_enter();
00221         
00222         mhz_label=GTK_LABEL(lookup_widget(window1,"lbl_Mhz"));
00223         gtk_label_set_text(mhz_label,str);
00224         
00225         gdk_threads_leave();
00226 }

void update_devs (  ) 

Update devices pane.

Update treeviews for devices pane This is called from a callback

Definition at line 231 of file update.c.

References dev_info::blocks, dev_info::characters, devs, get_devs_info(), lkmonitor_fill_tv(), lookup_widget(), and window1.

Referenced by main(), and on_btn_dev_load_clicked().

00232 {
00233   get_devs_info(&devs);
00234         
00235         GtkListStore *model;
00236         GtkTreeView *gtv;
00237         GtkTreeIter iter;
00238 
00239         /* IMPORTANT:
00240                 We should not lock with gdk_threads_enter because this function is 
00241                 called from a callback and callbacks are already running inside a gdk
00242                 lock.
00243                 In addition, this function is called from main thread before the collector
00244                 thread is created, so we don't need to prevent the access from the other
00245                 thread.
00246         */
00247 
00248 /* We want the model of the GtkTreeView for char devices */
00249 gtv=GTK_TREE_VIEW(lookup_widget(window1,"gtv_char"));
00250 model=GTK_LIST_STORE(gtk_tree_view_get_model(gtv));
00251 
00252         gtk_tree_view_set_model(gtv,NULL);
00253         gtk_list_store_clear(model);
00254         lkmonitor_fill_tv(model,gtv,iter,devs.characters->str);
00255         gtk_tree_view_set_model(gtv,GTK_TREE_MODEL(model));
00256 
00257 /* We want the model of the GtkTreeView for block devices */
00258 gtv=GTK_TREE_VIEW(lookup_widget(window1,"gtv_block"));
00259 model=GTK_LIST_STORE(gtk_tree_view_get_model(gtv));
00260 gtk_tree_view_set_model(gtv,NULL);
00261         gtk_list_store_clear(model);
00262 lkmonitor_fill_tv(model,gtv,iter,devs.blocks->str);
00263         gtk_tree_view_set_model(gtv,GTK_TREE_MODEL(model));
00264 
00265 }

void update_mem (  ) 

Update mem pane.

Update gtk widgets for memory panel This function updates labels, progress bar and other widgets to show the most recent values. Before, it calls to get_mem_info to collect data

Definition at line 55 of file update.c.

References mem_info::active, mem_info::buffers, mem_info::cached, mem_info::dirty, mem_info::free, get_mem_info(), mem_info::high_free, mem_info::high_total, mem_info::hugepages_free, mem_info::hugepages_size, mem_info::hugepages_total, mem_info::inactive, lookup_widget(), mem_info::low_free, mem_info::low_total, mem, mem_info::swap_cached, mem_info::swap_free, mem_info::swap_total, mem_info::total, and window1.

Referenced by refresh().

00056 {
00057 
00058   GtkLabel *widget;
00059   GtkProgressBar *progreso;
00060   gfloat total, free;
00061 
00062   get_mem_info (&mem);
00063         
00064   //Get Gtk thread lock
00065   gdk_threads_enter();
00066 
00067 
00068   widget = GTK_LABEL(lookup_widget (window1, "lbl_total"));
00069   gtk_label_set_text (widget, (gchar *) mem.total);
00070 
00071   widget = GTK_LABEL( lookup_widget (window1, "lbl_free"));
00072   gtk_label_set_text (widget, (gchar *) mem.free);
00073 
00074   widget = GTK_LABEL(lookup_widget (window1, "lbl_buffers"));
00075   gtk_label_set_text (widget, (gchar *) mem.buffers);
00076 
00077   widget = GTK_LABEL( lookup_widget (window1, "lbl_cached"));
00078   gtk_label_set_text (widget, (gchar *) mem.cached);
00079 
00080   widget = GTK_LABEL( lookup_widget (window1, "lbl_swap_cached"));
00081   gtk_label_set_text (widget, (gchar *) mem.swap_cached);
00082 
00083   widget = GTK_LABEL( lookup_widget (window1, "lbl_active"));
00084   gtk_label_set_text (widget, (gchar *) mem.active);
00085 
00086   widget = GTK_LABEL( lookup_widget (window1, "lbl_inactive"));
00087   gtk_label_set_text (widget, (gchar *) mem.inactive);
00088 
00089   widget = GTK_LABEL( lookup_widget (window1, "lbl_dirty"));
00090   gtk_label_set_text (widget, (gchar *) mem.dirty);
00091 
00092   widget = GTK_LABEL( lookup_widget (window1, "lbl_hp_total"));
00093   gtk_label_set_text (widget, (gchar *) mem.hugepages_total);
00094 
00095   widget = GTK_LABEL( lookup_widget (window1, "lbl_hp_free"));
00096   gtk_label_set_text (widget, (gchar *) mem.hugepages_free);
00097 
00098   widget = GTK_LABEL( lookup_widget (window1, "lbl_hp_size"));
00099   gtk_label_set_text (widget, (gchar *) mem.hugepages_size);
00100 
00101   widget = GTK_LABEL( lookup_widget (window1, "lbl_high_total"));
00102   gtk_label_set_text (widget, (gchar *) mem.high_total);
00103 
00104   widget = GTK_LABEL( lookup_widget (window1, "lbl_high_free"));
00105   gtk_label_set_text (widget, (gchar *) mem.high_free);
00106 
00107   widget = GTK_LABEL( lookup_widget (window1, "lbl_low_total"));
00108   gtk_label_set_text (widget, (gchar *) mem.low_total);
00109 
00110 
00111   widget = GTK_LABEL( lookup_widget (window1, "lbl_low_free"));
00112   gtk_label_set_text (widget, (gchar *) mem.low_free);
00113 
00114   widget = GTK_LABEL( lookup_widget (window1, "lbl_swap_total"));
00115   gtk_label_set_text (widget, (gchar *) mem.swap_total);
00116 
00117   widget = GTK_LABEL( lookup_widget (window1, "lbl_swap_free"));
00118   gtk_label_set_text (widget, (gchar *) mem.swap_free);
00119 
00120   /*Compute percentage of memory use*/
00121   total = atoi (strtok (mem.total, " "));
00122   free = atoi (strtok (mem.free, " "));
00123 
00124   g_assert(total!=0);
00125   
00126   progreso = GTK_PROGRESS_BAR(lookup_widget (window1, "pb_mem"));
00127   gtk_progress_bar_set_fraction (progreso, 
00128                                                         (gfloat) CLAMP(((total - free) / total),0,1));
00129 
00130 
00131   /*Compute percentage of swap use. Reuse variables.*/
00132 
00133 
00134   total = atoi (strtok (mem.swap_total, " "));
00135   free = atoi (strtok (mem.swap_free, " "));
00136   
00137   progreso = GTK_PROGRESS_BAR (lookup_widget (window1, "pb_swap"));
00138   
00139   if(total!=0){
00140     gtk_progress_bar_set_fraction (progreso, 
00141                                                         (gfloat) CLAMP(((total - free) / total),0,1));
00142           }
00143   else
00144     gtk_progress_bar_set_text(progreso, (gchar *)_("Not present"));
00145   
00146   gdk_threads_leave();
00147 }                               

void update_misc (  ) 

Update misc pane.

Update misc panel Updates labels and spinbuttons

Definition at line 360 of file update.c.

References acpi, acpi_info::battery, battery_info::cap, battery_info::cap_low, battery_info::cap_warning, stats_info::cpu, stats_info::ctxt, get_acpi_info(), get_stats_info(), battery_info::last_cap, lookup_widget(), battery_info::rem, stats, acpi_info::temp, acpi_info::temp_critical, battery_info::type, and window1.

Referenced by refresh().

00361 {
00362         GtkLabel *lbl;
00363         GtkProgressBar *pb;
00364         gfloat total,free;
00365         static float old_total,old_use;
00366         float use;
00367         gchar percent[4];
00368         gchar user[10];
00369         gchar nice[10];
00370         gchar system[10];
00371         gchar idle[10];
00372         gchar iowait[10];
00373         gchar irq[10];
00374         gchar softirq[10];
00375 
00376 get_acpi_info(&acpi);
00377         
00378   get_stats_info(&stats);
00379   sscanf(stats.cpu->str,"%s %s %s %s %s %s %s",user,nice,system,idle,iowait,\
00380                                                                                                         irq,softirq);
00381         gdk_threads_enter();
00382         
00383         lbl=GTK_LABEL(lookup_widget(window1,"lbl_user"));
00384         gtk_label_set_text(lbl,user);
00385         lbl=GTK_LABEL(lookup_widget(window1,"lbl_nice"));
00386         gtk_label_set_text(lbl,nice);
00387         lbl=GTK_LABEL(lookup_widget(window1,"lbl_system"));
00388         gtk_label_set_text(lbl,system);
00389         lbl=GTK_LABEL(lookup_widget(window1,"lbl_idle"));
00390         gtk_label_set_text(lbl,idle);
00391         lbl=GTK_LABEL(lookup_widget(window1,"lbl_iowait"));
00392         gtk_label_set_text(lbl,iowait);
00393         lbl=GTK_LABEL(lookup_widget(window1,"lbl_irq"));
00394         gtk_label_set_text(lbl,irq);
00395         lbl=GTK_LABEL(lookup_widget(window1,"lbl_softirq"));
00396         gtk_label_set_text(lbl,softirq);
00397         
00398         lbl=GTK_LABEL(lookup_widget(window1,"lbl_context"));
00399         gtk_label_set_text(lbl,stats.ctxt->str);
00400         
00401         total=atof(user)+atof(nice)+atof(system)+atof(idle)+atof(iowait)+
00402                         atof(irq)+atof(softirq);
00403                         
00404         free=atof(idle)+atof(iowait)+atof(irq)+atof(softirq);
00405         use=total-free;
00406                         
00407         pb=GTK_PROGRESS_BAR(lookup_widget(window1,"pb_cpu"));
00408         gtk_progress_bar_set_fraction(pb,CLAMP((use-old_use)/(total-old_total),0,1));
00409         sprintf(percent,"%.0f%s",CLAMP((use-old_use),0,100),"%");
00410         gtk_progress_bar_set_text(pb,percent);
00411         
00412         old_use=use;
00413         old_total=total;
00414         
00415         /*Update ACPI*/
00416         
00417         lbl=GTK_LABEL(lookup_widget(window1,"lbl_cap"));
00418         gtk_label_set_text(lbl,acpi.battery.cap->str);
00419         lbl=GTK_LABEL(lookup_widget(window1,"lbl_last_cap"));
00420         gtk_label_set_text(lbl,acpi.battery.last_cap->str);
00421         lbl=GTK_LABEL(lookup_widget(window1,"lbl_cap_warning"));
00422         gtk_label_set_text(lbl,acpi.battery.cap_warning->str);
00423         lbl=GTK_LABEL(lookup_widget(window1,"lbl_cap_low"));
00424         gtk_label_set_text(lbl,acpi.battery.cap_low->str);
00425         lbl=GTK_LABEL(lookup_widget(window1,"lbl_batt_type"));
00426         gtk_label_set_text(lbl,acpi.battery.type->str);
00427         
00428         if(strcmp(acpi.temp->str,_("Unknown"))!=0){
00429                 total=atof(acpi.temp_critical->str);
00430                 free=atof(acpi.temp->str);
00431         
00432                 pb=GTK_PROGRESS_BAR(lookup_widget(window1,"pb_temp"));
00433                 gtk_progress_bar_set_fraction(pb,free/total);
00434                 gtk_progress_bar_set_text(pb,acpi.temp->str);
00435         }else{
00436                 pb=GTK_PROGRESS_BAR(lookup_widget(window1,"pb_temp"));
00437                 gtk_progress_bar_set_text(pb,_("Unknown"));
00438         }
00439 
00440         if(strcmp(acpi.battery.rem->str,_("Unknown"))!=0){
00441                 total=atof(acpi.battery.cap->str);
00442                 free=atof(acpi.battery.rem->str);
00443         
00444                 pb=GTK_PROGRESS_BAR(lookup_widget(window1,"pb_batt"));
00445                 gtk_progress_bar_set_fraction(pb,free/total);
00446                 gtk_progress_bar_set_text(pb,acpi.battery.rem->str);
00447         }else{
00448                 pb=GTK_PROGRESS_BAR(lookup_widget(window1,"pb_batt"));
00449                 gtk_progress_bar_set_text(pb,_("Unknown"));
00450         }
00451   
00452   
00453         
00454   gdk_threads_leave();
00455 }

void update_settings (  ) 

Update settings pane.

Update gtk widgets for settings panel Called from a callback

Definition at line 270 of file update.c.

References settings_info::domain, settings_info::fdasig, settings_info::fdfreed, settings_info::fdmax, get_settings_info(), settings_info::host, settings_info::inasig, settings_info::inmax, lookup_widget(), settings_info::max_opcall, settings_info::max_seminset, settings_info::max_semsets, settings_info::max_semsys, settings_info::page_max, settings_info::posix_mpq, settings_info::posix_mq, settings_info::posix_ms, settings_info::seg_max, settings_info::seg_size, settings, settings_info::threads, and window1.

Referenced by main(), on_btn_load_clicked(), and on_btn_write_clicked().

00271 {
00272         GtkSpinButton *spb;
00273         GtkLabel *lbl;
00274         GtkEntry *ent;
00275         gchar str[10]; /* For numeric conversion. */
00276         
00277         get_settings_info(&settings);
00278 
00279         /* IMPORTANT:
00280                 We should not lock with gdk_threads_enter because this function is 
00281                 called from a callback and callbacks are already running inside a gdk
00282                 lock.
00283                 In addition, this function is called from main thread before the collector
00284                 thread is created, so we don't need to prevent the access from the other
00285                 thread.
00286         */
00287         
00288         /* Identification */
00289         ent=GTK_ENTRY(lookup_widget(window1,"ent_hostname"));
00290         gtk_entry_set_text(ent,settings.host->str);
00291         
00292         ent=GTK_ENTRY(lookup_widget(window1,"ent_domainname"));
00293         gtk_entry_set_text(ent,settings.domain->str);
00294         
00295         
00296         /* threads */
00297         spb=GTK_SPIN_BUTTON(lookup_widget(window1,"spb_maxthreads"));
00298         gtk_spin_button_set_value(spb,(gdouble)settings.threads);
00299         
00300         /* files */
00301         spb=GTK_SPIN_BUTTON(lookup_widget(window1,"spb_fdmax"));
00302         gtk_spin_button_set_value(spb,(gdouble)settings.fdmax);
00303         
00304         lbl=GTK_LABEL(lookup_widget(window1,"lbl_inmax"));
00305         sprintf(str,"%d",settings.inmax);
00306         gtk_label_set_text(lbl,str);
00307         
00308         lbl=GTK_LABEL(lookup_widget(window1,"lbl_fda"));
00309         sprintf(str,"%d",settings.fdasig);
00310         gtk_label_set_text(lbl,str);
00311         
00312         lbl=GTK_LABEL(lookup_widget(window1,"lbl_ufd"));
00313         sprintf(str,"%d",settings.fdfreed);
00314         gtk_label_set_text(lbl,str);
00315         
00316         lbl=GTK_LABEL(lookup_widget(window1,"lbl_ina"));
00317         sprintf(str,"%d",settings.inasig);
00318         gtk_label_set_text(lbl,str);
00319         
00320         /* RT POSIX Signals */
00321         spb=GTK_SPIN_BUTTON(lookup_widget(window1,"spb_mq"));
00322         gtk_spin_button_set_value(spb,(gdouble)settings.posix_mq);
00323         
00324         spb=GTK_SPIN_BUTTON(lookup_widget(window1,"spb_max_mpq"));
00325         gtk_spin_button_set_value(spb,(gdouble)settings.posix_mpq);
00326         
00327         spb=GTK_SPIN_BUTTON(lookup_widget(window1,"spb_max_ms"));
00328         gtk_spin_button_set_value(spb,(gdouble)settings.posix_ms);
00329         
00330         /* Shared Memory */
00331         spb=GTK_SPIN_BUTTON(lookup_widget(window1,"spb_max_pages"));
00332         gtk_spin_button_set_value(spb,(gdouble)settings.page_max);
00333         
00334         spb=GTK_SPIN_BUTTON(lookup_widget(window1,"spb_max_segs"));
00335         gtk_spin_button_set_value(spb,(gdouble)settings.seg_max);
00336         
00337         spb=GTK_SPIN_BUTTON(lookup_widget(window1,"spb_seg_size"));
00338         gtk_spin_button_set_value(spb,(gdouble)settings.seg_size);
00339         
00340         /* Semaphores */
00341         
00342         spb=GTK_SPIN_BUTTON(lookup_widget(window1,"spb_sem_per_id"));
00343         gtk_spin_button_set_value(spb,(gdouble)settings.max_seminset);
00344         
00345         spb=GTK_SPIN_BUTTON(lookup_widget(window1,"spb_sem_val"));
00346         gtk_spin_button_set_value(spb,(gdouble)settings.max_semsys);
00347         
00348         spb=GTK_SPIN_BUTTON(lookup_widget(window1,"spb_ops"));
00349         gtk_spin_button_set_value(spb,(gdouble)settings.max_opcall);
00350         
00351         spb=GTK_SPIN_BUTTON(lookup_widget(window1,"spb_sem_id"));
00352         gtk_spin_button_set_value(spb,(gdouble)settings.max_semsets);
00353         
00354         
00355 }


Variable Documentation

struct acpi_info acpi

Definition at line 58 of file main.c.

Referenced by get_acpi_info(), main(), and update_misc().

struct cpu_info cpu

Definition at line 53 of file main.c.

Referenced by get_cpu_info(), and update_cpu().

struct dev_info devs

Definition at line 55 of file main.c.

Referenced by get_devs_info(), and update_devs().

struct mem_info mem

Definition at line 54 of file main.c.

Referenced by get_mem_info(), and update_mem().

struct settings_info settings

Definition at line 56 of file main.c.

Referenced by get_settings_info(), and update_settings().

struct stats_info stats

Definition at line 57 of file main.c.

Referenced by get_stats_info(), and update_misc().

GtkWidget* window1

Update data functions Show updated data to user

Definition at line 47 of file main.c.


Generated on Sat Dec 2 11:27:53 2006 for lkmonitor by  doxygen 1.5.1