Netdef

Summary

An application framework with built-in drivers (Controllers), data holders (Sources) and config parsers (Rules). Also includes a web interface for configuration and troubleshooting.

Features

  • Abstract base classes for creating custom controllers, sources and rules
  • The configuration is done using configparser with extended interpolation
  • Start a new netdef project with cookiecutter or make-project. Templates available at https://gitlab.com/fholmer/netdef-project/
  • Built-in Controllers:
    • OpcUa server / client (freeopcua)
    • TcpModbus server / client (pymodbus)
    • icmp ping / url ping
    • XmlRpc client
    • trigger events by using crontab format (crontab)
    • disk, memory and CPU monitoring (psutil)
    • MQTT client (using a simple messaging format called DataMessage) (paho-mqtt)
    • Simple RESTJson client
    • Simple Influxdb logger (influxdb)
  • Built-in Rules:
    • Generic CSV config parser
    • Generic INI config parser
    • Generic Yaml config parser (PyYAML)
  • Built-in application engines:
    • threaded engine with stdout/stderr only
    • threaded engine with web-interface (webadmin)
    • serve webadmin behind nginx reverse proxy

Use Cases

Netdef is useful if you want to create a middleware that can translate a protocol into a completely different protocol or data format into a completely different data format.

Getting started

First install make-project:

$ python3 -m pip install --user make

Create your first application:

$ python3 -m make project gl:fholmer/netdef-project/minimal-app

When asked for project_name type Test-App:

project_name? [First-App]: Test-App

Setup development environment for your application:

$ cd Test-App
$ python3 -m venv venv
$ source venv/bin/activate
$ pip install wheel
$ pip install -r requirements-dev.txt
$ pip install -r requirements.txt
$ python -m test_app -i .

Run:

$ python -m test_app -r .

CTRL-C to exit

Package your application:

$ python setup.py bdist_wheel

Exit development environment:

$ deactivate

Prepare deployment:

$ sudo mkdir -p /opt/test-app
$ sudo chown $USER:$USER /opt/test-app/
$ python3 -m venv /opt/test-app/

Deploy your application:

$ source /opt/test-app/bin/activate
$ pip install ./dist/Test_App-0.1.0-py3-none-any.whl
$ python -m test_app -i /opt/test-app/

Install as service:

$ sudo /opt/test-app/bin/Test-App-Service -u $USER --install /opt/test-app/

Enable and run:

$ sudo systemctl --system daemon-reload
$ sudo systemctl enable test-app-service.service
$ sudo systemctl start test-app-service.service