/**
* collectd - src/utils_complain.c
- * Copyright (C) 2006-2007 Florian octo Forster
+ * Copyright (C) 2006-2013 Florian octo Forster
* Copyright (C) 2008 Sebastian tokkee Harl
*
* This program is free software; you can redistribute it and/or modify it
static int vcomplain (int level, c_complain_t *c,
const char *format, va_list ap)
{
- time_t now;
+ cdtime_t now;
char message[512];
- now = time (NULL);
+ now = cdtime ();
if (c->last + c->interval > now)
return 0;
else
c->interval *= 2;
- if (c->interval > 86400)
- c->interval = 86400;
+ if (c->interval > TIME_T_TO_CDTIME_T (86400))
+ c->interval = TIME_T_TO_CDTIME_T (86400);
vsnprintf (message, sizeof (message), format, ap);
message[sizeof (message) - 1] = '\0';
{
va_list ap;
- /* reset the old interval */
- if (c->interval < 0)
- c->interval *= -1;
-
va_start (ap, format);
- vcomplain (level, c, format, ap);
+ if (vcomplain (level, c, format, ap))
+ c->complained_once = 1;
va_end (ap);
} /* c_complain */
{
va_list ap;
- if (c->interval < 0)
+ if (c->complained_once)
return;
va_start (ap, format);
if (vcomplain (level, c, format, ap))
- c->interval *= -1;
+ c->complained_once = 1;
va_end (ap);
} /* c_complain_once */
return;
c->interval = 0;
+ c->complained_once = 0;
va_start (ap, format);
vsnprintf (message, sizeof (message), format, ap);
/**
* collectd - src/utils_complain.h
- * Copyright (C) 2006-2007 Florian octo Forster
+ * Copyright (C) 2006-2013 Florian octo Forster
* Copyright (C) 2008 Sebastian tokkee Harl
*
* This program is free software; you can redistribute it and/or modify it
#ifndef UTILS_COMPLAIN_H
#define UTILS_COMPLAIN_H 1
-#include <time.h>
+#include "utils_time.h"
typedef struct
{
/* time of the last report */
- time_t last;
+ cdtime_t last;
- /* how long to wait until reporting again
- * 0 indicates that the complaint is no longer valid
- * < 0 indicates that the complaint has been reported once
- * => c_complain_once will not report again
- * => c_complain uses the absolute value to reset the old value */
- int interval;
+ /* How long to wait until reporting again.
+ * 0 indicates that the complaint is no longer valid. */
+ cdtime_t interval;
+
+ _Bool complained_once;
} c_complain_t;
-#define C_COMPLAIN_INIT_STATIC { 0, 0 }
-#define C_COMPLAIN_INIT(c) do { (c)->last = 0; (c)->interval = 0; } while (0)
+#define C_COMPLAIN_INIT_STATIC { 0, 0, 0 }
+#define C_COMPLAIN_INIT(c) do { \
+ (c)->last = 0; \
+ (c)->interval = 0; \
+ (c)->complained_once = 0; \
+} while (0)
/*
* NAME