summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 931a471)
raw | patch | inline | side by side (parent: 931a471)
author | Florian Forster <sifnfors@faui02f.informatik.uni-erlangen.de> | |
Wed, 31 Jan 2007 15:22:37 +0000 (16:22 +0100) | ||
committer | Florian Forster <sifnfors@faui02f.informatik.uni-erlangen.de> | |
Wed, 31 Jan 2007 15:22:37 +0000 (16:22 +0100) |
src/ntpd.c | patch | blob | history |
diff --git a/src/ntpd.c b/src/ntpd.c
index e37b3a1cefad037e286dd4bde0cd640940740898..366c24b485f61939c4646bf1755245e2f7349c47 100644 (file)
--- a/src/ntpd.c
+++ b/src/ntpd.c
/**
* collectd - src/ntpd.c
- * Copyright (C) 2006 Florian octo Forster
+ * Copyright (C) 2006-2007 Florian octo Forster
*
* 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
#include "configfile.h"
#include "utils_debug.h"
-#define MODULE_NAME "ntpd"
-
#if HAVE_SYS_SOCKET_H
# define NTPD_HAVE_READ 1
#else
# include <poll.h>
#endif
-static char *config_keys[] =
+static data_source_t seconds_dsrc[1] =
{
- "Host",
- "Port",
- NULL
+ {"seconds", DS_TYPE_GAUGE, -1000000.0, 1000000.0}
+};
+
+static data_set_t time_offset_ds =
+{
+ "time_offset", 1, seconds_dsrc
};
-static int config_keys_num = 2;
-/* drift */
-static char *time_offset_file = "ntpd/time_offset-%s.rrd";
-static char *time_dispersion_file = "ntpd/time_dispersion-%s.rrd";
-static char *time_delay_file = "ntpd/delay-%s.rrd";
+static data_set_t time_dispersion_ds =
+{
+ "time_dispersion", 1, seconds_dsrc
+};
-/* used for `time_offset', `time_dispersion', and `delay' */
-static char *sec_ds_def[] =
+static data_set_t delay_ds =
{
- "DS:seconds:GAUGE:"COLLECTD_HEARTBEAT":-1000000:1000000",
- NULL
+ "delay", 1, seconds_dsrc
+};
+
+static data_source_t ppm_dsrc[1] =
+{
+ {"ppm", DS_TYPE_GAUGE, -1000000.0, 1000000.0}
};
-static int sec_ds_num = 1;
-static char *frequency_offset_file = "ntpd/frequency_offset-%s.rrd";
-static char *frequency_offset_ds_def[] =
+static data_set_t frequency_offset_ds =
{
- "DS:ppm:GAUGE:"COLLECTD_HEARTBEAT":-1000000:1000000",
+ "frequency_offset", 1, ppm_dsrc
+};
+
+static const char *config_keys[] =
+{
+ "Host",
+ "Port",
NULL
};
-static int frequency_offset_ds_num = 1;
+static int config_keys_num = 2;
#if NTPD_HAVE_READ
# define NTPD_DEFAULT_HOST "localhost"
static int sock_descr = -1;
static char *ntpd_host = NULL;
static char *ntpd_port = NULL;
-#endif
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* The following definitions were copied from the NTPd distribution *
* End of the copied stuff.. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-static int ntpd_config (char *key, char *value)
+static int ntpd_config (const char *key, const char *value)
{
if (strcasecmp (key, "host") == 0)
{
return (0);
}
-static void ntpd_init (void)
+static void ntpd_submit (char *type, char *type_inst, double value)
{
- return;
-}
+ value_t values[1];
+ value_list_t vl = VALUE_LIST_INIT;
-static void ntpd_write_sec (char *host, char *inst, char *val, char *file)
-{
- char buf[256];
- int status;
+ values[0].gauge = value;
- status = snprintf (buf, 256, file, inst);
- if ((status < 1) || (status >= 256))
- return;
+ vl.values = values;
+ vl.values_len = 1;
+ vl.time = time (NULL);
+ strcpy (vl.host, hostname);
+ strcpy (vl.plugin, "ntpd");
+ strcpy (vl.plugin_instance, "");
+ strncpy (vl.type_instance, type_inst, sizeof (vl.type_instance));
- rrd_update_file (host, buf, val,
- sec_ds_def, sec_ds_num);
-}
-
-static void ntpd_write_time_offset (char *host, char *inst, char *val)
-{
- ntpd_write_sec (host, inst, val, time_offset_file);
-}
-
-static void ntpd_write_time_dispersion (char *host, char *inst, char *val)
-{
- ntpd_write_sec (host, inst, val, time_dispersion_file);
-}
-
-static void ntpd_write_delay (char *host, char *inst, char *val)
-{
- ntpd_write_sec (host, inst, val, time_delay_file);
-}
-
-static void ntpd_write_frequency_offset (char *host, char *inst, char *val)
-{
- char buf[256];
- int status;
-
- status = snprintf (buf, 256, frequency_offset_file, inst);
- if ((status < 1) || (status >= 256))
- return;
-
- rrd_update_file (host, buf, val,
- frequency_offset_ds_def, frequency_offset_ds_num);
-}
-
-#if NTPD_HAVE_READ
-static void ntpd_submit (char *type, char *inst, double value)
-{
- char buf[256];
-
- if (snprintf (buf, 256, "%u:%.8f", (unsigned int) curtime, value) >= 256)
- return;
-
- DBG ("type = %s; inst = %s; value = %s;",
- type, inst, buf);
-
- plugin_submit (type, inst, buf);
+ plugin_dispatch_values (type, &vl);
}
/* returns `tv0 - tv1' in milliseconds or 0 if `tv1 > tv0' */
return (val_double);
}
-static void ntpd_read (void)
+static int ntpd_read (void)
{
struct info_kernel *ik;
int ik_num;
if (status != 0)
{
DBG ("ntpd_do_query failed with status %i", status);
- return;
+ return (-1);
}
if ((ik == NULL) || (ik_num == 0) || (ik_size == 0))
{
DBG ("ntpd_do_query returned: ik = %p; ik_num = %i; ik_size = %i;",
(void *) ik, ik_num, ik_size);
- return;
+ return (-1);
}
/* kerninfo -> estimated error */
ntpd_read_fp (ik->freq),
ntpd_read_fp (ik->esterror));
- ntpd_submit ("ntpd_frequency_offset", "loop", ntpd_read_fp (ik->freq));
- ntpd_submit ("ntpd_time_offset", "loop", ntpd_read_fp (ik->offset));
- ntpd_submit ("ntpd_time_offset", "error", ntpd_read_fp (ik->esterror));
+ ntpd_submit ("frequency_offset", "loop", ntpd_read_fp (ik->freq));
+ ntpd_submit ("time_offset", "loop", ntpd_read_fp (ik->offset));
+ ntpd_submit ("time_offset", "error", ntpd_read_fp (ik->esterror));
free (ik);
ik = NULL;
if (status != 0)
{
DBG ("ntpd_do_query failed with status %i", status);
- return;
+ return (-1);
}
if ((ps == NULL) || (ps_num == 0) || (ps_size == 0))
{
DBG ("ntpd_do_query returned: ps = %p; ps_num = %i; ps_size = %i;",
(void *) ps, ps_num, ps_size);
- return;
+ return (-1);
}
for (i = 0; i < ps_num; i++)
ntpd_read_fp (ptr->dispersion));
if (refclock_id != 1) /* not the system clock (offset will always be zero.. */
- ntpd_submit ("ntpd_time_offset", peername, offset);
- ntpd_submit ("ntpd_time_dispersion", peername, ntpd_read_fp (ptr->dispersion));
+ ntpd_submit ("time_offset", peername, offset);
+ ntpd_submit ("time_dispersion", peername, ntpd_read_fp (ptr->dispersion));
if (refclock_id == 0) /* not a reference clock */
- ntpd_submit ("ntpd_delay", peername, ntpd_read_fp (ptr->delay));
+ ntpd_submit ("delay", peername, ntpd_read_fp (ptr->delay));
}
free (ps);
ps = NULL;
- return;
-}
-#else
-# define ntpd_read NULL
+ return (0);
+} /* int ntpd_read */
#endif /* NTPD_HAVE_READ */
void module_register (void)
{
- plugin_register (MODULE_NAME, ntpd_init, ntpd_read, NULL);
- plugin_register ("ntpd_time_offset", NULL, NULL, ntpd_write_time_offset);
- plugin_register ("ntpd_time_dispersion", NULL, NULL, ntpd_write_time_dispersion);
- plugin_register ("ntpd_delay", NULL, NULL, ntpd_write_delay);
- plugin_register ("ntpd_frequency_offset", NULL, NULL, ntpd_write_frequency_offset);
- cf_register (MODULE_NAME, ntpd_config, config_keys, config_keys_num);
-}
+ plugin_register_data_set (&time_offset_ds);
+ plugin_register_data_set (&time_dispersion_ds);
+ plugin_register_data_set (&delay_ds);
+ plugin_register_data_set (&frequency_offset_ds);
-#undef MODULE_NAME
+#if NTPD_HAVE_READ
+ plugin_register_config ("ntpd", ntpd_config, config_keys, config_keys_num);
+ plugin_register_read ("ntpd", ntpd_read);
+#endif /* NTPD_HAVE_READ */
+}