*****************************************************************************/
#define RRD_COOKIE "RRD"
-#define RRD_VERSION "0002"
+/* #define RRD_VERSION "0002" */
+/* changed because microsecond precision requires another field */
+#define RRD_VERSION "0003"
#define FLOAT_COOKIE 8.642135E130
-#if defined(WIN32)
-#define DNAN ((double)fmod(0.0,0.0))
-#define DINF ((double)log(0.0))
-#else
-
-#define DNAN ((double)(0.0/0.0)) /* we use a DNAN to
- * represent the UNKNOWN
- * */
-#define DINF ((double)(1.0/0.0)) /* we use a DINF to
- * represent a value at the upper or
- * lower border of the graph ...
- * */
-#endif
+#include "rrd_nan_inf.h"
typedef union unival {
unsigned long u_cnt;
enum dst_en { DST_COUNTER=0, /* data source types available */
DST_ABSOLUTE,
DST_GAUGE,
- DST_DERIVE};
+ DST_DERIVE,
+ DST_CDEF};
enum ds_param_en { DS_mrhb_cnt=0, /* minimum required heartbeat. A
* data source must provide input at
* least every ds_mrhb seconds,
* otherwise it is regarded dead and
* will be set to UNKNOWN */
- DS_min_val, /* the processed input of a ds must */
- DS_max_val }; /* be between max_val and min_val
+ DS_min_val, /* the processed input of a ds must */
+ DS_max_val, /* be between max_val and min_val
* both can be set to UNKNOWN if you
* do not care. Data outside the limits
* set to UNKNOWN */
+ DS_cdef = DS_mrhb_cnt}; /* pointer to encoded rpn
+ * expression only applies to DST_CDEF */
/* The magic number here is one less than DS_NAM_SIZE */
#define DS_NAM_FMT "%19[a-zA-Z0-9_-]"
CF_MINIMUM,
CF_MAXIMUM,
CF_LAST,
- CF_HWPREDICT,
+ CF_HWPREDICT,
/* An array of predictions using the seasonal
* Holt-Winters algorithm. Requires an RRA of type
* CF_SEASONAL for this data source. */
typedef struct live_head_t {
time_t last_up; /* when was rrd last updated */
+ long last_up_usec; /* micro seconds part of the
+ update timestamp. Always >= 0 */
} live_head_t;