graphyte
========
.. image:: https://img.shields.io/pypi/v/graphyte.svg
:target: https://pypi.org/project/graphyte/
:alt: graphyte on PyPI (Python Package Index)
.. image:: https://github.com/benhoyt/graphyte/actions/workflows/tests.yml/badge.svg
:target: https://github.com/benhoyt/graphyte/actions/workflows/tests.yml
:alt: GitHub Actions Tests
graphyte is a small Python library that sends data to a Graphite metrics
server (Carbon). We wrote it because the existing `graphitesend`_ library
didn’t support Python 3, and it also required gevent for asyncronous use.
graphyte is tested on Python 3.5+ as well as Python 2.7, and uses the
standard library’s ``threading`` module for asynchronous use.
The library is `on the Python Package Index (PyPI)`_, so to install it, fire up
a command prompt, activate your virtualenv if you’re using one, and type:
::
pip install graphyte
Using graphyte is simple – just call ``init()`` to initialize the default
sender and then ``send()`` to send a message. For example, to send
``system.sync.foo.bar 42 {timestamp}\n`` to graphite.example.com:2003
synchronously:
.. code:: python
import graphyte
graphyte.init('graphite.example.com', prefix='system.sync')
graphyte.send('foo.bar', 42)
If you want to send asynchronously on a background thread (for example, in a
web server context), just specify a send interval. For example, this will
setup a background thread to send every 10 seconds:
.. code:: python
graphyte.init('graphite.example.com', prefix='system.async', interval=10)
graphyte.send('foo.bar', 42)
If you want to send tagged metrics, the usage is as follows:
.. code:: python
graphite.send('foo.bar', 42, tags={'ding': 'dong'})
For more advanced usage, for example if you want to send to multiple servers
or if you want to subclass ``Sender``, you can instantiate instances of
``Sender`` directly. For example, to instantiate two senders sending to
different servers (one synchronous, one using a background thread with send
interval 10 seconds), use something like the following:
.. code:: python
sender1 = graphyte.Sender('graphite1.example.com', prefix='system.one')
sender2 = graphyte.Sender('graphite2.example.com', prefix='system.two', interval=10)
sender1.send('foo.bar1', 42)
sender2.send('foo.bar2', 43)
If you want to send via UDP instead of TCP, just add ``protocol='udp'`` to
the ``init()`` or ``Sender()`` call.
Or, to customize how messages are logged or sent to the socket, subclass
``Sender`` and override ``send_message`` (or even ``send_socket`` if you
want to override logging and exception handling):
.. code:: python
class CustomSender(graphyte.Sender):
def send_message(self, message):
print('Sending bytes in some custom way: {!r}'.format(message))
By default, exceptions that occur when sending a message are logged. If you
want to raise and propagate exceptions instead, instantiate ``Sender`` with
``raise_send_errors=True``. It's an error to set ``raise_send_errors`` when
``interval`` is specified.
Socket sending errors are logged using the Python logging system (using
logger name “graphyte”). If the sender is initialized with
``log_sends=True``, all sends are logged at the INFO level.
You can also use graphyte to send metrics directly from the command line:
::
python -m graphyte foo.bar 42
There are command line arguments to specify the server and port and other
configuration. Type ``python -m graphyte --help`` for help.
Read the code in `graphyte.py`_ for more details – it’s pretty small!
graphyte was written by `Ben Hoyt`_ and is licensed with a
permissive MIT license (see `LICENSE.txt`_).
**Related work:** `delphid`_ has a fork of graphyte which supports the statsd
protocol. See the changes on `delphid's branch`_.
.. _graphitesend: https://github.com/daniellawrence/graphitesend
.. _on the Python Package Index (PyPI): https://pypi.python.org/pypi/graphyte
.. _graphyte.py: https://github.com/benhoyt/graphyte/blob/master/graphyte.py
.. _Ben Hoyt: http://benhoyt.com/
.. _LICENSE.txt: https://github.com/benhoyt/graphyte/blob/master/LICENSE.txt
.. _delphid: https://github.com/delphid
.. _delphid's branch: https://github.com/benhoyt/graphyte/compare/master...delphid:statsd_message_style?expand=1
Raw data
{
"_id": null,
"home_page": "https://github.com/benhoyt/graphyte",
"name": "graphyte",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "",
"author": "Ben Hoyt",
"author_email": "benhoyt@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/90/d8/516d885a705a341c6c681b8407350378f2b0f485056338166e4a108c8bec/graphyte-1.7.1.tar.gz",
"platform": "",
"description": "graphyte\n========\n\n.. image:: https://img.shields.io/pypi/v/graphyte.svg\n :target: https://pypi.org/project/graphyte/\n :alt: graphyte on PyPI (Python Package Index)\n\n.. image:: https://github.com/benhoyt/graphyte/actions/workflows/tests.yml/badge.svg\n :target: https://github.com/benhoyt/graphyte/actions/workflows/tests.yml\n :alt: GitHub Actions Tests\n\n\ngraphyte is a small Python library that sends data to a Graphite metrics\nserver (Carbon). We wrote it because the existing `graphitesend`_ library\ndidn\u2019t support Python 3, and it also required gevent for asyncronous use.\ngraphyte is tested on Python 3.5+ as well as Python 2.7, and uses the\nstandard library\u2019s ``threading`` module for asynchronous use.\n\nThe library is `on the Python Package Index (PyPI)`_, so to install it, fire up\na command prompt, activate your virtualenv if you\u2019re using one, and type:\n\n::\n\n pip install graphyte\n\nUsing graphyte is simple \u2013 just call ``init()`` to initialize the default\nsender and then ``send()`` to send a message. For example, to send\n``system.sync.foo.bar 42 {timestamp}\\n`` to graphite.example.com:2003\nsynchronously:\n\n.. code:: python\n\n import graphyte\n graphyte.init('graphite.example.com', prefix='system.sync')\n graphyte.send('foo.bar', 42)\n\nIf you want to send asynchronously on a background thread (for example, in a\nweb server context), just specify a send interval. For example, this will\nsetup a background thread to send every 10 seconds:\n\n.. code:: python\n\n graphyte.init('graphite.example.com', prefix='system.async', interval=10)\n graphyte.send('foo.bar', 42)\n\nIf you want to send tagged metrics, the usage is as follows:\n\n.. code:: python\n\n graphite.send('foo.bar', 42, tags={'ding': 'dong'})\n\nFor more advanced usage, for example if you want to send to multiple servers\nor if you want to subclass ``Sender``, you can instantiate instances of\n``Sender`` directly. For example, to instantiate two senders sending to\ndifferent servers (one synchronous, one using a background thread with send\ninterval 10 seconds), use something like the following:\n\n.. code:: python\n\n sender1 = graphyte.Sender('graphite1.example.com', prefix='system.one')\n sender2 = graphyte.Sender('graphite2.example.com', prefix='system.two', interval=10)\n sender1.send('foo.bar1', 42)\n sender2.send('foo.bar2', 43)\n\nIf you want to send via UDP instead of TCP, just add ``protocol='udp'`` to\nthe ``init()`` or ``Sender()`` call.\n\nOr, to customize how messages are logged or sent to the socket, subclass\n``Sender`` and override ``send_message`` (or even ``send_socket`` if you\nwant to override logging and exception handling):\n\n.. code:: python\n\n class CustomSender(graphyte.Sender):\n def send_message(self, message):\n print('Sending bytes in some custom way: {!r}'.format(message))\n\nBy default, exceptions that occur when sending a message are logged. If you\nwant to raise and propagate exceptions instead, instantiate ``Sender`` with\n``raise_send_errors=True``. It's an error to set ``raise_send_errors`` when\n``interval`` is specified.\n\nSocket sending errors are logged using the Python logging system (using\nlogger name \u201cgraphyte\u201d). If the sender is initialized with\n``log_sends=True``, all sends are logged at the INFO level.\n\nYou can also use graphyte to send metrics directly from the command line:\n\n::\n\n python -m graphyte foo.bar 42\n\nThere are command line arguments to specify the server and port and other\nconfiguration. Type ``python -m graphyte --help`` for help.\n\nRead the code in `graphyte.py`_ for more details \u2013 it\u2019s pretty small!\n\ngraphyte was written by `Ben Hoyt`_ and is licensed with a\npermissive MIT license (see `LICENSE.txt`_).\n\n**Related work:** `delphid`_ has a fork of graphyte which supports the statsd\nprotocol. See the changes on `delphid's branch`_.\n\n\n.. _graphitesend: https://github.com/daniellawrence/graphitesend\n.. _on the Python Package Index (PyPI): https://pypi.python.org/pypi/graphyte\n.. _graphyte.py: https://github.com/benhoyt/graphyte/blob/master/graphyte.py\n.. _Ben Hoyt: http://benhoyt.com/\n.. _LICENSE.txt: https://github.com/benhoyt/graphyte/blob/master/LICENSE.txt\n.. _delphid: https://github.com/delphid\n.. _delphid's branch: https://github.com/benhoyt/graphyte/compare/master...delphid:statsd_message_style?expand=1",
"bugtrack_url": null,
"license": "MIT License",
"summary": "Python 3 compatible library to send data to a Graphite metrics server (Carbon)",
"version": "1.7.1",
"project_urls": {
"Homepage": "https://github.com/benhoyt/graphyte"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "90d8516d885a705a341c6c681b8407350378f2b0f485056338166e4a108c8bec",
"md5": "3007d278984fb4e0df44800ef3f07ce6",
"sha256": "5c6061f32375ea9de8cccd78b259c928670fbabcf6fd4ddbf160e77124289be2"
},
"downloads": -1,
"filename": "graphyte-1.7.1.tar.gz",
"has_sig": false,
"md5_digest": "3007d278984fb4e0df44800ef3f07ce6",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 8713,
"upload_time": "2022-01-23T21:45:48",
"upload_time_iso_8601": "2022-01-23T21:45:48.828772Z",
"url": "https://files.pythonhosted.org/packages/90/d8/516d885a705a341c6c681b8407350378f2b0f485056338166e4a108c8bec/graphyte-1.7.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2022-01-23 21:45:48",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "benhoyt",
"github_project": "graphyte",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "graphyte"
}