From 77adbe46eb13c18bb0dacfc45dcf75fa1e9fa323 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexis=20M=C3=A9taireau?= Date: Thu, 19 Oct 2023 22:23:45 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=93=9D=20Start=20a=20documentation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.example | 2 + .gitignore | 3 +- .gitlab-ci.yml | 21 +++-- CHANGELOG.md | 5 ++ Makefile | 10 +++ README.md | 99 --------------------- config-example.yaml | 2 - docs/Makefile | 20 +++++ docs/capture.png | Bin 0 -> 140835 bytes docs/changelog.md | 2 + docs/checks.md | 9 ++ docs/cli.md | 124 +++++++++++++++++++++++++++ docs/conf.py | 31 +++++++ docs/configuration.md | 28 ++++++ docs/index.md | 59 +++++++++++++ docs/installation/getting-started.md | 65 ++++++++++++++ docs/installation/postgresql.md | 35 ++++++++ docs/make.bat | 35 ++++++++ pyproject.toml | 37 ++++---- 19 files changed, 465 insertions(+), 122 deletions(-) create mode 100644 .env.example create mode 100644 CHANGELOG.md create mode 100644 Makefile create mode 100644 docs/Makefile create mode 100644 docs/capture.png create mode 100644 docs/changelog.md create mode 100644 docs/checks.md create mode 100644 docs/cli.md create mode 100644 docs/conf.py create mode 100644 docs/configuration.md create mode 100644 docs/index.md create mode 100644 docs/installation/getting-started.md create mode 100644 docs/installation/postgresql.md create mode 100644 docs/make.bat diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..7e408a3 --- /dev/null +++ b/.env.example @@ -0,0 +1,2 @@ +ARGOS_YAML_FILE = "my-config.yaml" +ARGOS_DATABASE_URL = "postgresql://argos:argos@localhost/argos" \ No newline at end of file diff --git a/.gitignore b/.gitignore index 72a0c53..e695a0f 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ __pycache__ *.egg-info .vscode venv -.env \ No newline at end of file +.env +public diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ba3b8db..1e15523 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,14 +2,25 @@ image: python:3.11 stages: - test + - deploy before_script: - - python -V - - python -m venv venv - - ./venv/bin/pip install -e ".[dev]" - + - make install pytest: stage: test script: - - ./venv/bin/pytest \ No newline at end of file + - make tests + +pages: + stage: deploy + + script: + - pwd + - ls + - make docs + artifacts: + paths: + - public/ + rules: + - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..a3ae9f1 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog + +## [Unreleased] + +- First working version \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..5c3edae --- /dev/null +++ b/Makefile @@ -0,0 +1,10 @@ +venv: + python3 -m venv venv +install: venv + venv/bin/pip install -e ".[dev,docs]" +docs: cog + venv/bin/sphinx-build docs public +cog: + venv/bin/cog -r docs/*.md +tests: install + venv/bin/pytest diff --git a/README.md b/README.md index eea33f2..1a47ddc 100644 --- a/README.md +++ b/README.md @@ -19,15 +19,6 @@ Todo: - [ ] Add a way to specify the severity of the alerts in the config - [ ] Add a command to generate new authentication token -Features : - -- [x] Uses `.yaml` files for configuration ; -- [x] Read the configuration file and convert it to tasks ; -- [x] Store tasks in a database ; -- [x] Multiple paths per websites can be tested ; -- [x] Handle jobs failures on the clients -- [x] Exposes an HTTP API that can be consumed by other systems ; -- [x] Checks can be distributed on the network thanks to a job queue ; Implemented checks : @@ -35,96 +26,6 @@ Implemented checks : - [x] Returned body matches what you expect ; - [x] SSL certificate expires in more than X days ; -## How to run ? - -To install it, create a virtualenv and install the dependencies: - -```bash -python3 -m venv venv -source venv/bin/activate -pip install -e . -``` - -Prepare a configuration file, you can copy the `config-example.yaml` file and edit it: - -```bash -cp config-example.yaml config.yaml -``` - -Then, you can run the server: - -```bash -argos server run -``` - -You can specify the environment variables to configure the server, or you can put them in an `.env` file: - -```bash -ARGOS_DATABASE_URL=postgresql://localhost/argos -ARGOS_YAML_FILE=config.yaml -``` - -The server will read a `yaml` file at startup, and will populate the tasks specified in it. See the configuration section below for more information on how to configure the checks you want to run. - -And here is how to run the agent: - -```bash -argos agent http://localhost:8000 "" -``` - -You also need to run cleaning tasks periodically. `argos server clean --help` will give you more information on how to do that. - -Here is a crontab example: - -```bash -# Run the cleaning tasks every hour (at minute 7) -7 * * * * argos server clean --max-results 100000 --max-lock-seconds 3600 -``` - - -## Configuration - -Here is a simple configuration file: - -```yaml -general: - frequency: "1m" # Run checks every minute. - alerts: - error: - - local - warning: - - local - alert: - - local -service: - secrets: - # Secrets can be generated using `openssl rand -base64 32`. - # DO NOT REUSE THESE ONES. - - "O4kt8Max9/k0EmHaEJ0CGGYbBNFmK8kOZNIoUk3Kjwc" - - "x1T1VZR51pxrv5pQUyzooMG4pMUvHNMhA5y/3cUsYVs=" - -ssl: - thresholds: - - "1d": critical - - "5d": warning - -# It's also possible to define the checks in another file -# with the include syntax: -# -# websites: !include websites.yaml -# -websites: - - domain: "https://mypads.framapad.org" - paths: - - path: "/mypads/" - checks: - - status-is: "200" - - body-contains: '
' - - ssl-certificate-expiration: "on-check" - - path: "/admin/" - checks: - - status-is: "401" -``` ## Development notes diff --git a/config-example.yaml b/config-example.yaml index 150b043..7738cb6 100644 --- a/config-example.yaml +++ b/config-example.yaml @@ -10,8 +10,6 @@ general: service: secrets: # Secrets can be generated using `openssl rand -base64 32`. - - "O4kt8Max9/k0EmHaEJ0CGGYbBNFmK8kOZNIoUk3Kjwc" - - "x1T1VZR51pxrv5pQUyzooMG4pMUvHNMhA5y/3cUsYVs=" ssl: thresholds: diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 0000000..d4bb2cb --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/capture.png b/docs/capture.png new file mode 100644 index 0000000000000000000000000000000000000000..81a8071a7032182c21a900d37b9860f01ec8bdca GIT binary patch literal 140835 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 X&1?*j(CYm14ET`}lNT))HuV2LLa5VN literal 0 HcmV?d00001 diff --git a/docs/changelog.md b/docs/changelog.md new file mode 100644 index 0000000..8261b35 --- /dev/null +++ b/docs/changelog.md @@ -0,0 +1,2 @@ +```{include} ../CHANGELOG.md +``` \ No newline at end of file diff --git a/docs/checks.md b/docs/checks.md new file mode 100644 index 0000000..4a910c9 --- /dev/null +++ b/docs/checks.md @@ -0,0 +1,9 @@ +# Checks + +At its core, argos runs checks and return the results to the service. Here are the implemented checks, with a description of what they do and how to configure them. + +| Check | Description | Configuration | +| --- | --- | --- | +| `status-is` | Check that the returned status code matches what you expect. | `status-is: "200"` | +| `body-contains` | Check that the returned body contains a given string. | `body-contains: "Hello world"` | +| `ssl-certificate-expiration` | Check that the SSL certificate expires in more than X days. | `ssl-certificate-expiration: "30d"` | \ No newline at end of file diff --git a/docs/cli.md b/docs/cli.md new file mode 100644 index 0000000..cdfa659 --- /dev/null +++ b/docs/cli.md @@ -0,0 +1,124 @@ +# Command-line interface + + + + +## The argos cli + + +```man +Usage: argos [OPTIONS] COMMAND [ARGS]... + +Options: + --help Show this message and exit. + +Commands: + agent Get and run tasks to the provided server. + server +``` + + + +## Agent commands + + +```man +Usage: argos agent [OPTIONS] SERVER AUTH + + Get and run tasks to the provided server. Will wait for new tasks. + + Usage: argos agent https://argos.server "auth-token-here" + +Options: + --max-tasks INTEGER Number of concurrent tasks this agent can run + --wait-time INTEGER Waiting time between two polls on the server + (seconds) + --log-level [DEBUG|INFO|WARNING|ERROR|CRITICAL] + --help Show this message and exit. +``` + + + +## Server commands + + +```man +Usage: argos server [OPTIONS] COMMAND [ARGS]... + +Options: + --help Show this message and exit. + +Commands: + clean Clean the database (to run routinely) + start Starts the server. +``` + + + +### Server start + + +```man +Usage: argos server start [OPTIONS] + + Starts the server. + +Options: + --host TEXT Host to bind + --port INTEGER Port to bind + --reload Enable hot reloading + --log-config TEXT Path to the logging configuration file + --help Show this message and exit. +``` + + + +### Server clean + + +```man +Usage: argos server clean [OPTIONS] + + Clean the database (to run routinely) + + - Removes old results from the database. - Removes locks from tasks that have + been locked for too long. + +Options: + --max-results INTEGER Maximum number of results to keep + --max-lock-seconds INTEGER The number of seconds after which a lock is + considered stale + --help Show this message and exit. +``` + + \ No newline at end of file diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 0000000..266955b --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,31 @@ +# Configuration file for the Sphinx documentation builder. +# +# For the full list of built-in configuration values, see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Project information ----------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information + +project = "Argos" +copyright = "2023, Alexis Métaireau" +author = "Alexis Métaireau" +release = "0.0.1" + +# -- General configuration --------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration + +extensions = [ + "myst_parser", + "sphinx_design", +] +myst_enable_extensions = ["colon_fence"] + +templates_path = ["_templates"] +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] + + +# -- Options for HTML output ------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output + +html_theme = "shibuya" +html_static_path = ["_static"] diff --git a/docs/configuration.md b/docs/configuration.md new file mode 100644 index 0000000..43be971 --- /dev/null +++ b/docs/configuration.md @@ -0,0 +1,28 @@ +# Configuration + +There are actually two configuration files: one for the service and one for the checks. + +## Server configuration + +The server configuration is done using environment variables. You can put them in a `.env` file at the root of the project. +Here is a list of the useful variables, in the `.env` format: + +```{literalinclude} ../.env.example +--- +caption: .env +--- +``` + +## Checks configuration + +Argos uses a YAML configuration file to define the websites to monitor and the checks to run on these websites. + +Here is a simple configuration file: + + +```{literalinclude} ../config-example.yaml +--- +caption: config.yaml +--- + +``` \ No newline at end of file diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..81d700a --- /dev/null +++ b/docs/index.md @@ -0,0 +1,59 @@ +# Argos + +Argos is an HTTP monitoring service. + +1. Define a list of websites to monitor +2. Specify a list of checks to run on these websites. +3. Argos will run the checks periodically and alert you if something goes wrong. + +Internally, a HTTP API is exposed, and a job queue is used to distribute the checks on the network. + +## Features + +- **Made for large systems**: It's meant to supervise a large number of websites. +- **Server/Agent architecture**: The server is responsible for storing the configuration and the results of the checks. The agent is responsible for running the checks and sending the results to the server. +- **Extensible**: You can add new checks using pure python. +- **HTTP API**: You can use the HTTP API to get the results of the checks. + +```{code-block} bash +pip install argos-monitoring +argos server run +argos agent http://localhost:8000 "" +``` + +```{literalinclude} ../config-example.yaml +--- +caption: config.yaml +--- +``` + +## Next + +::::{grid} 2 +:::{grid-item-card} Getting started +:link: installation/getting-started.html +The best way to get started with argos. +::: +:::{grid-item-card} Developper docs +:link: /developper +You want to know more about the internals ?. +::: +:::: + + +```{toctree} +:caption: Getting started +:hidden: + +installation/getting-started +installation/postgresql +configuration +cli +``` + +```{toctree} +:caption: Checks +:hidden: + +checks +``` \ No newline at end of file diff --git a/docs/installation/getting-started.md b/docs/installation/getting-started.md new file mode 100644 index 0000000..0fb41c9 --- /dev/null +++ b/docs/installation/getting-started.md @@ -0,0 +1,65 @@ +# Installation + +So, you want to get started :-) Nothing complicated here, but here is a step by step guide. + +## Requirements + +- Python 3.11+ +- PostgreSQL 13+ + +## Getting dependencies + +Once you got the source locally, create a virtualenv and install the dependencies: + +```bash +python3 -m venv venv +source venv/bin/activate +pip install -e . +``` + +## Configure + +Prepare a configuration file, you can copy the `config-example.yaml` file and edit it: + +```bash +cp config-example.yaml config.yaml +``` + +You can read more about the configuration in the [configuration section](configuration.md). + +## Starting the server + +You need to specify environment variables to configure the server, or you can put them in an `.env` file: + +```{literalinclude} ../../.env.example +--- +caption: .env +--- +``` + +Then you can start the server: + +```bash +argos server run +``` + +The server will read a `yaml` file at startup, and will populate the tasks specified in it. + +## Running the agent + +And here is how to run the agent: + +```bash +argos agent http://localhost:8000 "" +``` + +## Running cleaning tasks + +You also need to run cleaning tasks periodically. `argos server clean --help` will give you more information on how to do that. + +Here is a crontab example: + +```bash +# Run the cleaning tasks every hour (at minute 7) +7 * * * * argos server clean --max-results 100000 --max-lock-seconds 3600 +``` \ No newline at end of file diff --git a/docs/installation/postgresql.md b/docs/installation/postgresql.md new file mode 100644 index 0000000..69eb324 --- /dev/null +++ b/docs/installation/postgresql.md @@ -0,0 +1,35 @@ +# Installing PostgreSQL + +If you intend to use argos with Postgresql, you can install it with the following commands: + +```bash +pip install argos-monitoring[postgresql] +``` + +Here are a few steps for you to install postgresql on your system: + +## Debian + +```bash +sudo apt install postgresql +``` + +By default, the `postgres` user has no password and can hence only connect if ran by the `postgres` system user. The following command will assign it: + +```bash +sudo -u postgres psql -c "ALTER USER postgres PASSWORD 'postgres';" +``` + +```bash +psql postgres -c "CREATE DATABASE argos;" +psql postgres -c "ALTER DATABASE argos SET TIMEZONE TO 'UTC';" +``` + +## MacOS + +```bash +brew install postgresql@14 +brew services start postgresql@14 +createuser argos +createdb argos -O argos +``` \ No newline at end of file diff --git a/docs/make.bat b/docs/make.bat new file mode 100644 index 0000000..32bb245 --- /dev/null +++ b/docs/make.bat @@ -0,0 +1,35 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=. +set BUILDDIR=_build + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.https://www.sphinx-doc.org/ + exit /b 1 +) + +if "%1" == "" goto help + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% + +:end +popd diff --git a/pyproject.toml b/pyproject.toml index 1f58aee..6e18cc0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ requires = ["setuptools", "setuptools-scm"] build-backend = "setuptools.build_meta" [project] -name = "argos" +name = "argos-monitoring" version = "0.1.0" description = "Distributed supervision tool for HTTP." authors = [ @@ -31,6 +31,27 @@ dependencies = [ "tenacity>=8.2,<9", ] +[project.optional-dependencies] +dev = [ + "black==23.3.0", + "isort==5.11.5", + "pytest>=6.2.5", + "pytest-asyncio>=0.21,<1", + "ipython>=8.16,<9", + "ipdb>=0.13,<0.14", + "sphinx-autobuild", +] +postgres = [ + "psycopg2-binary>=2.9,<3", +] +docs = [ + "sphinx>=7,<8", + "myst-parser>=2.0,<3", + "shibuya", + "sphinx-design", + "cogapp", +] + [project.urls] homepage = "https://framagit.org/framasoft/framaspace/argos" repository = "https://framagit.org/framasoft/framaspace/argos" @@ -40,19 +61,6 @@ repository = "https://framagit.org/framasoft/framaspace/argos" [tool.setuptools] packages = ["argos"] -[project.optional-dependencies] -dev = [ - "black==23.3.0", - "isort==5.11.5", - "pytest>=6.2.5", - "pytest-asyncio>=0.21,<1", - "ipython>=8.16,<9", - "ipdb>=0.13,<0.14", -] -postgres = [ - "psycopg2-binary>=2.9,<3", -] - [project.scripts] argos = "argos.commands:cli" @@ -63,5 +71,4 @@ testpaths = [ "tests", "argos" ] -fixture_path = "tests/fixtures.py" pythonpath = "." \ No newline at end of file