influxalchemy/client.py
"""
InfluxAlchemy Client.
"""
from influxalchemy import query
from influxalchemy.measurement import Measurement
class InfluxAlchemy:
"""
InfluxAlchemy database session.
client (InfluxDBClient): Connection to InfluxDB database
"""
def __init__(self, client):
self.bind = client
# pylint: disable=protected-access
assert (
self.bind._database is not None
), "InfluxDB client database cannot be None"
def query(self, *entities):
"""
Query InfluxDB entities. Entities are either Measurements or
Tags/Fields.
"""
return query.InfluxDBQuery(entities, self)
def measurements(self):
"""
Get measurements of an InfluxDB.
"""
results = self.bind.query("SHOW MEASUREMENTS;")
for res in results.get_points():
yield Measurement.new(str(res["name"]))
def tags(self, measurement):
"""
Get tags of a measurements in InfluxDB.
"""
tags = self.bind.query("SHOW tag keys FROM %s" % measurement)
pts = sorted(set(t["tagKey"] for t in tags.get_points()))
return pts
def fields(self, measurement):
"""
Get fields of a measurements in InfluxDB.
"""
fields = self.bind.query("SHOW field keys FROM %s" % measurement)
pts = sorted(set(f["fieldKey"] for f in fields.get_points()))
return pts