From 4bd03e08b49a90ec693f0f32950b5ba35857ead7 Mon Sep 17 00:00:00 2001 From: 19201080 Date: Fri, 11 Dec 2020 20:09:20 +0100 Subject: [PATCH 1/3] Replace influxdb with influxdb-client in the requirements --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index e21c3d6..260e80e 100644 --- a/setup.py +++ b/setup.py @@ -35,7 +35,7 @@ def read(filename): ] }, - install_requires=['influxdb', 'pyserial-asyncio'], + install_requires=['influxdb-client', 'pyserial-asyncio'], setup_requires=['pytest-runner'], tests_require=['pytest'], From 8322962573640a86873398304188abcb02cfb9e5 Mon Sep 17 00:00:00 2001 From: 19201080 Date: Fri, 11 Dec 2020 20:12:48 +0100 Subject: [PATCH 2/3] Remove methods ensure_database and delete from DatabaseConnector --- sensorflux/database_connector.py | 9 --------- 1 file changed, 9 deletions(-) diff --git a/sensorflux/database_connector.py b/sensorflux/database_connector.py index 7227815..89ff599 100644 --- a/sensorflux/database_connector.py +++ b/sensorflux/database_connector.py @@ -37,7 +37,6 @@ def __init__(self, measurement, device, fields): self._measurement = measurement self._device = device self._fields = fields - self._ensure_database() @property def client(self): @@ -55,11 +54,6 @@ def device(self): def fields(self): return self._fields - def _ensure_database(self): - db_list = (el['name'] for el in self.client.get_list_database()) - if self.database_name not in db_list: - self.client.create_database(self.database_name) - def check_data(self, data): """ Checks that the data is in a valid format. Returns true if yes. @@ -104,6 +98,3 @@ def write(self, data): point = self.data_to_point(data) successful = self.client.write_points([point]) return successful - - def delete_data(self): - self.client.delete_series(tags={'device': self.device}) From 04450f79450fccd4e300b75a2c8ba13af13677b4 Mon Sep 17 00:00:00 2001 From: 19201080 Date: Fri, 11 Dec 2020 20:29:38 +0100 Subject: [PATCH 3/3] Adapt DatabaseConnector to influxdb-client library and switch to async write method --- sensorflux/database_connector.py | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/sensorflux/database_connector.py b/sensorflux/database_connector.py index 89ff599..d482f9f 100644 --- a/sensorflux/database_connector.py +++ b/sensorflux/database_connector.py @@ -10,7 +10,8 @@ from datetime import datetime -from influxdb import InfluxDBClient +from influxdb_client import InfluxDBClient +from influxdb_client.client.write_api import ASYNCHRONOUS class DatabaseConnector: @@ -23,17 +24,16 @@ class DatabaseConnector: """ host = 'localhost' port = 8086 - username = 'admin' - password = 'admin' - database_name = 'sensorflux' + bucket = 'sensorflux' + token = 'admin' + org = 'admin' def __init__(self, measurement, device, fields): self._client = InfluxDBClient( - host=self.host, - port=self.port, - username=self.username, - password=self.password, - database=self.database_name) + url=f'http://{self.host}:{self.port}', + token=self.token, + org=self.org) + self.write_api = self.client.write_api(write_options=ASYNCHRONOUS) self._measurement = measurement self._device = device self._fields = fields @@ -86,15 +86,14 @@ def data_to_point(self, data): def write(self, data): r""" - Sends data to influxdb. Returns true if successful. + Sends data to influxdb. :param dict data: measurement data as a dict optionally containing a timestamp in ISO 8601 format, and containing any of 'temp', 'atmo' or 'humi' values. - :rtype: bool """ if not self.check_data(data): return False point = self.data_to_point(data) - successful = self.client.write_points([point]) - return successful + result = self.write_api.write(bucket=self.bucket, record=point) + result.get()