#include "common.h"
-#define HOSTNAME_MAX 1024
-char *hostname = "unknown";
-
void rrd_stats_api_v1_chart(RRDSET *st, BUFFER *wb)
{
pthread_rwlock_rdlock(&st->rwlock);
",\n\t\"update_every\": %d"
",\n\t\"history\": %d"
",\n\t\"charts\": {"
- , hostname
+ , localhost.hostname
, rrd_update_every
, rrd_default_history_entries
);
"\t\"history\": %d,\n"
"\t\"memory\": %lu\n"
"}\n"
- , hostname
+ , localhost.hostname
, rrd_update_every
, rrd_default_history_entries
, memory
freez(r);
}
-inline void rrdr_done(RRDR *r)
+static inline void rrdr_done(RRDR *r)
{
r->rows = r->c + 1;
r->c = 0;
absolute_period_requested = 0;
}
- // allow relative for before and after
- if(((before < 0)?-before:before) <= (st->update_every * st->entries)) {
+ // allow relative for before and after (smaller than 3 years)
+ if(((before < 0)?-before:before) <= (3 * 365 * 86400)) {
before = last_entry_t + before;
absolute_period_requested = 0;
}
- if(((after < 0)?-after:after) <= (st->update_every * st->entries)) {
+ if(((after < 0)?-after:after) <= (3 * 365 * 86400)) {
if(after == 0) after = -st->update_every;
after = before + after;
absolute_period_requested = 0;
return r;
}
-int rrd2value(RRDSET *st, BUFFER *wb, calculated_number *n, const char *dimensions, long points, long long after, long long before, int group_method, uint32_t options, time_t *latest_timestamp, int *value_is_null)
+int rrd2value(RRDSET *st, BUFFER *wb, calculated_number *n, const char *dimensions, long points, long long after, long long before, int group_method, uint32_t options, time_t *db_after, time_t *db_before, int *value_is_null)
{
RRDR *r = rrd2rrdr(st, points, after, before, group_method, !(options & RRDR_OPTION_NOT_ALIGNED));
if(!r) {
if(rrdr_rows(r) == 0) {
rrdr_free(r);
+
+ if(db_after) *db_after = 0;
+ if(db_before) *db_before = 0;
if(value_is_null) *value_is_null = 1;
+
return 400;
}
if(r->result_options & RRDR_RESULT_OPTION_RELATIVE)
- wb->options |= WB_CONTENT_NO_CACHEABLE;
+ buffer_no_cacheable(wb);
else if(r->result_options & RRDR_RESULT_OPTION_ABSOLUTE)
- wb->options |= WB_CONTENT_CACHEABLE;
+ buffer_cacheable(wb);
options = rrdr_check_options(r, options, dimensions);
if(dimensions)
rrdr_disable_not_selected_dimensions(r, dimensions);
- if(latest_timestamp)
- *latest_timestamp = r->before;
+ if(db_after) *db_after = r->after;
+ if(db_before) *db_before = r->before;
long i = (options & RRDR_OPTION_REVERSED)?rrdr_rows(r) - 1:0;
*n = rrdr2value(r, i, options, value_is_null);
}
if(r->result_options & RRDR_RESULT_OPTION_RELATIVE)
- wb->options |= WB_CONTENT_NO_CACHEABLE;
+ buffer_no_cacheable(wb);
else if(r->result_options & RRDR_RESULT_OPTION_ABSOLUTE)
- wb->options |= WB_CONTENT_CACHEABLE;
+ buffer_cacheable(wb);
options = rrdr_check_options(r, options, (dimensions)?buffer_tostring(dimensions):NULL);