See a complete example at: https://github.com/LifeguardSystem/lifeguard-example
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
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"
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.
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
.
Execute: lifeguard
To init only web server: lifeguard --no-scheduler
To init only scheduler: lifeguard --no-server
To see all settings avaiable run command:
lifeguard -d
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"
}
]
}
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"}]
To enable cors use the following settings:
# in lifeguard_settings.py
def setup(lifeguard_context):
lifeguard_context.cors_settings = {r"/*": {"origins": "*"}}