status = camqp_connect (conf);
if (status != 0)
{
- struct timespec ts_interval;
ERROR ("amqp plugin: camqp_connect failed. "
"Will sleep for %.3f seconds.",
CDTIME_T_TO_DOUBLE (interval));
- CDTIME_T_TO_TIMESPEC (interval, &ts_interval);
- nanosleep (&ts_interval, /* remaining = */ NULL);
+ nanosleep (&CDTIME_T_TO_TIMESPEC (interval), /* remaining = */ NULL);
continue;
}
status = amqp_simple_wait_frame (conf->connection, &frame);
if (status < 0)
{
- struct timespec ts_interval;
ERROR ("amqp plugin: amqp_simple_wait_frame failed. "
"Will sleep for %.3f seconds.",
CDTIME_T_TO_DOUBLE (interval));
camqp_close_connection (conf);
- CDTIME_T_TO_TIMESPEC (interval, &ts_interval);
- nanosleep (&ts_interval, /* remaining = */ NULL);
+ nanosleep (&CDTIME_T_TO_TIMESPEC (interval), /* remaining = */ NULL);
continue;
}
} /* }}} void cc_submit_response_code */
static void cc_submit_response_time (const web_page_t *wp, /* {{{ */
- cdtime_t response_time)
+ gauge_t response_time)
{
value_list_t vl = VALUE_LIST_INIT;
- vl.values = &(value_t) { .gauge = CDTIME_T_TO_DOUBLE (response_time) };
+ vl.values = &(value_t) { .gauge = response_time };
vl.values_len = 1;
sstrncpy (vl.plugin, "curl", sizeof (vl.plugin));
sstrncpy (vl.plugin_instance, wp->instance, sizeof (vl.plugin_instance));
}
if (wp->response_time)
- cc_submit_response_time (wp, cdtime() - start);
+ cc_submit_response_time (wp, CDTIME_T_TO_DOUBLE (cdtime() - start));
if (wp->stats != NULL)
curl_stats_dispatch (wp->stats, wp->curl, hostname_g, "curl", wp->instance);
while (loop == 0)
{
- struct timespec ts_wait = { 0, 0 };
cdtime_t now;
#if HAVE_LIBKSTAT
continue;
}
- CDTIME_T_TO_TIMESPEC (wait_until - now, &ts_wait);
+ struct timespec ts_wait = CDTIME_T_TO_TIMESPEC (wait_until - now);
wait_until = wait_until + interval;
while ((loop == 0) && (nanosleep (&ts_wait, &ts_wait) != 0))
int status;
int socktype;
- socklen_t socklen = sizeof (socklen_t);
- int so_keepalive = 1;
-
- status = getsockopt (sockfd, SOL_SOCKET, SO_TYPE, &socktype, &socklen);
+ status = getsockopt (sockfd, SOL_SOCKET, SO_TYPE,
+ &socktype, &(socklen_t) { sizeof (socktype) });
if (status != 0)
{
WARNING ("set_sock_opts: failed to determine socket type");
if (socktype == SOCK_STREAM)
{
status = setsockopt(sockfd, SOL_SOCKET, SO_KEEPALIVE,
- &so_keepalive, sizeof (so_keepalive));
+ &(int) {1}, sizeof (int));
if (status != 0)
WARNING ("set_sock_opts: failed to set socket keepalive flag");
static char *plugindir = NULL;
#ifndef DEFAULT_MAX_READ_INTERVAL
-# define DEFAULT_MAX_READ_INTERVAL TIME_T_TO_CDTIME_T (86400)
+# define DEFAULT_MAX_READ_INTERVAL TIME_T_TO_CDTIME_T_STATIC (86400)
#endif
static c_heap_t *read_heap = NULL;
static llist_t *read_list;
&& (cdtime () < rf->rf_next_read)
&& rc == 0)
{
- struct timespec ts = { 0 };
-
- CDTIME_T_TO_TIMESPEC (rf->rf_next_read, &ts);
-
rc = pthread_cond_timedwait (&read_cond, &read_lock,
- &ts);
+ &CDTIME_T_TO_TIMESPEC (rf->rf_next_read));
}
/* Must hold `read_lock' when accessing `rf->rf_type'. */
static int get_utc_time (cdtime_t t, struct tm *t_tm, long *nsec) /* {{{ */
{
- struct timespec t_spec;
- int status;
-
- CDTIME_T_TO_TIMESPEC (t, &t_spec);
+ struct timespec t_spec = CDTIME_T_TO_TIMESPEC (t);
NORMALIZE_TIMESPEC (t_spec);
if (gmtime_r (&t_spec.tv_sec, t_tm) == NULL) {
char errbuf[1024];
- status = errno;
+ int status = errno;
ERROR ("get_utc_time: gmtime_r failed: %s",
sstrerror (status, errbuf, sizeof (errbuf)));
return status;
static int get_local_time (cdtime_t t, struct tm *t_tm, long *nsec) /* {{{ */
{
- struct timespec t_spec;
- int status;
-
- CDTIME_T_TO_TIMESPEC (t, &t_spec);
+ struct timespec t_spec = CDTIME_T_TO_TIMESPEC (t);
NORMALIZE_TIMESPEC (t_spec);
if (localtime_r (&t_spec.tv_sec, t_tm) == NULL) {
char errbuf[1024];
- status = errno;
+ int status = errno;
ERROR ("get_local_time: localtime_r failed: %s",
sstrerror (status, errbuf, sizeof (errbuf)));
return status;
/* typedef uint64_t cdtime_t; */
/* 2^30 = 1073741824 */
-#define TIME_T_TO_CDTIME_T(t) (((cdtime_t) (t)) << 30)
-
-#define MS_TO_CDTIME_T(ms) (((((cdtime_t) (ms)) / 1000) << 30) | \
- ((((((cdtime_t) (ms)) % 1000) << 30) + 500) / 1000))
-#define US_TO_CDTIME_T(us) (((((cdtime_t) (us)) / 1000000) << 30) | \
- ((((((cdtime_t) (us)) % 1000000) << 30) + 500000) / 1000000))
-#define NS_TO_CDTIME_T(ns) (((((cdtime_t) (ns)) / 1000000000) << 30) | \
- ((((((cdtime_t) (ns)) % 1000000000) << 30) + 500000000) / 1000000000))
-
-#define CDTIME_T_TO_TIME_T(t) ((time_t) (((t) + (1 << 29)) >> 30))
-#define CDTIME_T_TO_MS(t) ((uint64_t) ((((t) >> 30) * 1000) + \
- ((((t) & 0x3fffffff) * 1000 + (1 << 29)) >> 30)))
-#define CDTIME_T_TO_US(t) ((uint64_t) ((((t) >> 30) * 1000000) + \
- ((((t) & 0x3fffffff) * 1000000 + (1 << 29)) >> 30)))
-#define CDTIME_T_TO_NS(t) ((uint64_t) ((((t) >> 30) * 1000000000) + \
- ((((t) & 0x3fffffff) * 1000000000 + (1 << 29)) >> 30)))
-
-#define CDTIME_T_TO_DOUBLE(t) (((double) (t)) / 1073741824.0)
-#define DOUBLE_TO_CDTIME_T(d) ((cdtime_t) ((d) * 1073741824.0))
-
-#define CDTIME_T_TO_TIMEVAL(cdt,tvp) do { \
- (tvp)->tv_sec = (time_t) ((cdt) >> 30); \
- (tvp)->tv_usec = (suseconds_t) ((((cdt) & 0x3fffffff) * 1000000 + (1 << 29)) >> 30); \
-} while (0)
-#define TIMEVAL_TO_CDTIME_T(tv) US_TO_CDTIME_T(1000000 * (tv)->tv_sec + (tv)->tv_usec)
-
-#define CDTIME_T_TO_TIMESPEC(cdt,tsp) do { \
- (tsp)->tv_sec = (time_t) ((cdt) >> 30); \
- (tsp)->tv_nsec = (long) ((((cdt) & 0x3fffffff) * 1000000000 + (1 << 29)) >> 30); \
-} while (0)
-#define TIMESPEC_TO_CDTIME_T(ts) NS_TO_CDTIME_T(1000000000ULL * (ts)->tv_sec + (ts)->tv_nsec)
-
-cdtime_t cdtime (void);
-
-#define RFC3339_SIZE 26 /* 2006-01-02T15:04:05+00:00 */
-#define RFC3339NANO_SIZE 36 /* 2006-01-02T15:04:05.999999999+00:00 */
+#define TIME_T_TO_CDTIME_T_STATIC(t) (((cdtime_t)(t)) << 30)
+#define TIME_T_TO_CDTIME_T(t) \
+ (cdtime_t) { TIME_T_TO_CDTIME_T_STATIC(t) }
+
+#define MS_TO_CDTIME_T(ms) \
+ (cdtime_t) { \
+ ((((cdtime_t)(ms)) / 1000) << 30) | \
+ ((((((cdtime_t)(ms)) % 1000) << 30) + 500) / 1000) \
+ }
+#define US_TO_CDTIME_T(us) \
+ (cdtime_t) { \
+ ((((cdtime_t)(us)) / 1000000) << 30) | \
+ ((((((cdtime_t)(us)) % 1000000) << 30) + 500000) / 1000000) \
+ }
+#define NS_TO_CDTIME_T(ns) \
+ (cdtime_t) { \
+ ((((cdtime_t)(ns)) / 1000000000) << 30) | \
+ ((((((cdtime_t)(ns)) % 1000000000) << 30) + 500000000) / 1000000000) \
+ }
+
+#define CDTIME_T_TO_TIME_T(t) \
+ (time_t) { (time_t)(((t) + (1 << 29)) >> 30) }
+#define CDTIME_T_TO_MS(t) \
+ (uint64_t) { \
+ (uint64_t)((((t) >> 30) * 1000) + \
+ ((((t)&0x3fffffff) * 1000 + (1 << 29)) >> 30)) \
+ }
+#define CDTIME_T_TO_US(t) \
+ (uint64_t) { \
+ (uint64_t)((((t) >> 30) * 1000000) + \
+ ((((t)&0x3fffffff) * 1000000 + (1 << 29)) >> 30)) \
+ }
+#define CDTIME_T_TO_NS(t) \
+ (uint64_t) { \
+ (uint64_t)((((t) >> 30) * 1000000000) + \
+ ((((t)&0x3fffffff) * 1000000000 + (1 << 29)) >> 30)) \
+ }
+
+#define CDTIME_T_TO_DOUBLE(t) \
+ (double) { ((double)(t)) / 1073741824.0 }
+#define DOUBLE_TO_CDTIME_T(d) \
+ (cdtime_t) { (cdtime_t)((d)*1073741824.0) }
+
+#define CDTIME_T_TO_TIMEVAL(t) \
+ (struct timeval) { \
+ .tv_sec = (time_t)((t) >> 30), \
+ .tv_usec = (suseconds_t)((((t)&0x3fffffff) * 1000000 + (1 << 29)) >> 30), \
+ }
+#define TIMEVAL_TO_CDTIME_T(tv) \
+ US_TO_CDTIME_T(1000000 * (tv)->tv_sec + (tv)->tv_usec)
+
+#define CDTIME_T_TO_TIMESPEC(t) \
+ (struct timespec) { \
+ .tv_sec = (time_t)((t) >> 30), \
+ .tv_nsec = (long)((((t)&0x3fffffff) * 1000000000 + (1 << 29)) >> 30), \
+ }
+#define TIMESPEC_TO_CDTIME_T(ts) \
+ NS_TO_CDTIME_T(1000000000ULL * (ts)->tv_sec + (ts)->tv_nsec)
+
+cdtime_t cdtime(void);
+
+#define RFC3339_SIZE 26 /* 2006-01-02T15:04:05+00:00 */
+#define RFC3339NANO_SIZE 36 /* 2006-01-02T15:04:05.999999999+00:00 */
/* rfc3339 formats a cdtime_t time as UTC in RFC 3339 zulu format with second
* precision, e.g., "2006-01-02T15:04:05Z". */
-int rfc3339 (char *buffer, size_t buffer_size, cdtime_t t);
+int rfc3339(char *buffer, size_t buffer_size, cdtime_t t);
/* rfc3339nano formats a cdtime_t as UTC time in RFC 3339 zulu format with
* nanosecond precision, e.g., "2006-01-02T15:04:05.999999999Z". */
-int rfc3339nano (char *buffer, size_t buffer_size, cdtime_t t);
+int rfc3339nano(char *buffer, size_t buffer_size, cdtime_t t);
/* rfc3339 formats a cdtime_t time as local in RFC 3339 format with second
* precision, e.g., "2006-01-02T15:04:05+00:00". */
-int rfc3339_local (char *buffer, size_t buffer_size, cdtime_t t);
+int rfc3339_local(char *buffer, size_t buffer_size, cdtime_t t);
/* rfc3339nano formats a cdtime_t time as local in RFC 3339 format with
* nanosecond precision, e.g., "2006-01-02T15:04:05.999999999+00:00". */
-int rfc3339nano_local (char *buffer, size_t buffer_size, cdtime_t t);
+int rfc3339nano_local(char *buffer, size_t buffer_size, cdtime_t t);
#endif /* UTILS_TIME_H */
/* vim: set sw=2 sts=2 et : */
};
for (size_t i = 0; i < (sizeof (cases) / sizeof (cases[0])); i++) {
- struct timeval tv;
- struct timespec ts;
-
// cdtime -> s
EXPECT_EQ_UINT64 (cases[i].tt, CDTIME_T_TO_TIME_T (cases[i].t));
EXPECT_EQ_UINT64(cases[i].ms, CDTIME_T_TO_MS (cases[i].t));
// cdtime -> us
- CDTIME_T_TO_TIMEVAL (cases[i].t, &tv);
+ struct timeval tv = CDTIME_T_TO_TIMEVAL (cases[i].t);
EXPECT_EQ_UINT64 (cases[i].tv.tv_sec, tv.tv_sec);
EXPECT_EQ_UINT64 (cases[i].tv.tv_usec, tv.tv_usec);
// cdtime -> ns
- CDTIME_T_TO_TIMESPEC (cases[i].t, &ts);
+ struct timespec ts = CDTIME_T_TO_TIMESPEC (cases[i].t);
EXPECT_EQ_UINT64 (cases[i].ts.tv_sec, ts.tv_sec);
EXPECT_EQ_UINT64 (cases[i].ts.tv_nsec, ts.tv_nsec);
static int dns_sleep_one_interval (void) /* {{{ */
{
- cdtime_t interval;
- struct timespec ts = { 0, 0 };
- int status = 0;
-
- interval = plugin_get_interval ();
- CDTIME_T_TO_TIMESPEC (interval, &ts);
-
- while (42)
+ struct timespec ts = CDTIME_T_TO_TIMESPEC (plugin_get_interval ());
+ while (nanosleep (&ts, &ts) != 0)
{
- struct timespec rem = { 0, 0 };
-
- status = nanosleep (&ts, &rem);
- if (status == 0)
- break;
- else if ((errno == EINTR) || (errno == EAGAIN))
- {
- ts = rem;
+ if ((errno == EINTR) || (errno == EAGAIN))
continue;
- }
- else
- break;
+
+ return (errno);
}
- return (status);
+ return (0);
} /* }}} int dns_sleep_one_interval */
static void *dns_child_loop (__attribute__((unused)) void *dummy) /* {{{ */
while (1) {
/* sem_timedwait() to avoid blocking forever */
- struct timespec ts;
cdtime_t now = cdtime();
cdtime_t safety_period = MS_TO_CDTIME_T(1500);
- CDTIME_T_TO_TIMESPEC(now + safety_period + g_configuration->interval * 2,
- &ts);
- int ret = sem_timedwait(&g_configuration->sema_helper_get_stats, &ts);
+ int ret =
+ sem_timedwait(&g_configuration->sema_helper_get_stats,
+ &CDTIME_T_TO_TIMESPEC(now + safety_period +
+ g_configuration->interval * 2));
if (ret == -1 && errno == ETIMEDOUT) {
ERROR("dpdkstat-helper: sem timedwait()"
vl.values_len = 1; /* Submit stats one at a time */
vl.time = port_read_time;
sstrncpy(vl.plugin, "dpdkstat", sizeof(vl.plugin));
- sstrncpy(vl.plugin_instance, dev_name,
- sizeof(vl.plugin_instance));
+ sstrncpy(vl.plugin_instance, dev_name, sizeof(vl.plugin_instance));
type_end = strrchr(xstats[j].name, '_');
sstrncpy(vl.type, "derive", sizeof(vl.type));
}
- sstrncpy(vl.type_instance, xstats[j].name,
- sizeof(vl.type_instance));
+ sstrncpy(vl.type_instance, xstats[j].name, sizeof(vl.type_instance));
plugin_dispatch_values(&vl);
}
}
/* Kick helper process through SHM */
sem_post(&g_configuration->sema_helper_get_stats);
- struct timespec ts;
cdtime_t now = cdtime();
- CDTIME_T_TO_TIMESPEC(now + g_configuration->interval, &ts);
- ret = sem_timedwait(&g_configuration->sema_stats_in_shm, &ts);
+ ret = sem_timedwait(&g_configuration->sema_stats_in_shm,
+ &CDTIME_T_TO_TIMESPEC(now + g_configuration->interval));
if (ret == -1) {
if (errno == ETIMEDOUT)
DEBUG(
static pthread_t cgps_thread_id;
static pthread_mutex_t cgps_data_lock = PTHREAD_MUTEX_INITIALIZER;
static pthread_mutex_t cgps_thread_lock = PTHREAD_MUTEX_INITIALIZER;
+static pthread_cond_t cgps_thread_cond = PTHREAD_COND_INITIALIZER;
static int cgps_thread_shutdown = CGPS_FALSE;
static int cgps_thread_running = CGPS_FALSE;
*/
static int cgps_thread_pause(cdtime_t pTime)
{
- cdtime_t now;
- now = cdtime ();
- struct timespec pause_th;
- CDTIME_T_TO_TIMESPEC (MS_TO_CDTIME_T(10), &pause_th);
- while (CGPS_TRUE)
- {
- if ( (cdtime () - now) > pTime )
- {
- break;
- }
+ cdtime_t until = cdtime() + pTime;
- pthread_mutex_lock (&cgps_thread_lock);
- if (cgps_thread_shutdown == CGPS_TRUE)
- {
- return CGPS_FALSE;
- }
- pthread_mutex_unlock (&cgps_thread_lock);
- nanosleep (&pause_th, NULL);
- }
+ pthread_mutex_lock (&cgps_thread_lock);
+ pthread_cond_timedwait (&cgps_thread_cond, &cgps_thread_lock,
+ &CDTIME_T_TO_TIMESPEC (until));
+
+ int ret = !cgps_thread_shutdown;
- return CGPS_TRUE;
+ pthread_mutex_lock (&cgps_thread_lock);
+ return ret;
}
/**
pthread_mutex_lock (&cgps_thread_lock);
cgps_thread_shutdown = CGPS_TRUE;
+ pthread_cond_broadcast (&cgps_thread_cond);
pthread_mutex_unlock (&cgps_thread_lock);
pthread_join(cgps_thread_id, &res);
struct tm timestamp_tm;
char timestamp_str[64];
const unsigned char *buf;
- time_t tt;
#if HAVE_YAJL_V2
size_t len;
#else
yajl_gen_status_ok)
goto err;
- tt = CDTIME_T_TO_TIME_T (timestamp_time);
- gmtime_r (&tt, ×tamp_tm);
+ gmtime_r (&CDTIME_T_TO_TIME_T (timestamp_time), ×tamp_tm);
/*
* format time as a UTC ISO 8601 compliant string
{
FILE *fh;
_Bool do_close = 0;
- struct tm timestamp_tm;
char timestamp_str[64];
char level_str[16] = "";
if (print_timestamp)
{
- time_t tt = CDTIME_T_TO_TIME_T (timestamp_time);
- localtime_r (&tt, ×tamp_tm);
+ struct tm timestamp_tm;
+ localtime_r (&CDTIME_T_TO_TIME_T (timestamp_time), ×tamp_tm);
strftime (timestamp_str, sizeof (timestamp_str), "%Y-%m-%d %H:%M:%S",
×tamp_tm);
user_data_t __attribute__((unused)) *user_data)
{
- time_t tt;
struct tm timestamp_tm;
char timestamp_str[64];
(email_subject == NULL) ? DEFAULT_SMTP_SUBJECT : email_subject,
severity, n->host);
- tt = CDTIME_T_TO_TIME_T (n->time);
- localtime_r (&tt, ×tamp_tm);
+ localtime_r (&CDTIME_T_TO_TIME_T (n->time), ×tamp_tm);
strftime (timestamp_str, sizeof (timestamp_str), "%Y-%m-%d %H:%M:%S",
×tamp_tm);
timestamp_str[sizeof (timestamp_str) - 1] = '\0';
}
st->starttls = 0;
- st->timeout = (long) (CDTIME_T_TO_MS(plugin_get_interval()) / 1000);
+ st->timeout = (long) CDTIME_T_TO_TIME_T(plugin_get_interval());
st->verifyhost = 1;
st->version = LDAP_VERSION3;
struct sockaddr_un sa_unix = { 0 };
- struct timeval stv_timeout;
cdtime_t cdt_timeout;
sd = socket (PF_UNIX, item->socktype, 0);
if (cdt_timeout < TIME_T_TO_CDTIME_T (2))
cdt_timeout = TIME_T_TO_CDTIME_T (2);
- CDTIME_T_TO_TIMEVAL (cdt_timeout, &stv_timeout);
-
- status = setsockopt (sd, SOL_SOCKET, SO_RCVTIMEO, &stv_timeout, sizeof (stv_timeout));
+ status = setsockopt (sd, SOL_SOCKET, SO_RCVTIMEO,
+ &CDTIME_T_TO_TIMEVAL(cdt_timeout),
+ sizeof(struct timeval));
if (status != 0)
{
SOCK_ERROR ("setsockopt", sa_unix.sun_path);
* ALWAYS lock `cache_lock' first! */
static cdtime_t cache_timeout = 0;
static cdtime_t cache_flush_timeout = 0;
-static cdtime_t random_timeout = TIME_T_TO_CDTIME_T (1);
+static cdtime_t random_timeout = TIME_T_TO_CDTIME_T_STATIC (1);
static cdtime_t cache_flush_last;
static c_avl_tree_t *cache = NULL;
static pthread_mutex_t cache_lock = PTHREAD_MUTEX_INITIALIZER;