def handle(self, *args, **options): force_clear = options.get('force-clear') verbose = options.get('verbose') recalculate = options.get('recalculate-last') if recalculate: for MetricClass in METRICS: RecordPrototype._db_filter(date=MetricClass._last_datetime().date(), type=MetricClass.TYPE).delete() for MetricClass in METRICS: if force_clear or MetricClass.FULL_CLEAR_RECUIRED: if verbose: print('clear %s' % MetricClass.TYPE) MetricClass.clear() for i, MetricClass in enumerate(METRICS): metric = MetricClass() if verbose: print('[%3d] calculate %s' % (i, metric.TYPE)) metric.initialize() metric.complete_values() models.FullStatistics.objects.all().delete() models.FullStatistics.objects.create(data=RecordPrototype.get_js_data())
def test_store_value__float(self): self.metric.store_value(datetime.datetime(year=6, month=6, day=6, hour=6), 666.6) self.assertEqual(RecordPrototype._db_filter(type=TestMetric.TYPE).count(), 1) record = RecordPrototype._db_get_object(0) self.assertEqual(record.date, datetime.datetime(year=6, month=6, day=6, hour=6)) self.assertEqual(record.value_int, 666) self.assertEqual(record.value_float, 666.6) self.assertTrue(record.type.is_TEST_FLOAT)
def test_store_value__float(self): self.metric.store_value( datetime.datetime(year=6, month=6, day=6, hour=6), 666.6) self.assertEqual( RecordPrototype._db_filter(type=TestMetric.TYPE).count(), 1) record = RecordPrototype._db_get_object(0) self.assertEqual(record.date, datetime.datetime(year=6, month=6, day=6, hour=6)) self.assertEqual(record.value_int, 666) self.assertEqual(record.value_float, 666.6) self.assertTrue(record.type.is_TEST_FLOAT)
def handle(self, *args, **options): force_clear = options.get('force-clear') verbose = options.get('verbose') recalculate = options.get('recalculate-last') if recalculate: for MetricClass in METRICS: RecordPrototype._db_filter(date=MetricClass._last_datetime().date(), type=MetricClass.TYPE).delete() for MetricClass in METRICS: if force_clear or MetricClass.FULL_CLEAR_RECUIRED: if verbose: print 'clear %s' % MetricClass.TYPE MetricClass.clear() for i, MetricClass in enumerate(METRICS): metric = MetricClass() if verbose: print '[%3d] calculate %s' % (i, metric.TYPE) metric.initialize() metric.complete_values() data_version = int(settings.get(statistics_settings.JS_DATA_FILE_VERSION_KEY, 0)) data_version += 1 output_file = statistics_settings.JS_DATA_FILE_LOCATION % data_version output_dir_name = os.path.dirname(output_file) if not os.path.exists(output_dir_name): os.makedirs(output_dir_name, 0755) with open(output_file, 'w') as f: f.write(jinja2.render('statistics/js_data.js', context={'data': s11n.to_json(RecordPrototype.get_js_data())}).encode('utf-8')) settings[statistics_settings.JS_DATA_FILE_VERSION_KEY] = str(data_version)
def complete_values(self): sources = [] for source in self.SOURCES: data = RecordPrototype._db_filter(type=source, date__gt=self.last_date).order_by('date').values_list('date', 'value_int') sources.append(data) for source_record in zip(*sources): dates, values = zip(*source_record) if list(dates) != [dates[0]]*len(dates): raise exceptions.UnequalDatesError() self.store_value(dates[0], self.get_combined_value(*values))
def _last_datetime(cls): try: return RecordPrototype._db_filter( type=cls.TYPE).order_by('-date')[0].date except IndexError: return statistics_settings.START_DATE - datetime.timedelta(days=1)
def test_last_datetime__no_records(self): self.assertEqual( RecordPrototype._db_filter(type=TestMetric.TYPE).count(), 0) self.assertEqual(self.metric._last_datetime(), datetime.datetime(year=2012, month=6, day=26))
def _last_datetime(cls): try: return RecordPrototype._db_filter(type=cls.TYPE).order_by('-date')[0].date except IndexError: return statistics_settings.START_DATE - datetime.timedelta(days=1)
def test_last_datetime__no_records(self): self.assertEqual(RecordPrototype._db_filter(type=TestMetric.TYPE).count(), 0) self.assertEqual(self.metric._last_datetime(), datetime.datetime(year=2012, month=6, day=26))