/home/fernape/Projects/lkmonitor/src/lkmonitor.c File Reference

#include <glib.h>
#include <gtk/gtk.h>
#include "eggtrayicon.h"
#include "support.h"
#include "others.h"
#include "lininfo.h"

Go to the source code of this file.

Functions

void lkmonitor_exit ()
 performs collector cancellation
void docklet_onclick (GtkWidget *w)
void lkmonitor_create_tray_icon ()
 Creates docklet.
int lkmonitor_load_net_dev (GtkWidget *w)
void lkmonitor_init_widgets (GtkWidget *window)
void lkmonitor_fill_tv (GtkListStore *model, GtkTreeView *gtv, GtkTreeIter iter, char *buffer, int type)
void lkmonitor_fill_tv_modules (GtkListStore *model, GtkTreeView *gtv, GtkTreeIter iter, char *buffer)
void lkmonitor_write_settings ()
 Write settings.
char * lkmonitor_itoa (int num)
 Converts from integet to char *.

Variables

struct {
   EggTrayIcon *   eti
   GtkWidget *   eb
   GtkWidget *   image
docklet
GThread * gt_collector
GtkWidget * window1


Function Documentation

void docklet_onclick ( GtkWidget *  w  ) 

Shows the window when click on the docklet.

Parameters:
w the clicked widget

Definition at line 67 of file lkmonitor.c.

References is_icon, and window1.

Referenced by lkmonitor_create_tray_icon().

00068 {
00069         extern gboolean is_icon;
00070         
00071         gtk_widget_show(window1);
00072         is_icon=FALSE;
00073         
00074 }

void lkmonitor_create_tray_icon (  ) 

Creates docklet.

Creates the tray_icon. Based on the code of jabber IM client.

Definition at line 79 of file lkmonitor.c.

References create_pixbuf(), docklet_onclick(), egg_tray_icon_new(), and window1.

Referenced by main().

00079                                  {
00080 
00081   gint w = 0;
00082   gint h = 0;
00083         
00084   docklet.eti = egg_tray_icon_new("lkmonitor");
00085   docklet.eb = gtk_event_box_new();
00086   docklet.image = gtk_image_new();
00087 
00088   GdkPixbuf *pb = NULL;
00089   GdkPixbuf *pb_scaled = NULL;
00090 
00091   pb =create_pixbuf("lkmonitor/spider-shadow32.png");
00092   gtk_icon_size_lookup(GTK_ICON_SIZE_LARGE_TOOLBAR, &w, &h);
00093   pb_scaled = gdk_pixbuf_scale_simple(pb, w, h, GDK_INTERP_BILINEAR);
00094   gtk_image_set_from_pixbuf(GTK_IMAGE(docklet.image), pb_scaled);
00095 
00096 
00097   gtk_container_add(GTK_CONTAINER(docklet.eb), docklet.image);
00098   gtk_container_add(GTK_CONTAINER(docklet.eti), docklet.eb);
00099   gtk_widget_show_all(GTK_WIDGET(docklet.eti));
00100   
00101  
00102   g_signal_connect(G_OBJECT(docklet.eb), "button-press-event", G_CALLBACK(docklet_onclick), window1);
00103   
00104   
00105   g_object_ref(G_OBJECT(docklet.eti));
00106 }

void lkmonitor_exit (  ) 

performs collector cancellation

Stops collector thread and runs outside event loop.

Definition at line 56 of file lkmonitor.c.

References collector_exit.

Referenced by on_quit1_activate().

00057 {
00058         extern gboolean collector_exit;
00059 
00060         collector_exit=TRUE;
00061         gtk_main_quit();
00062 }

void lkmonitor_fill_tv ( GtkListStore *  model,
GtkTreeView *  gtv,
GtkTreeIter  iter,
char *  buffer,
int  type 
)

Fills devices treeviews with data.

Parameters:
model the model
gtv the treview to fill
iter iterator for the model
buffer string with data to be inserted into the model
type number identifying the type of treeview to fill

Definition at line 351 of file lkmonitor.c.

References TV_DEVS, and TV_MODS.

Referenced by update_devs(), and update_modules_info().

00353 {
00354         g_assert(model!=NULL && gtv!=NULL && buffer !=NULL);
00355         
00356         char *pointer;
00357         //Now add data to model
00358 
00359         pointer=buffer;
00360 
00361   if(type==TV_DEVS){
00362         
00363         char name[50];
00364         int num;
00365 
00366         while(*pointer!='\0'){
00367                 gtk_list_store_append(model,&iter);
00368                 sscanf(pointer,"%d %s",&num,name);
00369                 gtk_list_store_set(model,&iter,0,num,1,name,-1);
00370                 pointer=strchr(pointer,'\n')+1;
00371         }
00372   }
00373 
00374   if(type==TV_MODS){
00375         
00376         char name[20], size[6], refcount[3], state[10], address[20];    
00377 
00378         while(*pointer!='\0'){
00379                 gtk_list_store_append(model,&iter);
00380                 sscanf(pointer,"%s %s %s %s %s",name,size,refcount,state,address);
00381                 gtk_list_store_set(model,&iter,0,name,1,size,2,refcount,3,state,4,address,-1);
00382                 pointer=strchr(pointer, '\n')+1;
00383         }
00384   }
00385 }

void lkmonitor_fill_tv_modules ( GtkListStore *  model,
GtkTreeView *  gtv,
GtkTreeIter  iter,
char *  buffer 
)

Fills devices treeviews with data.

Parameters:
model the model
gtv the treview to fill
iter iterator for the model
buffer string with data to be inserted into the model

Definition at line 394 of file lkmonitor.c.

00396 {
00397         g_assert(model!=NULL && gtv!=NULL && buffer !=NULL);
00398         
00399         char *pointer;
00400         char name[50];
00401         int num;
00402         //Now add data to model
00403 
00404         pointer=buffer;
00405 
00406         while(*pointer!='\0'){
00407                 gtk_list_store_append(model,&iter);
00408                 sscanf(pointer,"%d %s",&num,name);
00409                 gtk_list_store_set(model,&iter,0,num,1,name,-1);
00410                 pointer=strchr(pointer,'\n')+1;
00411         }
00412 }

void lkmonitor_init_widgets ( GtkWidget *  window  ) 

Initialize additional widgets. This function initialize more widgets like GtkTreeViews.

Parameters:
window main window

Definition at line 153 of file lkmonitor.c.

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

Referenced by main().

00154 {
00155 
00156   GtkListStore *block_list;
00157   GtkListStore *char_list;
00158   GtkListStore *process_list;
00159   GtkListStore *modules_list;
00160   GtkCellRenderer *b_renderer;
00161   GtkCellRenderer *c_renderer;
00162   GtkCellRenderer *p_renderer;
00163   GtkTreeView *gtv_char;
00164   GtkTreeView *gtv_block;
00165   GtkTreeView *gtv_processes;
00166   GtkTreeView *gtv_modules;
00167   
00168   /* For the gtktextviews */
00169   GtkTextView *gtv;
00170   GtkTextBuffer *gtktextb_ioports;
00171   GtkTextBuffer *gtktextb_iomem;
00172   GtkTextBuffer *gtktextb_dma;
00173   GtkTextBuffer *gtktextb_fs;
00174   GtkTextBuffer *gtktextb_pfs;
00175   
00176 
00177         /*Tree views to show devices*/
00178         /*For block devices*/
00179         
00180         /*First column*/
00181   gtv_block= (GtkTreeView *)lookup_widget(window,"gtv_block");
00182   block_list=gtk_list_store_new(2,G_TYPE_INT, G_TYPE_STRING);
00183   gtk_tree_view_set_model(GTK_TREE_VIEW(gtv_block),GTK_TREE_MODEL(block_list));
00184  
00185   b_renderer = gtk_cell_renderer_text_new ();
00186   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (gtv_block),
00187                                                -1,      
00188                                                _("Number"),  
00189                                                b_renderer,
00190                                                "text", 0,
00191                                                NULL);
00192 
00193   /*Second column*/
00194 
00195   b_renderer = gtk_cell_renderer_text_new ();
00196   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (gtv_block),
00197                                                -1,      
00198                                                _("Device"),  
00199                                                b_renderer,
00200                                                "text", 1,
00201                                                NULL);
00202                                                                                            
00203   
00204   /*For char devices*/  
00205   
00206   /*First column*/
00207   gtv_char= (GtkTreeView *)lookup_widget(window,"gtv_char");
00208   char_list=gtk_list_store_new(2,G_TYPE_INT, G_TYPE_STRING);
00209   gtk_tree_view_set_model(GTK_TREE_VIEW(gtv_char),GTK_TREE_MODEL(char_list));
00210  
00211   c_renderer = gtk_cell_renderer_text_new ();
00212   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (gtv_char),
00213                                                -1,      
00214                                                _("Number"),  
00215                                                c_renderer,
00216                                                "text", 0,
00217                                                NULL);
00218 
00219   /*Second column*/
00220 
00221   c_renderer = gtk_cell_renderer_text_new ();
00222   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (gtv_char),
00223                                                -1,      
00224                                                _("Device"),  
00225                                                c_renderer,
00226                                                "text", 1,
00227                                                NULL);
00228   
00229   /*For Processes List*/        
00230   
00231   /*First column*/
00232   gtv_processes= (GtkTreeView *)lookup_widget(window,"gtv_processes");
00233   process_list=gtk_list_store_new(2,G_TYPE_INT, G_TYPE_STRING);
00234   gtk_tree_view_set_model(GTK_TREE_VIEW(gtv_processes),GTK_TREE_MODEL(process_list));
00235  
00236   p_renderer = gtk_cell_renderer_text_new ();
00237   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (gtv_processes),
00238                                                -1,      
00239                                                _("PID"),  
00240                                                p_renderer,
00241                                                "text", 0,
00242                                                NULL);
00243 
00244   /*Second column*/
00245 
00246   c_renderer = gtk_cell_renderer_text_new ();
00247   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (gtv_processes),
00248                                                -1,      
00249                                                _("Command"),  
00250                                                c_renderer,
00251                                                "text", 1,
00252                                                NULL); 
00253 
00254   /* For Modules list */  
00255                                              
00256   gtv_modules= (GtkTreeView *)lookup_widget(window,"gtv_modules");
00257   modules_list=gtk_list_store_new(5,G_TYPE_STRING, G_TYPE_STRING,G_TYPE_STRING,
00258                                         G_TYPE_STRING,G_TYPE_STRING);
00259   
00260   gtk_tree_view_set_model(GTK_TREE_VIEW(gtv_modules),GTK_TREE_MODEL(modules_list));
00261  
00262   /*First column*/
00263   p_renderer = gtk_cell_renderer_text_new ();
00264   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (gtv_modules),
00265                                                -1,      
00266                                                _("Name"),  
00267                                                p_renderer,
00268                                                "text", 0,
00269                                                NULL);
00270 
00271   /*Second column*/
00272 
00273   c_renderer = gtk_cell_renderer_text_new ();
00274   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (gtv_modules),
00275                                                -1,      
00276                                                _("Size"),  
00277                                                c_renderer,
00278                                                "text", 1,
00279                                                NULL); 
00280 
00281   /*Third column*/
00282   p_renderer = gtk_cell_renderer_text_new ();
00283   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (gtv_modules),
00284                                                -1,      
00285                                                _("RefCount"),  
00286                                                p_renderer,
00287                                                "text", 2,
00288                                                NULL);
00289 
00290   /*Forth column*/
00291 
00292   c_renderer = gtk_cell_renderer_text_new ();
00293   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (gtv_modules),
00294                                                -1,      
00295                                                _("State"),  
00296                                                c_renderer,
00297                                                "text", 3,
00298                                                NULL); 
00299 
00300   /*Fifth column*/
00301 
00302   c_renderer = gtk_cell_renderer_text_new ();
00303   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (gtv_modules),
00304                                                -1,      
00305                                                _("Address"),  
00306                                                c_renderer,
00307                                                "text", 4,
00308                                                NULL); 
00309 
00310 /* We need to initialize the gtktextviews adding buffers to them */
00311 
00312 /* First, create the GtkTextBuffers */
00313 
00314 gtktextb_ioports=gtk_text_buffer_new(NULL);
00315 gtktextb_iomem=gtk_text_buffer_new(NULL);
00316 gtktextb_dma=gtk_text_buffer_new(NULL);
00317 gtktextb_fs=gtk_text_buffer_new(NULL);
00318 gtktextb_pfs=gtk_text_buffer_new(NULL);
00319 
00320 /* Attach them */
00321 gtv=GTK_TEXT_VIEW(lookup_widget(window1,"gtextv_ioports"));
00322 gtk_text_view_set_buffer(gtv,gtktextb_ioports);
00323 
00324 gtv=GTK_TEXT_VIEW(lookup_widget(window1,"gtextv_iomem"));
00325 gtk_text_view_set_buffer(gtv,gtktextb_iomem);
00326 
00327 gtv=GTK_TEXT_VIEW(lookup_widget(window1,"gtextv_dma"));
00328 gtk_text_view_set_buffer(gtv,gtktextb_dma);
00329 
00330 gtv=GTK_TEXT_VIEW(lookup_widget(window1,"gtextv_fs"));
00331 gtk_text_view_set_buffer(gtv,gtktextb_fs);
00332 
00333 gtv=GTK_TEXT_VIEW(lookup_widget(window1,"gtextv_pfs"));
00334 gtk_text_view_set_buffer(gtv,gtktextb_pfs);
00335 
00336 
00337 /* Search for net devices and fill the combo box */
00338  lkmonitor_load_net_dev(window1);
00339 
00340 }

