Skip to main content

A Python client library for PlotJuggling JSON UDP API

Project description

PyPlotJuggling

PyPlotJuggling is a Python library for sending data over UDP, with a focus on providing analytics about the data transmission. It's designed to be used in applications where you need to stream data to a remote endpoint and monitor the performance of the data transfer.

Installation

You can install PyPlotJuggling using pip:

pip install pyplotjuggling

Usage

The main component of PyPlotJuggling is the PortJugglerClient, which is used to send data to a specified IP address and port. It also provides analytics about the data being sent.

Basic Usage

Here's a simple example of how to use PortJugglerClient:

from PyPlotJuggling import PlotJugglerClient, PJData
import time

# Create a client
client = PlotJugglerClient("127.0.0.1", 12345)

# Send some data
for i in range(10):
    data = PJData(values={"value": i})
    client.send(data)
    time.sleep(0.1)

# Close the client
client.close()

Analytics

PortJugglerClient can provide analytics about the data being sent. There are four analytics modes, which can be set using the analytics parameter in the constructor:

  • AnalyticsMode.OFF: No analytics are collected. This is the default.
  • AnalyticsMode.BASIC: Basic analytics are collected, but not sent with the data. You can get the analytics by calling the get_analytics() method.
  • AnalyticsMode.IN_JUGGLER: The analytics data is included in the data sent to the remote endpoint. The analytics data is added to the values dictionary of the PJData object, under the key "analytics".
  • AnalyticsMode.PERIODIC: Analytics are logged periodically to the console. The interval can be set with the periodic_interval parameter.

Here's an example of how to use the IN_JUGGLER analytics mode:

from PyPlotJuggling import PlotJugglerClient, PJData, AnalyticsMode
import time

# Create a client with IN_JUGGLER analytics mode
client = PlotJugglerClient("127.0.0.1", 12345, analytics=AnalyticsMode.IN_JUGGLER)

# Send some data
for i in range(10):
    data = PJData(values={"value": i})
    client.send(data)
    time.sleep(0.1)

# Close the client
client.close()

Analytics Data

The analytics data is provided as an AnalyticsModel object, which has the following fields:

  • num_values: The number of values in the last sent PJData object.
  • frequency: The momentary frequency of messages sent, in Hz.
  • duration: The total duration of the client's life, in seconds.
  • rate: The momentary rate of data sent, in bytes per second.
  • ow_warning: A boolean that is set to True if the analytics key is already present in the PJData object's values dictionary when using IN_JUGGLER mode.
  • window_size: The size of the analytics window in seconds.

Periodic Analytics with Callback

When using AnalyticsMode.PERIODIC, you can also provide a callback function to process the analytics data.

from PyPlotJuggling import PlotJugglerClient, PJData, AnalyticsMode, AnalyticsModel
import time


def my_analytics_callback(analytics: AnalyticsModel):
    print(f"Custom callback: {analytics.frequency:.2f} Hz")


# Create a client with a callback
client = PlotJugglerClient(
    "127.0.0.1",
    12345,
    analytics=AnalyticsMode.PERIODIC,
    periodic_interval=1.0,
    analytics_callback=my_analytics_callback
)

# Send data for a few seconds
for i in range(50):
    data = PJData(values={"value": i})
    client.send(data)
    time.sleep(0.1)

client.close()

Contributing

Contributions are welcome! Please see CONTRIBUTING.md for details.

License

This project is licensed under the terms of the LICENSE file.

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

pyplotjuggling-1.0.2.tar.gz (5.6 kB view details)

Uploaded Source

Built Distribution

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

pyplotjuggling-1.0.2-py3-none-any.whl (6.0 kB view details)

Uploaded Python 3

File details

Details for the file pyplotjuggling-1.0.2.tar.gz.

File metadata

  • Download URL: pyplotjuggling-1.0.2.tar.gz
  • Upload date:
  • Size: 5.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pyplotjuggling-1.0.2.tar.gz
Algorithm Hash digest
SHA256 18fc695fa58c8d0ff6be8dbc35cdb92ede1d59901fd9c27422e63d3a090e7618
MD5 e12eb02092b190f0f84edf8a37c213df
BLAKE2b-256 430931f9e51ed547e1011985e6e1214c40a7dad52a1fcacee4a94405f8489793

See more details on using hashes here.

File details

Details for the file pyplotjuggling-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: pyplotjuggling-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 6.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pyplotjuggling-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 034561b85073113ef08b3aca89426305e49ec8c8a02d4f5b0b748292a38f58d2
MD5 c6c11ee9bf99e98b56f21cae9333e801
BLAKE2b-256 4394ac331f19232c2aa47a85a4749e1c4ca7b4559f03a93e5361338231da4dbb

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