Skip to main content

Python SDK for TrailWatch by Kicksaw

Project description

Test PyPI Package

Installation

Install the SDK (supports AWS server):

pip install trailwatch

Install with Salesforce connector support:

pip install trailwatch[salesforce]

Using TrailWatch

Decorator

This is the recommended way to use TrailWatch. Decorator will automatically assign job name and description based on the function name and docstring.

from trailwatch import configure, watch
from trailwatch.connectors.aws import AwsConnectorFactory

configure(
    project="My project name",
    project_description="My project description",
    environment="production",
    connectors=[
        AWSConnectorFactory(
            url="https://<random>.execute-api.us-west-2.amazonaws.com",
            api_key="my_key",
        )
    ],
    loggers=["__main__", "integration"],
)


@watch()
def handler(event, context):
  # Do your thing
  return

Context Manager

Decorator uses this context manager internally. You can use the context manager directly if you need more control over the execution or if you want to report a portion of the execution (code block) as a separate job.

from trailwatch import configure, TrailwatchContext
from trailwatch.connectors.aws import AwsConnectorFactory

configure(
    project="My project name",
    project_description="My project description",
    environment="production",
    connectors=[
        AWSConnectorFactory(
            url="https://<random>.execute-api.us-west-2.amazonaws.com",
            api_key="my_key",
        )
    ],
    loggers=["__main__", "integration"],
)


def handler(event, context):
    # Other code
    with TrailwatchContext(
        job="My Job",
        job_description="My job description",
    ) as execution:
        # Do your thing
        return
    # Other code

Connectors

TwailWatch SDK works by attaching connectors to the execution context. Connectors are responsible for tracking execution flow and for creating a record in their respective systems. Connectors should be configured using the configure function by provividing a list of connector factories in the connectors argument.

AWS Connector

AWS connector is used to send execution information to AWS TrailWatch service deployed in client's AWS account. To use AWS connector, you will need to deploy the TrailWatch service first and then obtain URL and API key from the service.

from trailwatch.connectors.aws import AwsConnectorFactory

configure(
    # Other configuration parameters
    connectors=[
        AWSConnectorFactory(
            url="url",
            api_key="key",
        )
    ],
)

Salesforce Connector

Salesforce connector is used to send execution information to Kicksaw Integration App deployed to client's Salesforce org. To use Salesforce connector, you will need to deploy the Kicksaw Integration App first and then obtain credentials required to sign in to the Salesforce org.

from trailwatch.connectors.salesforce import SalesforceConnectorFactory

configure(
    # Other configuration parameters
    connectors=[
        SalesforceConnectorFactory(
            username="username",
            password="password",
            security_token="token",
            domain="domain",
        )
    ],
)

Control Execution Status

Partial Success

Raise a PartialSuccess exception to indicate that the execution was partially successful. This exception is handled by TrailWatch to set execution status to partial and will not be propagated to the caller.

from trailwatch.exceptions import PartialSuccessError


@watch()
def handler(event, context):
    # Do your thing
    # You find out that only a subset of the work was successful
    # Log information about the failure normally using the logger
    raise PartialSuccessError

Timeout

You can set timeout on a function to force it to stop after a certain amount of time. This will raise TimeoutError and set the execution status to timeout.

:warning: When using timeout inside AWS Lambda or Azure Function you will need to set the TrailWatch timeout to a value lower than the timeout you set on the cloud function. Otherwise, function can timeout before TrailWatch has a chance to set the status.

@watch(timeout=10)
def handler(event, context):
    # Do something that takes more than 10 seconds
    ...

Or using the context manager:

def handler(event, context):
    with TrailwatchContext(
        job="My Job",
        job_description="My job description",
        timeout=10,
    ) as execution:
        # Do something that takes more than 10 seconds
        ...

Send a File

Some connectors support attaching (sending) files to be associated with the execution. To send a file, use the send_file method on the TrailwatchContext object. Three methods are available to send a file:

  • send_file - send a file from the local filesystem
  • send_fileobj - send a file-like object (stream or open file object)
  • send_file_content - send a file content as a string or bytes
def handler(event, context):
    with TrailwatchContext(
        job="My Job",
        job_description="My job description",
    ) as execution:
        execution.send_file("my_file.txt", "/path/to/my_file.txt")
        execution.send_fileobj("my_file.txt", open("my_file.txt", "rb"))
        execution.send_file_content("my_file.txt", "Hello from file!")

When using the decorator, you will need to add an extra argument trailwatch_execution_context to the function you are decorating to receive the TrailwatchContext object.

from trailwatch import TrailwatchContext

@watch()
def handler(event, context, trailwatch_execution_context: TrailwatchContext):
    trailwatch_execution_context.send_file("my_file.txt", "/path/to/my_file.txt")

Connectors supporting sending files:

  • AWS Connector

Using With Other Decorators

When using TrailWatch with other decorators, make sure that TrailWatch decorator is the innermost decorator. This is because TrailWatch decorator may inject the context argument into the function and other decorators (like FastAPI) can get confused by this argument.

from fastapi import FastAPI, Path
from pydantic import BaseModel

app = FastAPI()


class Model(BaseModel):
    name: str


@app.post("/my_endpoint/{resource_id}")
@watch()
def my_endpoint(
    trailwatch_execution_context: TrailwatchContext
    model: Model,
    resource_id: str = Path(..., title="The ID of the resource to get"),
):
    # Do your thing
    return

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

trailwatch-0.3.1.tar.gz (17.8 kB view details)

Uploaded Source

Built Distribution

trailwatch-0.3.1-py3-none-any.whl (19.6 kB view details)

Uploaded Python 3

File details

Details for the file trailwatch-0.3.1.tar.gz.

File metadata

  • Download URL: trailwatch-0.3.1.tar.gz
  • Upload date:
  • Size: 17.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.4.2 CPython/3.10.11 Linux/5.15.0-1035-azure

File hashes

Hashes for trailwatch-0.3.1.tar.gz
Algorithm Hash digest
SHA256 c568ed682e1b06c71eb937d4855f4bb4ec46a6c364b32ff48d5aa9618e638b52
MD5 bdf55e3e9b6b529d8d39b830a4aee530
BLAKE2b-256 c0ede343821c19deccb55a3fe475de3ff2fa5797d1f796af470540b118d17b3b

See more details on using hashes here.

Provenance

File details

Details for the file trailwatch-0.3.1-py3-none-any.whl.

File metadata

  • Download URL: trailwatch-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 19.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.4.2 CPython/3.10.11 Linux/5.15.0-1035-azure

File hashes

Hashes for trailwatch-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a2fc0cd91f1fc1674e48fff682235fa5fce9a7fc625c9f829b9f8d73f142e9e8
MD5 41815ce6ce9d0fcd2bfd087f1f5e56cf
BLAKE2b-256 8c8c9bcb2bc02f503f9fd5b08c8864d172e3949b4dc281e84f0584f8050921e8

See more details on using hashes here.

Provenance

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