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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 387623af105c576745a3a5b735d142fb6bcb16b4de51dc0246d282025dd8493e |
|
MD5 | ac4740358c3a9a275b17d0be7fc5cc82 |
|
BLAKE2b-256 | 0cba3491289761274a025e8a7a79ced71f4ba40c2df32c3f374204c19ef512ca |
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 519ddd5f835a5dd4a002edb65a4390d5bf3856a71f229f1412fbf42ba2902d0b |
|
MD5 | 80355a95887fb31c816c8fa3691ab630 |
|
BLAKE2b-256 | 270e7aaa93ff1d8929035b7d19fba349ab56214becd9fb153f0d95882ff812ac |
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 152809d98d29dfe69abfc7a482c4b328fdcbb65ebdd1030cb05cdf0caf1b188b |
|
MD5 | 14ba5a321e3ab42023391bb4cf992496 |
|
BLAKE2b-256 | e86aa447a9b9add86bc218b35c8513349f55fedde5aa8b47f7c3ee277f572892 |