|
|
1.1 ! root 1: #include "dirwrap.h" ! 2: #include "ini_file.h" ! 3: ! 4: #include "events.h" ! 5: #include "gtkmonitor.h" ! 6: ! 7: scfg_t cfg; ! 8: GladeXML *xml; ! 9: int nodes=0; ! 10: GtkListStore *store = NULL; ! 11: GtkTreeSelection *sel; ! 12: struct gtkmonitor_config gtkm_conf; ! 13: char glade_path[MAX_PATH+1]; ! 14: ! 15: void read_ini(void) ! 16: { ! 17: FILE *inif; ! 18: char path[MAX_PATH+1]; ! 19: ! 20: complete_path(path, cfg.ctrl_dir, "gtkmonitor.ini"); ! 21: inif=fopen(path, "r"); ! 22: iniReadString(inif, "commands", "ViewStdOut", "%f | xmessage -file -", gtkm_conf.view_stdout); ! 23: iniReadString(inif, "commands", "ViewTextFile", "xmessage -file %f", gtkm_conf.view_text_file); ! 24: iniReadString(inif, "commands", "EditTextFile", "xedit %f",gtkm_conf.edit_text_file); ! 25: iniReadString(inif, "commands", "ViewCtrlAFile", "%!asc2ans %f | %!syncview -l",gtkm_conf.view_ctrla_file); ! 26: iniReadString(inif, "commands", "ViewHTMLFile", "firefox file://%f", gtkm_conf.view_html_file); ! 27: if(inif) ! 28: fclose(inif); ! 29: else ! 30: write_ini(); ! 31: } ! 32: ! 33: void write_ini(void) ! 34: { ! 35: FILE *inif; ! 36: char path[MAX_PATH+1]; ! 37: str_list_t inifile; ! 38: ! 39: complete_path(path, cfg.ctrl_dir, "gtkmonitor.ini"); ! 40: inif=fopen(path, "r"); ! 41: if(inif) { ! 42: inifile=iniReadFile(inif); ! 43: fclose(inif); ! 44: } ! 45: else ! 46: inifile=strListInit(); ! 47: iniSetString(&inifile, "commands", "ViewStdOut", gtkm_conf.view_stdout, NULL); ! 48: iniSetString(&inifile, "commands", "ViewTextFile", gtkm_conf.view_text_file, NULL); ! 49: iniSetString(&inifile, "commands", "EditTextFile", gtkm_conf.edit_text_file, NULL); ! 50: iniSetString(&inifile, "commands", "ViewCtrlAFile", gtkm_conf.view_ctrla_file, NULL); ! 51: iniSetString(&inifile, "commands", "ViewHTMLFile", gtkm_conf.view_html_file, NULL); ! 52: inif=fopen(path, "w"); ! 53: if(inif) { ! 54: iniWriteFile(inif, inifile); ! 55: fclose(inif); ! 56: } ! 57: else ! 58: display_message("Cannot Create .ini File","Unable to create the .ini file. Check your permissions.","gtk-dialog-error"); ! 59: strListFree(&inifile); ! 60: } ! 61: ! 62: void refresh_events(void) ! 63: { ! 64: int i; ! 65: GtkWidget *w; ! 66: GtkWidget *menu; ! 67: char str[1024]; ! 68: char flags[33]; ! 69: ! 70: /* Read .cfg files here */ ! 71: free_cfg(&cfg); ! 72: if(!load_cfg(&cfg, NULL, TRUE, str)) { ! 73: display_message("Load Error","Cannot load configuration data","gtk-dialog-error"); ! 74: return; ! 75: } ! 76: ! 77: /* Update timed events */ ! 78: w=glade_xml_get_widget(xml, "force_timed_event1"); ! 79: if(w==NULL) ! 80: fprintf(stderr,"Cannot get timed event widget\n"); ! 81: else { ! 82: menu=gtk_menu_item_get_submenu(GTK_MENU_ITEM(w)); ! 83: gtk_widget_destroy(GTK_WIDGET(menu)); ! 84: menu=gtk_menu_new(); ! 85: gtk_menu_item_set_submenu (GTK_MENU_ITEM (w), menu); ! 86: if(menu!=NULL) { ! 87: for(i=0; i<cfg.total_events; i++) { ! 88: w = gtk_menu_item_new_with_label(cfg.event[i]->code); ! 89: gtk_widget_show (w); ! 90: gtk_container_add (GTK_CONTAINER (menu), w); ! 91: g_signal_connect ((gpointer) w, "activate" ! 92: ,G_CALLBACK (on_force_event) ! 93: ,NULL); ! 94: } ! 95: } ! 96: else ! 97: fprintf(stderr,"Cannot get timed event submenu\n"); ! 98: } ! 99: ! 100: /* Update network call-outs */ ! 101: w=glade_xml_get_widget(xml, "force_network_callout1"); ! 102: if(w==NULL) ! 103: fprintf(stderr,"Cannot get network callout widget\n"); ! 104: else { ! 105: menu=gtk_menu_item_get_submenu(GTK_MENU_ITEM(w)); ! 106: gtk_widget_destroy(GTK_WIDGET(menu)); ! 107: menu=gtk_menu_new(); ! 108: gtk_menu_item_set_submenu (GTK_MENU_ITEM (w), menu); ! 109: if(menu!=NULL) { ! 110: for(i=0; i<cfg.total_qhubs; i++) { ! 111: w = gtk_menu_item_new_with_label(cfg.qhub[i]->id); ! 112: gtk_widget_show (w); ! 113: gtk_container_add (GTK_CONTAINER (menu), w); ! 114: g_signal_connect ((gpointer) w, "activate" ! 115: ,G_CALLBACK (on_force_qnet) ! 116: ,NULL); ! 117: } ! 118: } ! 119: else ! 120: fprintf(stderr,"Cannot get timed event submenu\n"); ! 121: } ! 122: refresh_data(NULL); ! 123: ! 124: /* Set up quick validation values */ ! 125: w=glade_xml_get_widget(xml, "cNodeQuickValidate"); ! 126: for(i=0; i<=10; i++) ! 127: gtk_combo_box_remove_text(GTK_COMBO_BOX(w),0); ! 128: gtk_combo_box_append_text(GTK_COMBO_BOX(w), "Quick Validation Sets"); ! 129: gtk_combo_box_set_active(GTK_COMBO_BOX(w), 0); ! 130: for(i=0;i<10;i++) { ! 131: sprintf(str,"%d SL: %-2d F1: %s",i,cfg.val_level[i],ltoaf(cfg.val_flags1[i],flags)); ! 132: gtk_combo_box_append_text(GTK_COMBO_BOX(w), str); ! 133: } ! 134: } ! 135: ! 136: void add_to_stats(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data) ! 137: { ! 138: stats_t *nstats=data; ! 139: stats_t stats; ! 140: gchar *node; ! 141: ! 142: gtk_tree_model_get(model, iter, 0, &node, -1); ! 143: getstats(&cfg, atoi(node), &stats); ! 144: nstats->logons+=stats.logons; ! 145: nstats->ltoday+=stats.ltoday; ! 146: nstats->timeon+=stats.timeon; ! 147: nstats->ttoday+=stats.ttoday; ! 148: nstats->uls+=stats.uls; ! 149: nstats->ulb+=stats.ulb; ! 150: nstats->dls+=stats.dls; ! 151: nstats->dlb+=stats.dlb; ! 152: nstats->ptoday+=stats.ptoday; ! 153: nstats->etoday+=stats.etoday; ! 154: nstats->ftoday+=stats.ftoday; ! 155: nstats->nusers+=stats.nusers; ! 156: } ! 157: ! 158: /* Refreshes global variables... ie: Number of users */ ! 159: int refresh_data(gpointer data) ! 160: { ! 161: char str[1024]; ! 162: char str2[1024]; ! 163: char str3[1024]; ! 164: char *p; ! 165: GtkWidget *w; ! 166: int i,j; ! 167: GtkTreeIter curr; ! 168: GtkTreeModel *model; ! 169: node_t node; ! 170: stats_t sstats; ! 171: stats_t nstats; ! 172: stats_t stats; ! 173: int shownodes; ! 174: ! 175: /* Update the node list stuff */ ! 176: w=glade_xml_get_widget(xml, "lNodeList"); ! 177: ! 178: /* Fist call... set up grid */ ! 179: if(store == NULL) { ! 180: store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_STRING); ! 181: gtk_tree_view_set_model(GTK_TREE_VIEW(w), GTK_TREE_MODEL(store)); ! 182: gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(w), 0, "Node", gtk_cell_renderer_text_new(), "text", 0, NULL); ! 183: gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(w), 1, "Status", gtk_cell_renderer_text_new(), "text", 1, NULL); ! 184: nodes=0; ! 185: sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (w)); ! 186: gtk_tree_selection_set_mode (sel, GTK_SELECTION_MULTIPLE); ! 187: g_signal_connect (G_OBJECT (sel), "changed", G_CALLBACK (update_stats_callback), NULL); ! 188: } ! 189: else ! 190: gtk_tree_model_get_iter_first(GTK_TREE_MODEL(store), &curr); ! 191: ! 192: for(i=1; i<=cfg.sys_nodes; i++) { ! 193: if(i > nodes) { ! 194: gtk_list_store_insert(store, &curr, i-1); ! 195: sprintf(str,"%d",i); ! 196: gtk_list_store_set(store, &curr, 0, str, -1); ! 197: nodes++; ! 198: } ! 199: ! 200: if((j=getnodedat(&cfg,i,&node,NULL))) ! 201: sprintf(str,"Error reading node data (%d)!",j); ! 202: else ! 203: nodestatus(&cfg,&node,str,1023); ! 204: gtk_list_store_set(store, &curr, 1, str, -1); ! 205: gtk_tree_model_iter_next(GTK_TREE_MODEL(store), &curr); ! 206: } ! 207: if(nodes >= i) { ! 208: for(i=nodes; i<=cfg.sys_nodes; i--) { ! 209: gtk_list_store_remove(store, &curr); ! 210: nodes--; ! 211: } ! 212: } ! 213: ! 214: getstats(&cfg, 0, &sstats); ! 215: ! 216: shownodes=gtk_tree_selection_count_selected_rows(sel); ! 217: if(shownodes) { ! 218: memset(&nstats, 0, sizeof(nstats)); ! 219: gtk_tree_selection_selected_foreach(sel ! 220: ,add_to_stats ! 221: ,&nstats); ! 222: } ! 223: ! 224: w=glade_xml_get_widget(xml,"locknodebutton"); ! 225: gtk_widget_set_sensitive(w, shownodes>0); ! 226: w=glade_xml_get_widget(xml,"downnodebutton"); ! 227: gtk_widget_set_sensitive(w, shownodes>0); ! 228: w=glade_xml_get_widget(xml,"interruptnodebutton"); ! 229: gtk_widget_set_sensitive(w, shownodes>0); ! 230: w=glade_xml_get_widget(xml,"bRerunNode"); ! 231: gtk_widget_set_sensitive(w, shownodes>0); ! 232: w=glade_xml_get_widget(xml,"bRerunNode"); ! 233: gtk_widget_set_sensitive(w, shownodes>0); ! 234: w=glade_xml_get_widget(xml,"bClearErrors"); ! 235: gtk_widget_set_sensitive(w, shownodes>0); ! 236: if(shownodes==1) { ! 237: gtk_tree_selection_selected_foreach(sel ! 238: ,get_lastselected_node ! 239: ,&i); ! 240: if((j=getnodedat(&cfg,i,&node,NULL))) { ! 241: sprintf(str,"Error reading node data (%d)!",j); ! 242: node.status=NODE_WFC; ! 243: } ! 244: j=(node.status==NODE_QUIET || node.status==NODE_INUSE); ! 245: ! 246: w=glade_xml_get_widget(xml,"bChatWithUser"); ! 247: gtk_widget_set_sensitive(w, j); ! 248: w=glade_xml_get_widget(xml,"bSendMessageToUser"); ! 249: gtk_widget_set_sensitive(w, j); ! 250: w=glade_xml_get_widget(xml,"bEditUser"); ! 251: gtk_widget_set_sensitive(w, j); ! 252: w=glade_xml_get_widget(xml,"cNodeQuickValidate"); ! 253: gtk_widget_set_sensitive(w, j); ! 254: } ! 255: else { ! 256: w=glade_xml_get_widget(xml,"bChatWithUser"); ! 257: gtk_widget_set_sensitive(w, FALSE); ! 258: w=glade_xml_get_widget(xml,"bSendMessageToUser"); ! 259: gtk_widget_set_sensitive(w, FALSE); ! 260: w=glade_xml_get_widget(xml,"bEditUser"); ! 261: gtk_widget_set_sensitive(w, FALSE); ! 262: w=glade_xml_get_widget(xml,"cNodeQuickValidate"); ! 263: gtk_widget_set_sensitive(w, FALSE); ! 264: } ! 265: ! 266: w=glade_xml_get_widget(xml, "eLogonsToday"); ! 267: if(w==NULL) ! 268: fprintf(stderr,"Cannot get logons today widget\n"); ! 269: else { ! 270: if(shownodes) ! 271: sprintf(str,"%s/%s",getnumstr(str2,nstats.ltoday),getnumstr(str3,sstats.ltoday)); ! 272: else ! 273: sprintf(str,"%s",getnumstr(str2,sstats.ltoday)); ! 274: gtk_entry_set_text(GTK_ENTRY(w),str); ! 275: } ! 276: ! 277: w=glade_xml_get_widget(xml, "eTimeToday"); ! 278: if(w==NULL) ! 279: fprintf(stderr,"Cannot get time today widget\n"); ! 280: else { ! 281: if(shownodes) ! 282: sprintf(str,"%s/%s",getnumstr(str2,nstats.ttoday),getnumstr(str3,sstats.ttoday)); ! 283: else ! 284: sprintf(str,"%s",getnumstr(str2,sstats.ttoday)); ! 285: gtk_entry_set_text(GTK_ENTRY(w),str); ! 286: } ! 287: ! 288: w=glade_xml_get_widget(xml, "eEmailToday"); ! 289: if(w==NULL) ! 290: fprintf(stderr,"Cannot get e-mail today widget\n"); ! 291: else { ! 292: if(shownodes) ! 293: sprintf(str,"%s/%s",getnumstr(str2,nstats.etoday),getnumstr(str3,sstats.etoday)); ! 294: else ! 295: sprintf(str,"%s",getnumstr(str2,sstats.etoday)); ! 296: gtk_entry_set_text(GTK_ENTRY(w),str); ! 297: } ! 298: ! 299: w=glade_xml_get_widget(xml, "eFeedbackToday"); ! 300: if(w==NULL) ! 301: fprintf(stderr,"Cannot get feedback today widget\n"); ! 302: else { ! 303: if(shownodes) ! 304: sprintf(str,"%s/%s",getnumstr(str2,nstats.ftoday),getnumstr(str3,sstats.ftoday)); ! 305: else ! 306: sprintf(str,"%s",getnumstr(str2,sstats.ftoday)); ! 307: gtk_entry_set_text(GTK_ENTRY(w),str); ! 308: } ! 309: ! 310: w=glade_xml_get_widget(xml, "eNewUsersToday"); ! 311: if(w==NULL) ! 312: fprintf(stderr,"Cannot get new users today widget\n"); ! 313: else { ! 314: if(shownodes) ! 315: sprintf(str,"%s/%s",getnumstr(str2,nstats.nusers),getnumstr(str3,sstats.nusers)); ! 316: else ! 317: sprintf(str,"%s",getnumstr(str2,sstats.nusers)); ! 318: gtk_entry_set_text(GTK_ENTRY(w),str); ! 319: } ! 320: ! 321: w=glade_xml_get_widget(xml, "ePostsToday"); ! 322: if(w==NULL) ! 323: fprintf(stderr,"Cannot get posts today widget\n"); ! 324: else { ! 325: if(shownodes) ! 326: sprintf(str,"%s/%s",getnumstr(str2,nstats.ptoday),getnumstr(str3,sstats.ptoday)); ! 327: else ! 328: sprintf(str,"%s",getnumstr(str2,sstats.ptoday)); ! 329: gtk_entry_set_text(GTK_ENTRY(w),str); ! 330: } ! 331: ! 332: w=glade_xml_get_widget(xml, "eLogonsTotal"); ! 333: if(w==NULL) ! 334: fprintf(stderr,"Cannot get logons total widget\n"); ! 335: else { ! 336: if(shownodes) ! 337: sprintf(str,"%s/%s",getnumstr(str2,nstats.logons),getnumstr(str3,sstats.logons)); ! 338: else ! 339: sprintf(str,"%s",getnumstr(str2,sstats.logons)); ! 340: gtk_entry_set_text(GTK_ENTRY(w),str); ! 341: } ! 342: ! 343: w=glade_xml_get_widget(xml, "eTimeTotal"); ! 344: if(w==NULL) ! 345: fprintf(stderr,"Cannot get time total widget\n"); ! 346: else { ! 347: if(shownodes) ! 348: sprintf(str,"%s/%s",getnumstr(str2,nstats.timeon),getnumstr(str3,sstats.timeon)); ! 349: else ! 350: sprintf(str,"%s",getnumstr(str2,sstats.timeon)); ! 351: gtk_entry_set_text(GTK_ENTRY(w),str); ! 352: } ! 353: ! 354: w=glade_xml_get_widget(xml, "eEmailTotal"); ! 355: if(w==NULL) ! 356: fprintf(stderr,"Cannot get email total widget\n"); ! 357: else { ! 358: sprintf(str,"%s",getnumstr(str2,getmail(&cfg,0,0))); ! 359: gtk_entry_set_text(GTK_ENTRY(w),str); ! 360: } ! 361: ! 362: w=glade_xml_get_widget(xml, "eFeedbackTotal"); ! 363: if(w==NULL) ! 364: fprintf(stderr,"Cannot get feedback total widget\n"); ! 365: else { ! 366: sprintf(str,"%s",getnumstr(str2,getmail(&cfg,1,0))); ! 367: gtk_entry_set_text(GTK_ENTRY(w),str); ! 368: } ! 369: ! 370: w=glade_xml_get_widget(xml, "eUsersTotal"); ! 371: if(w==NULL) ! 372: fprintf(stderr,"Cannot get users total widget\n"); ! 373: else { ! 374: sprintf(str,"%s",getnumstr(str2,total_users(&cfg))); ! 375: gtk_entry_set_text(GTK_ENTRY(w),str); ! 376: } ! 377: ! 378: w=glade_xml_get_widget(xml, "eFilesUploadedToday"); ! 379: if(w==NULL) ! 380: fprintf(stderr,"Cannot get files uploaded today widget\n"); ! 381: else { ! 382: sprintf(str,"%s",getnumstr(str2,sstats.uls)); ! 383: gtk_entry_set_text(GTK_ENTRY(w),str); ! 384: } ! 385: ! 386: w=glade_xml_get_widget(xml, "eBytesUploadedToday"); ! 387: if(w==NULL) ! 388: fprintf(stderr,"Cannot get bytes uploaded today widget\n"); ! 389: else { ! 390: sprintf(str,"%s",getsizestr(str2,sstats.ulb,TRUE)); ! 391: gtk_entry_set_text(GTK_ENTRY(w),str); ! 392: } ! 393: ! 394: w=glade_xml_get_widget(xml, "eFilesDownloadedToday"); ! 395: if(w==NULL) ! 396: fprintf(stderr,"Cannot get files downloaded today widget\n"); ! 397: else { ! 398: sprintf(str,"%s",getnumstr(str2,sstats.dls)); ! 399: gtk_entry_set_text(GTK_ENTRY(w),str); ! 400: } ! 401: ! 402: w=glade_xml_get_widget(xml, "eBytesDownloadedToday"); ! 403: if(w==NULL) ! 404: fprintf(stderr,"Cannot get bytes downloaded today widget\n"); ! 405: else { ! 406: sprintf(str,"%s",getsizestr(str2,sstats.dlb,TRUE)); ! 407: gtk_entry_set_text(GTK_ENTRY(w),str); ! 408: } ! 409: ! 410: /* Setup the stats updater */ ! 411: if(data != NULL) ! 412: g_timeout_add(1000 /* Milliseconds */, refresh_data, data); ! 413: ! 414: return(0); ! 415: } ! 416: ! 417: /* Initializes global stuff, loads first user etc */ ! 418: int read_config(void) ! 419: { ! 420: char ctrl_dir[MAX_PATH+1]; ! 421: char *p; ! 422: ! 423: p=getenv("SBBSCTRL"); ! 424: if(p==NULL) { ! 425: display_message("Environment Error","SBBSCTRL not set","gtk-dialog-error"); ! 426: return(-1); ! 427: } ! 428: SAFECOPY(ctrl_dir, p); ! 429: prep_dir("",ctrl_dir,sizeof(ctrl_dir)); ! 430: if(!isdir(ctrl_dir)) { ! 431: display_message("Environment Errpr","SBBSCTRL does not point to a directory","gtk-dialog-error"); ! 432: return(-1); ! 433: } ! 434: memset(&cfg,0,sizeof(cfg)); ! 435: cfg.size=sizeof(cfg); ! 436: SAFECOPY(cfg.ctrl_dir,ctrl_dir); ! 437: ! 438: /* Read the ctrl struct */ ! 439: refresh_events(); ! 440: ! 441: /* Read the .ini file */ ! 442: read_ini(); ! 443: ! 444: /* Passing any non-NULL argument is required to set up the timeout */ ! 445: if(refresh_data(refresh_data)) ! 446: return(-1); ! 447: return(0); ! 448: } ! 449: ! 450: int main(int argc, char *argv[]) { ! 451: gtk_init(&argc, &argv); ! 452: glade_init(); ! 453: ! 454: /* load the interface */ ! 455: strcpy(glade_path, argv[0]); ! 456: strcpy(getfname(glade_path), "gtkmonitor.glade"); ! 457: xml = glade_xml_new(glade_path, "MainWindow", NULL); ! 458: ! 459: /* connect the signals in the interface */ ! 460: glade_xml_signal_autoconnect(xml); ! 461: ! 462: /* Set up the global config stuff. */ ! 463: memset(&cfg, 0, sizeof(cfg)); ! 464: if(read_config()) ! 465: return(1); ! 466: ! 467: /* start the event loop */ ! 468: gtk_main(); ! 469: return 0; ! 470: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.