A decorator to unify logging, metrics and notifications.
Project description
Observe
@observe is a decorator for Python methods, which allows Python developers to collect all basic metrics about the decorated method, generate unified logs and notifications on failure which are easy to trace.
Installation
pip install atl-observe
Usage
Decorating the process method and assigning a metic name and static_tags, all tags are added to all metrics generated, used to filter on your dashboards.
from atl_observe import observe
class Engine:
@observe(metric="process",
static_tags=["layer:process"])
def process(self, message: dict):
pass
Decorating the process method and assigning a metric and trace_id_from, the trace_id will now appear in all logs and notifications, used to search your logs.
from atl_observe import observe
class Engine:
@observe(metric="process",
trace_id_from={"message": "eventId"})
def process(self, message: dict):
pass
Logs, Metrics and Notifications
All logs, metrics and notifications are divided into three categories:
- Default: no exceptions were raised.
- Expected: an expected Exception was raised.
- Unexpected Exceptions: an unexpected / unhandled Exception was raised
Default
# optional: debug logs
logger.debug("... start.")
logger.debug("... finished.")
# increments
statsd.increment("%s.start" % metric, 1, tags=all_tags)
statsd.increment("%s.finished" % metric, 1, tags=all_tags)
# timing
statsd.timing("%s.time.finished" % metric, dt, tags=all_tags)
Expected
Expected exceptions are managed via accept_on
and decline_on
lists. If the raised exception is part of accept_on
, the decorator will return a Truthy value, if the exception is part of decline_on
a Falsy value is returned.
# warning logs
logger.warning("... accepted.")
logger.warning("... declined.")
# increments
statsd.increment('%s.exception.accepted' % metric, tags=all_tags)
statsd.increment('%s.exception.declined' % metric, tags=all_tags)
# timing
statsd.timing("%s.time.accepted" % metric, dt, tags=all_tags)
statsd.timing("%s.time.declined" % metric, dt, tags=all_tags)
Unexpected
# error logs
logger.error("... raised.")
# slack
slack.error("... raised.")
# increments
statsd.increment('%s.exception.raised' % metric, tags=all_tags)
# timing
statsd.timing("%s.time.raised" % metric, dt, tags=all_tags)
Documentation
make install
will install all required packagesmake format
will auto format the projectmake lint
will run the lintermake tests
will run all unit tests
Contributions
Contributions to @observe are welcome! Please see CONTRIBUTING.md for details.
License
Copyright (c) [2020] Atlassian and others. Apache 2.0 licensed, see LICENSE file.
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 Distribution
File details
Details for the file atl-observe-1.1.0.tar.gz
.
File metadata
- Download URL: atl-observe-1.1.0.tar.gz
- Upload date:
- Size: 9.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/3.10.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.8.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 59a71c1bb8a1137a179a883afb3dff4d6721b4957883948acb47044df69b4103 |
|
MD5 | 7388bd29b84fdd381dbe992d724cc0f6 |
|
BLAKE2b-256 | ad13fd1424a5405f3b66040ac3cb0e174d9bf5d21854db9cb47fcbb02dabb763 |
File details
Details for the file atl_observe-1.1.0-py2.py3-none-any.whl
.
File metadata
- Download URL: atl_observe-1.1.0-py2.py3-none-any.whl
- Upload date:
- Size: 13.5 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/3.10.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.8.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 75b738df0f945df1208c67b839ce104863a9d992005b4e27813270e1c0b3e188 |
|
MD5 | 937e5405595736738af73e23c7699dbf |
|
BLAKE2b-256 | afff313798d4ec81a9f44298198c0d9418db42764bfea5e2703c79665fd60db9 |