Exemplo n.º 1
0
def update_cq_stats(project_stats, minutes, begin, end):  # pragma: no cover
    """Ensure CQStats are updated or created as necessary with new stats data."""
    assert (end - begin).total_seconds() == 60 * minutes
    assert (begin - stats_start).total_seconds() % (60 * minutes) == 0, (
        'Interval must be aligned with %s.' % stats_start)
    for project, stats_list in project_stats.iteritems():
        count_stats_dict = {}
        list_stats_dict = {}
        for stats in stats_list:
            if type(stats) == CountStats:
                count_stats_dict[stats.name] = stats
            else:
                assert type(stats) == ListStats
                list_stats_dict[stats.name] = stats

        cq_stats = CQStats.query().filter(CQStats.project == project,
                                          CQStats.interval_minutes == minutes,
                                          CQStats.begin == begin).get()
        if cq_stats:
            update_stats_list(cq_stats.count_stats, count_stats_dict)
            update_stats_list(cq_stats.list_stats, list_stats_dict)
            cq_stats.put()
        else:
            CQStats(
                project=project,
                interval_minutes=minutes,
                begin=begin,
                end=end,
                count_stats=count_stats_dict.values(),
                list_stats=list_stats_dict.values(),
            ).put()
    update_last_cq_stats_change_timestamp(minutes)
Exemplo n.º 2
0
 def test_missing_intervals_matched_cq_stats(self):
     CQStats(project='',
             interval_minutes=1440,
             begin=datetime(2000, 1, 2, 8),
             end=datetime(2000, 1, 3, 8)).put()
     self.assertEqual([
         (datetime(2000, 1, 3, 8), datetime(2000, 1, 4, 8)),
     ], missing_intervals(1440, datetime(2000, 1, 4, 8)))
Exemplo n.º 3
0
 def test_missing_intervals_mismatched_cq_stats(self):
     CQStats(project='',
             interval_minutes=60,
             begin=datetime(2000, 1, 3, 7),
             end=datetime(2000, 1, 3, 8)).put()
     self.mock_now(datetime(2000, 1, 2, 0))
     Record().put()
     self.assertEqual([
         (datetime(2000, 1, 1, 8), datetime(2000, 1, 2, 8)),
         (datetime(2000, 1, 2, 8), datetime(2000, 1, 3, 8)),
     ], missing_intervals(1440, datetime(2000, 1, 4, 0)))
Exemplo n.º 4
0
def _add_stats(project, days, begin, stats_list=None): # pragma: no cover
  minutes = days * minutes_per_day
  cq_stats = CQStats(
    project=project,
    interval_minutes=minutes,
    begin=datetime.utcfromtimestamp(begin),
    end=datetime.utcfromtimestamp(begin) + timedelta(minutes=minutes),
  )
  if stats_list:
    cq_stats.count_stats = [
        stats for stats in stats_list if type(stats) == CountStats]
    cq_stats.list_stats = [
        stats for stats in stats_list if type(stats) == ListStats]
  cq_stats.put()
  return cq_stats
Exemplo n.º 5
0
def _reset_stats(): # pragma: no cover
  for cq_stats in CQStats.query():
    cq_stats.key.delete()
  assert CQStats.query().count() == 0
  cq_stats = CQStats(
    project='test',
    interval_minutes=1,
    begin=datetime.utcfromtimestamp(0),
    end=datetime.utcfromtimestamp(1),
    count_stats=[
      CountStats(
        name='test-count',
        description='Test count description',
        count=3,
        highest_100=[
          [2, {'data_point': 'c'}],
          [1, {'data_point': 'b'}],
          [0, {'data_point': 'a'}],
        ],
        lowest_100=[
          [0, {'data_point': 'a'}],
          [1, {'data_point': 'b'}],
          [2, {'data_point': 'c'}],
        ],
      ),
    ],
    list_stats=[
      ListStats(
        name='test-list',
        description='Test list description',
        unit='test_unit',
        highest_100=[
          [2, {'data_point': 'c'}],
          [1, {'data_point': 'b'}],
          [0, {'data_point': 'a'}],
        ],
        lowest_100=[
          [0, {'data_point': 'a'}],
          [1, {'data_point': 'b'}],
          [2, {'data_point': 'c'}],
        ],
      ),
    ],
  ).put()
  return cq_stats.id()
Exemplo n.º 6
0
 def test_update_cq_stats_modify(self):
     _clear_cq_stats()
     CQStats(
         project='test-project',
         interval_minutes=60,
         begin=datetime(2000, 1, 1, 1),
         end=datetime(2000, 1, 1, 2),
         count_stats=[
             CountStats(name='test-count',
                        description='test-count-description',
                        count=123),
         ],
         list_stats=[
             ListStats(name='test-list',
                       description='test-list-description',
                       unit='test-unit'),
         ],
     ).put()
     self.assertEqual(1, CQStats.query().count())
     update_cq_stats(
         {
             'test-project': [
                 CountStats(name='test-count',
                            description='test-count-description',
                            count=456),
             ],
         }, 60, datetime(2000, 1, 1, 1), datetime(2000, 1, 1, 2))
     self.assertEqual(1, CQStats.query().count())
     cq_stats = CQStats.query().get()
     self.assertEqual('test-project', cq_stats.project)
     self.assertEqual(60, cq_stats.interval_minutes)
     self.assertEqual(datetime(2000, 1, 1, 1), cq_stats.begin)
     self.assertEqual(datetime(2000, 1, 1, 2), cq_stats.end)
     self.assertEqual([
         CountStats(name='test-count',
                    description='test-count-description',
                    count=456),
     ], cq_stats.count_stats)
     self.assertEqual([
         ListStats(name='test-list',
                   description='test-list-description',
                   unit='test-unit'),
     ], cq_stats.list_stats)