char* lkmonitor_itoa ( int  num  ) 

Converts from integet to char *.

Converts an int to a string

Parameters:
num Integer
Returns:
char* with the ASCII representation of num

Definition at line 504 of file lkmonitor.c.

Referenced by get_process_info(), update_net_info(), and update_process_window().

00505 {
00506   GString *gs=g_string_new("");
00507 
00508   g_string_printf(gs,"%d",num);
00509 
00510   return gs->str;
00511 
00512 }

int lkmonitor_load_net_dev ( GtkWidget *  w  ) 

Searchs for net devices and place them in the combo box

Parameters:
w Main window
Returns:
0 on success, -1 otherwise

Definition at line 112 of file lkmonitor.c.

References lookup_widget(), NET_DEVS, and skip_lines().

Referenced by lkmonitor_init_widgets().

00113 {
00114   char *contents,*contentsp,*p;
00115   char dev_name[10];
00116   int i=0;
00117   GtkComboBox *gcb_netdevs;
00118 
00119   if(g_file_get_contents(NET_DEVS,&contents,NULL,NULL)==FALSE){
00120         g_warning("No net devices file");
00121         gcb_netdevs=GTK_COMBO_BOX(lookup_widget(w,"cb_net_devs"));
00122         gtk_widget_set_sensitive(GTK_WIDGET(gcb_netdevs),FALSE);
00123         g_free(contents);
00124         return -1;
00125   }
00126 
00127   gcb_netdevs=GTK_COMBO_BOX(lookup_widget(w,"cb_net_devs"));
00128 
00129   /* File exists */
00130 
00131   contentsp=skip_lines(contents,2);
00132   
00133   while(sscanf(contentsp,"%10s:",dev_name)!=EOF){
00134         /* Remove the ':' */
00135         if((p=strchr(dev_name,':'))!=NULL)
00136                 *p='\0';
00137         gtk_combo_box_insert_text(gcb_netdevs,i++,dev_name);
00138         contentsp=skip_lines(contentsp,1);
00139   }
00140   
00141   gtk_combo_box_set_active(gcb_netdevs,0);
00142 
00143         /* Clean up */
00144         g_free(contents);
00145         return 0;
00146 
00147 }

