Newer
Older
#include "gtkmonitor.h"
#include "dirwrap.h"
scfg_t cfg;
GladeXML *xml;
int nodes=0;
GtkListStore *store = NULL;
GtkTreeSelection *sel;
char flags[33];
display_message("Load Error","Cannot load configuration data","gtk-dialog-error");
/* Update timed events */
w=glade_xml_get_widget(xml, "force_timed_event1");
if(w==NULL)
fprintf(stderr,"Cannot get timed event widget\n");
else {
menu=gtk_menu_item_get_submenu(GTK_MENU_ITEM(w));
gtk_widget_destroy(GTK_WIDGET(menu));
menu=gtk_menu_new();
gtk_menu_item_set_submenu (GTK_MENU_ITEM (w), menu);
if(menu!=NULL) {
for(i=0; i<cfg.total_events; i++) {
w = gtk_menu_item_new_with_label(cfg.event[i]->code);
gtk_widget_show (w);
gtk_container_add (GTK_CONTAINER (menu), w);
g_signal_connect ((gpointer) w, "activate"
,G_CALLBACK (on_force_event)
,NULL);
}
}
else
fprintf(stderr,"Cannot get timed event submenu\n");
}
/* Update network call-outs */
w=glade_xml_get_widget(xml, "force_network_callout1");
if(w==NULL)
fprintf(stderr,"Cannot get network callout widget\n");
else {
menu=gtk_menu_item_get_submenu(GTK_MENU_ITEM(w));
gtk_widget_destroy(GTK_WIDGET(menu));
menu=gtk_menu_new();
gtk_menu_item_set_submenu (GTK_MENU_ITEM (w), menu);
if(menu!=NULL) {
for(i=0; i<cfg.total_qhubs; i++) {
w = gtk_menu_item_new_with_label(cfg.qhub[i]->id);
gtk_widget_show (w);
gtk_container_add (GTK_CONTAINER (menu), w);
g_signal_connect ((gpointer) w, "activate"
,G_CALLBACK (on_force_qnet)
,NULL);
}
}
else
fprintf(stderr,"Cannot get timed event submenu\n");
/* Set up quick validation values */
w=glade_xml_get_widget(xml, "cNodeQuickValidate");
for(i=0; i<=10; i++)
gtk_combo_box_remove_text(GTK_COMBO_BOX(w),0);
gtk_combo_box_append_text(GTK_COMBO_BOX(w), "Quick Validation Sets");
gtk_combo_box_set_active(GTK_COMBO_BOX(w), 0);
for(i=0;i<10;i++) {
sprintf(str,"%d SL: %-2d F1: %s",i,cfg.val_level[i],ltoaf(cfg.val_flags1[i],flags));
gtk_combo_box_append_text(GTK_COMBO_BOX(w), str);
}
void add_to_stats(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data)
{
stats_t *nstats=data;
stats_t stats;
gchar *node;
gtk_tree_model_get(model, iter, 0, &node, -1);
getstats(&cfg, atoi(node), &stats);
nstats->logons+=stats.logons;
nstats->ltoday+=stats.ltoday;
nstats->timeon+=stats.timeon;
nstats->ttoday+=stats.ttoday;
nstats->uls+=stats.uls;
nstats->ulb+=stats.ulb;
nstats->dls+=stats.dls;
nstats->dlb+=stats.dlb;
nstats->ptoday+=stats.ptoday;
nstats->etoday+=stats.etoday;
nstats->ftoday+=stats.ftoday;
nstats->nusers+=stats.nusers;
}
/* Refreshes global variables... ie: Number of users */
int refresh_data(gpointer data)
{
char str[1024];
char str2[1024];
char str3[1024];
char *p;
GtkWidget *w;
int i,j;
GtkTreeIter curr;
GtkTreeModel *model;
node_t node;
stats_t sstats;
stats_t nstats;
stats_t stats;
int shownodes;
/* Update the node list stuff */
w=glade_xml_get_widget(xml, "lNodeList");
/* Fist call... set up grid */
if(store == NULL) {
store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_STRING);
gtk_tree_view_set_model(GTK_TREE_VIEW(w), GTK_TREE_MODEL(store));
gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(w), 0, "Node", gtk_cell_renderer_text_new(), "text", 0, NULL);
gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(w), 1, "Status", gtk_cell_renderer_text_new(), "text", 1, NULL);
nodes=0;
sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (w));
gtk_tree_selection_set_mode (sel, GTK_SELECTION_MULTIPLE);
g_signal_connect (G_OBJECT (sel), "changed", G_CALLBACK (update_stats_callback), NULL);
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
}
else
gtk_tree_model_get_iter_first(GTK_TREE_MODEL(store), &curr);
for(i=1; i<=cfg.sys_nodes; i++) {
if(i > nodes) {
gtk_list_store_insert(store, &curr, i-1);
sprintf(str,"%d",i);
gtk_list_store_set(store, &curr, 0, str, -1);
nodes++;
}
if((j=getnodedat(&cfg,i,&node,NULL)))
sprintf(str,"Error reading node data (%d)!",j);
else
nodestatus(&cfg,&node,str,1023);
gtk_list_store_set(store, &curr, 1, str, -1);
gtk_tree_model_iter_next(GTK_TREE_MODEL(store), &curr);
}
if(nodes >= i) {
for(i=nodes; i<=cfg.sys_nodes; i--) {
gtk_list_store_remove(store, &curr);
nodes--;
}
}
getstats(&cfg, 0, &sstats);
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
shownodes=gtk_tree_selection_count_selected_rows(sel);
if(shownodes) {
memset(&nstats, 0, sizeof(nstats));
gtk_tree_selection_selected_foreach(sel
,add_to_stats
,&nstats);
}
w=glade_xml_get_widget(xml,"locknodebutton");
gtk_widget_set_sensitive(w, shownodes>0);
w=glade_xml_get_widget(xml,"downnodebutton");
gtk_widget_set_sensitive(w, shownodes>0);
w=glade_xml_get_widget(xml,"interruptnodebutton");
gtk_widget_set_sensitive(w, shownodes>0);
w=glade_xml_get_widget(xml,"bRerunNode");
gtk_widget_set_sensitive(w, shownodes>0);
w=glade_xml_get_widget(xml,"bRerunNode");
gtk_widget_set_sensitive(w, shownodes>0);
w=glade_xml_get_widget(xml,"bClearErrors");
gtk_widget_set_sensitive(w, shownodes>0);
if(shownodes==1) {
gtk_tree_selection_selected_foreach(sel
,get_lastselected_node
,&i);
if((j=getnodedat(&cfg,i,&node,NULL))) {
sprintf(str,"Error reading node data (%d)!",j);
node.status=NODE_WFC;
}
j=(node.status==NODE_QUIET || node.status==NODE_INUSE);
w=glade_xml_get_widget(xml,"bChatWithUser");
gtk_widget_set_sensitive(w, j);
w=glade_xml_get_widget(xml,"bSendMessageToUser");
gtk_widget_set_sensitive(w, j);
w=glade_xml_get_widget(xml,"bEditUser");
gtk_widget_set_sensitive(w, j);
w=glade_xml_get_widget(xml,"cNodeQuickValidate");
gtk_widget_set_sensitive(w, j);
}
else {
w=glade_xml_get_widget(xml,"bChatWithUser");
gtk_widget_set_sensitive(w, FALSE);
w=glade_xml_get_widget(xml,"bSendMessageToUser");
gtk_widget_set_sensitive(w, FALSE);
w=glade_xml_get_widget(xml,"bEditUser");
gtk_widget_set_sensitive(w, FALSE);
w=glade_xml_get_widget(xml,"cNodeQuickValidate");
gtk_widget_set_sensitive(w, FALSE);
}
w=glade_xml_get_widget(xml, "eLogonsToday");
if(w==NULL)
fprintf(stderr,"Cannot get logons today widget\n");
else {
sprintf(str,"%s/%s",getnumstr(str2,nstats.ltoday),getnumstr(str3,sstats.ltoday));
else
sprintf(str,"%s",getnumstr(str2,sstats.ltoday));
gtk_entry_set_text(GTK_ENTRY(w),str);
}
w=glade_xml_get_widget(xml, "eTimeToday");
if(w==NULL)
fprintf(stderr,"Cannot get time today widget\n");
else {
sprintf(str,"%s/%s",getnumstr(str2,nstats.ttoday),getnumstr(str3,sstats.ttoday));
else
sprintf(str,"%s",getnumstr(str2,sstats.ttoday));
gtk_entry_set_text(GTK_ENTRY(w),str);
}
w=glade_xml_get_widget(xml, "eEmailToday");
if(w==NULL)
fprintf(stderr,"Cannot get e-mail today widget\n");
else {
sprintf(str,"%s/%s",getnumstr(str2,nstats.etoday),getnumstr(str3,sstats.etoday));
else
sprintf(str,"%s",getnumstr(str2,sstats.etoday));
gtk_entry_set_text(GTK_ENTRY(w),str);
}
w=glade_xml_get_widget(xml, "eFeedbackToday");
if(w==NULL)
fprintf(stderr,"Cannot get feedback today widget\n");
else {
sprintf(str,"%s/%s",getnumstr(str2,nstats.ftoday),getnumstr(str3,sstats.ftoday));
else
sprintf(str,"%s",getnumstr(str2,sstats.ftoday));
gtk_entry_set_text(GTK_ENTRY(w),str);
}
w=glade_xml_get_widget(xml, "eNewUsersToday");
if(w==NULL)
fprintf(stderr,"Cannot get new users today widget\n");
else {
sprintf(str,"%s/%s",getnumstr(str2,nstats.nusers),getnumstr(str3,sstats.nusers));
else
sprintf(str,"%s",getnumstr(str2,sstats.nusers));
gtk_entry_set_text(GTK_ENTRY(w),str);
}
w=glade_xml_get_widget(xml, "ePostsToday");
if(w==NULL)
fprintf(stderr,"Cannot get posts today widget\n");
else {
sprintf(str,"%s/%s",getnumstr(str2,nstats.ptoday),getnumstr(str3,sstats.ptoday));
else
sprintf(str,"%s",getnumstr(str2,sstats.ptoday));
gtk_entry_set_text(GTK_ENTRY(w),str);
}
w=glade_xml_get_widget(xml, "eLogonsTotal");
if(w==NULL)
fprintf(stderr,"Cannot get logons total widget\n");
else {
sprintf(str,"%s/%s",getnumstr(str2,nstats.logons),getnumstr(str3,sstats.logons));
else
sprintf(str,"%s",getnumstr(str2,sstats.logons));
gtk_entry_set_text(GTK_ENTRY(w),str);
}
w=glade_xml_get_widget(xml, "eTimeTotal");
if(w==NULL)
fprintf(stderr,"Cannot get time total widget\n");
else {
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
sprintf(str,"%s/%s",getnumstr(str2,nstats.timeon),getnumstr(str3,sstats.timeon));
else
sprintf(str,"%s",getnumstr(str2,sstats.timeon));
gtk_entry_set_text(GTK_ENTRY(w),str);
}
w=glade_xml_get_widget(xml, "eEmailTotal");
if(w==NULL)
fprintf(stderr,"Cannot get email total widget\n");
else {
sprintf(str,"%s",getnumstr(str2,getmail(&cfg,0,0)));
gtk_entry_set_text(GTK_ENTRY(w),str);
}
w=glade_xml_get_widget(xml, "eFeedbackTotal");
if(w==NULL)
fprintf(stderr,"Cannot get feedback total widget\n");
else {
sprintf(str,"%s",getnumstr(str2,getmail(&cfg,1,0)));
gtk_entry_set_text(GTK_ENTRY(w),str);
}
w=glade_xml_get_widget(xml, "eUsersTotal");
if(w==NULL)
fprintf(stderr,"Cannot get users total widget\n");
else {
sprintf(str,"%s",getnumstr(str2,total_users(&cfg)));
gtk_entry_set_text(GTK_ENTRY(w),str);
}
w=glade_xml_get_widget(xml, "eFilesUploadedToday");
if(w==NULL)
fprintf(stderr,"Cannot get files uploaded today widget\n");
else {
sprintf(str,"%s",getnumstr(str2,sstats.uls));
gtk_entry_set_text(GTK_ENTRY(w),str);
}
w=glade_xml_get_widget(xml, "eBytesUploadedToday");
if(w==NULL)
fprintf(stderr,"Cannot get bytes uploaded today widget\n");
else {
sprintf(str,"%s",getsizestr(str2,sstats.ulb,TRUE));
gtk_entry_set_text(GTK_ENTRY(w),str);
}
w=glade_xml_get_widget(xml, "eFilesDownloadedToday");
if(w==NULL)
fprintf(stderr,"Cannot get files downloaded today widget\n");
else {
sprintf(str,"%s",getnumstr(str2,sstats.dls));
gtk_entry_set_text(GTK_ENTRY(w),str);
}
w=glade_xml_get_widget(xml, "eBytesDownloadedToday");
if(w==NULL)
fprintf(stderr,"Cannot get bytes downloaded today widget\n");
else {
sprintf(str,"%s",getsizestr(str2,sstats.dlb,TRUE));
gtk_entry_set_text(GTK_ENTRY(w),str);
}
/* Setup the stats updater */
if(data != NULL)
g_timeout_add(1000 /* Milliseconds */, refresh_data, data);
return(0);
}
/* Initializes global stuff, loads first user etc */
int read_config(void)
{
char ctrl_dir[MAX_PATH+1];
char *p;
p=getenv("SBBSCTRL");
if(p==NULL) {
display_message("Environment Error","SBBSCTRL not set","gtk-dialog-error");
return(-1);
}
SAFECOPY(ctrl_dir, p);
prep_dir("",ctrl_dir,sizeof(ctrl_dir));
if(!isdir(ctrl_dir)) {
display_message("Environment Errpr","SBBSCTRL does not point to a directory","gtk-dialog-error");
return(-1);
}
memset(&cfg,0,sizeof(cfg));
cfg.size=sizeof(cfg);
SAFECOPY(cfg.ctrl_dir,ctrl_dir);
/* Read the ctrl struct */
refresh_events();
/* Passing any non-NULL argument is required to set up the timeout */
if(refresh_data(refresh_data))
return(-1);
return(0);
}
int main(int argc, char *argv[]) {
char glade_path[MAX_PATH+1];
gtk_init(&argc, &argv);
glade_init();
/* load the interface */
strcpy(glade_path, argv[0]);
strcpy(getfname(glade_path), "gtkmonitor.glade");
xml = glade_xml_new(glade_path, "MainWindow", NULL);
/* connect the signals in the interface */
glade_xml_signal_autoconnect(xml);
/* Set up the global config stuff. */