Code

check_pgsql: Determine connection time in µs-resolution.
[nagiosplug.git] / plugins / check_pgsql.c
index aa65fb2f10fdb47c153f1f264ef0224ab96f3ca2..4ab28eabeb07e7b4c9693e2b8bf374b14e9f9d24 100644 (file)
@@ -3,7 +3,7 @@
 * Nagios check_pgsql plugin
 * 
 * License: GPL
-* Copyright (c) 1999-2007 Nagios Plugins Development Team
+* Copyright (c) 1999-2011 Nagios Plugins Development Team
 * 
 * Description:
 * 
@@ -29,7 +29,7 @@
 *****************************************************************************/
 
 const char *progname = "check_pgsql";
-const char *copyright = "1999-2007";
+const char *copyright = "1999-2011";
 const char *email = "nagiosplug-devel@lists.sourceforge.net";
 
 #include "common.h"
@@ -147,7 +147,9 @@ main (int argc, char **argv)
        PGconn *conn;
        char *conninfo = NULL;
 
-       int elapsed_time;
+       struct timeval start_timeval;
+       struct timeval end_timeval;
+       double elapsed_time;
        int status = STATE_UNKNOWN;
        int query_status = STATE_UNKNOWN;
 
@@ -199,13 +201,19 @@ main (int argc, char **argv)
                asprintf (&conninfo, "%s password = '%s'", conninfo, pgpasswd);
 
        /* make a connection to the database */
-       time (&start_time);
+       gettimeofday (&start_timeval, NULL);
        conn = PQconnectdb (conninfo);
-       time (&end_time);
-       elapsed_time = (int) (end_time - start_time);
+       gettimeofday (&end_timeval, NULL);
+
+       while (start_timeval.tv_usec > end_timeval.tv_usec) {
+               --end_timeval.tv_sec;
+               end_timeval.tv_usec += 1000000;
+       }
+       elapsed_time = (double)(end_timeval.tv_sec - start_timeval.tv_sec)
+               + (double)(end_timeval.tv_usec - start_timeval.tv_usec) / 1000000.0;
 
        if (verbose)
-               printf("Time elapsed: %d\n", elapsed_time);
+               printf("Time elapsed: %f\n", elapsed_time);
 
        /* check to see that the backend connection was successfully made */
        if (verbose)
@@ -239,10 +247,10 @@ main (int argc, char **argv)
                                PQprotocolVersion (conn), PQbackendPID (conn));
        }
 
-       printf (_(" %s - database %s (%d sec.)|%s\n"),
+       printf (_(" %s - database %s (%f sec.)|%s\n"),
                state_text(status), dbName, elapsed_time,
                fperfdata("time", elapsed_time, "s",
-                        (int)twarn, twarn, (int)tcrit, tcrit, TRUE, 0, FALSE,0));
+                        !!(twarn > 0.0), twarn, !!(tcrit > 0.0), tcrit, TRUE, 0, FALSE,0));
 
        if (pgquery)
                query_status = do_query (conn, pgquery);
@@ -634,7 +642,7 @@ do_query (PGconn *conn, char *query)
                                                ? _("CRITICAL")
                                                : _("UNKNOWN"));
        printf (_("'%s' returned %f"), query, value);
-       printf ("|query=%f;%s;%s;0\n", value,
+       printf ("|query=%f;%s;%s;;\n", value,
                        query_warning ? query_warning : "",
                        query_critical ? query_critical : "");
        return my_status;