Skip to main content

A library for instrumenting Python code at runtime.

Project description

Diagnose

A library for instrumenting Python code at runtime.

Probes

Structured logs and metrics and observability are great, but almost always require you to alter your code, which interrupts the flow when reading code. It also typically requires a build cycle to alter; it's no fun making a ticket, getting review, waiting for a build and deploy, and then doing it all again to back out your temporary additions. This is doubly true when doing research, where you might perform a dozen small experiments to measure your live code.

This library allows you to dynamically add probes at runtime instead. Probes are:

  • reliable: errors will never affect your production code
  • ephemeral: set a "lifespan" (in minutes) for each instrument
  • comprehensive: all references to the target function are instrumented
  • fast: measure most functions with fast local lookups; uses hunter (in Cython) for more invasive internal probes.

Individual probes can be created directly by calling attach_to(target):

>>> from path.to.module import myclass
>>> myclass().add13(arg=5)
18
>>> p = diagnose.probes.attach_to("path.to.module.myclass.add13")
>>> p.instruments["foo"] = diagnose.LogInstrument("foo", "arg", internal=False)
>>> p.start()
>>> myclass().add13(arg=5)
Probe (foo) = 5
18

Managers

In a running system, we want to add, remove, start, and stop probes and instruments without having to code at an interactive prompt or restart the system; we do this with an InstrumentManager. Start by configuring the global diagnose.manager:

>>> diagnose.manager.instrument_classes = {
    "log": LogInstrument,
    "hist": MyHistogramInstrument,
    "incr": MyIncrementInstrument,
}
>>> diagnose.manager.global_namespace.update({"foo": foo})

Later, you can define instruments:

>>> diagnose.manager.specs["instr-1"] = {
    "target": "myapp.module.file.class.method",
    "instrument": {
        "type": "log",
        "name": "myapp.method",
        "value": "result",
        "internal": False,
        "custom": {},
    },
    "lifespan": 10,
    "lastmodified": datetime.datetime.utcnow(),
    "applied": {},
}

Then call diagnose.manager.apply(), either when you add an instrument, or on a schedule if your store is in MongoDB and the process defining probes is not the target process.

The applied dictionary will be filled with information about which processes have applied the probe, and whether they encountered any errors.

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

diagnose-2.0.0.tar.gz (12.6 kB view details)

Uploaded Source

Built Distributions

diagnose-2.0.0-py3-none-any.whl (12.8 kB view details)

Uploaded Python 3

diagnose-2.0.0-py2-none-any.whl (14.0 kB view details)

Uploaded Python 2

File details

Details for the file diagnose-2.0.0.tar.gz.

File metadata

  • Download URL: diagnose-2.0.0.tar.gz
  • Upload date:
  • Size: 12.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.4.2 requests/2.21.0 setuptools/41.0.1 requests-toolbelt/0.8.0 tqdm/4.23.4 CPython/2.7.6

File hashes

Hashes for diagnose-2.0.0.tar.gz
Algorithm Hash digest
SHA256 387623af105c576745a3a5b735d142fb6bcb16b4de51dc0246d282025dd8493e
MD5 ac4740358c3a9a275b17d0be7fc5cc82
BLAKE2b-256 0cba3491289761274a025e8a7a79ced71f4ba40c2df32c3f374204c19ef512ca

See more details on using hashes here.

File details

Details for the file diagnose-2.0.0-py3-none-any.whl.

File metadata

  • Download URL: diagnose-2.0.0-py3-none-any.whl
  • Upload date:
  • Size: 12.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.12.4 setuptools/27.2.0 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.6.0

File hashes

Hashes for diagnose-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 519ddd5f835a5dd4a002edb65a4390d5bf3856a71f229f1412fbf42ba2902d0b
MD5 80355a95887fb31c816c8fa3691ab630
BLAKE2b-256 270e7aaa93ff1d8929035b7d19fba349ab56214becd9fb153f0d95882ff812ac

See more details on using hashes here.

File details

Details for the file diagnose-2.0.0-py2-none-any.whl.

File metadata

  • Download URL: diagnose-2.0.0-py2-none-any.whl
  • Upload date:
  • Size: 14.0 kB
  • Tags: Python 2
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.4.2 requests/2.21.0 setuptools/41.0.1 requests-toolbelt/0.8.0 tqdm/4.23.4 CPython/2.7.6

File hashes

Hashes for diagnose-2.0.0-py2-none-any.whl
Algorithm Hash digest
SHA256 152809d98d29dfe69abfc7a482c4b328fdcbb65ebdd1030cb05cdf0caf1b188b
MD5 14ba5a321e3ab42023391bb4cf992496
BLAKE2b-256 e86aa447a9b9add86bc218b35c8513349f55fedde5aa8b47f7c3ee277f572892

See more details on using hashes here.

Supported by

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