{ "info": { "author": "SignalFx, Inc", "author_email": "info@signalfx.com", "bugtrack_url": null, "classifiers": [ "Operating System :: OS Independent", "Programming Language :: Python" ], "description": "Python client library for SignalFx\n==================================\n\nThis is a programmatic interface in Python for SignalFx's metadata and\ningest APIs. It is meant to provide a base for communicating with\nSignalFx APIs that can be easily leveraged by scripts and applications\nto interact with SignalFx or report metric and event data to SignalFx.\nIt is also the base for metric reporters that integrate with common\nPython-based metric collections tools or libraries.\n\nInstallation\n------------\n\nTo install with `pip`:\n\n.. code:: console\n\n $ pip install signalfx\n\nTo install from source:\n\n.. code:: console\n\n $ git clone https://github.com/signalfx/signalfx-python.git\n $ cd signalfx-python/\n $ pip install -e .\n\nUsage\n-----\n\nThis client library provides programmatic access to SignalFx's APIs:\n\n* the data ingest API;\n* the metadata REST API;\n* the SignalFlow API.\n\nYou start by instantiating a ``signalfx.SignalFx()`` object, which then gives\nyou access to the API client that you want:\n\n.. code:: python\n\n import signalfx\n\n sfx = signalfx.SignalFx(api_endpoint='https://api.{REALM}.signalfx.com',\n ingest_endpoint='https://ingest.{REALM}.signalfx.com',\n stream_endpoint='https://stream.{REALM}.signalfx.com')\n\n\n # For the ingest API\n ingest = sfx.ingest('ORG_TOKEN')\n\n # For the REST API\n rest = sfx.rest('API_TOKEN')\n\n # For the SignalFlow API\n flow = sfx.signalflow('ACCESS_TOKEN')\n\nIf no endpoints are set manually, this library uses the ``us0`` realm by default.\nIf you are not in this realm, you will need to explicitly set the\nendpoint urls above. To determine if you are in a different realm and need to\nexplicitly set the endpoints, check your profile page in the SignalFx\nweb application. You will also need to specify an access token when requesting\none of those clients. For the ingest client, you need to specify your\norganization access token (which can be obtained from the\nSignalFx organization you want to report data into). For the REST API,\nyou must use your user access token. For the SignalFlow client, either an\norganization access token or a user access token may be used. For more\ninformation on access tokens, see the API's `Authentication documentation`_.\n\n.. _Authentication documentation: https://developers.signalfx.com/basics/authentication.html\n\nReporting data\n~~~~~~~~~~~~~~\n\nBasic usage of the library for reporting data goes as follows:\n\n.. code:: python\n\n import signalfx\n\n with signalfx.SignalFx().ingest('ORG_TOKEN') as sfx:\n sfx.send(\n gauges=[\n {'metric': 'myfunc.time',\n 'value': 532,\n 'timestamp': 1442960607000},\n ...\n ],\n counters=[\n {'metric': 'myfunc.calls',\n 'value': 42,\n 'timestamp': 1442960607000},\n ...\n ],\n cumulative_counters=[\n {'metric': 'myfunc.calls_cumulative',\n 'value': 10,\n 'timestamp': 1442960607000},\n ...\n ])\n\nIf you're sending data from multiple places in your code, you should create\nyour ingest client once and use it throughout your application. Each ingest\nclient instance has an internal queue of datapoints and events that need to be\nsent to SignalFx, as well as an internal thread draining that queue. **When you\nno longer need the client instance, make sure you call** ``.stop()`` **on it to\nensure the queue is fully drained.**\n\n.. code:: python\n\n import signalfx\n\n sfx = signalfx.SignalFx().ingest('ORG_TOKEN')\n try:\n sfx.send(...)\n sfx.send(...)\n finally:\n # Make sure that everything gets sent.\n sfx.stop()\n\nThe ``timestamp`` must be a millisecond precision timestamp; the number of\nmilliseconds elapsed since Epoch. The ``timestamp`` field is optional, but\nstrongly recommended. If not specified, it will be set by SignalFx's ingest\nservers automatically; in this situation, the timestamp of your datapoints will\nnot accurately represent the time of their measurement (network latency,\nbatching, etc. will all impact when those datapoints actually make it to\nSignalFx).\n\nWhen sending datapoints with multiple calls to ``send()``, it is recommended to\nre-use the same SignalFx client object for each ``send()`` call.\n\nIf you must use multiple client objects for the same token, which is not\nrecommended, it is important to call ``stop()`` after making all ``send()``\ncalls. Each SignalFx client object uses a background thread to send datapoints\nwithout blocking the caller. Calling ``stop()`` will gracefully flush the\nthread's send queue and close its TCP connections.\n\nSending multi-dimensional data\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nReporting dimensions for the data is also optional, and can be accomplished by\nspecifying a ``dimensions`` parameter on each datapoint containing a dictionary\nof string to string key/value pairs representing the dimensions:\n\n.. code:: python\n\n import signalfx\n\n with signalfx.SignalFx().ingest('ORG_TOKEN') as sfx:\n sfx.send(\n gauges=[\n {\n 'metric': 'myfunc.time',\n 'value': 532,\n 'timestamp': 1442960607000,\n 'dimensions': {'host': 'server1', 'host_ip': '1.2.3.4'}\n },\n ...\n ], ...)\n\nSee `examples/generic_usecase.py`_ for a complete code sample showing how to\nsend data to SignalFx.\n\n.. _examples/generic_usecase.py: examples/generic_usecase.py\n\nSending events\n~~~~~~~~~~~~~~\n\nEvents can be sent to SignalFx via the ``send_event()`` function. The event\ntype must be specified, and dimensions and extra event properties can be\nsupplied as well.\n\n.. code:: python\n\n import signalfx\n\n with signalfx.SignalFx().ingest('ORG_TOKEN') as sfx:\n sfx.send_event(\n event_type='deployments',\n dimensions={\n 'host': 'myhost',\n 'service': 'myservice',\n 'instance': 'myinstance'},\n properties={\n 'version': '2015.04.29-01'})\n\nMetric metadata and tags\n~~~~~~~~~~~~~~~~~~~~~~~~\n\nThe library includes functions to search, retrieve, and update metric\nmetadata and tags. Deleting tags is also supported.\n\n.. code:: python\n\n import signalfx\n\n with signalfx.SignalFx().rest('ORG_TOKEN') as sfx:\n sfx.update_tag('tag_name',\n description='An example tag',\n custom_properties={'version': 'some_number'})\n\nAWS integration\n~~~~~~~~~~~~~~~\n\nOptionally, the client may be configured to append additional dimensions to all\nmetrics and events sent to SignalFx. One use case for this is to append the AWS\nunique ID of the current host as an extra dimension. For example,\n\n.. code:: python\n\n import signalfx\n from signalfx.aws import AWS_ID_DIMENSION, get_aws_unique_id\n\n sfx = signalfx.SignalFx().ingest('ORG_TOKEN')\n\n # This dimension will be added to all datapoints sent.\n sfx.add_dimensions({AWS_ID_DIMENSION: get_aws_unique_id()})\n\n try:\n sfx.send(\n gauges=[\n {\n 'metric': 'myfunc.time',\n 'value': 532,\n 'timestamp': 1442960607000\n 'dimensions': {'host': 'server1', 'host_ip': '1.2.3.4'}\n },\n ])\n finally:\n sfx.stop()\n\nPyformance reporter\n~~~~~~~~~~~~~~~~~~~\n\n``pyformance`` is a Python library that provides CodaHale-style metrics in a\nvery Pythonic way. We offer a reporter that can report the ``pyformance``\nmetric registry data directly to SignalFx.\n\n.. code:: python\n\n from signalfx.pyformance import (count_calls, count_calls_with_dims,\n gauge, SignalFxReporter)\n\n @count_calls\n def callme():\n # whatever\n pass\n\n @count_calls_with_dims(dimension_key=\"dimension_value\")\n def callme_with_dims():\n # whatever\n pass\n\n sfx = SignalFxReporter(token='ORG_TOKEN')\n sfx.start()\n\n callme()\n callme()\n callme_with_dims()\n callme_with_dims()\n gauge('test').set_value(42)\n\nSee `examples/pyformance_usecase.py`_ for a complete code example using Pyformance.\n\n.. _examples/pyformance_usecase.py: examples/pyformance_usecase.py\n\nExecuting SignalFlow computations\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nSignalFlow is SignalFx's real-time analytics computation language. The\nSignalFlow API allows SignalFx users to execute real-time streaming analytics\ncomputations on the SignalFx platform. For more information, head over to our\nDevelopers documentation:\n\n* `SignalFlow Overview`_\n* `SignalFlow API Reference`_\n\n.. _SignalFlow Overview: https://developers.signalfx.com/signalflow_analytics/signalflow_overview.html\n.. _SignalFlow API Reference: https://developers.signalfx.com/signalflow_reference.html\n\nThe SignalFlow client accepts either an Organization Access Token or a User API Token.\nExecuting a SignalFlow program is very simple with this client library:\n\n.. code:: python\n\n import signalfx\n\n program = \"data('cpu.utilization').mean().publish()\"\n with signalfx.SignalFx().signalflow('ACCESS_TOKEN') as flow:\n print('Executing {0} ...'.format(program))\n computation = flow.execute(program)\n for msg in computation.stream():\n if isinstance(msg, signalfx.signalflow.messages.DataMessage):\n print('{0}: {1}'.format(msg.logical_timestamp_ms, msg.data))\n if isinstance(msg, signalfx.signalflow.messages.EventMessage):\n print('{0}: {1}'.format(msg.timestamp_ms, msg.properties))\n\nMetadata about the streamed timeseries is received from ``.stream()``, but it\nis automatically intercepted by the client library and made available through\nthe ``Computation`` object returned by ``execute()``:\n\n.. code:: python\n\n if isinstance(msg, signalfx.signalflow.messages.DataMessage):\n for tsid, value in msg.data.items():\n metadata = computation.get_metadata(tsid)\n # Display metadata and datapoint value as desired\n\nFor more examples of how to execute SignalFlow computation with this library,\ninterpret and use the returned stream messages, you can look at the simple\nexample in `examples/signalflow/basic.py` or at the `SignalFlow CLI`_ and its\nimplementation which uses this library.\n\n.. _examples/signalflow/basic.py: examples/signalflow/basic.py\n.. _SignalFlow CLI: https://github.com/signalfx/signalflow-cli\n\nBuilding a Pandas DataFrame from SignalFlow output\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nWith the SignalFlow output being programmatically accessible, it's easy to\nconvert this data into any form that you need for further use or analysis. One\nsuch use case is to build a `Pandas DataFrame`_ with the computation's output.\nFor a complete example of how to do this, see\n`examples/signalflow/dataframe.py`.\n\n.. _examples/signalflow/dataframe.py: examples/signalflow/dataframe.py\n.. _Pandas DataFrame: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.html\n\nKnown Issues\n------------\n\nSending only 1 datapoint and not seeing it in the chart\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThe reason you are not seeing the metrics in the chart is because the script\nthat is calling the Python client module is exiting right after calling the\nsend method. The Python client library is mainly targeted towards sending a\ncontinuous stream of metrics and was implemented to be asynchronous.\n\nTo work around this problem (most common in short-lived scripts for example),\nregister an ``atexit`` function to cleanly stop the datapoint sending thread\nwhen your program exits:\n\n.. code:: python\n\n import atexit\n import signalfx\n\n sfx = signalfx.SignalFx().ingest('ORG_TOKEN')\n atexit.register(sfx.stop)\n\nSSLError when working with tags, metrics, dimensions, metrictimeseries, organization\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n.. code:: console\n\n ERROR:root:Posting to SignalFx failed.\n SSLError: hostname 'api.signalfx.com' doesn't match either of '*.signalfuse.com', 'signalfuse.com'.\n\nRoot Cause: SignalFx's API endpoints (``api.signalfx.com``,\n``ingest.signalfx.com`` and ``stream.signalfx.com``) have SSL SNI enabled and\nthe ``urllib3`` module in Python versions prior to 2.7.8 had a bug that causes\nthe above issue. This was fixed in later versions of Python; we recommend using\nPython 2.7.9 or newer when using this library.\n\nExceeding int64 integer sizes\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThe protocol buffer used to transmit data through the ingest API restricts\nintegers and longs to (``-(2**63)`` to ``(2**63)-1``). ``long`` values in\nPython 2.x and ``int`` values in 3.x can exceed these values. Any value or\nproperty value less than ``-(2**63)`` or greater than ``(2**63)-1`` will raise\na ``ValueError`` exception.\n\nLicense\n-------\n\nApache Software License v2. Copyright \u00a9 2014-2019 SignalFx\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/signalfx/signalfx-python", "keywords": "", "license": "Apache Software License v2", "maintainer": "", "maintainer_email": "", "name": "signalfx", "package_url": "https://pypi.org/project/signalfx/", "platform": "", "project_url": "https://pypi.org/project/signalfx/", "project_urls": { "Homepage": "https://github.com/signalfx/signalfx-python" }, "release_url": "https://pypi.org/project/signalfx/1.1.1/", "requires_dist": [ "certifi", "protobuf (>=3.0.0)", "pyformance (>=0.3.1)", "requests (>=2.7.0)", "sseclient-py (>=1.4)", "urllib3 (>=1.15.1)", "six (>=1.6.0)", "ws4py (>=0.4.1)" ], "requires_python": "", "summary": "SignalFx Python Library", "version": "1.1.1" }, "last_serial": 5732814, "releases": { "0.3.2": [ { "comment_text": "", "digests": { "md5": "56fb77189ab56c636fd13b87309bdd67", "sha256": "9c9bdb5c1ed4bf074a1212a7a82ddf6fae8f9d74390a50c8a5fce962b670c847" }, "downloads": -1, "filename": "signalfx-0.3.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "56fb77189ab56c636fd13b87309bdd67", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12091, "upload_time": "2015-06-19T23:48:22", "url": "https://files.pythonhosted.org/packages/2d/b5/7845daa002a8aa27abd073ed8a7f7c45937a95d1a122a60e8c7311214da2/signalfx-0.3.2-py2.py3-none-any.whl" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "7fe2d9616a83e970db7174454ddecb84", "sha256": "4f83b4aea0cf6a58a2f1bc152ee94a9ee6fd98828aa2dd9b37a0f080806d3451" }, "downloads": -1, "filename": "signalfx-0.3.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7fe2d9616a83e970db7174454ddecb84", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12132, "upload_time": "2015-06-22T17:35:19", "url": "https://files.pythonhosted.org/packages/28/22/aa5a5833da90d20ee691a05ecd849b2c910927f4a600e31ef03b62487d2a/signalfx-0.3.3-py2.py3-none-any.whl" } ], "0.3.4": [ { "comment_text": "", "digests": { "md5": "2ae54607f0d1017ba499abef5a019655", "sha256": "f79765c1cfa6c6474188630b8cbf9906473b2cbc034956aa5a893a7d988a799f" }, "downloads": -1, "filename": "signalfx-0.3.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2ae54607f0d1017ba499abef5a019655", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12289, "upload_time": "2015-06-24T21:03:02", "url": "https://files.pythonhosted.org/packages/72/1b/2c7e76a57d9a5fc33c13edbeb1aec609a2dda8d7d441c9f7188954f965c8/signalfx-0.3.4-py2.py3-none-any.whl" } ], "0.3.5": [ { "comment_text": "", "digests": { "md5": "7d6720ff4739990c7b0e56e64555532c", "sha256": "cddf100695d79eb48f52b43d72128642a0fbdf67f3badaa53cea1c2a6f7bbc0a" }, "downloads": -1, "filename": "signalfx-0.3.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7d6720ff4739990c7b0e56e64555532c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 13641, "upload_time": "2015-07-15T23:24:47", "url": "https://files.pythonhosted.org/packages/85/22/23b7602890f30ee821e630c928a0ae92dba489043f146ebe33779c42b7ed/signalfx-0.3.5-py2.py3-none-any.whl" } ], "0.3.6": [ { "comment_text": "", "digests": { "md5": "7604913aa30c2d0b77332c9783e2fe82", "sha256": "b50298a77c11726e14cd6a124b837a3304535394f01ffdfa18a7530dc5905504" }, "downloads": -1, "filename": "signalfx-0.3.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7604913aa30c2d0b77332c9783e2fe82", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 13831, "upload_time": "2015-08-10T20:28:09", "url": "https://files.pythonhosted.org/packages/21/ea/6f0aae453a8759115bbfa4f772ef2d047cd3388dd9f95e9ad894e88848a7/signalfx-0.3.6-py2.py3-none-any.whl" } ], "0.3.7": [ { "comment_text": "", "digests": { "md5": "03ab51711e6a47a428d8cae15d34cf09", "sha256": "ee3316d32b38b3d10eea42c81d2e0cfcc4c3c3ede17d6eada4078e6c622dfda4" }, "downloads": -1, "filename": "signalfx-0.3.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "03ab51711e6a47a428d8cae15d34cf09", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 17182, "upload_time": "2015-11-13T01:22:01", "url": "https://files.pythonhosted.org/packages/f9/f1/026878cbd1bae60cf7ceeddc21d18b6e8d0756bebeff351d977378c699ae/signalfx-0.3.7-py2.py3-none-any.whl" } ], "0.3.8": [ { "comment_text": "", "digests": { "md5": "e9f1b341c0cd2ab431590bc2da7d996f", "sha256": "d577da475940c08a1f9a55408a0d2cd7792768383083f46c65e5d396c3872090" }, "downloads": -1, "filename": "signalfx-0.3.8-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e9f1b341c0cd2ab431590bc2da7d996f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 21353, "upload_time": "2016-03-02T00:13:30", "url": "https://files.pythonhosted.org/packages/7c/12/5fb4523b44e701ff6ca5ed295d0a95093aa311e61cf1bdf1dcee13f5779f/signalfx-0.3.8-py2.py3-none-any.whl" } ], "0.3.9": [ { "comment_text": "", "digests": { "md5": "bd8d87ed43c1fb924fd2a4e752cfbc11", "sha256": "b1016e0017544075e593698a317bf7584093d054cb31c89c158222af2d3b3c95" }, "downloads": -1, "filename": "signalfx-0.3.9-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "bd8d87ed43c1fb924fd2a4e752cfbc11", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 21400, "upload_time": "2016-03-24T02:03:30", "url": "https://files.pythonhosted.org/packages/14/05/ef19ffca978a35ab0f1f97cd491ec07573b2cafdb1783ec6f4823cf2951e/signalfx-0.3.9-py2.py3-none-any.whl" } ], "1.0.10": [ { "comment_text": "", "digests": { "md5": "6cc8cf4e470a5231f35b6ea33cfaf38f", "sha256": "171f10841b0b16dbab791af2c8ba8a147767981747d5713f945ba8b9a0d21701" }, "downloads": -1, "filename": "signalfx-1.0.10-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6cc8cf4e470a5231f35b6ea33cfaf38f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 34509, "upload_time": "2016-11-21T20:24:32", "url": "https://files.pythonhosted.org/packages/52/87/517490e0623c59e2c0a7b4ab7da9c19e4b4dada76054d3f7b1f11102c6d2/signalfx-1.0.10-py2.py3-none-any.whl" } ], "1.0.11": [ { "comment_text": "", "digests": { "md5": "50223aa12111fe51b607e9465c2817cc", "sha256": "845c3ac34c8531581632f4b77a6fe47b3a19f8ce8b709eb8e26048993701df0f" }, "downloads": -1, "filename": "signalfx-1.0.11-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "50223aa12111fe51b607e9465c2817cc", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 35210, "upload_time": "2016-11-23T19:57:39", "url": "https://files.pythonhosted.org/packages/d1/50/c615d42a986ded9681661d1eec53ba93c082465e79bb14dc774927a5d779/signalfx-1.0.11-py2.py3-none-any.whl" } ], "1.0.12": [ { "comment_text": "", "digests": { "md5": "04b86285cd738c3780573949cc869ac9", "sha256": "a7415919c736ef360463325a5934d4bda6d883503fbd9d270cabbed0be9e9f2b" }, "downloads": -1, "filename": "signalfx-1.0.12-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "04b86285cd738c3780573949cc869ac9", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 36063, "upload_time": "2016-11-29T03:57:32", "url": "https://files.pythonhosted.org/packages/6b/5f/b50858f6bdaa56b9524b0cf9d637a690fb19431e286a263dceddbf648f5c/signalfx-1.0.12-py2.py3-none-any.whl" } ], "1.0.13": [ { "comment_text": "", "digests": { "md5": "04757e32974cdce2363d247fbbfaa4ad", "sha256": "bc53036eb3e982cbfd6e2aa8417da892562455559039329ea5f0e1dc175b7f57" }, "downloads": -1, "filename": "signalfx-1.0.13-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "04757e32974cdce2363d247fbbfaa4ad", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 36372, "upload_time": "2016-12-06T18:49:58", "url": "https://files.pythonhosted.org/packages/84/f5/90ff565ed5c79baca8cd84d15c878ba9fd6382d8eb349556719180744854/signalfx-1.0.13-py2.py3-none-any.whl" } ], "1.0.14": [ { "comment_text": "", "digests": { "md5": "bb775d6ea6029a68cc016733be2132f0", "sha256": "4507285fcd99b81fb01e53f113dbd13e92b1b7dc0995ea0d3fe92689c0453d51" }, "downloads": -1, "filename": "signalfx-1.0.14-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "bb775d6ea6029a68cc016733be2132f0", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 36741, "upload_time": "2016-12-08T16:40:10", "url": "https://files.pythonhosted.org/packages/5a/ad/dd62fdae66d2256d0c98e208b7af9efa2192f1fdb68d204ba5994e35c3fb/signalfx-1.0.14-py2.py3-none-any.whl" } ], "1.0.15": [ { "comment_text": "", "digests": { "md5": "787b0da156eaf6481cef9b70080b7330", "sha256": "d89899a356a79974977b6a7bb036084024ce6619d75fc7fa808e34276ec5e75b" }, "downloads": -1, "filename": "signalfx-1.0.15-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "787b0da156eaf6481cef9b70080b7330", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 37055, "upload_time": "2017-02-21T21:45:12", "url": "https://files.pythonhosted.org/packages/39/0e/1b881d9b8db375612a959bcdb4e5ef4074cca787dc1686d9810c750f3ca9/signalfx-1.0.15-py2.py3-none-any.whl" } ], "1.0.16": [ { "comment_text": "", "digests": { "md5": "2379e7965e2959435950b087877bb3a6", "sha256": "026c5f156262e52a86e6244d685a9d438eef672e4562fb40e6ac3609cbf883e7" }, "downloads": -1, "filename": "signalfx-1.0.16-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2379e7965e2959435950b087877bb3a6", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 37358, "upload_time": "2017-03-24T17:15:28", "url": "https://files.pythonhosted.org/packages/6e/e7/17a89067dc0dff7a142bd89df5ce9f44ff6be250cf0173468921d2cbad29/signalfx-1.0.16-py2.py3-none-any.whl" } ], "1.0.17": [ { "comment_text": "", "digests": { "md5": "f0b9008c7c3b65d794220784b6a13c78", "sha256": "9547227f6303aeba1e70e07c4a2aa43b5968c46b5275c402f3ed207eeeb6f1ab" }, "downloads": -1, "filename": "signalfx-1.0.17-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f0b9008c7c3b65d794220784b6a13c78", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 38005, "upload_time": "2018-03-02T22:17:01", "url": "https://files.pythonhosted.org/packages/07/f1/4ed40a719d10ba965567fd80f853bf106315303aa7b95db20f77a7c4df3a/signalfx-1.0.17-py2.py3-none-any.whl" } ], "1.0.18": [ { "comment_text": "", "digests": { "md5": "3b5fd9034cf37eea4052bb8a3effc330", "sha256": "d934a2ccd939a3acc21ee708ec891e4d6650da9eedb75db08bbc88b7d68d9057" }, "downloads": -1, "filename": "signalfx-1.0.18-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3b5fd9034cf37eea4052bb8a3effc330", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 38250, "upload_time": "2018-03-16T05:43:28", "url": "https://files.pythonhosted.org/packages/c0/da/b37639844646a3df908d8be8225ba993fe67d3bec723645fd2dfa2c7796f/signalfx-1.0.18-py2.py3-none-any.whl" } ], "1.0.19": [ { "comment_text": "", "digests": { "md5": "da18c1eb041153a2b8eb2345c11f96df", "sha256": "b6f9da9f51fbbc09ce41c92daffcd43591c89139154f266b320adeeffac6e03d" }, "downloads": -1, "filename": "signalfx-1.0.19-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "da18c1eb041153a2b8eb2345c11f96df", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 36115, "upload_time": "2018-05-03T15:28:16", "url": "https://files.pythonhosted.org/packages/48/ef/1f3b977f93d3abd843ddba3212caa39444c179264297d02da3f1d11ad865/signalfx-1.0.19-py2.py3-none-any.whl" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "f3913a6ff76a5bdcb62ac71a1f1af379", "sha256": "06c5a8c7ac0172a6daae1c0868807c09868a12a9539c81eaa5f9ca969def07d1" }, "downloads": -1, "filename": "signalfx-1.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f3913a6ff76a5bdcb62ac71a1f1af379", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 34081, "upload_time": "2016-06-07T17:32:20", "url": "https://files.pythonhosted.org/packages/90/eb/d44ff5e203ff2d40831566496582960eb9857eefdb1763f3b077b4aaf668/signalfx-1.0.2-py2.py3-none-any.whl" } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "1f347320598c3df6891924fe2599c6ff", "sha256": "9f1215319606dac883f4bd814a2135e964f303b7b9e17f3503a885a66483d8c3" }, "downloads": -1, "filename": "signalfx-1.0.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1f347320598c3df6891924fe2599c6ff", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 34370, "upload_time": "2016-07-29T22:05:38", "url": "https://files.pythonhosted.org/packages/a6/c6/d1ce23a053f261ef3dc4913f72a3b8a00d6748136d6e0144055aa3d9f730/signalfx-1.0.4-py2.py3-none-any.whl" } ], "1.0.5": [ { "comment_text": "", "digests": { "md5": "3648df91a5a1ea9dd109f053c6234c07", "sha256": "de435c9eb24e46c37078b9d56e84a323948205bb11ba603669387b2b3563314a" }, "downloads": -1, "filename": "signalfx-1.0.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3648df91a5a1ea9dd109f053c6234c07", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 34410, "upload_time": "2016-09-29T12:39:27", "url": "https://files.pythonhosted.org/packages/89/eb/db6ff1e46df72aad24bc83f77844e2076c0c12e05157c4db98909163da53/signalfx-1.0.5-py2.py3-none-any.whl" } ], "1.0.6": [], "1.0.7": [ { "comment_text": "", "digests": { "md5": "f1daf78d472dfd6678fc3ec71c22dabc", "sha256": "8e4ac54a2d3bb82ec87e6a86a7268d85c9992778c714bf9cdc352e97b5565785" }, "downloads": -1, "filename": "signalfx-1.0.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f1daf78d472dfd6678fc3ec71c22dabc", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 34674, "upload_time": "2016-10-05T17:10:53", "url": "https://files.pythonhosted.org/packages/26/ee/56c98c990680d0ae4f065ec7bc38195a38d129e07f01cd491e1cbfb3a91b/signalfx-1.0.7-py2.py3-none-any.whl" } ], "1.0.8": [ { "comment_text": "", "digests": { "md5": "ee39d33abd860347b24970aed9e68d7a", "sha256": "a509bf2a95407a62faac3a4fbef691259a1c66562dea77c0b72e9ce8f754931e" }, "downloads": -1, "filename": "signalfx-1.0.8-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ee39d33abd860347b24970aed9e68d7a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 34699, "upload_time": "2016-10-20T18:48:17", "url": "https://files.pythonhosted.org/packages/42/47/4acb3e1bf3213874fcab209c999c6b857fb9ba95a4916e9c5db6d23efd03/signalfx-1.0.8-py2.py3-none-any.whl" } ], "1.0.9": [ { "comment_text": "", "digests": { "md5": "256612aa14e88ba3690917cb1ce88c2a", "sha256": "21755dfc962b5089f96d810af3516b4ba9f7f5a067621dbbbc85521ca057cbc5" }, "downloads": -1, "filename": "signalfx-1.0.9-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "256612aa14e88ba3690917cb1ce88c2a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 34704, "upload_time": "2016-10-27T00:23:48", "url": "https://files.pythonhosted.org/packages/a8/12/41d01d7b4f65347238f7f25291a14bb385c0e9da8bcb87f2a177ff852d2c/signalfx-1.0.9-py2.py3-none-any.whl" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "0b4776fdf26bc041bc82a520e6a5c1af", "sha256": "5c8da3771f45b147f06cf19173712eb9b53363d203e86fc334c86483d560ed24" }, "downloads": -1, "filename": "signalfx-1.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0b4776fdf26bc041bc82a520e6a5c1af", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 40778, "upload_time": "2019-07-05T18:29:12", "url": "https://files.pythonhosted.org/packages/74/06/865059aadebde7752932f09465afa40e8e90751d130f451eb0a170fa280f/signalfx-1.1.0-py2.py3-none-any.whl" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "cdec13b8e0d99d9ec86f8ca9a03a5253", "sha256": "560522f67a77e6585eca0202c4639fc8d6e6c6610b9796aa5cbf324f314a9a97" }, "downloads": -1, "filename": "signalfx-1.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "cdec13b8e0d99d9ec86f8ca9a03a5253", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 41029, "upload_time": "2019-08-26T19:54:45", "url": "https://files.pythonhosted.org/packages/fb/58/e494116acfb99ddd2cd47ac3c7966f7950ee8aea76cf391331fa69a098fc/signalfx-1.1.1-py2.py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "cdec13b8e0d99d9ec86f8ca9a03a5253", "sha256": "560522f67a77e6585eca0202c4639fc8d6e6c6610b9796aa5cbf324f314a9a97" }, "downloads": -1, "filename": "signalfx-1.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "cdec13b8e0d99d9ec86f8ca9a03a5253", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 41029, "upload_time": "2019-08-26T19:54:45", "url": "https://files.pythonhosted.org/packages/fb/58/e494116acfb99ddd2cd47ac3c7966f7950ee8aea76cf391331fa69a098fc/signalfx-1.1.1-py2.py3-none-any.whl" } ] }