def test_accepting_data_as_string(self): gauged = Gauged(self.driver, resolution=1000, block_size=10000, key_overflow=Gauged.IGNORE, gauge_nan=Gauged.IGNORE) with gauged.writer as writer: writer.add('foo=123.456&bar=-15.98&qux=0&invalid=foobar\n', timestamp=20000) self.assertAlmostEqual(123.456, gauged.value('foo', timestamp=20000), 5) self.assertAlmostEqual(-15.98, gauged.value('bar', timestamp=20000), 5) self.assertEqual(gauged.value('qux', timestamp=20000), 0) self.assertEqual(gauged.value('invalid', timestamp=20000), None) stats = gauged.statistics() self.assertEqual(stats.data_points, 3) self.assertEqual(stats.byte_count, 24) stats = gauged.statistics(end=25000) self.assertEqual(stats.data_points, 3) self.assertEqual(stats.byte_count, 24) gauged = Gauged(self.driver, resolution=1000, block_size=10000, key_overflow=Gauged.IGNORE) with self.assertRaises(GaugedNaNError): with gauged.writer as writer: writer.add(u'foo=123.456&bar=-15.98&qux=0&invalid=foobar\n', timestamp=20000)
def test_statistics(self): gauged = Gauged(self.driver, resolution=1000, block_size=10000) with gauged.writer as writer: writer.add('bar', 123, timestamp=10000) writer.add('bar', 123, timestamp=15000, namespace=1) writer.add({'foo': 123, 'bar': 456}, timestamp=20000) stats = gauged.statistics() self.assertEqual(stats.data_points, 3) self.assertEqual(stats.byte_count, 24) stats = gauged.statistics(end=20000) # note: statistics() rounds to the nearest block boundary self.assertEqual(stats.data_points, 1) self.assertEqual(stats.byte_count, 8) stats = gauged.statistics(namespace=1) self.assertEqual(stats.data_points, 1) self.assertEqual(stats.byte_count, 8)
def test_statistics(self): gauged = Gauged(self.driver, resolution=1000, block_size=10000) with gauged.writer as writer: writer.add('bar', 123, timestamp=10000) writer.add('bar', 123, timestamp=15000, namespace=1) writer.add({ 'foo': 123, 'bar': 456 }, timestamp=20000) stats = gauged.statistics() self.assertEqual(stats.data_points, 3) self.assertEqual(stats.byte_count, 24) stats = gauged.statistics(end=20000) # note: statistics() rounds to the nearest block boundary self.assertEqual(stats.data_points, 1) self.assertEqual(stats.byte_count, 8) stats = gauged.statistics(namespace=1) self.assertEqual(stats.data_points, 1) self.assertEqual(stats.byte_count, 8)
def test_no_data(self): gauged = Gauged(self.driver) self.assertEqual(len(gauged.namespaces()), 0) self.assertEqual(len(gauged.value_series('foo')), 0) self.assertEqual(len(gauged.aggregate_series('foo', Gauged.SUM)), 0) self.assertEqual(gauged.value('foo'), None) self.assertEqual(gauged.aggregate('foo', Gauged.SUM), None) self.assertEqual(len(gauged.keys()), 0) stats = gauged.statistics() for attr in ['data_points', 'byte_count']: self.assertEqual(getattr(stats, attr), 0)
def test_accepting_data_as_string(self): gauged = Gauged(self.driver, resolution=1000, block_size=10000, key_overflow=Gauged.IGNORE, gauge_nan=Gauged.IGNORE) with gauged.writer as writer: writer.add('foo=123.456&bar=-15.98&qux=0&invalid=foobar\n', timestamp=20000) self.assertAlmostEqual(123.456, gauged.value('foo', timestamp=20000), 5) self.assertAlmostEqual(-15.98, gauged.value('bar', timestamp=20000), 5) self.assertEqual(gauged.value('qux', timestamp=20000), 0) self.assertEqual(gauged.value('invalid', timestamp=20000), None) stats = gauged.statistics() self.assertEqual(stats.data_points, 3) self.assertEqual(stats.byte_count, 24) stats = gauged.statistics(end=25000) self.assertEqual(stats.data_points, 3) self.assertEqual(stats.byte_count, 24) gauged = Gauged(self.driver, resolution=1000, block_size=10000, key_overflow=Gauged.IGNORE) with self.assertRaises(GaugedNaNError): with gauged.writer as writer: writer.add(u'foo=123.456&bar=-15.98&qux=0&invalid=foobar\n', timestamp=20000)
def test_no_data(self): gauged = Gauged(self.driver) self.assertEqual(len(gauged.namespaces()), 0) self.assertEqual(len(gauged.value_series('foo')), 0) self.assertEqual(len(gauged.aggregate_series('foo', Gauged.SUM)), 0) self.assertEqual(gauged.value('foo'), None) self.assertEqual(gauged.aggregate('foo', Gauged.SUM), None) self.assertEqual(len(gauged.keys()), 0) stats = gauged.statistics() for attr in ['data_points', 'byte_count']: self.assertEqual(getattr(stats, attr), 0)
measurements = options['number'] span = end_timestamp - start_timestamp start = time() with gauged.writer as writer: data = ['foobar', 0] gauges = [data] add = writer.add for timestamp in xrange(start_timestamp, end_timestamp, span // measurements): data[1] = random() add(gauges, timestamp=timestamp*1000) elapsed = time() - start print 'Wrote %s measurements in %s seconds (%s/s)' % \ (number, round(elapsed, 3), abbreviate_number(measurements / elapsed)) statistics = gauged.statistics() byte_count = statistics.byte_count print 'Gauge data uses %s (%s per measurement)' % \ (abbreviate_bytes(byte_count), abbreviate_bytes(byte_count / float(measurements))) # Read benchmarks for aggregate in ('min', 'max', 'sum', 'count', 'mean', 'stddev', 'median'): start = time() gauged.aggregate('foobar', aggregate) elapsed = time() - start print '%s() in %ss (read %s measurements/s)' % \ (aggregate, round(elapsed, 3), abbreviate_number(measurements / elapsed))
print 'Spreading %s measurements to key "foobar" over %s days' % (number, options['days']) # Benchmark writes measurements = options['number'] span = end_timestamp - start_timestamp start = time() with gauged.writer as writer: data = [ 'foobar', 0 ] gauges = [ data ] add = writer.add for timestamp in xrange(start_timestamp, end_timestamp, span // measurements): data[1] = random() add(gauges, timestamp=timestamp) elapsed = time() - start print 'Wrote %s measurements in %s seconds (%s/s) (rss: %s)' % (number, round(elapsed, 3), abbreviate_number(measurements / elapsed), peak_rss()) statistics = gauged.statistics() byte_count = statistics.byte_count print 'Gauge data uses %s (%s per measurement)' % (abbreviate_bytes(byte_count), abbreviate_bytes(byte_count / float(measurements))) # Read benchmarks for aggregate in ( 'min', 'max', 'sum', 'count', 'mean', 'stddev', 'median' ): start = time() gauged.aggregate('foobar', aggregate) elapsed = time() - start print '%s() in %ss (read %s measurements/s) (rss: %s)' % (aggregate, round(elapsed, 3), abbreviate_number(measurements / elapsed), peak_rss())