00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifdef HAVE_CONFIG_H
00025 # include <config.h>
00026 #endif
00027 #include <glib.h>
00028 #include <gtk/gtk.h>
00029
00030 #include "eggtrayicon.h"
00031 #include "support.h"
00032
00033 #include "others.h"
00034 #include "lininfo.h"
00035
00036
00037
00043 struct {
00044 EggTrayIcon *eti;
00045 GtkWidget *eb;
00046 GtkWidget *image;
00047 } docklet;
00048
00049
00050 extern GThread *gt_collector;
00051 extern GtkWidget *window1;
00052
00056 void lkmonitor_exit()
00057 {
00058 extern gboolean collector_exit;
00059
00060 collector_exit=TRUE;
00061 gtk_main_quit();
00062 }
00063
00067 void docklet_onclick(GtkWidget *w)
00068 {
00069 extern gboolean is_icon;
00070
00071 gtk_widget_show(window1);
00072 is_icon=FALSE;
00073
00074 }
00075
00079 void lkmonitor_create_tray_icon(){
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 }
00107
00112 int lkmonitor_load_net_dev(GtkWidget *w)
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
00130
00131 contentsp=skip_lines(contents,2);
00132
00133 while(sscanf(contentsp,"%10s:",dev_name)!=EOF){
00134
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
00144 g_free(contents);
00145 return 0;
00146
00147 }
00148
00153 void lkmonitor_init_widgets(GtkWidget *window)
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
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
00178
00179
00180
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
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
00205
00206
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
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
00230
00231
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
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
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
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
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
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
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
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
00311
00312
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
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
00338 lkmonitor_load_net_dev(window1);
00339
00340 }
00341
00342
00351 void lkmonitor_fill_tv(GtkListStore *model, GtkTreeView *gtv,
00352 GtkTreeIter iter, char *buffer, int type)
00353 {
00354 g_assert(model!=NULL && gtv!=NULL && buffer !=NULL);
00355
00356 char *pointer;
00357
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 }
00386
00394 void lkmonitor_fill_tv_modules(GtkListStore *model, GtkTreeView *gtv,
00395 GtkTreeIter iter, char *buffer)
00396 {
00397 g_assert(model!=NULL && gtv!=NULL && buffer !=NULL);
00398
00399 char *pointer;
00400 char name[50];
00401 int num;
00402
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 }
00413
00416 void lkmonitor_write_settings()
00417 {
00418
00419 GtkEntry *ent;
00420 GtkLabel *lbl;
00421 GtkSpinButton *spb;
00422 GString *gs;
00423 int val1,val2,val3,val4;
00424
00425
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
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
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
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
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
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
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 }
00497
00498
00499
00504 char *lkmonitor_itoa(int num)
00505 {
00506 GString *gs=g_string_new("");
00507
00508 g_string_printf(gs,"%d",num);
00509
00510 return gs->str;
00511
00512 }