/* * XmNap A Motif napster client * * Copyright (C) 2000 Mats Peterson * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. * * Please send any comments/bug reports to * mats_peterson@swipnet.se (Mats Peterson) */ #include #include #include #include #include #include #include "main.h" #include "connect.h" #include "message.h" #include "info.h" #include "msgbox.h" #include "util.h" void ShowServerStats(void) { if (SendMsg(MSG_CLIENT_USAGE_STATS, "")) Disconnect(strerror(errno)); } void DoShowServerStats(String data) { regmatch_t pmatch[11]; String values[11], timeStr = XtMalloc(256); String tmp, dtxt, htxt; int i, j, r, len; int time, days, hours, minutes, seconds; double kiloBytes; char timeTmp[80]; time_t startTime; struct tm *tm; enum {CONN_CLIENTS, CONN_SERVERS, TOT_CLIENTS, FILES, GIGABYTES, ACTIVE_CHANNELS, START_TIME, UP_TIME, MEM_USED, REG_USERS}; r = RegEx(data, "^([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+) " "([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+)", 11, pmatch); if (r <= 0) { ErrMsg("DoShowServerStats: regex error"); XtFree(timeStr); return; } for (i = 0, j = 1; i < 10; i++, j++) { if (! (len = pmatch[j].rm_eo - pmatch[j].rm_so)) break; switch (i) { case START_TIME: tmp = (String)XtCalloc(len + 1, 1); strncpy(tmp, data + pmatch[j].rm_so, len); startTime = (time_t)atol(tmp); XtFree(tmp); tm = gmtime(&startTime); strftime(timeStr, 80, "%Y-%m-%d %H:%M", tm); values[i] = XtNewString(timeStr); break; case UP_TIME: tmp = (String)XtCalloc(len + 1, 1); strncpy(tmp, data + pmatch[j].rm_so, len); time = atol(tmp); XtFree(tmp); days = time / 86400; hours = (time / 3600) % 24; minutes = (time / 60) % 60; seconds = time % 60; dtxt = "day"; if (days > 1) dtxt = "days"; htxt = "hr"; if (hours > 1) htxt = "hrs"; sprintf(timeStr, "%d sec", seconds); if (minutes) { strcpy(timeTmp, timeStr); sprintf(timeStr, "%d min %s", minutes, timeTmp); } if (hours) { strcpy(timeTmp, timeStr); sprintf(timeStr, "%d %s %s", hours, htxt, timeTmp); } if (days) { strcpy(timeTmp, timeStr); sprintf(timeStr, "%d %s %s", days, dtxt, timeTmp); } values[i] = XtNewString(timeStr); break; case GIGABYTES: tmp = (String)XtCalloc(len + 1, 1); strncpy(tmp, data + pmatch[j].rm_so, len); kiloBytes = strtod(tmp, NULL); sprintf(tmp, "%.1f", kiloBytes / 1048576.0); values[i] = XtNewString(tmp); XtFree(tmp); break; default: values[i] = (String)XtCalloc(len + 1, 1); strncpy(values[i], data + pmatch[j].rm_so, len); } } values[i] = NULL; ShowInfo("srvStats", values, 25); for (j = 0; j < i; j++) XtFree(values[j]); XtFree(timeStr); } .