Skip to main content

Opinionated InfluxDB client

Project description

Grafane

A very opinionated InfluxDB client that uses the official python client and is inspired by Grafana's query builder.

Setup

Installation

poetry add grafane

Environment Variables

Variable Default Description
INFLUXDB_HOST 0.0.0.0 InfluxDB host
INFLUXDB_PORT 8086 InfluxDB port
INFLUXDB_DB metrics Database name
INFLUXDB_USER admin Username
INFLUXDB_USER_PASSWORD admin123 Password
TESTING 0 If set, appends -testing to metric names

Quick Start

from grafane import Grafane

# Write
c = Grafane(metric='temperature')
c.report({'value': 23.5}, {'room': 'living'})

# Read
results = c.select(fields='value').filter_by('room', '=', 'living').execute_query()

Write

report()

c.report(fields, tags, timestamp=False)

report_points()

c.report_points([
    {'fields': {'value': 1.2}, 'tags': {'tag1': 'a'}},
    {'fields': {'value': 1.8}, 'tags': {'tag1': 'b'}},
])

If no timestamp is provided, defaults to datetime.now(pytz.utc).

Read

Chainable Query API

All query methods return self and can be chained:

results = (
    c.select(fields=['value', 'value2'], aggregation='mean')
    .filter_by('tag1', '=', 'value1')
    .time_block('1h')
    .fill_with('none')
    .execute_query()
)

select()

# Single field
c.select(fields='value')

# Multiple fields
c.select(fields=['value', 'value2'])

# With aggregation
c.select(fields='value', aggregation='sum')

# Multiple fields with different aggregations
c.select(fields=['value', 'value2'], aggregation=['sum', 'mean'])

filter_by()

Filter by tag with an operator:

c.filter_by('tag1', '=', 'value1')

Supported operators: =, !=, <, >, <=, >=, =~ (regex)

filter_value_in()

Match tags against multiple values:

c.filter_value_in('tag1', ['value1', 'value2'])

filter_time_range()

from datetime import datetime

time_range = (datetime(2024, 1, 1), datetime(2024, 1, 31))
c.filter_time_range(time_range)

Accepts tuple or list of datetime objects. Order doesn't matter.

time_block()

Group results by time intervals:

c.select(fields='value', aggregation='mean').time_block('1h')

fill_with()

Fill empty time blocks:

c.fill_with('none')

Options: none, null, 0, previous, linear

group_by()

Group by tag values (requires aggregation):

c.select(fields='value', aggregation='sum').group_by('tag1')

Iteration, Length, and Boolean

# Iterate directly
for row in c.select(fields='value'):
    print(row)

# Check result count
count = len(c.select(fields='value'))

# Boolean check
if c.select(fields='value').filter_by('tag1', '=', 'x'):
    print("Has results")

Drop Measurement

c = Grafane(metric='test')
c.drop_measurement()

Development

Docker Setup

Start services:

ahoy docker up

Services:

Jupyter Notebooks

ahoy notebooks run

Notebooks are stored in .notebooks/ directory.

Environment Files

Copy .env.copy to .env:

cp .env.copy .env

Contents:

INFLUXDB_DATA_ENGINE=tsm1
INFLUXDB_DB=metrics
INFLUXDB_USER=admin
INFLUXDB_PASSWORD=admin123

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

grafane-1.0.0.tar.gz (17.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

grafane-1.0.0-py3-none-any.whl (18.4 kB view details)

Uploaded Python 3

File details

Details for the file grafane-1.0.0.tar.gz.

File metadata

  • Download URL: grafane-1.0.0.tar.gz
  • Upload date:
  • Size: 17.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.3 CPython/3.13.11 Darwin/25.3.0

File hashes

Hashes for grafane-1.0.0.tar.gz
Algorithm Hash digest
SHA256 ec1c8a03b8849aa38878a2bbef4c50e92bc882dbb47e6770f23fdb010739e12d
MD5 f335b35d8730c284c035cb8eb5c58c51
BLAKE2b-256 7b665857f5ab4dc7ed3f8c32d01c92f77f8217255bcc6875a015b3d43c2c7e20

See more details on using hashes here.

File details

Details for the file grafane-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: grafane-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 18.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.3 CPython/3.13.11 Darwin/25.3.0

File hashes

Hashes for grafane-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5fe958fdbdf5006a118c348619c7f3172295907cd8034a932dae11ab5ef468fa
MD5 83d3ce1c647379d3e2f2a0b72ce96637
BLAKE2b-256 2b4c2bdc899519539468c3ab58ae0df67eb7c3e7979daeceddf734f4ecc5e652

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page