diff --git a/src/sbbs3/umonitor/umonitor.c b/src/sbbs3/umonitor/umonitor.c index cc84db072dfd5b743f266ac8aef2fbacc7cb0c2a..8a5b9d81487ce88063b15bfad1a452076ffff03f 100644 --- a/src/sbbs3/umonitor/umonitor.c +++ b/src/sbbs3/umonitor/umonitor.c @@ -66,7 +66,7 @@ uifcapi_t uifc; /* User Interface (UIFC) Library API */ const char *YesStr="Yes"; const char *NoStr="No"; -char* app_title = "Synchronet UNIX Monitor v" VERSION " " PLATFORM_DESC; +char app_title[128]; int ciolib_mode=CIOLIB_MODE_AUTO; int lprintf(char *fmt, ...) @@ -323,10 +323,12 @@ int drawstats(scfg_t *cfg, int nodenum, node_t *node, int *curp, int *barp) { stats_t nstats; char statbuf[6*78]; /* Buffer to hold the stats for passing to uifc.showbuf() */ char str[4][4][12]; + char heading[128]; char usrname[128]; + char tmp[128]; ulong free; uint i,l,m; - time_t t; + time_t t, now; int shownode=1; if(getnodedat(cfg,nodenum,node,FALSE,NULL)) { @@ -338,16 +340,25 @@ int drawstats(scfg_t *cfg, int nodenum, node_t *node, int *curp, int *barp) { username(cfg,node->useron,usrname); getstats(cfg, 0, &sstats); - t=time(NULL); - strftime(str[0][0],12,"%b %e",localtime(&t)); - free=getfreediskspace(cfg->data_dir,1024); - if(free<1000) { - free=getfreediskspace(cfg->data_dir,0); - getsizestr(str[0][1],free,TRUE); - } - else - getsizestr(str[0][1],free,FALSE); + now = time(NULL); if(shownode) { + static client_t client; + time_t hangup = now; + getnodeclient(cfg, nodenum, &client, &hangup); + t = client.time ? client.time : now; + if(node->status != NODE_WFC && node->status != NODE_OFFLINE) + safe_snprintf(heading, sizeof(heading), "`Node #`%-3d %s `%s`: %s" + ,nodenum + ,sectostr(now - t, tmp) + ,client.protocol + ,client.addr); + else + safe_snprintf(heading, sizeof(heading), "`Node #`%-3d %s `%s`: %s `on` %.12s" + ,nodenum + ,sectostr(hangup - t, tmp) + ,client.protocol + ,client.addr + ,ctime(&hangup) + 4); snprintf(str[1][0],12,"%s/%s",getnumstr(str[3][2],nstats.ltoday),getnumstr(str[3][3],sstats.ltoday)); getnumstr(str[1][1],sstats.logons); snprintf(str[1][2],12,"%s/%s",getnumstr(str[3][2],nstats.ttoday),getnumstr(str[3][3],sstats.ttoday)); @@ -367,6 +378,14 @@ int drawstats(scfg_t *cfg, int nodenum, node_t *node, int *curp, int *barp) { getnumstr(str[3][3],sstats.dls); } else { + free=getfreediskspace(cfg->data_dir,1024); + if(free<1000) { + free=getfreediskspace(cfg->data_dir,0); + getsizestr(str[0][0],free,TRUE); + } + else + getsizestr(str[0][0],free,FALSE); + sprintf(heading, "`Space`: %s `in` %s", str[0][0], cfg->data_dir); snprintf(str[1][0],12,"%s",getnumstr(str[3][3],sstats.ltoday)); getnumstr(str[1][1],sstats.logons); snprintf(str[1][2],12,"%s",getnumstr(str[3][3],sstats.ttoday)); @@ -385,11 +404,11 @@ int drawstats(scfg_t *cfg, int nodenum, node_t *node, int *curp, int *barp) { getsizestr(str[3][2],sstats.dlb,TRUE); getnumstr(str[3][3],sstats.dls); } - snprintf(statbuf,sizeof(statbuf),"`Node #`: %-3d %6s `Space`: %s" + snprintf(statbuf,sizeof(statbuf),"%s" "\n`Logons`: %-11s `Total`: %-11s `Timeon`: %-11s `Total`: %-11s" "\n`Emails`: %-11s `Posts`: %-11s `Fbacks`: %-11s `Users`: %-11s" "\n`Uloads`: %-11s `Files`: %-11s `Dloads`: %-11s `Files`: %-11s", - nodenum,str[0][0],str[0][1], + heading, str[1][0],str[1][1],str[1][2],str[1][3], str[2][0],str[2][1],str[2][2],str[2][3], str[3][0],str[3][1],str[3][2],str[3][3]); @@ -823,6 +842,8 @@ int main(int argc, char** argv) { time_t last_semfile_check = time(NULL); int idle_sleep=100; + SAFEPRINTF2(app_title, "Synchronet UNIX Monitor v%s%c", VERSION, REVISION); + /******************/ /* Ini file stuff */ /******************/