#ifndef GRAPHITE_H_
#define GRAPHITE_H_

#include "call.h"

enum connection_state {
	STATE_DISCONNECTED = 0,
	STATE_IN_PROGRESS,
	STATE_CONNECTED,
};

extern struct timeval rtpe_latest_graphite_interval_start;

extern struct global_stats_counter rtpe_stats_graphite_diff;	// per-interval increases
extern struct global_rate_min_max rtpe_rate_graphite_min_max;	// running min/max, reset when graphite runs
extern struct global_rate_min_max_avg rtpe_rate_graphite_min_max_avg_sampled; // updated once per graphite run

extern struct global_gauge_min_max rtpe_gauge_graphite_min_max;	// running min/max, reset when graphite runs
extern struct global_gauge_min_max rtpe_gauge_graphite_min_max_sampled;	// updated once per graphite run

extern struct global_sampled_min_max rtpe_sampled_graphite_min_max;	// running min/max, reset when graphite runs
extern struct global_sampled_min_max rtpe_sampled_graphite_min_max_sampled;	// updated once per graphite run
extern struct global_sampled_avg rtpe_sampled_graphite_avg;			// updated once per graphite run


void set_prefix(char* prefix);
void free_prefix(void);
void graphite_loop(void *d);
void set_latest_graphite_interval_start(struct timeval *tv);
void set_graphite_interval_tv(struct timeval *tv);

GString *print_graphite_data(void);


INLINE bool graphite_is_enabled(void) {
	return !is_addr_unspecified(&rtpe_config.graphite_ep.address);
}

#endif /* GRAPHITE_H_ */
