from influxdb import InfluxDBClient
from influxdb import SeriesHelper
import configparser
import logging
import protocol
class MySeriesHelper(SeriesHelper):
# Meta class stores time series helper configuration.
class Meta:
# The client should be an instance of InfluxDBClient.
#client = myclient
# The series name must be a string. Add dependent fields/tags in curly brackets.
series_name = '{measurement}'
# Defines all the fields in this time series.
fields = ['value']
# Defines all the tags for the series.
tags = ['measurement']
# Defines the number of data points to store prior to writing on the wire.
bulk_size = 5
# autocommit must be set to True when using bulk_size
autocommit = True
class Database:
def __init__(self, config):
self.logger = logging.getLogger('hydrobot')
host = config.get("database", "host")
port = config.get("database", "port")
username = config.get("database", "username")
password = config.get("database", "password")
database = config.get("database", "database")
self.name = config.get("system", "name")
try:
self.client = InfluxDBClient(host, port, username, password, database)
MySeriesHelper.Meta.client = self.client
MySeriesHelper.Meta.series_name = self.name + '.{measurement}'
self.logger.info("Connected to database")
except:
self.logger.error("Could not connect to database")
# To manually submit data points which are not yet written, call commit:
#MySeriesHelper.commit()
def log_message(self, name, message):
data_name = protocol.lookup_data_name_by_key(message.data_key)
if not data_name == None:
if message.sensor_num > 0:
num = "_" + str(message.sensor_num)
else:
num = ""
try:
self.logger.debug("Database log: " + name + "." + data_name + num)
MySeriesHelper(measurement=(name + "." + data_name + num), value=(float)(message.data))
except:
self.logger.error("Database issue!")
else:
self.logger.warning("Unknown data key: " + str(message))