From: <st...@us...> - 2012-07-09 10:53:51
|
Revision: 7017 http://xymon.svn.sourceforge.net/xymon/?rev=7017&view=rev Author: storner Date: 2012-07-09 10:53:45 +0000 (Mon, 09 Jul 2012) Log Message: ----------- xymond_netcollect: Work in progress. Modified Paths: -------------- trunk/xymond/xymond_netcollect.c Modified: trunk/xymond/xymond_netcollect.c =================================================================== --- trunk/xymond/xymond_netcollect.c 2012-07-09 10:50:16 UTC (rev 7016) +++ trunk/xymond/xymond_netcollect.c 2012-07-09 10:53:45 UTC (rev 7017) @@ -34,6 +34,7 @@ int ntpstratum; float ntpoffset; int interval; + time_t sent; } connectresult_t; typedef struct hostresults_t { @@ -61,29 +62,29 @@ void *hinfo, char *sender, time_t timestamp, char *clientdata) { + xtreePos_t handle; + hostresults_t *hrec; void *ns1var, *ns1sects; char *onetest, *testspec; if (!hostresults) hostresults = xtreeNew(strcasecmp); + handle = xtreeFind(hostresults, hostname); + if (handle == xtreeEnd(hostresults)) { + hrec = (hostresults_t *)calloc(1, sizeof(hostresults_t)); + hrec->hostname = strdup(hostname); + hrec->results = xtreeNew(strcmp); + xtreeAdd(hostresults, hrec->hostname, hrec); + } + else { + hrec = (hostresults_t *)xtreeData(hostresults, handle); + } + onetest = nextsection_r(clientdata, &testspec, &ns1var, &ns1sects); while (onetest) { - xtreePos_t handle; - hostresults_t *hrec; connectresult_t *rec; char *bol, *eoln; - handle = xtreeFind(hostresults, hostname); - if (handle == xtreeEnd(hostresults)) { - hrec = (hostresults_t *)calloc(1, sizeof(hostresults_t)); - hrec->hostname = strdup(hostname); - hrec->results = xtreeNew(strcmp); - xtreeAdd(hostresults, hrec->hostname, hrec); - } - else { - hrec = (hostresults_t *)xtreeData(hostresults, handle); - } - handle = xtreeFind(hrec->results, testspec); if (handle == xtreeEnd(hrec->result)) { rec = (connectresult_t *)calloc(1, sizeof(connectresult_t)); @@ -102,6 +103,7 @@ if (rec->httpheaders) xfree(rec->httpheaders); if (rec->httpbody) xfree(rec->httpbody); rec->elapsedms = 0.0; rec->sslexpires = 0; rec->httpstatus = 0; rec->ntpstratum = 0; rec->ntpoffset = 0.0; rec->interval = 0; + rec->sent = 0; bol = onetest; while (bol) { @@ -136,6 +138,19 @@ sectiondone: onetest = nextsection_r(NULL, &testspec, &ns1var, &ns1sects); } + + if (debug) { + dbgprintf("***********************\n"); + dbgprintf("Results for %s\n", hrec->hostname); + for (handle = xtreeFirst(hrec->results); (handle != xtreeEnd(hrec->results)); handle = xtreeNext(hrec->results, handle)) { + connectresult_t *rec; + rec = (connectresult_t *)xtreeData(hrec->results, handle); + dbgprintf(" %s\n", rec->testspec); + dbgprintf("\tStatus:%d, elapsed:%.3f, interval:%d\n", rec->status, rec->elapsedms, rec->interval); + dbgprintf("\thttpstatus:%d, ntpstratum:%d, ntpoffset=%.6f\n", rec->httpstatus, rec->ntpstratum, rec->ntpoffset); + } + } + nextsection_r_done(ns1sects); } @@ -276,6 +291,7 @@ if (xgetenv("IPTEST_2_CLEAR_ON_FAILED_CONN")) failgoesclear = (strcmp(xgetenv("IPTEST_2_CLEAR_ON_FAILED_CONN"), "TRUE") == 0); if (xgetenv("NETFAILTEXT")) failtext = xgetenv("NETFAILTEXT"); + combo_start(); init_timestamp(); for (hwalk = first_host(); (hwalk); hwalk = next_host(hwalk, 0)) { @@ -300,6 +316,7 @@ if (handle == xtreeEnd(hrec->results)) continue; crec = (connectresult_t *)xtreeData(hrec->results, handle); + if (crec->sent) continue; testspec = NULL; isdialup = (xmh_item(hwalk, XMH_FLAG_DIALUP) != NULL); @@ -313,32 +330,82 @@ } } - if (argnmatch(testspec, "ldap://") || argnmatch(testspec, "ldaps://") ||argnmatch(testspec, "ldaptls://")) { - /* LDAP */ + // FIXME: SSL certificate status + // + /* LDAP / HTTP */ + // FIXME: Multiple tests for one host + if ( argnmatch(testspec, "http") || + argnmatch(testspec, "content=http") || + argnmatch(testspec, "cont;http") || + argnmatch(testspec, "cont=") || + argnmatch(testspec, "nocont;http") || + argnmatch(testspec, "nocont=") || + argnmatch(testspec, "post;http") || + argnmatch(testspec, "post=") || + argnmatch(testspec, "nopost;http") || + argnmatch(testspec, "nopost=") || + argnmatch(testspec, "soap;http") || + argnmatch(testspec, "soap=") || + argnmatch(testspec, "nosoap;http") || + argnmatch(testspec, "nosoap=") || + argnmatch(testspec, "type;http") || + argnmatch(testspec, "type=") || + argnmatch(testspec, "ldap://") || + argnmatch(testspec, "ldaps://") || + argnmatch(testspec, "ldaptls://") ) { + + int isldaptest = (argnmatch(testspec, "ldap")); + char *testname; + + testname = (isldaptest ? "ldap" : "http"); + + color = decide_color(crec, + (hrec->ping == crec), + (xmh_item(hwalk, XMH_FLAG_NOPING) != NULL), + (hrec->ping && (hrec->ping->status == NETCOLLECT_FAILED)), + isdialup, + isreverse, + isforced, + failgoesclear, causetext); + + if ((color == COL_RED) && isldaptest && (xmh_item(hwalk, XMH_FLAG_LDAPFAILYELLOW))) color = COL_YELLOW; + + init_status(color); + sprintf(msgline, "status+%d %s.%s %s %s\n", + crec->interval/10, xmh_item(hwalk, XMH_HOSTNAME), testname, colorname(color), timestamp); + addtostatus(msgline); + + sprintf(msgline, "\n&%s %s - %s\n\n", colorname(color), testspec, ((color != COL_GREEN) ? "failed" : "OK")); + addtostatus(msgline); + + if (crec->plainlog) addtostatus(crec->plainlog); + if (!isldaptest) { + if (crec->httpheaders) addtostatus(crec->httpheaders); + // if (crec->httpbody) addtostatus(crec->httpbody); + } + + sprintf(msgtext, "\nSeconds: %.3f\n", crec->elapsedms / 1000); + addtostatus(msgtext); + + addtostatus("\n"); + finish_status(); + crec->sent = 1; } - else if ( argnmatch(testspec, "http") || - argnmatch(testspec, "content=http") || - argnmatch(testspec, "cont;http") || - argnmatch(testspec, "cont=") || - argnmatch(testspec, "nocont;http") || - argnmatch(testspec, "nocont=") || - argnmatch(testspec, "post;http") || - argnmatch(testspec, "post=") || - argnmatch(testspec, "nopost;http") || - argnmatch(testspec, "nopost=") || - argnmatch(testspec, "soap;http") || - argnmatch(testspec, "soap=") || - argnmatch(testspec, "nosoap;http") || - argnmatch(testspec, "nosoap=") || - argnmatch(testspec, "type;http") || - argnmatch(testspec, "type=") ) { - /* HTTP */ - } + + /* Apache data report */ else if (argnmatch(testspec, "apache") || argnmatch(testspec, "apache=")) { - /* Apache data report */ + strbuffer_t *datamsg = newstrbuffer(0); + + sprintf(msgline, "data %s.%s\n", xmh_item(hwalk, XMH_HOSTNAME), "apache"); + addtobuffer(datamsg, msgline); + addtobuffer(datamsg, crec->httpbody); + sendmessage(STRBUF(datamsg), NULL, XYMON_TIMEOUT, NULL); + freestrbuffer(datamsg); + crec->sent = 1; } + + /* Standard net test */ else { - /* Standard net test */ char flags[5]; flags[0] = (isdialup ? 'D' : 'd'); @@ -406,15 +473,18 @@ addtostatus("\n"); addtostatus(crec->plainlog); addtostatus("\n"); } - sprintf(msgtext, "\nSeconds: %.2f\n", crec->elapsedms / 1000); + sprintf(msgtext, "\nSeconds: %.3f\n", crec->elapsedms / 1000); addtostatus(msgtext); - addtostatus("\n\n"); + addtostatus("\n"); finish_status(); + crec->sent = 1; } } } + + combo_end(); } #define MAX_META 20 /* The maximum number of meta-data items in a message */ @@ -427,10 +497,13 @@ int argi, seq; struct timespec timeout = { 10, 0 }; time_t nextconfigload = 0; + int anychanges = 0; + libxymon_init(argv[0]); + /* Handle program options. */ for (argi = 1; (argi < argc); argi++) { - if (standardoption(argv[0], argv[argi])) { + if (standardoption(argv[argi])) { if (showhelp) return 0; } } @@ -512,7 +585,10 @@ * some internal processing even though no messages arrive. */ else if (strncmp(metadata[0], "@@idle", 6) == 0) { - netcollect_generate_updates(); + if (anychanges) { + netcollect_generate_updates(); + anychanges = 0; + } } /* @@ -557,9 +633,12 @@ if (!clientclass || (*clientclass == '\0')) clientclass = clientos; handle_netcollect_client(hostname, clientclass, os, hinfo, sender, timestamp, restofmsg); + anychanges = 1; } } + if (debug) netcollect_generate_updates(); + return 0; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <st...@us...> - 2013-07-28 19:55:45
|
Revision: 7238 http://sourceforge.net/p/xymon/code/7238 Author: storner Date: 2013-07-28 19:55:42 +0000 (Sun, 28 Jul 2013) Log Message: ----------- xymond_netcollect: Use backfeedqueue, fix collector-handling, ensure updates sent at least every 10 seconds Modified Paths: -------------- trunk/xymond/xymond_netcollect.c Modified: trunk/xymond/xymond_netcollect.c =================================================================== --- trunk/xymond/xymond_netcollect.c 2013-07-28 15:14:33 UTC (rev 7237) +++ trunk/xymond/xymond_netcollect.c 2013-07-28 19:55:42 UTC (rev 7238) @@ -23,6 +23,8 @@ #include "xymond_worker.h" #include "sections.h" +#define MINIMUM_UPDATE_INTERVAL 10 + typedef struct connectresult_t { char *testspec; enum { NETCOLLECT_UNKNOWN, NETCOLLECT_OK, NETCOLLECT_FAILED, NETCOLLECT_TIMEOUT, NETCOLLECT_RESOLVERROR, NETCOLLECT_SSLERROR, NETCOLLECT_BADDATA } status; @@ -44,7 +46,10 @@ } hostresults_t; static void *hostresults = NULL; /* Tree of hostresults_t records, keyed by hostname. So a tree of trees. */ +static int anychanges = 0; +static time_t lastupdatesent = 0; + static char *sizedstr(char *sbegin, char *eoln) { char *result; @@ -279,7 +284,7 @@ } -void netcollect_generate_updates(void) +void netcollect_generate_updates(int usebackfeedqueue) { void *hwalk; char *pingcolumn; @@ -291,8 +296,8 @@ if (xgetenv("IPTEST_2_CLEAR_ON_FAILED_CONN")) failgoesclear = (strcmp(xgetenv("IPTEST_2_CLEAR_ON_FAILED_CONN"), "TRUE") == 0); if (xgetenv("NETFAILTEXT")) failtext = xgetenv("NETFAILTEXT"); - combo_start(); init_timestamp(); + if (usebackfeedqueue) combo_start_local(); else combo_start(); for (hwalk = first_host(); (hwalk); hwalk = next_host(hwalk, 0)) { xtreePos_t handle; @@ -399,7 +404,7 @@ sprintf(msgline, "data %s.%s\n", xmh_item(hwalk, XMH_HOSTNAME), "apache"); addtobuffer(datamsg, msgline); addtobuffer(datamsg, crec->httpbody); - sendmessage(STRBUF(datamsg), NULL, XYMON_TIMEOUT, NULL); + if (usebackfeedqueue) sendmessage_local(STRBUF(datamsg)); else sendmessage(STRBUF(datamsg), NULL, XYMON_TIMEOUT, NULL); freestrbuffer(datamsg); crec->sent = 1; } @@ -485,6 +490,9 @@ } combo_end(); + + anychanges = 0; + lastupdatesent = gettimer(); } #define MAX_META 20 /* The maximum number of meta-data items in a message */ @@ -495,9 +503,9 @@ char *msg; int running; int argi, seq; - struct timespec timeout = { 10, 0 }; + struct timespec timeout; time_t nextconfigload = 0; - int anychanges = 0; + int usebackfeedqueue = 0; libxymon_init(argv[0]); @@ -508,6 +516,7 @@ } } + usebackfeedqueue = (sendmessage_init_local() > 0); save_errbuf = 0; running = 1; @@ -521,6 +530,7 @@ nextconfigload = gettimer() + 600; } + timeout.tv_sec = MINIMUM_UPDATE_INTERVAL; timeout.tv_nsec = 0; msg = get_xymond_message(C_LAST, argv[0], &seq, &timeout); if (msg == NULL) { running = 0; @@ -586,8 +596,7 @@ */ else if (strncmp(metadata[0], "@@idle", 6) == 0) { if (anychanges) { - netcollect_generate_updates(); - anychanges = 0; + netcollect_generate_updates(usebackfeedqueue); } } @@ -624,7 +633,7 @@ dbgprintf("Client report from host %s\n", (hostname ? hostname : "<unknown>")); /* Check if we are running a collector module for this type of client */ - if (!collectorid || (strcmp(collectorid, "xymonnet2") != 0)) continue; + if (!collectorid || ((strcmp(collectorid, "xymonnet2") != 0) && (strcmp(collectorid, "netmodule") != 0))) continue; hinfo = hostinfo(hostname); if (!hinfo) continue; os = get_ostype(clientos); @@ -634,10 +643,15 @@ handle_netcollect_client(hostname, clientclass, os, hinfo, sender, timestamp, restofmsg); anychanges = 1; + + if ((lastupdatesent + MINIMUM_UPDATE_INTERVAL) < gettimer()) { + netcollect_generate_updates(usebackfeedqueue); + } } } - if (debug) netcollect_generate_updates(); + if (debug) netcollect_generate_updates(usebackfeedqueue); + if (usebackfeedqueue) sendmessage_finish_local(); return 0; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <st...@us...> - 2013-07-29 15:29:48
|
Revision: 7242 http://sourceforge.net/p/xymon/code/7242 Author: storner Date: 2013-07-29 15:29:43 +0000 (Mon, 29 Jul 2013) Log Message: ----------- xymond_netcollect: Report the target IP and port in the status message Modified Paths: -------------- trunk/xymond/xymond_netcollect.c Modified: trunk/xymond/xymond_netcollect.c =================================================================== --- trunk/xymond/xymond_netcollect.c 2013-07-29 15:28:35 UTC (rev 7241) +++ trunk/xymond/xymond_netcollect.c 2013-07-29 15:29:43 UTC (rev 7242) @@ -27,6 +27,8 @@ typedef struct connectresult_t { char *testspec; + char *targetip; + int targetport; enum { NETCOLLECT_UNKNOWN, NETCOLLECT_OK, NETCOLLECT_FAILED, NETCOLLECT_TIMEOUT, NETCOLLECT_RESOLVERROR, NETCOLLECT_SSLERROR, NETCOLLECT_BADDATA } status; float elapsedms; char *sslsubject; @@ -132,6 +134,8 @@ else if (argnmatch(bol, "HTTPstatus: ")) rec->httpstatus = atoi(strchr(bol, ':') + 2); else if (argnmatch(bol, "ElapsedMS: ")) rec->elapsedms = atof(strchr(bol, ':') + 2); else if (argnmatch(bol, "IntervalMS: ")) rec->interval = atoi(strchr(bol, ':') + 2) / 1000; + else if (argnmatch(bol, "TargetIP: ")) rec->targetip = strdup(strchr(bol, ':') + 2); + else if (argnmatch(bol, "TargetPort: ")) rec->targetport = atoi(strchr(bol, ':') + 2); else if (argnmatch(bol, "PeerCertificateExpiry: ")) rec->sslexpires = atoi(strchr(bol, ':') + 2); else if (argnmatch(bol, "NTPstratum: ")) rec->ntpstratum = atoi(strchr(bol, ':') + 2); else if (argnmatch(bol, "NTPoffset: ")) rec->ntpoffset = atof(strchr(bol, ':') + 2); @@ -390,6 +394,9 @@ // if (crec->httpbody) addtostatus(crec->httpbody); } + sprintf(msgtext, "\nTarget : %s:%d\n", crec->targetip, crec->targetport); + addtostatus(msgtext); + sprintf(msgtext, "\nSeconds: %.3f\n", crec->elapsedms / 1000); addtostatus(msgtext); @@ -479,6 +486,9 @@ addtostatus("\n"); addtostatus(crec->plainlog); addtostatus("\n"); } + sprintf(msgtext, "\nTarget : %s:%d\n", crec->targetip, crec->targetport); + addtostatus(msgtext); + sprintf(msgtext, "\nSeconds: %.3f\n", crec->elapsedms / 1000); addtostatus(msgtext); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <st...@us...> - 2013-08-10 06:46:40
|
Revision: 7264 http://sourceforge.net/p/xymon/code/7264 Author: storner Date: 2013-08-10 06:46:35 +0000 (Sat, 10 Aug 2013) Log Message: ----------- xymond_netcollect: Prettify output for Target line in status Modified Paths: -------------- trunk/xymond/xymond_netcollect.c Modified: trunk/xymond/xymond_netcollect.c =================================================================== --- trunk/xymond/xymond_netcollect.c 2013-08-10 06:41:34 UTC (rev 7263) +++ trunk/xymond/xymond_netcollect.c 2013-08-10 06:46:35 UTC (rev 7264) @@ -394,7 +394,7 @@ // if (crec->httpbody) addtostatus(crec->httpbody); } - sprintf(msgtext, "\nTarget : %s:%d\n", crec->targetip, crec->targetport); + sprintf(msgtext, "\nTarget : %s port %d\n", crec->targetip, crec->targetport); addtostatus(msgtext); sprintf(msgtext, "\nSeconds: %.3f\n", crec->elapsedms / 1000); @@ -486,7 +486,9 @@ addtostatus("\n"); addtostatus(crec->plainlog); addtostatus("\n"); } - sprintf(msgtext, "\nTarget : %s:%d\n", crec->targetip, crec->targetport); + sprintf(msgtext, "\nTarget : %s", crec->targetip); + if (hrec->ping != crec) sprintf(msgtext+strlen(msgtext), " port %d", crec->targetport); + strcat(msgtext, "\n"); addtostatus(msgtext); sprintf(msgtext, "\nSeconds: %.3f\n", crec->elapsedms / 1000); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <st...@us...> - 2013-08-11 10:18:46
|
Revision: 7274 http://sourceforge.net/p/xymon/code/7274 Author: storner Date: 2013-08-11 10:18:41 +0000 (Sun, 11 Aug 2013) Log Message: ----------- xymond_netcollect: - Handle SSL certificate status for multiple tests - Handle HTTP, DNS and LDAP multiple tests - Add --flush option for immediate flush of status Modified Paths: -------------- trunk/xymond/xymond_netcollect.c Modified: trunk/xymond/xymond_netcollect.c =================================================================== --- trunk/xymond/xymond_netcollect.c 2013-08-11 10:13:26 UTC (rev 7273) +++ trunk/xymond/xymond_netcollect.c 2013-08-11 10:18:41 UTC (rev 7274) @@ -32,8 +32,9 @@ enum { NC_STATUS_UNKNOWN, NC_STATUS_OK, NC_STATUS_FAILED, NC_STATUS_TIMEOUT, NC_STATUS_RESOLVERROR, NC_STATUS_SSLERROR, NC_STATUS_BADDATA } status; enum { NC_HANDLER_PING, NC_HANDLER_PLAIN, NC_HANDLER_HTTP, NC_HANDLER_DNS, NC_HANDLER_NTP, NC_HANDLER_LDAP, NC_HANDLER_RPC, NC_HANDLER_APACHE } handler; float elapsedms; - char *sslsubject; - time_t sslexpires; + char *sslsubject, *sslissuer, *ssldetails; + time_t sslstart, sslexpires; + int sslkeysize; char *plainlog, *httpheaders, *httpbody; int httpstatus; int ntpstratum; @@ -139,6 +140,11 @@ else if (strcmp(s, "http") == 0) rec->handler = ((strncmp(testspec, "apache", 6) == 0) ? NC_HANDLER_APACHE : NC_HANDLER_HTTP); } else if (argnmatch(bol, "PeerCertificateSubject: ")) rec->sslsubject = strdup(strchr(bol, ':') + 2); + else if (argnmatch(bol, "PeerCertificateIssuer: ")) rec->sslissuer = strdup(strchr(bol, ':') + 2); + else if (argnmatch(bol, "PeerCertificateStart: ")) rec->sslstart = atoi(strchr(bol, ':') + 2); + else if (argnmatch(bol, "PeerCertificateExpiry: ")) rec->sslexpires = atoi(strchr(bol, ':') + 2); + else if (argnmatch(bol, "PeerCertificateKeysize: ")) rec->sslkeysize = atoi(strchr(bol, ':') + 2); + else if (argnmatch(bol, "PeerCertificateDetails: ")) rec->ssldetails = sizedstr(bol, eoln); else if (argnmatch(bol, "PLAINlog: ")) rec->plainlog = sizedstr(bol, eoln); else if (argnmatch(bol, "HTTPheaders: ")) rec->httpheaders = sizedstr(bol, eoln); else if (argnmatch(bol, "HTTPbody: ")) rec->httpbody = sizedstr(bol, eoln); @@ -147,7 +153,6 @@ else if (argnmatch(bol, "IntervalMS: ")) rec->interval = atoi(strchr(bol, ':') + 2) / 1000; else if (argnmatch(bol, "TargetIP: ")) rec->targetip = strdup(strchr(bol, ':') + 2); else if (argnmatch(bol, "TargetPort: ")) rec->targetport = atoi(strchr(bol, ':') + 2); - else if (argnmatch(bol, "PeerCertificateExpiry: ")) rec->sslexpires = atoi(strchr(bol, ':') + 2); else if (argnmatch(bol, "NTPstratum: ")) rec->ntpstratum = atoi(strchr(bol, ':') + 2); else if (argnmatch(bol, "NTPoffset: ")) rec->ntpoffset = atof(strchr(bol, ':') + 2); @@ -317,6 +322,8 @@ for (hwalk = first_host(); (hwalk); hwalk = next_host(hwalk, 0)) { xtreePos_t handle; hostresults_t *hrec; + char msgline[4096], msgtext[4096]; + multistatus_t *mhead = NULL; handle = xtreeFind(hostresults, xmh_item(hwalk, XMH_HOSTNAME)); if (handle == xtreeEnd(hostresults)) continue; @@ -328,8 +335,6 @@ char *testspec; int isdialup, isreverse, isforced; char *p; - int color; - char msgline[4096], msgtext[4096]; crec = (connectresult_t *)xtreeData(hrec->results, handle); if (crec->sent) continue; @@ -346,21 +351,79 @@ } } - // FIXME: SSL certificate status - // FIXME: Multiple tests for one host + if (crec->sslsubject) { + char *dupsubj = strdup(crec->sslsubject); + char *cn, *tokr; + time_t now; + char timestr[30]; + multistatus_t *multiitem; + int sslcolor = COL_GREEN; + multiitem = init_multi(&mhead, "sslcert", crec->interval, "SSL certificate(s) OK", "SSL certificate(s) about to expire", "SSL certificate(s) expire immediately"); + + cn = strtok_r(dupsubj, "/", &tokr); + while (cn && (strncmp(cn, "CN=", 3) != 0)) cn = strtok_r(NULL, "/", &tokr); + now = getcurrenttime(NULL); + + if ((crec->sslexpires - now) >= 30*24*60*60) { + sslcolor = COL_GREEN; + + } + else if ((crec->sslexpires - now) >= 10*24*60*60) { + sslcolor = COL_YELLOW; + } + else { + sslcolor = COL_RED; + } + + strftime(timestr, sizeof(timestr), "%Y-%m-%d %H:%M:%S UTC", gmtime((time_t *)&crec->sslexpires)); + if (crec->sslexpires >= now) + sprintf(msgtext, "SSL certificate for %s expires in %d days (%s)\n", cn, (int)((crec->sslexpires - now) / (24*60*60)), timestr); + else + sprintf(msgtext, "SSL certificate for %s expired %d days ago (%s)\n", cn, (int)((now - crec->sslexpires) / (24*60*60)), timestr); + add_multi_item(multiitem, sslcolor, msgtext); + + sprintf(msgtext, "Server certificate for %s\n", testspec); + addtobuffer(multiitem->detailtext, msgtext); + sprintf(msgtext, "\tSubject: %s\n", crec->sslsubject); + addtobuffer(multiitem->detailtext, msgtext); + sprintf(msgtext, "\tIssuer: %s\n", crec->sslissuer); + addtobuffer(multiitem->detailtext, msgtext); + strftime(timestr, sizeof(timestr), "%Y-%m-%d %H:%M:%S UTC", gmtime((time_t *)&crec->sslstart)); + sprintf(msgtext, "\tValid from: %s\n", timestr); + addtobuffer(multiitem->detailtext, msgtext); + strftime(timestr, sizeof(timestr), "%Y-%m-%d %H:%M:%S UTC", gmtime((time_t *)&crec->sslexpires)); + sprintf(msgtext, "\tValid until: %s\n", timestr); + addtobuffer(multiitem->detailtext, msgtext); + sprintf(msgtext, "\tKeysize: %d\n", crec->sslkeysize); + addtobuffer(multiitem->detailtext, msgtext); + addtobuffer(multiitem->detailtext, "\n"); + + xfree(dupsubj); + } + switch (crec->handler) { case NC_HANDLER_HTTP: case NC_HANDLER_LDAP: case NC_HANDLER_DNS: { char *testname; + multistatus_t *multiitem = NULL; + int color = COL_GREEN; + switch (crec->handler) { - case NC_HANDLER_HTTP: testname = "http"; break; - case NC_HANDLER_LDAP: testname = "ldap"; break; - case NC_HANDLER_DNS: testname = "dns"; break; - default: break; + case NC_HANDLER_HTTP: + multiitem = init_multi(&mhead, "http", crec->interval, "Web check OK", "Web check warning", "Web check failed"); + break; + case NC_HANDLER_LDAP: + multiitem = init_multi(&mhead, "ldap", crec->interval, "LDAP Web check OK", "LDAP Web check warning", "LDAP check failed"); + break; + case NC_HANDLER_DNS: + multiitem = init_multi(&mhead, "dns", crec->interval, "DNS Lookup OK", "DNS lookup warning", "DNS lookup failed"); + break; + default: + break; } color = decide_color(crec, @@ -374,18 +437,12 @@ if ((crec->handler == NC_HANDLER_LDAP) && (color == COL_RED) && (xmh_item(hwalk, XMH_FLAG_LDAPFAILYELLOW))) color = COL_YELLOW; - init_status(color); - sprintf(msgline, "status+%d %s.%s %s %s\n", - crec->interval/10, xmh_item(hwalk, XMH_HOSTNAME), testname, colorname(color), timestamp); - addtostatus(msgline); + sprintf(msgline, "%s - %s\n", testspec, ((color != COL_GREEN) ? "failed" : "OK")); + add_multi_item(multiitem, color, msgline); - sprintf(msgline, "\n&%s %s - %s\n\n", colorname(color), testspec, ((color != COL_GREEN) ? "failed" : "OK")); - addtostatus(msgline); - - if (crec->plainlog) addtostatus(crec->plainlog); switch (crec->handler) { case NC_HANDLER_HTTP: - if (crec->httpheaders) addtostatus(crec->httpheaders); + if (crec->httpheaders) addtobuffer(multiitem->detailtext, crec->httpheaders); // if (crec->httpbody) addtostatus(crec->httpbody); break; @@ -393,14 +450,14 @@ break; } + if (crec->plainlog) addtobuffer(multiitem->detailtext, crec->plainlog); + sprintf(msgtext, "\nTarget : %s port %d\n", crec->targetip, crec->targetport); - addtostatus(msgtext); + addtobuffer(multiitem->detailtext, msgtext); sprintf(msgtext, "\nSeconds: %.3f\n", crec->elapsedms / 1000); - addtostatus(msgtext); + addtobuffer(multiitem->detailtext, msgtext); - addtostatus("\n"); - finish_status(); crec->sent = 1; } break; @@ -420,6 +477,7 @@ default: { + int color = COL_GREEN; char flags[5]; flags[0] = (isdialup ? 'D' : 'd'); @@ -435,11 +493,12 @@ isforced, failgoesclear, causetext); + /* Validity = 6*(interval in minutes) = 6*(interval/(1000*60)) = interval/10000 */ init_status(color); sprintf(msgline, "status+%d %s.%s %s <!-- [flags:%s] --> %s %s %s ", - crec->interval/10, xmh_item(hwalk, XMH_HOSTNAME), testspec, colorname(color), - flags, timestamp, testspec, - ( ((color == COL_RED) || (color == COL_YELLOW)) ? "NOT ok" : "ok")); + crec->interval/10000, xmh_item(hwalk, XMH_HOSTNAME), testspec, colorname(color), + flags, timestamp, testspec, + (((color == COL_RED) || (color == COL_YELLOW)) ? "NOT ok" : "ok") ); if (crec->status == NC_STATUS_RESOLVERROR) { strcat(msgline, ": DNS lookup failed"); @@ -503,6 +562,8 @@ break; } } + + finish_multi(mhead, xmh_item(hwalk, XMH_HOSTNAME)); } combo_end(); @@ -521,7 +582,7 @@ int argi, seq; struct timespec timeout; time_t nextconfigload = 0; - int usebackfeedqueue = 0; + int usebackfeedqueue = 0, alwaysflush = 0; libxymon_init(argv[0]); @@ -530,6 +591,9 @@ if (standardoption(argv[argi])) { if (showhelp) return 0; } + else if (strcmp(argv[argi], "--flush") == 0) { + alwaysflush = 1; + } } usebackfeedqueue = (sendmessage_init_local() > 0); @@ -660,7 +724,7 @@ handle_netcollect_client(hostname, clientclass, os, hinfo, sender, timestamp, restofmsg); anychanges = 1; - if ((lastupdatesent + MINIMUM_UPDATE_INTERVAL) < gettimer()) { + if (alwaysflush || ((lastupdatesent + MINIMUM_UPDATE_INTERVAL) < gettimer())) { netcollect_generate_updates(usebackfeedqueue); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <st...@us...> - 2013-08-11 10:57:57
|
Revision: 7276 http://sourceforge.net/p/xymon/code/7276 Author: storner Date: 2013-08-11 10:57:52 +0000 (Sun, 11 Aug 2013) Log Message: ----------- xymond_netcollect: Dont convert interval to secs twice. Make http status look like a v4 status, so we dont need to change the RRD handler. Modified Paths: -------------- trunk/xymond/xymond_netcollect.c Modified: trunk/xymond/xymond_netcollect.c =================================================================== --- trunk/xymond/xymond_netcollect.c 2013-08-11 10:56:39 UTC (rev 7275) +++ trunk/xymond/xymond_netcollect.c 2013-08-11 10:57:52 UTC (rev 7276) @@ -150,7 +150,7 @@ else if (argnmatch(bol, "HTTPbody: ")) rec->httpbody = sizedstr(bol, eoln); else if (argnmatch(bol, "HTTPstatus: ")) rec->httpstatus = atoi(strchr(bol, ':') + 2); else if (argnmatch(bol, "ElapsedMS: ")) rec->elapsedms = atof(strchr(bol, ':') + 2); - else if (argnmatch(bol, "IntervalMS: ")) rec->interval = atoi(strchr(bol, ':') + 2) / 1000; + else if (argnmatch(bol, "IntervalMS: ")) rec->interval = atoi(strchr(bol, ':') + 2); else if (argnmatch(bol, "TargetIP: ")) rec->targetip = strdup(strchr(bol, ':') + 2); else if (argnmatch(bol, "TargetPort: ")) rec->targetport = atoi(strchr(bol, ':') + 2); else if (argnmatch(bol, "NTPstratum: ")) rec->ntpstratum = atoi(strchr(bol, ':') + 2); @@ -442,6 +442,8 @@ switch (crec->handler) { case NC_HANDLER_HTTP: + sprintf(msgline, "&%s %s\n\n", colorname(color), testspec); + addtobuffer(multiitem->detailtext, msgline); if (crec->httpheaders) addtobuffer(multiitem->detailtext, crec->httpheaders); // if (crec->httpbody) addtostatus(crec->httpbody); break; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <st...@us...> - 2013-08-12 16:03:23
|
Revision: 7280 http://sourceforge.net/p/xymon/code/7280 Author: storner Date: 2013-08-12 16:03:19 +0000 (Mon, 12 Aug 2013) Log Message: ----------- xymond_netcollect: Add ssldays / sslkeysize / nosslcert support in SSL checks. Add HIDEHTTP support in webtest report. Modified Paths: -------------- trunk/xymond/xymond_netcollect.c Modified: trunk/xymond/xymond_netcollect.c =================================================================== --- trunk/xymond/xymond_netcollect.c 2013-08-12 15:57:08 UTC (rev 7279) +++ trunk/xymond/xymond_netcollect.c 2013-08-12 16:03:19 UTC (rev 7280) @@ -351,36 +351,58 @@ } } - if (crec->sslsubject) { + if (!xmh_item(hwalk, XMH_FLAG_NOSSLCERT) && crec->sslsubject) { char *dupsubj = strdup(crec->sslsubject); - char *cn, *tokr; + char *cn, *tokr, *val; time_t now; char timestr[30]; multistatus_t *multiitem; - int sslcolor = COL_GREEN; + int sslcolor = COL_GREEN, kscolor = COL_GREEN; + int sslwarndays = 30, sslcriticaldays = 10, sslkeysize = 0; + val = xmh_item(hwalk, XMH_SSLDAYS); + if (val) { + sslwarndays = atoi(val); /* Stops at colon */ + val = strchr(val, ':'); + if (val) sslcriticaldays = atoi(val+1); + } + + val = xmh_item(hwalk, XMH_SSLMINIMUMKEYSIZE); + if (val) sslkeysize = atoi(val); + multiitem = init_multi(&mhead, "sslcert", crec->interval, "SSL certificate(s) OK", "SSL certificate(s) about to expire", "SSL certificate(s) expire immediately"); cn = strtok_r(dupsubj, "/", &tokr); while (cn && (strncmp(cn, "CN=", 3) != 0)) cn = strtok_r(NULL, "/", &tokr); now = getcurrenttime(NULL); - if ((crec->sslexpires - now) >= 30*24*60*60) { + if ((crec->sslexpires - now) >= sslwarndays*24*60*60) { sslcolor = COL_GREEN; } - else if ((crec->sslexpires - now) >= 10*24*60*60) { + else if ((crec->sslexpires - now) >= sslcriticaldays*24*60*60) { sslcolor = COL_YELLOW; } else { sslcolor = COL_RED; } - strftime(timestr, sizeof(timestr), "%Y-%m-%d %H:%M:%S UTC", gmtime((time_t *)&crec->sslexpires)); + if ((crec->sslkeysize > 0) && (sslkeysize != 0)) { + if (crec->sslkeysize < abs(sslkeysize)) { + kscolor = (sslkeysize < 0) ? COL_RED : COL_YELLOW; + } + } + if (crec->sslexpires >= now) - sprintf(msgtext, "SSL certificate for %s expires in %d days (%s)\n", cn, (int)((crec->sslexpires - now) / (24*60*60)), timestr); + sprintf(msgtext, "SSL certificate for %s expires in %d days.", cn, (int)((crec->sslexpires - now) / (24*60*60))); else - sprintf(msgtext, "SSL certificate for %s expired %d days ago (%s)\n", cn, (int)((now - crec->sslexpires) / (24*60*60)), timestr); + sprintf(msgtext, "SSL certificate for %s expired %d days ago.", cn, (int)((now - crec->sslexpires) / (24*60*60))); + + if (kscolor != COL_GREEN) { + if (sslcolor < kscolor) sslcolor = kscolor; + sprintf(msgtext + strlen(msgtext), " SSL key is only %d bits (require %d).", crec->sslkeysize, abs(sslkeysize)); + } + strcat(msgtext, "\n"); add_multi_item(multiitem, sslcolor, msgtext); sprintf(msgtext, "Server certificate for %s\n", testspec); @@ -395,8 +417,10 @@ strftime(timestr, sizeof(timestr), "%Y-%m-%d %H:%M:%S UTC", gmtime((time_t *)&crec->sslexpires)); sprintf(msgtext, "\tValid until: %s\n", timestr); addtobuffer(multiitem->detailtext, msgtext); - sprintf(msgtext, "\tKeysize: %d\n", crec->sslkeysize); - addtobuffer(multiitem->detailtext, msgtext); + if (crec->sslkeysize > 0) { + sprintf(msgtext, "\tKeysize: %d\n", crec->sslkeysize); + addtobuffer(multiitem->detailtext, msgtext); + } addtobuffer(multiitem->detailtext, "\n"); xfree(dupsubj); @@ -442,6 +466,8 @@ switch (crec->handler) { case NC_HANDLER_HTTP: + if (xmh_item(hwalk, XMH_FLAG_HIDEHTTP)) break; + sprintf(msgline, "&%s %s\n\n", colorname(color), testspec); addtobuffer(multiitem->detailtext, msgline); if (crec->httpheaders) addtobuffer(multiitem->detailtext, crec->httpheaders); @@ -449,11 +475,10 @@ break; default: + if (crec->plainlog) addtobuffer(multiitem->detailtext, crec->plainlog); break; } - if (crec->plainlog) addtobuffer(multiitem->detailtext, crec->plainlog); - sprintf(msgtext, "\nTarget : %s port %d\n", crec->targetip, crec->targetport); addtobuffer(multiitem->detailtext, msgtext); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <st...@us...> - 2013-08-17 21:06:41
|
Revision: 7287 http://sourceforge.net/p/xymon/code/7287 Author: storner Date: 2013-08-17 21:06:39 +0000 (Sat, 17 Aug 2013) Log Message: ----------- xymond_netcollect: Collector name change has to be implemented here as well, or no ping data Modified Paths: -------------- trunk/xymond/xymond_netcollect.c Modified: trunk/xymond/xymond_netcollect.c =================================================================== --- trunk/xymond/xymond_netcollect.c 2013-08-17 16:16:47 UTC (rev 7286) +++ trunk/xymond/xymond_netcollect.c 2013-08-17 21:06:39 UTC (rev 7287) @@ -742,7 +742,7 @@ dbgprintf("Client report from host %s\n", (hostname ? hostname : "<unknown>")); /* Check if we are running a collector module for this type of client */ - if (!collectorid || ((strcmp(collectorid, "xymonnet2") != 0) && (strcmp(collectorid, "netmodule") != 0))) continue; + if (!collectorid || ((strcmp(collectorid, "xymonnet2") != 0) && (strncmp(collectorid, "netmodule.", 10) != 0))) continue; hinfo = hostinfo(hostname); if (!hinfo) continue; os = get_ostype(clientos); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <st...@us...> - 2013-08-18 10:00:33
|
Revision: 7291 http://sourceforge.net/p/xymon/code/7291 Author: storner Date: 2013-08-18 10:00:25 +0000 (Sun, 18 Aug 2013) Log Message: ----------- xymond_netcollect: Handle multi-IP ping checks Modified Paths: -------------- trunk/xymond/xymond_netcollect.c Modified: trunk/xymond/xymond_netcollect.c =================================================================== --- trunk/xymond/xymond_netcollect.c 2013-08-18 06:02:18 UTC (rev 7290) +++ trunk/xymond/xymond_netcollect.c 2013-08-18 10:00:25 UTC (rev 7291) @@ -30,8 +30,11 @@ char *targetip; int targetport; enum { NC_STATUS_UNKNOWN, NC_STATUS_OK, NC_STATUS_FAILED, NC_STATUS_TIMEOUT, NC_STATUS_RESOLVERROR, NC_STATUS_SSLERROR, NC_STATUS_BADDATA } status; - enum { NC_HANDLER_PING, NC_HANDLER_PLAIN, NC_HANDLER_HTTP, NC_HANDLER_DNS, NC_HANDLER_NTP, NC_HANDLER_LDAP, NC_HANDLER_RPC, NC_HANDLER_APACHE } handler; + enum { NC_HANDLER_UNKNOWN, NC_HANDLER_PING, NC_HANDLER_PLAIN, NC_HANDLER_HTTP, NC_HANDLER_DNS, NC_HANDLER_NTP, NC_HANDLER_LDAP, NC_HANDLER_RPC, NC_HANDLER_APACHE, NC_HANDLER_EXTERNAL } handler; float elapsedms; + enum { NC_PINGTYPE_BEST, NC_PINGTYPE_WORST } pingtype; + int pingtotalcount, pingokcount; + strbuffer_t *pingdetails; char *sslsubject, *sslissuer, *ssldetails; time_t sslstart, sslexpires; int sslkeysize; @@ -93,26 +96,48 @@ onetest = nextsection_r(clientdata, &testspec, &ns1var, &ns1sects); while (onetest) { connectresult_t *rec; - char *bol, *eoln; + char *bol, *eoln, *testspecnoflags; + int ispingtest; - handle = xtreeFind(hrec->results, testspec); - if (handle == xtreeEnd(hrec->result)) { - rec = (connectresult_t *)calloc(1, sizeof(connectresult_t)); - rec->testspec = strdup(testspec); - xtreeAdd(hrec->results, rec->testspec, rec); + testspecnoflags = testspec + strspn(testspec, "?!~"); + ispingtest = ((strcmp(testspecnoflags, "ping") == 0) || (strncmp(testspecnoflags, "conn", 4) == 0)); + + if (ispingtest && hrec->ping) { + rec = hrec->ping; } else { - rec = (connectresult_t *)xtreeData(hrec->results, handle); + handle = xtreeFind(hrec->results, testspec); + if (handle == xtreeEnd(hrec->result)) { + rec = (connectresult_t *)calloc(1, sizeof(connectresult_t)); + rec->testspec = strdup(ispingtest ? "ping" : testspec); + xtreeAdd(hrec->results, rec->testspec, rec); + } + else { + rec = (connectresult_t *)xtreeData(hrec->results, handle); + } } - if (strcmp(testspec, "ping") == 0) hrec->ping = rec; + if (ispingtest) { + if (!hrec->ping) hrec->ping = rec; + if (!rec->pingdetails) rec->pingdetails = newstrbuffer(0); + if (rec->sent) { + rec->pingtotalcount = rec->pingokcount = 0; + rec->pingtype = NC_PINGTYPE_BEST; + clearstrbuffer(rec->pingdetails); + } + + if (strncmp(testspec, "conn=worst", 10) == 0) rec->pingtype = NC_PINGTYPE_WORST; + rec->pingtotalcount++; + } + + rec->handler = NC_HANDLER_UNKNOWN; rec->status = NC_STATUS_UNKNOWN; if (rec->sslsubject) xfree(rec->sslsubject); if (rec->plainlog) xfree(rec->plainlog); if (rec->httpheaders) xfree(rec->httpheaders); if (rec->httpbody) xfree(rec->httpbody); - rec->elapsedms = 0.0; rec->sslexpires = 0; rec->httpstatus = 0; rec->redirects = 0; rec->ntpstratum = 0; rec->ntpoffset = 0.0; rec->interval = 0; + rec->elapsedms = 0.0; rec->sslexpires = 0; rec->httpstatus = 0; rec->redirects = 0; rec->ntpstratum = 0; rec->ntpoffset = 0.0; rec->interval = 0; rec->sent = 0; bol = onetest; @@ -121,23 +146,24 @@ if (argnmatch(bol, "Status: ")) { char *s = strchr(bol, ':') + 2; - if (strcmp(s, "OK") == 0) rec->status = NC_STATUS_OK; - else if (strcmp(s, "CONN_FAILED") == 0) rec->status = NC_STATUS_FAILED; - else if (strcmp(s, "CONN_TIMEOUT") == 0) rec->status = NC_STATUS_TIMEOUT; + if (strcmp(s, "OK") == 0) rec->status = NC_STATUS_OK; + else if (strcmp(s, "CONN_FAILED") == 0) rec->status = NC_STATUS_FAILED; + else if (strcmp(s, "CONN_TIMEOUT") == 0) rec->status = NC_STATUS_TIMEOUT; else if (strcmp(s, "BADSSLHANDSHAKE") == 0) rec->status = NC_STATUS_SSLERROR; - else if (strcmp(s, "CANNOT_RESOLVE") == 0) rec->status = NC_STATUS_RESOLVERROR; - else if (strcmp(s, "BADDATA") == 0) rec->status = NC_STATUS_BADDATA; - else if (strcmp(s, "INTERRUPTED") == 0) rec->status = NC_STATUS_FAILED; - else if (strcmp(s, "MODULE_FAILED") == 0) rec->status = NC_STATUS_FAILED; + else if (strcmp(s, "CANNOT_RESOLVE") == 0) rec->status = NC_STATUS_RESOLVERROR; + else if (strcmp(s, "BADDATA") == 0) rec->status = NC_STATUS_BADDATA; + else if (strcmp(s, "INTERRUPTED") == 0) rec->status = NC_STATUS_FAILED; + else if (strcmp(s, "MODULE_FAILED") == 0) rec->status = NC_STATUS_FAILED; } else if (argnmatch(bol, "Handler: ")) { char *s = strchr(bol, ':') + 2; - if (strcmp(s, "plain") == 0) rec->handler = NC_HANDLER_PLAIN; - else if (strcmp(s, "ntp") == 0) rec->handler = NC_HANDLER_NTP; - else if (strcmp(s, "dns") == 0) rec->handler = NC_HANDLER_DNS; - else if (strcmp(s, "ping") == 0) rec->handler = NC_HANDLER_PING; - else if (strcmp(s, "ldap") == 0) rec->handler = NC_HANDLER_LDAP; + if (strcmp(s, "plain") == 0) rec->handler = NC_HANDLER_PLAIN; + else if (strcmp(s, "ntp") == 0) rec->handler = NC_HANDLER_NTP; + else if (strcmp(s, "dns") == 0) rec->handler = NC_HANDLER_DNS; + else if (strcmp(s, "ping") == 0) rec->handler = NC_HANDLER_PING; + else if (strcmp(s, "ldap") == 0) rec->handler = NC_HANDLER_LDAP; + else if (strcmp(s, "external") == 0) rec->handler = NC_HANDLER_EXTERNAL; else if (strcmp(s, "http") == 0) rec->handler = ((strncmp(testspec, "apache", 6) == 0) ? NC_HANDLER_APACHE : NC_HANDLER_HTTP); } else if (argnmatch(bol, "PeerCertificateSubject: ")) rec->sslsubject = strdup(strchr(bol, ':') + 2); @@ -158,10 +184,25 @@ else if (argnmatch(bol, "NTPstratum: ")) rec->ntpstratum = atoi(strchr(bol, ':') + 2); else if (argnmatch(bol, "NTPoffset: ")) rec->ntpoffset = atof(strchr(bol, ':') + 2); + if (eoln) *eoln = '\n'; bol = (eoln ? eoln+1 : NULL); } + + if (rec->handler == NC_HANDLER_PING) { + char pinginfo[1024]; + + if (rec->status == NC_STATUS_OK) { + snprintf(pinginfo, sizeof(pinginfo), "Target %s up (%.3f seconds)\n", rec->targetip, rec->elapsedms / 1000); + rec->pingokcount++; + } + else { + snprintf(pinginfo, sizeof(pinginfo), "Target %s down (%.3f seconds)\n", rec->targetip, rec->elapsedms / 1000); + } + addtobuffer(rec->pingdetails, pinginfo); + } + sectiondone: onetest = nextsection_r(NULL, &testspec, &ns1var, &ns1sects); } @@ -195,11 +236,19 @@ return COL_CLEAR; } + /* Modify status according to the pingtype (best | worst) and the number of OK ping's versus total # of ping's */ + if ((crec->pingtype == NC_PINGTYPE_WORST) && (crec->pingokcount != crec->pingtotalcount)) { + crec->status = NC_STATUS_FAILED; + } + else { + crec->status = NC_STATUS_OK; + } + /* Red if (STATUS=OK, reverse=1) or (status=FAILED, reverse=0) */ switch (crec->status) { case NC_STATUS_OK: if (isreverse) { - sprintf(cause, "Host does respond to ping"); + sprintf(cause, "Host responds to ping on %d of %d IP's tested", crec->pingokcount, crec->pingtotalcount); color = COL_RED; } break; @@ -208,7 +257,7 @@ case NC_STATUS_TIMEOUT: case NC_STATUS_BADDATA: if (!isreverse) { - sprintf(cause, "Host does not respond to ping"); + sprintf(cause, "Host responds to ping on %d of %d IP's tested", crec->pingokcount, crec->pingtotalcount); color = COL_RED; } break; @@ -223,36 +272,6 @@ color = COL_CLEAR; break; } -#if 0 - if (test->host->extrapings) { - /* Host with many pings */ - int totalcount = 1; - int okcount = test->open; - ipping_t *walk; - - for (walk = test->host->extrapings->iplist; (walk); walk = walk->next) { - if (walk->open) okcount++; - totalcount++; - } - - switch (test->host->extrapings->matchtype) { - case MULTIPING_BEST: - if (okcount == 0) { - color = COL_RED; - sprintf(cause, "Host does not respond to ping on any of %d IP's", - totalcount); - } - break; - case MULTIPING_WORST: - if (okcount < totalcount) { - color = COL_RED; - sprintf(cause, "Host responds to ping on %d of %d IP's", - okcount, totalcount); - } - break; - } - } -#endif } else { /* TCP test */ @@ -504,7 +523,10 @@ } break; - default: + case NC_HANDLER_PING: + case NC_HANDLER_PLAIN: + case NC_HANDLER_NTP: + case NC_HANDLER_RPC: { int color = COL_GREEN; char flags[5]; @@ -540,6 +562,10 @@ strcat(msgtext, "OK "); strcat(msgtext, (isreverse ? "(down)" : "(up)")); strcat(msgtext, "\n"); + if (*causetext) { + strcat(msgtext, causetext); + strcat(msgtext, "\n"); + } break; case COL_RED: case COL_YELLOW: @@ -575,10 +601,16 @@ addtostatus("\n"); addtostatus(crec->plainlog); addtostatus("\n"); } - sprintf(msgtext, "\nTarget : %s", crec->targetip); - if (hrec->ping != crec) sprintf(msgtext+strlen(msgtext), " port %d", crec->targetport); - strcat(msgtext, "\n"); - addtostatus(msgtext); + if (hrec->ping != crec) { + sprintf(msgtext, "\nTarget : %s", crec->targetip); + if (hrec->ping != crec) sprintf(msgtext+strlen(msgtext), " port %d", crec->targetport); + strcat(msgtext, "\n"); + addtostatus(msgtext); + } + else { + addtostatus("\n"); + addtostrstatus(crec->pingdetails); + } sprintf(msgtext, "\nSeconds: %.3f\n", crec->elapsedms / 1000); addtostatus(msgtext); @@ -589,6 +621,9 @@ crec->sent = 1; } break; + + default: + break; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <st...@us...> - 2013-08-18 16:59:07
|
Revision: 7294 http://sourceforge.net/p/xymon/code/7294 Author: storner Date: 2013-08-18 16:59:05 +0000 (Sun, 18 Aug 2013) Log Message: ----------- xymond_netcollect: Oops, 'pingisdown' test was reversed Modified Paths: -------------- trunk/xymond/xymond_netcollect.c Modified: trunk/xymond/xymond_netcollect.c =================================================================== --- trunk/xymond/xymond_netcollect.c 2013-08-18 16:50:12 UTC (rev 7293) +++ trunk/xymond/xymond_netcollect.c 2013-08-18 16:59:05 UTC (rev 7294) @@ -367,7 +367,7 @@ freestrbuffer(pingdetails); - pingisdown = (pingokcount > 0); + pingisdown = (pingokcount == 0); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <st...@us...> - 2013-08-18 17:33:05
|
Revision: 7295 http://sourceforge.net/p/xymon/code/7295 Author: storner Date: 2013-08-18 17:33:01 +0000 (Sun, 18 Aug 2013) Log Message: ----------- netcollect: Minor ldap report typo Modified Paths: -------------- trunk/xymond/xymond_netcollect.c Modified: trunk/xymond/xymond_netcollect.c =================================================================== --- trunk/xymond/xymond_netcollect.c 2013-08-18 16:59:05 UTC (rev 7294) +++ trunk/xymond/xymond_netcollect.c 2013-08-18 17:33:01 UTC (rev 7295) @@ -486,7 +486,7 @@ multiitem = init_multi(&mhead, "http", crec->interval, "Web check OK", "Web check warning", "Web check failed"); break; case NC_HANDLER_LDAP: - multiitem = init_multi(&mhead, "ldap", crec->interval, "LDAP Web check OK", "LDAP Web check warning", "LDAP check failed"); + multiitem = init_multi(&mhead, "ldap", crec->interval, "LDAP check OK", "LDAP check warning", "LDAP check failed"); break; case NC_HANDLER_DNS: multiitem = init_multi(&mhead, "dns", crec->interval, "DNS Lookup OK", "DNS lookup warning", "DNS lookup failed"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <st...@us...> - 2013-09-01 17:06:38
|
Revision: 7309 http://sourceforge.net/p/xymon/code/7309 Author: storner Date: 2013-09-01 17:06:29 +0000 (Sun, 01 Sep 2013) Log Message: ----------- xymond_netcollect: Show the generic URL in test result, instead of the xymon test-spec Modified Paths: -------------- trunk/xymond/xymond_netcollect.c Modified: trunk/xymond/xymond_netcollect.c =================================================================== --- trunk/xymond/xymond_netcollect.c 2013-09-01 16:51:00 UTC (rev 7308) +++ trunk/xymond/xymond_netcollect.c 2013-09-01 17:06:29 UTC (rev 7309) @@ -601,12 +601,14 @@ multistatus_t *multiitem = NULL; int color = COL_GREEN; weburl_t webspec; + char *testdescription = sourcespec; strcpy(causetext, "OK"); switch (crec->handler) { case NC_HANDLER_HTTP: decode_url(sourcespec, &webspec); + testdescription = webspec.desturl->origform; multiitem = init_multi(&mhead, (webspec.columnname ? webspec.columnname : "http"), crec->interval, "Web check OK", "Web check warning", "Web check failed"); break; case NC_HANDLER_LDAP: @@ -634,13 +636,13 @@ break; } - sprintf(msgline, "%s - %s\n", sourcespec, causetext); + sprintf(msgline, "%s - %s\n", testdescription, causetext); if (add_multi_item(multiitem, color, msgline) == 0) { switch (crec->handler) { case NC_HANDLER_HTTP: if (xmh_item(hwalk, XMH_FLAG_HIDEHTTP)) break; - sprintf(msgline, "&%s %s\n\n", colorname(color), sourcespec); + sprintf(msgline, "&%s %s\n\n", colorname(color), testdescription); addtobuffer(multiitem->detailtext, msgline); if (crec->httpheaders) addtobuffer(multiitem->detailtext, crec->httpheaders); if (crec->httpbody && webspec.columnname) addtobuffer(multiitem->detailtext, crec->httpbody); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |