Newer
Older
#include "gtkmonitor.h"
#include "dirwrap.h"
scfg_t cfg;
GladeXML *xml;
int nodes=0;
GtkListStore *store = NULL;
GtkTreeSelection *sel;
if(!load_cfg(&cfg, NULL, TRUE, str)) {
fprintf(stderr,"Cannot load configuration data\n");
/* 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");
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);
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
}
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);
152
153
154
155
156
157
158
159
160
161
162
163
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
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);
}
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, "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 {
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
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
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) {
fprintf(stderr,"SBBSCTRL not set\n");
return(-1);
}
SAFECOPY(ctrl_dir, p);
prep_dir("",ctrl_dir,sizeof(ctrl_dir));
if(!isdir(ctrl_dir)) {
fprintf(stderr,"SBBSCTRL does not point to a directory\n");
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. */