def recent(self): updated_col = self.table._columns_by_name[self.update_col] columns = list() columns.append(updated_col.identifier) self.columns = columns options = SqlQueryOptions() options.sort_column = updated_col options.sort_ascending = False samples = self.get_data({}, options) return len(samples) and samples[0][0] or None
def avg_samples(self, stat, secs, interval, secs2): stat_col = self.table._columns_by_name[stat.name] updated_col = self.table._columns_by_name[self.update_col] org_filters = list(self.query.filters) max_col = "max(%s) as interval_end" % updated_col.identifier value_col = "cast(avg(%s) as integer) as value" % stat_col.identifier dev_col = "stddev(%s) as dev" % stat_col.identifier columns = list() columns.append(max_col) columns.append(value_col) columns.append(dev_col) self.columns = columns when = "now() - interval '%i seconds'" % int(secs + secs2) filter = SqlComparisonFilter(updated_col, when, ">=") self.query.add_filter(filter) when2 = "" filter2 = None if secs2: when2 = "now() - interval '%i seconds'" % int(secs2) filter2 = SqlComparisonFilter(updated_col, when2, "<=") self.query.add_filter(filter2) options = SqlQueryOptions() options.sort_column = "interval_end" options.sort_ascending = False options.group_column = "floor(extract(epoch from %s) / %i)" % (updated_col.identifier, interval) samples = self.get_data({}, options) # reset the filters in case we need to re-run the query in this same request del self.query.filters[:] self.query.filters = org_filters #Too many samples will result in a horribly cluttered chart, lets max_samples (parameter) max_samples = self.session.get("maxsamp") reduced_samples = None if max_samples is not None and max_samples > 0 and len(samples) > max_samples: reduced_interval = int(len(samples) / max_samples) # show every N samples + we always want the first and last reduced_samples = [sample for i, sample in enumerate(samples) if i % reduced_interval == 0 or i == 0 or i == len(samples) -1] samples = reduced_samples return samples
def samples(self, stat, secs, interval, method, secs2=0, delta=False): if method == "avg": return self.avg_samples(stat, secs, interval, secs2) org_filters = list(self.query.filters) stat_col = self.table._columns_by_name[stat.name] updated_col = self.table._columns_by_name[self.update_col] columns = list() columns.append(updated_col.identifier) columns.append(stat_col.identifier) self.columns = columns if not delta: when = "now() - interval '%i seconds'" % int(secs + secs2) filter = SqlComparisonFilter(updated_col, when, ">=") self.query.add_filter(filter) when2 = "" if secs2: when2 = "now() - interval '%i seconds'" % int(secs2) filter = SqlComparisonFilter(updated_col, when2, "<=") self.query.add_filter(filter) options = SqlQueryOptions() options.sort_column = updated_col options.sort_ascending = False if delta: options.limit = 2 samples = self.get_data({}, options) # restore the filters del self.query.filters[:] self.query.filters = org_filters return samples