Public | Automated Build

Last pushed: 3 months ago
Short Description
SLAMon Agent Fleet Manager
Full Description

SLAMon Agent Fleet Manager (AFM)


  • python 3.3+
  • sqlalchemy>=1.0.6
  • jsonschema>=2.5.1
  • python_dateutil>= 2.4.2
  • flask>=0.10
  • flask-sqlalchemy>=2.0


Easiest way to install SLAMon Agent Fleet Manager is using pip, this will also take care of the dependencies:

pip install slamon-afm


By default, SLAMon AFM will try to lookup configuration file location in the SLAMON_AFM_CFG environment variable.
Alternatively, you can specify the configuration file path or override the database URI on command line:

  --database-uri DATABASE_URI
                        Set the AFM database URI, defaults to in memory sqlite
  --config CONFIG, -c CONFIG
                        Load AFM configuration from a file

Configuration keys

SLAMon AFM usess the configuration utilities provided by Flask. In addition to SLAMon AFM specific configuration keys,
you can tune the generic Flask and
Flask-SQLAlchemy configuration keys using
the same configuration file.

Key Description
SQLALCHEMY_DATABASE_URI The database URI that should be used for the connection. default='sqlite://'
AGENT_RETURN_TIME Default polling interval for agents, defined in seconds. default=60
AGENT_ACTIVE_THRESHOLD Timeout to wait before considering an agent as lost, defined in seconds. default=300
AUTO_CREATE Automatically create database tables before the first request. default=True

Creating a PostgreSQL database for AFM

postgres=# CREATE DATABASE slamon;
postgres=# CREATE DATABASE slamon_tests;
postgres=# CREATE USER afm WITH PASSWORD 'changeme';
postgres=# GRANT ALL PRIVILEGES ON DATABASE slamon_tests TO afm;

To create needed tables:

slamon-afm --database-uri="postgresql+psycopg2://user:pass@host/db" create-tables

To delete tables:

slamon-afm --database-uri="postgresql+psycopg2://user:pass@host/db" drop-tables


Running an instance of AFM from commandline

usage: slamon-afm run [-h] host port

Run an instance of an Agent Fleet Manager that listens to given host address

positional arguments:
  host        Host name or address e.g. localhost or
  port        Listening port, defaults to 8080

For example running AFM listening for all interfaces on port 8080:

slamon-afm run 8080

Running the tests

Running the tests with nose:

pip install -r test_requirements.txt

or with coverage report:

nosetests --with-coverage --cover-package=slamon_afm

Docker images

Pre-existing images are built from master and dev branches:
slamon/afm:stable and slamon/afm:latest respectively, and also
from GitHub tags as slamon/afm:<tag>.

Using the images

The default entrypoint in the image will start AFM listening for
with database URI read from AFM_DB_URI environment variable, which is set to
in memory SQLite database by default.

To override default configuration, extend the image with our configuration file
and override the default CMD in the Dockerfile.

With Docker Compose

The following snippet can be used, combining an agent and the AFM:

  image: slamon/afm:stable
  image: slamon/agent:stable
    AFM: "http://slamon-afm:8080"
    HANDLERS: "slamon_agent.handlers"
    EXTRA_FLAGS: "-v"
   - afm:slamon-afm

Things to do

  • Separate application logic from routes into smaller functions
    • proper unittests for these
  • Mock database usage in tests
  • Extend the BPMS API with task TTL support
Docker Pull Command