Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
    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
Ejemplo n.º 3
0
    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