Application to monitor your systems and give you the security to sleep peacefully at night


Keywords
lifeguard, python, self-healing
License
GPL-2.0
Install
pip install lifeguard==1.5.2

Documentation

Lifeguard

Build Status Lifeguard Core Publish PyPI version

Examples of Usage

See a complete example at: https://github.com/LifeguardSystem/lifeguard-example

Settings File

In the root of project should be exists a file called lifeguard_settings.py like the example:

"""
Lifeguard Settings
"""
import lifeguard_mongodb
# other dependecies

# Plugins modules
PLUGINS = [
    lifeguard_mongodb,
    # other plugins
]

# You can execute code in the lifeguard startup process
def setup(_lifeguard_context):
    pass

Create a validation

To create a validation you should create a file into validations directory. The file should ends with _validation.py. Example:

from lifeguard import NORMAL, PROBLEM, change_status
from lifeguard.actions.database import save_result_into_database
from lifeguard.actions.notifications import notify_in_single_message
from lifeguard.http_client import get
from lifeguard.logger import lifeguard_logger as logger
from lifeguard.validations import ValidationResponse, validation


@validation(
    "check if pudim is alive",
    actions=[save_result_into_database, notify_in_single_message],
    schedule={"every": {"minutes": 1}},
)
def pudim_is_alive():
    status = NORMAL
    result = requests.get("http://pudim.com.br")
    logger.info("pudim status code: %s", result.status_code)

    if result.status_code != 200:
        status = change_status(status, PROBLEM)

    return ValidationResponse(
        status,
        {status: result.status_code},
    )

Starting with version 1.3.0, it is possible to create validations using yaml files. The file should ends with _validation.yaml. See the example:

validations:
  - validation_name: "validation_name"
    description: "description of validation"
    actions:
      - lifeguard.actions.database.save_result_into_database
    schedule:
      every:
        minutes: 1
    settings:
      notification:
        update_thread_interval: 3600
    execute:
      command: path.to.module.function
      args:
        - "arg1"
        - "arg2"

Validation Actions

Action is a simple python function with only 2 arguments: a validation response and a dict called settings. These settings are the parameter called settings in validation.

def custom_action(validation_response, settings):
    pass

Builtin validations can be found in Wiki.

Create a custom controller

To create a custom controller with decorators see the example

import json

from lifeguard.controllers import controller


@controller("/hello/<name>")
def hello(name):
    return json.dumps({"name": name})

This file should be in the controllers directory and should ends with _controller.py.

Init Lifeguard

Execute: lifeguard

To init only web server: lifeguard --no-scheduler

To init only scheduler: lifeguard --no-server

Settings

To see all settings avaiable run command:

lifeguard -d

Builtin Endpoints

Recover Status

To get global status and all validations.

GET /lifeguard/status/complete

{

    "status": "NORMAL",
    "validations": [
        {
            "validation_name": "pudim",
            "status": "NORMAL",
            "details": {
                "NORMAL": 200
            },
            "settings": {
                "notification": {
                    "notify": true
                }
            },
            "last_execution": "2021-06-15T10:46"
        },
        {
            "validation_name": "my site",
            "status": "NORMAL",
            "details": {
                "NORMAL": 200
            },
            "settings": {
                "notification": {
                    "notify": true
                }
            },
            "last_execution": "2021-06-15T10:46"
        }
    ]
}

To get global status and only non normal validations.

GET /lifeguard/status

{

    "status": "PROBLEM",
    "validations": [
        {
            "validation_name": "my site",
            "status": "PROBLEM",
            "details": {
                "NORMAL": 200
            },
            "settings": {
                "notification": {
                    "notify": true
                }
            },
            "last_execution": "2021-06-15T10:46"
        }
    ]
}

Authentication

Builtin Methods

Basic Authentication

Set users in lifeguard context like in the example:

# in lifeguard_settings.py
from lifeguard.auth import BASIC_AUTH_METHOD

def setup(lifeguard_context):
    lifeguard_context.auth_method = BASIC_AUTH_METHOD
    lifeguard_context.users = [{"username": "test", "password": "pass"}]

Cors

To enable cors use the following settings:

# in lifeguard_settings.py
def setup(lifeguard_context):
    lifeguard_context.cors_settings = {r"/*": {"origins": "*"}}