diff -uN sysklogd-1.4/syslogd.c sysklogd-1.4.ok/syslogd.c --- sysklogd-1.4/syslogd.c Mon Apr 8 17:42:00 2002 +++ sysklogd-1.4.ok/syslogd.c Thu Mar 21 18:12:31 2002 @@ -770,6 +770,7 @@ static void dprintf(char *, ...); static void allocate_log(void); void sighup_handler(); +int dosystat(void); #ifdef SYSLOG_UNIXAF static int create_unix_socket(const char *path); @@ -2095,6 +2096,7 @@ if (MarkSeq >= MarkInterval) { logmsg(LOG_INFO, "-- MARK --", LocalHostName, ADDDATE|MARK); MarkSeq = 0; + dosystat(); } #ifdef SYSV @@ -2820,4 +2822,100 @@ * tab-width: 8 * End: */ + + +int dosystat(void) +{ + FILE *f; + char inbuf[1024], outbuf[1024]; + int upminutes, uphours, updays, upseconds; + double uptime_secs, idle_secs; + + // VERSION + if ((f = fopen("/VERSION", "r")) != NULL) { + if (fgets(inbuf, sizeof(inbuf), f)) { + snprintf(outbuf, sizeof(outbuf), "STAT: Version %.250s", inbuf); + logmsg(LOG_INFO, outbuf, LocalHostName, ADDDATE); + } + fclose(f); + } else { + logmsg(LOG_INFO, "STAT: Version (unknown)", LocalHostName, ADDDATE); + } + + // Load of the machine + if ((f = fopen("/proc/loadavg", "r")) != NULL) { + if (fgets(inbuf, sizeof(inbuf), f)) { + snprintf(outbuf, sizeof(outbuf), "STAT: Load %.250s", inbuf); + logmsg(LOG_INFO, outbuf, LocalHostName, ADDDATE); + } + fclose(f); + } else { + logmsg(LOG_INFO, "STAT: Load (unknown)", LocalHostName, ADDDATE); + } + + // memoryinfo + if ((f = fopen("/proc/meminfo", "r")) != NULL) { + while (fgets(inbuf, sizeof(inbuf), f)) { + if (strstr(inbuf, "Mem: ")) { + snprintf(outbuf, sizeof(outbuf), "STAT: %.250s", inbuf); + logmsg(LOG_INFO, outbuf, LocalHostName, ADDDATE); + break; + } + } + fclose(f); + } else { + logmsg(LOG_INFO, "STAT: Mem: (unknown)", LocalHostName, ADDDATE); + } + + // Netzstatistik + if ((f = fopen("/proc/net/dev", "r")) != NULL) { + while (fgets(inbuf, sizeof(inbuf), f)) { + if (strstr(inbuf, ":")) { + snprintf(outbuf, sizeof(outbuf), "STAT: dev %.250s", inbuf); + logmsg(LOG_INFO, outbuf, LocalHostName, ADDDATE); + } + } + fclose(f); + } else { + logmsg(LOG_INFO, "STAT: dev (unknown)", LocalHostName, ADDDATE); + } + + // SNMP Statistik + if ((f = fopen("/proc/net/snmp", "r")) != NULL) { + while (fgets(inbuf, sizeof(inbuf), f)) { + if (strstr(inbuf, "Forwarding") || strstr(inbuf, "InMsgs") || + strstr(inbuf, "RtoAlgorithm") || strstr(inbuf, "InDatagrams")) continue; + snprintf(outbuf, sizeof(outbuf), "STAT: dev %.250s", inbuf); + logmsg(LOG_INFO, outbuf, LocalHostName, ADDDATE); + } + fclose(f); + } else { + logmsg(LOG_INFO, "STAT: snmp (unknown)", LocalHostName, ADDDATE); + } + + // uptime + if ((f = fopen("/proc/uptime", "r")) != NULL) { + if (fgets(inbuf, sizeof(inbuf), f)) { + if (sscanf (inbuf, "%lf %lf", &uptime_secs, &idle_secs) < 2) { + logmsg (LOG_INFO, "bad data in /proc/uptime", LocalHostName, ADDDATE); + } else { + /* read and calculate the amount of uptime */ + updays = (int) uptime_secs / (60 * 60 * 24); + upminutes = (int) uptime_secs / 60; + uphours = upminutes / 60; + uphours = uphours % 24; + upminutes = upminutes % 60; + upseconds = (int) uptime_secs % 60; + + snprintf (outbuf, sizeof(outbuf), "STAT: uptime: %d d %2d:%02d:%02d", updays, uphours, upminutes, upseconds); + logmsg(LOG_INFO, outbuf, LocalHostName, ADDDATE); + } + } + } else { + logmsg(LOG_INFO, "STAT: uptime (unknown)", LocalHostName, ADDDATE); + } + + return 0; +} +