fletchck


Namefletchck JSON
Version 1.0.4 PyPI version JSON
download
home_page
SummaryMachine monitor
upload_time2024-01-04 23:48:35
maintainer
docs_urlNone
author
requires_python>=3.9
licenseMIT
keywords system monitor
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # fletchck

Fletchck is a self-contained network service monitor.
It provides a suite of simple internet service
checks with flexible scheduling provided by
[APScheduler](https://apscheduler.readthedocs.io/en/master/).
Service checks trigger notification actions
as they transition from pass to fail or vice-versa.
Configuration is via JSON file or an in-built web
user interface.

The following anonymous checks are supported:

   - smtp: SMTP with optional starttls
   - submit: SMTP-over-SSL/Submissions
   - imap: IMAP4-SSL mailbox
   - https: HTTP request
   - cert: Check TLS certificate validity and/or expiry
   - ssh: SSH pre-auth connection with optional hostkey check
   - sequence: A sequence of checks, fails if any one check fails

Service checks that use TLS will verify the service certificate
and hostname unless the selfsigned option is set.
If expiry of a self-signed certificate needs to be checked, use
the cert check with selfsigned option.

The following notification actions are supported:

   - email: Send an email
   - sms: Post SMS via SMS Central API

## Installation

Create a python virtual env, and install from pypi using pip:

	$ python3 -m venv --system-site-packages venv
	$ ./venv/bin/pip3 install fletchck

## Setup

Create a new empty site configuration in the current
directory with the -init option:

	$ ./venv/bin/fletchck -init


## Configuration

Configuration is read from a JSON encoded dictionary
object with the following keys and values:

key | type | description
--- | --- | ---
base | str | Full path to location of site configuration file
timezone | str | Time zone for notifications, schedules and interface
webui | dict | Web user interface configuration (see Web UI below)
actions | dict | Notification actions (see Actions below)
checks | dict | Service checks (see Checks below)

Notes:

   - All toplevel keys are optional
   - If webui is not present or null, the web user interface
     will not be started.
   - Action and check names may be any string that can be used
     as a dictionary key and that can be serialised in JSON.
   - Duplicate action and check names will overwrite earlier
     definitions with the same name.
   - Timezone should be a zoneinfo key or null to use host localtime

### Actions

Each key in the actions dictionary names a notification
action dictionary with the following keys and values:

key | type | description
--- | --- | ---
type | str | Action type, one of 'log', 'email' or 'sms'
options | dict | Dictionary of option names and values

The following action options are recognised:

option | type | description
--- | --- | ---
hostname | str | Email submission hostname
url | str | API Url for SMS sending
port | int | TCP port for email submission
username | str | Username for authentication
password | str | Password for authentication
sender | str | Sender string
timeout | int | TCP timeout for email submission
recipients | list | List of recipient strings
site | str | Site identifier (default is Fletchck)


### Checks

Each key in the checks dictionary names a service check
with the following keys and values:

key | type | description
--- | --- | ---
type | str | Check type: cert, smtp, submit, imap, https, ssh or sequence
trigger | dict | Trigger definition (see Scheduling below)
threshold | int | Fail state reported after this many failed checks
failAction | bool | Send notification action on transision to fail
passAction | bool | Send notification action on transition to pass
options | dict | Dictionary of option names and values (see below)
actions | list | List of notification action names
depends | list | List of check names this check depends on
data | dict | Runtime data and logs (internal)

Note that only the type is required, all other keys are optional.
The following check options are recognised:

option | type | description
--- | --- | ---
hostname | str | Hostname or IP address of target service
port | int | TCP port of target service
timeout | int | Socket timeout in seconds
timezone | str | Timezone for schedule and notification
selfsigned | bool | If set, TLS sessions will not validate service certificate
tls | bool | (smtp) If set, call starttls to initiate TLS
probe | str | (cert) send str probe to service after TLS negotiation
reqType | str | (https) Request method: HEAD, GET, POST, PUT, DELETE, etc
reqPath | str | (https) Request target resource
hostkey | str | (ssh) Target service base64 encoded public key
checks| list | (sequence) List of check names to be run in-turn

Unrecognised options are ignored by checks.

Example:

	"checks": {
	 "Home Cert": {
	  "type": "cert",
	  "passAction": false,
	  "trigger": { "cron": {"day": 1, "hour": 1} },
	  "options": { "hostname": "home.place.com", "port": 443 },
	  "actions": [ "Tell Alice" ]
	 }
	}

Define a single check named "Home Cert" which performs
a certificate verification check on port 443 of
"home.place.com" at 1:00 am on the first of each month,
and notifies using the action named "Tell Alice" on
transition to fail.


### Example Config

The following complete configuration describes
a fletchck site with no web ui that runs a set
of checks for a single site with a web site and
SMTP, IMAP services behind a router.
Router connectivity is checked every 5 minutes while
the other services are checked in a sequence once per hour
during the day. Failures of the router will trigger
an sms, while service failures send an email.

	{
	 "actions": {
	  "sms-admin": {
	   "type": "sms",
	   "options": { "recipient": "+1234234234" }
	  },
	  "email-all": {
	   "type": "email",
	   "options": {
	    "hostname": "mail.place.com",
	    "sender": "monitor@place.com",
	    "recipients": [ "admin@place.com", "info@place.com" ]
	   }
	  }
	 },
	 "checks": {
	  "place-gateway": {
	   "type": "ssh",
	   "trigger": { "interval": { "minutes": 5 } },
	   "options": { "hostname": "gw.place.com" },
	   "actions": [ "sms-admin" ]
	  },
	  "place-svc": {
	   "type": "sequence",
	   "trigger": { "cron": { "hour": "9-17", "minute": "0" } },
	   "options": { "checks": [ "place-email", "place-mbox", "place-web" ] },
	   "actions": [ "email-all" ]
	  },
	  "place-email": {
	   "type": "smtp",
	   "options": { "hostname": "mail.place.com" },
	   "depends": [ "place-gateway" ]
	  },
	  "place-mbox": {
	   "type": "imap",
	   "options": { "hostname": "mail.place.com" },
	   "depends": [ "place-gateway" ]
	  },
	  "place-web": {
	   "type": "https",
	   "options": { "hostname": "place.com" }
	  }
	 }
	}

## Scheduling

Job scheduling is managed by APScheduler. Each defined
check may have one optional trigger of type interval or cron.

Within the web interface, trigger schedules are entered
using a plain text whitespace separated list of value/unit pairs.

An interval trigger with a 20 second jitter time and an explicit start:

	interval 1 week 2 day 3 hr 5 min 15 sec 20 jitter 2025-06-15 start

A cron trigger with an explicit timezone:

	cron 9-17 hr 20,40 min mon-fri weekday Australia/Adelaide z

### Interval

The check is scheduled to be run at a repeating interval
of the specified number of weeks, days, hours, minutes
and seconds. Optionally provide a start time and jitter
to adjust the initial trigger and add a random execution delay.

For example, a trigger that runs every 10 minutes
with a 20 second jitter:

	"interval": {
	 "minutes": 10,
	 "jitter": 20
	}

Interval reference: [apscheduler.triggers.interval](https://apscheduler.readthedocs.io/en/3.x/modules/triggers/interval.html)

### Cron

The configured check is triggered by UNIX cron style
time fields (year, month, day, hour, minute, second etc).
For example, to define a trigger that is run at 5, 25
and 45 minutes past the hour between 5am and 8pm every day:

	"cron": {
	 "hour": "5-20",
	 "minute": "5,25,45"
	}

Cron reference: [apscheduler.triggers.cron](https://apscheduler.readthedocs.io/en/3.x/modules/triggers/cron.html)

## Web UI

The web user interface is configured with the webui key 
of the site config. The keys and values are as follows:

key | type | description
--- | --- | ---
debug | bool | Include debugging information on web interface
cert | str | path to TLS certificate
key | str | path to TLS private key
host | str | hostname to listen on
port | int | port to listen on
name | str | site name displayed on header
base | str | path to configuration file
users | dict | authorised usernames and hashed passwords

            

Raw data

            {
    "_id": null,
    "home_page": "",
    "name": "fletchck",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": "",
    "keywords": "system,monitor",
    "author": "",
    "author_email": "Nathan Fraser <ndf-zz@6-v.org>",
    "download_url": "https://files.pythonhosted.org/packages/bd/54/997a2db2dec7ebd5916fbf9bb827b5193574449074ebfa1fd55c97e152a1/fletchck-1.0.4.tar.gz",
    "platform": null,
    "description": "# fletchck\n\nFletchck is a self-contained network service monitor.\nIt provides a suite of simple internet service\nchecks with flexible scheduling provided by\n[APScheduler](https://apscheduler.readthedocs.io/en/master/).\nService checks trigger notification actions\nas they transition from pass to fail or vice-versa.\nConfiguration is via JSON file or an in-built web\nuser interface.\n\nThe following anonymous checks are supported:\n\n   - smtp: SMTP with optional starttls\n   - submit: SMTP-over-SSL/Submissions\n   - imap: IMAP4-SSL mailbox\n   - https: HTTP request\n   - cert: Check TLS certificate validity and/or expiry\n   - ssh: SSH pre-auth connection with optional hostkey check\n   - sequence: A sequence of checks, fails if any one check fails\n\nService checks that use TLS will verify the service certificate\nand hostname unless the selfsigned option is set.\nIf expiry of a self-signed certificate needs to be checked, use\nthe cert check with selfsigned option.\n\nThe following notification actions are supported:\n\n   - email: Send an email\n   - sms: Post SMS via SMS Central API\n\n## Installation\n\nCreate a python virtual env, and install from pypi using pip:\n\n\t$ python3 -m venv --system-site-packages venv\n\t$ ./venv/bin/pip3 install fletchck\n\n## Setup\n\nCreate a new empty site configuration in the current\ndirectory with the -init option:\n\n\t$ ./venv/bin/fletchck -init\n\n\n## Configuration\n\nConfiguration is read from a JSON encoded dictionary\nobject with the following keys and values:\n\nkey | type | description\n--- | --- | ---\nbase | str | Full path to location of site configuration file\ntimezone | str | Time zone for notifications, schedules and interface\nwebui | dict | Web user interface configuration (see Web UI below)\nactions | dict | Notification actions (see Actions below)\nchecks | dict | Service checks (see Checks below)\n\nNotes:\n\n   - All toplevel keys are optional\n   - If webui is not present or null, the web user interface\n     will not be started.\n   - Action and check names may be any string that can be used\n     as a dictionary key and that can be serialised in JSON.\n   - Duplicate action and check names will overwrite earlier\n     definitions with the same name.\n   - Timezone should be a zoneinfo key or null to use host localtime\n\n### Actions\n\nEach key in the actions dictionary names a notification\naction dictionary with the following keys and values:\n\nkey | type | description\n--- | --- | ---\ntype | str | Action type, one of 'log', 'email' or 'sms'\noptions | dict | Dictionary of option names and values\n\nThe following action options are recognised:\n\noption | type | description\n--- | --- | ---\nhostname | str | Email submission hostname\nurl | str | API Url for SMS sending\nport | int | TCP port for email submission\nusername | str | Username for authentication\npassword | str | Password for authentication\nsender | str | Sender string\ntimeout | int | TCP timeout for email submission\nrecipients | list | List of recipient strings\nsite | str | Site identifier (default is Fletchck)\n\n\n### Checks\n\nEach key in the checks dictionary names a service check\nwith the following keys and values:\n\nkey | type | description\n--- | --- | ---\ntype | str | Check type: cert, smtp, submit, imap, https, ssh or sequence\ntrigger | dict | Trigger definition (see Scheduling below)\nthreshold | int | Fail state reported after this many failed checks\nfailAction | bool | Send notification action on transision to fail\npassAction | bool | Send notification action on transition to pass\noptions | dict | Dictionary of option names and values (see below)\nactions | list | List of notification action names\ndepends | list | List of check names this check depends on\ndata | dict | Runtime data and logs (internal)\n\nNote that only the type is required, all other keys are optional.\nThe following check options are recognised:\n\noption | type | description\n--- | --- | ---\nhostname | str | Hostname or IP address of target service\nport | int | TCP port of target service\ntimeout | int | Socket timeout in seconds\ntimezone | str | Timezone for schedule and notification\nselfsigned | bool | If set, TLS sessions will not validate service certificate\ntls | bool | (smtp) If set, call starttls to initiate TLS\nprobe | str | (cert) send str probe to service after TLS negotiation\nreqType | str | (https) Request method: HEAD, GET, POST, PUT, DELETE, etc\nreqPath | str | (https) Request target resource\nhostkey | str | (ssh) Target service base64 encoded public key\nchecks| list | (sequence) List of check names to be run in-turn\n\nUnrecognised options are ignored by checks.\n\nExample:\n\n\t\"checks\": {\n\t \"Home Cert\": {\n\t  \"type\": \"cert\",\n\t  \"passAction\": false,\n\t  \"trigger\": { \"cron\": {\"day\": 1, \"hour\": 1} },\n\t  \"options\": { \"hostname\": \"home.place.com\", \"port\": 443 },\n\t  \"actions\": [ \"Tell Alice\" ]\n\t }\n\t}\n\nDefine a single check named \"Home Cert\" which performs\na certificate verification check on port 443 of\n\"home.place.com\" at 1:00 am on the first of each month,\nand notifies using the action named \"Tell Alice\" on\ntransition to fail.\n\n\n### Example Config\n\nThe following complete configuration describes\na fletchck site with no web ui that runs a set\nof checks for a single site with a web site and\nSMTP, IMAP services behind a router.\nRouter connectivity is checked every 5 minutes while\nthe other services are checked in a sequence once per hour\nduring the day. Failures of the router will trigger\nan sms, while service failures send an email.\n\n\t{\n\t \"actions\": {\n\t  \"sms-admin\": {\n\t   \"type\": \"sms\",\n\t   \"options\": { \"recipient\": \"+1234234234\" }\n\t  },\n\t  \"email-all\": {\n\t   \"type\": \"email\",\n\t   \"options\": {\n\t    \"hostname\": \"mail.place.com\",\n\t    \"sender\": \"monitor@place.com\",\n\t    \"recipients\": [ \"admin@place.com\", \"info@place.com\" ]\n\t   }\n\t  }\n\t },\n\t \"checks\": {\n\t  \"place-gateway\": {\n\t   \"type\": \"ssh\",\n\t   \"trigger\": { \"interval\": { \"minutes\": 5 } },\n\t   \"options\": { \"hostname\": \"gw.place.com\" },\n\t   \"actions\": [ \"sms-admin\" ]\n\t  },\n\t  \"place-svc\": {\n\t   \"type\": \"sequence\",\n\t   \"trigger\": { \"cron\": { \"hour\": \"9-17\", \"minute\": \"0\" } },\n\t   \"options\": { \"checks\": [ \"place-email\", \"place-mbox\", \"place-web\" ] },\n\t   \"actions\": [ \"email-all\" ]\n\t  },\n\t  \"place-email\": {\n\t   \"type\": \"smtp\",\n\t   \"options\": { \"hostname\": \"mail.place.com\" },\n\t   \"depends\": [ \"place-gateway\" ]\n\t  },\n\t  \"place-mbox\": {\n\t   \"type\": \"imap\",\n\t   \"options\": { \"hostname\": \"mail.place.com\" },\n\t   \"depends\": [ \"place-gateway\" ]\n\t  },\n\t  \"place-web\": {\n\t   \"type\": \"https\",\n\t   \"options\": { \"hostname\": \"place.com\" }\n\t  }\n\t }\n\t}\n\n## Scheduling\n\nJob scheduling is managed by APScheduler. Each defined\ncheck may have one optional trigger of type interval or cron.\n\nWithin the web interface, trigger schedules are entered\nusing a plain text whitespace separated list of value/unit pairs.\n\nAn interval trigger with a 20 second jitter time and an explicit start:\n\n\tinterval 1 week 2 day 3 hr 5 min 15 sec 20 jitter 2025-06-15 start\n\nA cron trigger with an explicit timezone:\n\n\tcron 9-17 hr 20,40 min mon-fri weekday Australia/Adelaide z\n\n### Interval\n\nThe check is scheduled to be run at a repeating interval\nof the specified number of weeks, days, hours, minutes\nand seconds. Optionally provide a start time and jitter\nto adjust the initial trigger and add a random execution delay.\n\nFor example, a trigger that runs every 10 minutes\nwith a 20 second jitter:\n\n\t\"interval\": {\n\t \"minutes\": 10,\n\t \"jitter\": 20\n\t}\n\nInterval reference: [apscheduler.triggers.interval](https://apscheduler.readthedocs.io/en/3.x/modules/triggers/interval.html)\n\n### Cron\n\nThe configured check is triggered by UNIX cron style\ntime fields (year, month, day, hour, minute, second etc).\nFor example, to define a trigger that is run at 5, 25\nand 45 minutes past the hour between 5am and 8pm every day:\n\n\t\"cron\": {\n\t \"hour\": \"5-20\",\n\t \"minute\": \"5,25,45\"\n\t}\n\nCron reference: [apscheduler.triggers.cron](https://apscheduler.readthedocs.io/en/3.x/modules/triggers/cron.html)\n\n## Web UI\n\nThe web user interface is configured with the webui key \nof the site config. The keys and values are as follows:\n\nkey | type | description\n--- | --- | ---\ndebug | bool | Include debugging information on web interface\ncert | str | path to TLS certificate\nkey | str | path to TLS private key\nhost | str | hostname to listen on\nport | int | port to listen on\nname | str | site name displayed on header\nbase | str | path to configuration file\nusers | dict | authorised usernames and hashed passwords\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Machine monitor",
    "version": "1.0.4",
    "project_urls": {
        "homepage": "https://github.com/ndf-zz/fletchck"
    },
    "split_keywords": [
        "system",
        "monitor"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "be391ce15bb7c2225a383ee398056c1b96c2fdca0ce9f903f02892fbf830fc18",
                "md5": "6442a7ac2ba7db682aeaf24b52c9d717",
                "sha256": "f6a7636850c5f8c0d387e306bc5bd9b5cb1aff1db9aa0163e6f1e14ef4350718"
            },
            "downloads": -1,
            "filename": "fletchck-1.0.4-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "6442a7ac2ba7db682aeaf24b52c9d717",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.9",
            "size": 80958,
            "upload_time": "2024-01-04T23:48:33",
            "upload_time_iso_8601": "2024-01-04T23:48:33.158163Z",
            "url": "https://files.pythonhosted.org/packages/be/39/1ce15bb7c2225a383ee398056c1b96c2fdca0ce9f903f02892fbf830fc18/fletchck-1.0.4-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "bd54997a2db2dec7ebd5916fbf9bb827b5193574449074ebfa1fd55c97e152a1",
                "md5": "c234f5e2cc752ea7e8277dab53353266",
                "sha256": "b8b4c564882bb477caad159fa8f40ecc193671b4621278283ae2b030c37af245"
            },
            "downloads": -1,
            "filename": "fletchck-1.0.4.tar.gz",
            "has_sig": false,
            "md5_digest": "c234f5e2cc752ea7e8277dab53353266",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 77432,
            "upload_time": "2024-01-04T23:48:35",
            "upload_time_iso_8601": "2024-01-04T23:48:35.899135Z",
            "url": "https://files.pythonhosted.org/packages/bd/54/997a2db2dec7ebd5916fbf9bb827b5193574449074ebfa1fd55c97e152a1/fletchck-1.0.4.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-01-04 23:48:35",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "ndf-zz",
    "github_project": "fletchck",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "fletchck"
}
        
Elapsed time: 0.16134s