1from __future__ import absolute_import 2 3from graphite.intervals import Interval, IntervalSet 4from graphite.readers.utils import merge_with_carbonlink, BaseReader 5 6try: 7 import ceres 8except ImportError: 9 ceres = False 10 11 12class CeresReader(BaseReader): 13 __slots__ = ('ceres_node', 'real_metric_path') 14 supported = bool(ceres) 15 16 def __init__(self, ceres_node, real_metric_path): 17 self.ceres_node = ceres_node 18 self.real_metric_path = real_metric_path 19 20 def get_intervals(self): 21 intervals = [] 22 for info in self.ceres_node.slice_info: 23 (start, end, step) = info 24 intervals.append(Interval(start, end)) 25 26 return IntervalSet(intervals) 27 28 def fetch(self, startTime, endTime): 29 data = self.ceres_node.read(startTime, endTime) 30 time_info = (data.startTime, data.endTime, data.timeStep) 31 values = list(data.values) 32 33 values = merge_with_carbonlink( 34 self.real_metric_path, data.startTime, data.timeStep, values) 35 36 return time_info, values 37