コード例 #1
0
    def setUp(self):
        host, http_api_port, self._tear_down = setup_influxdb_in_docker(
            _INFLUXDB_DOCKERHUB_REPOSITORY, _INFLUXDB_VERSION)

        self._influxdb_client = InfluxDBClient(host, http_api_port, _INFLUXDB_USER, _INFLUXDB_PASSWORD)
        self._influxdb_client.create_database(_INFLUXDB_DATABASE)

        connection_config = InfluxDBConnectionConfig(
            host, http_api_port, _INFLUXDB_USER, _INFLUXDB_PASSWORD, _INFLUXDB_DATABASE)

        self._logger = InfluxDBLogger(connection_config, buffer_latency=None)
コード例 #2
0
class TestInfluxDBLoggger(unittest.TestCase):
    """
    Tests for `InfluxDBLogger`.
    """
    def setUp(self):
        host, http_api_port, self._tear_down = setup_influxdb_in_docker(
            _INFLUXDB_DOCKERHUB_REPOSITORY, _INFLUXDB_VERSION)

        self._influxdb_client = InfluxDBClient(host, http_api_port, _INFLUXDB_USER, _INFLUXDB_PASSWORD)
        self._influxdb_client.create_database(_INFLUXDB_DATABASE)

        connection_config = InfluxDBConnectionConfig(
            host, http_api_port, _INFLUXDB_USER, _INFLUXDB_PASSWORD, _INFLUXDB_DATABASE)

        self._logger = InfluxDBLogger(connection_config, buffer_latency=None)

    def tearDown(self):
        self._tear_down()

    def _get_all_points(self) -> List[Dict]:
        """
        Gets all points within all tables.
        :return: all points within all tables
        """
        retrieved = self._influxdb_client.query("select * from /.*/", database=_INFLUXDB_DATABASE)
        return list(retrieved.get_points())

    def test_record_value(self):
        log = Log("measured", 123, {"host": "1"}, datetime(2015, 3, 2, 23, 59, 59, 500001, tzinfo=timezone.utc))
        self._logger.record(log.measured, log.value, log.metadata, log.timestamp)
        self._logger.record(log.measured, 456)

        retrieved = self._influxdb_client.query("select * from measured where host = '1'", database=_INFLUXDB_DATABASE)
        self.assertEqual(len(list(retrieved.get_points())), 1)
        retrieved_point = list(retrieved.get_points())[0]

        self.assertEqual(retrieved_point["host"], log.metadata["host"])
        # Note: InfluxDB does not like milliseconds - ensure that they've been rounded
        self.assertEqual(json.loads(retrieved_point["time"], cls=DatetimeISOFormatJSONDecoder), datetime(2015, 3, 3, tzinfo=timezone.utc))
        self.assertEqual(retrieved_point["value"], log.value)

    def test_record_named_values(self):
        values = {
            "a": 1,
            "b": 2
        }
        log = Log("measured", values, timestamp=datetime(2015, 3, 2, tzinfo=timezone.utc))
        self._logger.record(log.measured, log.values, log.metadata, log.timestamp)

        points = self._get_all_points()
        self.assertEqual(len(points), 1)

        self.assertEqual(points[0]["a"], log.values["a"])
        self.assertEqual(points[0]["b"], log.values["b"])

    @unittest.skip("Flaky test")
    def test_record_when_static_tags(self):
        self._logger.static_tags = {"host": "1"}

        log = Log("measured", 123)
        self._logger.record(log.measured, log.value)

        # Buffer to protect against case where local clock is not in sync with clock used by InfluxDB:
        # https://github.com/influxdata/influxdb/issues/192#issuecomment-32908071
        retrieved = self._influxdb_client.query("select * from measured where host = '1' and time < now + 24h",
                                                database=_INFLUXDB_DATABASE)
        retrieved_point = list(retrieved.get_points())[0]

        self.assertEqual(retrieved_point["value"], log.value)

    def test_flush_with_empty_buffer(self):
        self._logger.flush()
        self.assertEqual(len(self._get_all_points()), 0)

    def test_flush_with_buffer(self):
        self._logger.buffer_latency_in_seconds = timedelta(days=999).total_seconds()

        self._logger.record("measured", 123, timestamp=datetime(2016, 1, 1))
        self.assertEqual(len(self._get_all_points()), 0)
        self._logger.flush()
        self.assertEqual(len(self._get_all_points()), 1)
        self._logger.flush()
        self.assertEqual(len(self._get_all_points()), 1)
        self._logger.record("measured", 456, timestamp=datetime(2016, 1, 10))
        self.assertEqual(len(self._get_all_points()), 1)
        self._logger.flush()
        self.assertEqual(len(self._get_all_points()), 2)