def run(self):
    """run power collection thread.

    Query all |_ctrls| as much as possible during |_rate| interval before
    reporting the mean of those samples as one data point. Timestamp is taken at
    the end of |_rate| interval.
    """
    while not self._stop_signal.is_set():
      start = time.time()
      end = start + self._rate
      loop_end = end - self.BUFFER
      temp_stats = stats_manager.StatsManager()
      while start < loop_end:
        # Setting duration to _ as this PowerTracker does not need duration
        # to calculate for how long to sleep.
        sample_tuples, _ = self._sample_ctrls(self._ctrls)
        for domain, sample in sample_tuples:
          temp_stats.AddSample(domain, sample)
        start = time.time()
      temp_stats.CalculateStats()
      temp_summary = temp_stats.GetSummary()
      samples = [(measurement, summary['mean']) for
                 measurement, summary in temp_summary.items()]
      self._stats.AddSamples(samples)
      # Sleep until the end of the sample rate
      self._stop_signal.wait(max(0, end - time.time()))
示例#2
0
 def test_MakeUniqueFName(self):
   data = stats_manager.StatsManager()
   testfile = os.path.join(self.tempdir, 'testfile.txt')
   with open(testfile, 'w') as f:
     f.write('')
   expected_fname = os.path.join(self.tempdir, 'testfile0.txt')
   self.assertEqual(expected_fname, data._MakeUniqueFName(testfile))
示例#3
0
 def test_SaveSummaryJSONSMID(self):
   """SaveSummaryJSON uses the smid when creating output filename."""
   identifier = 'ec'
   self.data = stats_manager.StatsManager(smid=identifier)
   self._populate_mock_stats()
   fname = os.path.basename(self.data.SaveSummaryJSON(self.tempdir))
   self.assertTrue(fname.startswith(identifier))
示例#4
0
 def test_SummaryToStringTitle(self):
   """Title shows up in SummaryToString if title specified."""
   title = 'titulo'
   data = stats_manager.StatsManager(title=title)
   self._populate_mock_stats()
   summary_str = data.SummaryToString()
   self.assertIn(title, summary_str)
示例#5
0
 def test_SaveRawDataSMID(self):
   """SaveRawData uses the smid when creating output filename."""
   identifier = 'ec'
   self.data = stats_manager.StatsManager(smid=identifier)
   self._populate_mock_stats()
   files = self.data.SaveRawData(self.tempdir)
   for fname in files:
     self.assertTrue(os.path.basename(fname).startswith(identifier))
示例#6
0
 def test_SummaryToStringHideDomains(self):
   """Keys indicated in hide_domains are not printed in the summary."""
   data = stats_manager.StatsManager(hide_domains=['A-domain'])
   data.AddSample('A-domain', 17)
   data.AddSample('B-domain', 17)
   data.CalculateStats()
   summary_str = data.SummaryToString()
   self.assertIn('B-domain', summary_str)
   self.assertNotIn('A-domain', summary_str)
示例#7
0
 def test_AddSampleNoFloatNotAcceptNaN(self):
   """Adding a non-number raises a StatsManagerError if accept_nan is False."""
   self.data = stats_manager.StatsManager(accept_nan=False)
   with self.assertRaisesRegexp(stats_manager.StatsManagerError,
                                'accept_nan is false. Cannot add NaN sample.'):
     # adding a fake NaN: one that gets converted into NaN internally
     self.data.AddSample('Test', 'fiesta')
   with self.assertRaisesRegexp(stats_manager.StatsManagerError,
                                'accept_nan is false. Cannot add NaN sample.'):
     # adding a real NaN
     self.data.AddSample('Test', float('NaN'))
示例#8
0
 def test_SummaryToStringOrder(self):
   """Order passed into StatsManager is honoured when formatting summary."""
   # StatsManager that should print D & B first, and the subsequent elements
   # are sorted.
   d_b_a_c_regexp = re.compile('D-domain.*B-domain.*A-domain.*C-domain',
                               re.DOTALL)
   data = stats_manager.StatsManager(order=['D-domain', 'B-domain'])
   data.AddSample('A-domain', 17)
   data.AddSample('B-domain', 17)
   data.AddSample('C-domain', 17)
   data.AddSample('D-domain', 17)
   data.CalculateStats()
   summary_str = data.SummaryToString()
   self.assertRegexpMatches(summary_str, d_b_a_c_regexp)
示例#9
0
 def test_SummaryToStringNaNHelp(self):
   """NaN containing row gets tagged with *, help banner gets added."""
   help_banner_exp = '%s %s' % (stats_manager.STATS_PREFIX,
                                stats_manager.NAN_DESCRIPTION)
   nan_domain = 'A-domain'
   nan_domain_exp = '%s%s' % (nan_domain, stats_manager.NAN_TAG)
   # NaN helper banner is added when a NaN domain is found & domain gets tagged
   data = stats_manager.StatsManager()
   data.AddSample(nan_domain, float('NaN'))
   data.AddSample(nan_domain, 17)
   data.AddSample('B-domain', 17)
   data.CalculateStats()
   summarystr = data.SummaryToString()
   self.assertIn(help_banner_exp, summarystr)
   self.assertIn(nan_domain_exp, summarystr)
   # NaN helper banner is not added when no NaN domain output, no tagging
   data = stats_manager.StatsManager()
   # nan_domain in this scenario does not contain any NaN
   data.AddSample(nan_domain, 19)
   data.AddSample('B-domain', 17)
   data.CalculateStats()
   summarystr = data.SummaryToString()
   self.assertNotIn(help_banner_exp, summarystr)
   self.assertNotIn(nan_domain_exp, summarystr)
示例#10
0
 def setUp(self):
   """Set up StatsManager and create a temporary directory for test."""
   self.tempdir = tempfile.mkdtemp()
   self.data = stats_manager.StatsManager()