void lkmonitor_write_settings (  ) 

Write settings.

Write new settings.

Definition at line 416 of file lkmonitor.c.

References DOMAIN_NAME, FILE_MAX, HOST_NAME, INODES, lookup_widget(), P_MAX_M, P_MAX_Q, P_MAX_S, PAGE_MAX, SEG_MAX, SEG_SIZE, SEM, THREADS_MAX, window1, write_string_to_file(), and write_values_to_file().

Referenced by on_btn_write_clicked().

00417 {
00418   //This is called from a callback, so we are still running in a gtk lock.
00419   GtkEntry *ent;
00420   GtkLabel *lbl;
00421   GtkSpinButton *spb;
00422   GString *gs;
00423   int val1,val2,val3,val4;
00424         
00425 /*For Identification*/
00426   ent=GTK_ENTRY(lookup_widget(window1,"ent_hostname"));
00427   gs=g_string_new(gtk_entry_get_text(ent));
00428   write_string_to_file(gs->str,HOST_NAME);
00429         
00430   ent=GTK_ENTRY(lookup_widget(window1,"ent_domainname"));
00431   gs=g_string_new(gtk_entry_get_text(ent));
00432   write_string_to_file(gs->str,DOMAIN_NAME);
00433         
00434 /*For Files*/
00435         
00436   spb=GTK_SPIN_BUTTON(lookup_widget(window1,"spb_fdmax"));
00437   val1=(int)gtk_spin_button_get_value_as_int(spb);
00438 
00439   write_values_to_file(3,FILE_MAX,val1);
00440 
00441 /*For Inodes*/
00442         lbl=GTK_LABEL(lookup_widget(window1,"lbl_inmax"));
00443         val1=atoi((char *)gtk_label_get_text(lbl));
00444         
00445         lbl=GTK_LABEL(lookup_widget(window1,"lbl_ina"));
00446         val2=atoi((char *)gtk_label_get_text(lbl));
00447         
00448         write_values_to_file(2,INODES,val1,val2);
00449 
00450 /*For POSIX signals*/
00451         spb=GTK_SPIN_BUTTON(lookup_widget(window1,"spb_mq"));
00452         val1=gtk_spin_button_get_value_as_int(spb);
00453         write_values_to_file(1,P_MAX_Q,val1);
00454         
00455         spb=GTK_SPIN_BUTTON(lookup_widget(window1,"spb_max_mpq"));
00456         val1=gtk_spin_button_get_value_as_int(spb);
00457         write_values_to_file(1,P_MAX_M,val1);
00458         
00459         spb=GTK_SPIN_BUTTON(lookup_widget(window1,"spb_max_ms"));
00460         val1=gtk_spin_button_get_value_as_int(spb);
00461         write_values_to_file(1,P_MAX_S,val1);
00462 
00463 /*For shared memory*/
00464         spb=GTK_SPIN_BUTTON(lookup_widget(window1,"spb_max_pages"));
00465         val1=gtk_spin_button_get_value_as_int(spb);
00466         write_values_to_file(1,PAGE_MAX,val1);
00467         
00468         spb=GTK_SPIN_BUTTON(lookup_widget(window1,"spb_max_segs"));
00469         val1=gtk_spin_button_get_value_as_int(spb);
00470         write_values_to_file(1,SEG_MAX,val1);
00471         
00472         spb=GTK_SPIN_BUTTON(lookup_widget(window1,"spb_seg_size"));
00473         val1=gtk_spin_button_get_value_as_int(spb);
00474         write_values_to_file(1,SEG_SIZE,val1);
00475         
00476 /*For semaphores*/
00477         spb=GTK_SPIN_BUTTON(lookup_widget(window1,"spb_sem_per_id"));
00478         val1=gtk_spin_button_get_value_as_int(spb);
00479         
00480         spb=GTK_SPIN_BUTTON(lookup_widget(window1,"spb_sem_val"));
00481         val2=gtk_spin_button_get_value_as_int(spb);
00482         
00483         spb=GTK_SPIN_BUTTON(lookup_widget(window1,"spb_ops"));
00484         val3=gtk_spin_button_get_value_as_int(spb);
00485         
00486         spb=GTK_SPIN_BUTTON(lookup_widget(window1,"spb_sem_id"));
00487         val4=gtk_spin_button_get_value_as_int(spb);
00488         
00489         write_values_to_file(4,SEM,val1,val2,val3,val4);
00490         
00491 /*For threads*/
00492         spb=GTK_SPIN_BUTTON(lookup_widget(window1,"spb_maxthreads"));
00493         val1=gtk_spin_button_get_value_as_int(spb);
00494         
00495         write_values_to_file(1,THREADS_MAX,val1);
00496 }


Variable Documentation

struct { ... } docklet

GtkWidget* eb

Definition at line 45 of file lkmonitor.c.

EggTrayIcon* eti

Definition at line 44 of file lkmonitor.c.

GThread* gt_collector

Definition at line 67 of file main.c.

Referenced by main().

GtkWidget* image

Definition at line 46 of file lkmonitor.c.

GtkWidget* window1

Definition at line 48 of file main.c.

Referenced by create_window1(), docklet_onclick(), lkmonitor_create_tray_icon(), lkmonitor_init_widgets(), lkmonitor_write_settings(), main(), refresh(), update_channels(), update_cmd_ver(), update_cpu(), update_cpu_mhz(), update_devs(), update_fs_info(), update_mem(), update_misc(), update_modules_info(), update_net_info(), update_process(), and update_settings().


Generated on Tue Apr 1 22:52:55 2008 for lkmonitor by  doxygen 1.5.1