Exemplo n.º 1
0
def calculate_throughputs(taskname, timerange, interval=1):
    """ Calculates the throughputs for a given task for each interval over the 
        given timerange.
        
        timerange = Range over which to calculate throughputs.  Must be a tuple 
                    of two datetime.datetime or datetime.date objects.
        interval = How often (in seconds) to calculate throughputs.
        
        Returns a list of throughputs.  Each throughput is calculated over the 
        given interval.  The throughputs collectively span the given time 
        range.
    """
    qargs = { 'state': 'SUCCESS', 'tstamp__range': timerange }
    if taskname:
        qargs['name'] = taskname
    
    states_in_range = DispatchedTask.objects.filter(**qargs)
    
    def rate_aggregator(seconds_span):
        def _rate_aggregator(seg):
            return seg.count() / seconds_span
        return _rate_aggregator
    
    interval_secs = datetime.timedelta(seconds=interval)
    segmentizer = Segmentizer(range_query_sequence('tstamp', timerange, interval_secs))
    aggregator = rate_aggregator(float(interval))
    
    segments = make_segments(states_in_range, segmentizer, aggregator)
    # segments contains tuple pairs: (label, value).  We only want the value...
    return map(operator.itemgetter(1), segments)
Exemplo n.º 2
0
 def test_basic(self):
     from celerymanagementapp.segmentize import make_segments, Segmentizer
     from celerymanagementapp.segmentize import basic_query_sequence
     from celerymanagementapp.segmentize import avg_aggregator
     
     seq_fieldname = 'enumval'
     agg_fieldname = 'floatval'
     labels = ['A','B','C','D']
     
     qs = TestModel.objects.all()
     
     segmentizer = Segmentizer( basic_query_sequence(seq_fieldname, labels) )
     aggregator = avg_aggregator(agg_fieldname)
     segs = make_segments(qs, segmentizer, aggregator)
     
     self.assertEquals(len(segs), 4)
     
     self.assertEquals(segs[0], ('A',5.0))
     self.assertEquals(segs[1], ('B',4.0))
     self.assertEquals(segs[2], ('C',88.))
     self.assertEquals(segs[3], ('D',None))
Exemplo n.º 3
0
 def test_daterange(self):
     from celerymanagementapp.segmentize import make_segments, Segmentizer
     from celerymanagementapp.segmentize import range_query_sequence
     from celerymanagementapp.segmentize import count_aggregator
     d = datetime.date
     
     seq_fieldname = 'date'
     range = (d(2010,1,1),d(2010,1,25))
     interval_size = datetime.timedelta(days=5)
     
     qs = TestModel.objects.all()
     
     segmentizer = Segmentizer( range_query_sequence(seq_fieldname, range, interval_size) )
     aggregator = count_aggregator()
     segs = make_segments(qs, segmentizer, aggregator)
     
     self.assertEquals(len(segs), 5)
     
     self.assertEquals(segs[0], (d(2010,1,3),  2))
     self.assertEquals(segs[1], (d(2010,1,8),  0))
     self.assertEquals(segs[2], (d(2010,1,13), 2))
     self.assertEquals(segs[3], (d(2010,1,18), 1))
     self.assertEquals(segs[4], (d(2010,1,23), 1))
Exemplo n.º 4
0
 def build_json_result(self, queryset):
     seg = self._build_segmentizer()
     agg = self._build_aggregator()
     data = segmentize.make_segments(queryset, seg, agg)
     return { 'data': data }