Skip to main content

dataRT Python Library

About

What does dataRT do?

dataRT is a drop-in replacement for the InfluxDBClient which writes data to InfluxDB while simultaneously echoing the points to a WebSocket. This allows you to view the data in real-time in a web browser or other client.

What scenario would I need this for?

dataRT is designed to be used where the InfluxDBClient is already being used but constantly querying InfluxDB does not provide adequate real-time access to your data. By creating a client webpage you can display the data in real time while simultaneously recording the points in InfluxDB for examination at a later date.

What if I don't want to use InfluxDB?

No problem! InfluxDB is not a requirement to use dataRT. If the influx_url argument is set to None, dataRT will echo the data to a WebSocket, but not attempt to send data to an InfluxDB instance.

Installation

PyPi

> pip install dataRT

Setuptools

> python setup.py install

Usage

Single-Thread Application

If you are constrained for resources, you can use the CoreClient object.

It is highly recommended that you monkey-patch using gevent when using this technique.

To start, import the CoreClient:

from dataRT import CoreClient

Then create a client:

client = CoreClient(influx_url=None, debug=True)

The CoreClient takes these arguments, all are optional:

Keyword Default Description
host '0.0.0.0' Bind host for the WebSocket
port 8080 Bind port for the WebSocket
influx_url 'localhost' URL for InfluxDB. Note: if this is set to None no attempt to connect to an InfluxDB instance will be made
influx_port 8086 Port for InfluxDB
influx_user None Username for InfluxDB
influx_pass None Password for InfluxDB
influx_db 'example' Database for InfluxDB
websocket_path r'/ws' Base path for accessing WebSocket resources
debug False Show debug messages

Define a "action" function then start the dataRT loop. This function will be constantly called as the dataRT runs through its maintenance loop:

def action(possible_arg, possible_kwarg=100):
    print(possible_arg)
    print(possible_kwarg)

client.run_in_loop(action, 'possible_arg', possible_kwarg=1000)

Once run_in_loop is called, the client blocks until client.stop() is called or the program exits.

Available client functions:

Method Arguments Description
write_points points, *args, **kwargs Writes points to the WebSocket and InfluxDB instance. points are used for the WebSocket, all other args are passed to the InfluxDBClient
query *args, **kwargs Passes a query to the InfluxDBClient
create_database *args, **kwargs Passes a create_database to the InfluxDBClient
serve_forever None Blocks and serves the WebSocket forever
start None Starts the WebSocket server
stop None Stops the WebSocket server
run_in_loop actions, *args, **kwargs Blocks and serves the WebSocket forever, but calls the actions function every loop with the provided *args and **kwargs

Available client properties:

Property Can be set? Type Description
is_serving No bool Returns True if the WebSocket is currently being served
influx_client No InfluxDBClient Returns the InfluxDBClient object to be used with more complex InfluxDB operations
ws_on_message Yes function Function to call when the WebSocket receives a new message. Should accept 2 args for the WebSocket client and the message (string)
ws_on_connect Yes function Function to call when the WebSocket connects. Should accept 1 arg for the WebSocket client
ws_on_disconnect Yes function Function to call when the WebSocket disconnects. Should accept 1 arg for the WebSocket client

Multi-Process Application

If you need more reliability or want to avoid your code possibly blocking dataRT background tasks, use the Client object.

To start, import the Client:

from dataRT import Client

Then create a client:

client = Client(influx_url=None, debug=True)

The Client takes these arguments, all are optional:

Keyword Default Description
host '0.0.0.0' Bind host for the WebSocket
port 8080 Bind port for the WebSocket
influx_url 'localhost' URL for InfluxDB. Note: if this is set to None no attempt to connect to an InfluxDB instance will be made
influx_port 8086 Port for InfluxDB
influx_user None Username for InfluxDB
influx_pass None Password for InfluxDB
influx_db 'example' Database for InfluxDB
websocket_path r'/ws' Base path for accessing WebSocket resources
debug False Show debug messages

Once the client is defined, you can start it:

client.start()

Once start is called, the client will start in another process and continue serving until client.stop() is called or the program exits.

Available client functions:

Method Arguments Description
write_points points Writes points to the WebSocket and InfluxDB instance
start None Starts the WebSocket server
stop None Stops the WebSocket server

Where is my WebSocket?

The WebSocket associates itself with the client route on the WebSocket path: ws:\\<host>:<port>\<ws route>\client.

For the default settings, this would be ws:\\0.0.0.0:8080\ws\client

Examples

Examples can be found in the examples directory.

Library Usage

  • gevent_example.py shows how to integrate the dataRT client in a single-threaded application using gevent. (Note: using this method you must be careful not to block the process from running maintenance for the WebSocket connection otherwise you may encounter issues)
  • multiprocess_example.py shows how to use the dataRT client as a drop-in-place replacement for the InfluxDBClient by leveraging a separate process (Note: This does consume more system resources, use the gevent method if you are working in a resource-constrained environment)

HTML/JS

  • view_data.html uses basic jQuery to write each piece of data that is received onto the page in a table.
  • plot_data.html uses the Chart.js library to plot each point onto a line graph in real time.

Licensing

This project is licensed under the MIT license. No warranty is provided, use at your own risk.

Metadata

Release files for dataRT 0.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dataRT 0.1.2
File Size Uploaded
dataRT-0.1.2.tar.gz 10.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for dataRT 0.1.2
File Interpreter ABI Platform
dataRT-0.1.2-py3-none-any.whl Python 3 none any Details

Total release size: 18.8 kB

Release files / dataRT-0.1.2.tar.gz

Download URL dataRT-0.1.2.tar.gz
Size 10.2 kB
Tags Source
SHA-256 checksum
How to use checksums
d67e3071da0621f7249db99494a57a98caa3db58032633a381f570a040db988a
BLAKE2b-256 checksum
How to use checksums
122355093c36fd12e6eb45c1c9a1cdc5ed5ccf54c18ea9a9e213b2daa7feb78c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / dataRT-0.1.2-py3-none-any.whl

Download URL dataRT-0.1.2-py3-none-any.whl
Size 8.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
86333b4a8839b3b95d3cd1f38608c34d581486a6fa801a95ada65e88803bad3a
BLAKE2b-256 checksum
How to use checksums
7ac917876be6ad946d56af816a39e7f3c3f06ac7ac0c2fc963f4bf8320a5ddce
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

This release

0.1.2 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page