From 484ad6e3b3debab2a0bd1a1240047fef7f03bd47 Mon Sep 17 00:00:00 2001 From: Johannes Findeisen Date: Sun, 12 Feb 2023 06:31:35 +0100 Subject: [PATCH] Many cleanups, additions and new ideas. --- Makefile | 42 +- bin/lish | 3 +- etc/plugins/api.conf | 4 + etc/plugins/httpd.conf | 4 + etc/plugins/httpserver.conf | 4 - etc/tasks/splunk.conf | 3 + etc/tasks/syslog.conf | 3 + linspector/core/linspector.py | 1 + linspector/plugins/api.py | 1 + .../plugins/{httpserver.py => httpd.py} | 4 +- linspector/plugins/lish.py | 26 ++ linspector/tasks/file.py | 1 - requirements.freeze | 366 +----------------- 13 files changed, 104 insertions(+), 358 deletions(-) create mode 100644 etc/plugins/api.conf create mode 100644 etc/plugins/httpd.conf delete mode 100644 etc/plugins/httpserver.conf create mode 100644 etc/tasks/splunk.conf create mode 100644 etc/tasks/syslog.conf rename linspector/plugins/{httpserver.py => httpd.py} (97%) create mode 100644 linspector/plugins/lish.py diff --git a/Makefile b/Makefile index 5bfa15e..0f7f5d8 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,41 @@ -all: - PYTHONPATH=$(shell pwd) ./bin/linspector -s ./etc +PYTHON_VERSION=3.10 +#PYTHON_VERSION = $(shell python -V | awk -F ' ' '{print $2}' | awk -F '.' '{print $1 "." $2}') + +help: + # Getting started using this Makefile. + # It should help you to go on fast and easy. + # + # First edit this Makefile and add your Python version: + # ----------------------------------------------------- + # Set PYTHON_VERSION to MAJOR.MINOR version of your + # current installed Python version. E.g.: 3.10 (default). + # Get the Python version with: python -V + # + # Create virtual environment: + # --------------------------- + # python -m venv ./venv + # source ./venv/bin/activate + # pip install -r requirements.txt + # + # Activate virtual environment when not already done: + # --------------------------------------------------- + # source ./venv/bin/activate + # + # Deactivate virtual environment: + # ------------------------------- + # deactivate + # + # Run Linspector: + # --------------- + # make run + # + # Run Linspector in daemon mode: + # ------------------------------ + # make daemon + +run: + PYTHONPATH=$(shell pwd):$(shell pwd)/venv/lib/python$(PYTHON_VERSION)/site-packages/ bin/linspector -s ./etc daemon: - PYTHONPATH=$(shell pwd) ./bin/linspector -d ./etc + PYTHONPATH=$(shell pwd):$(shell pwd)/venv/lib/python$(PYTHON_VRESION)/site-packages/ bin/linspector -d ./etc + diff --git a/bin/lish b/bin/lish index 1bd50fa..792c039 100755 --- a/bin/lish +++ b/bin/lish @@ -14,11 +14,10 @@ import logging.handlers import os import sys -from linspector.core.helpers import log - from linspector.core.configuration import Configuration from linspector.core.environment import Environment from linspector.core.linspector import Linspector +from linspector.core.logger import Log from linspector.core.monitors import Monitors logger = logging.getLogger('linspector') diff --git a/etc/plugins/api.conf b/etc/plugins/api.conf new file mode 100644 index 0000000..53a9488 --- /dev/null +++ b/etc/plugins/api.conf @@ -0,0 +1,4 @@ +[api] +host = 127.0.0.1 +port = 4242 +type = thread \ No newline at end of file diff --git a/etc/plugins/httpd.conf b/etc/plugins/httpd.conf new file mode 100644 index 0000000..4e92011 --- /dev/null +++ b/etc/plugins/httpd.conf @@ -0,0 +1,4 @@ +[httpserver] +host = 127.0.0.1 +port = 8080 +type = thread \ No newline at end of file diff --git a/etc/plugins/httpserver.conf b/etc/plugins/httpserver.conf deleted file mode 100644 index e3beeae..0000000 --- a/etc/plugins/httpserver.conf +++ /dev/null @@ -1,4 +0,0 @@ -[httpserver] -ip = 127.0.0.1 -port = 4242 -type = thread \ No newline at end of file diff --git a/etc/tasks/splunk.conf b/etc/tasks/splunk.conf new file mode 100644 index 0000000..80d2769 --- /dev/null +++ b/etc/tasks/splunk.conf @@ -0,0 +1,3 @@ +[splunk] +host = splunk.example.org +port = 3333 \ No newline at end of file diff --git a/etc/tasks/syslog.conf b/etc/tasks/syslog.conf new file mode 100644 index 0000000..343b479 --- /dev/null +++ b/etc/tasks/syslog.conf @@ -0,0 +1,3 @@ +[syslog] +host = log.example.org +port = 514 \ No newline at end of file diff --git a/linspector/core/linspector.py b/linspector/core/linspector.py index a1cf3c2..1ad00f4 100644 --- a/linspector/core/linspector.py +++ b/linspector/core/linspector.py @@ -1,3 +1,4 @@ + """ This file is part of Linspector (https://linspector.org/) Copyright (c) 2022 Johannes Findeisen . All Rights Reserved. diff --git a/linspector/plugins/api.py b/linspector/plugins/api.py index a94edd6..6de93a5 100644 --- a/linspector/plugins/api.py +++ b/linspector/plugins/api.py @@ -6,6 +6,7 @@ See LICENSE.txt (MIT license). # TODO: Make this a backend API using the modern FastAPI framework as a replacement for the # traditional RPC plugin. Maybe it makes sense to maintain the RPC plugin too for simple usage by # the Lish but I believe it makes sense to only create one backend for all clients. +from fastapi import FastAPI from linspector.core.plugin import Plugin diff --git a/linspector/plugins/httpserver.py b/linspector/plugins/httpd.py similarity index 97% rename from linspector/plugins/httpserver.py rename to linspector/plugins/httpd.py index 1f2b686..678b5e2 100644 --- a/linspector/plugins/httpserver.py +++ b/linspector/plugins/httpd.py @@ -11,11 +11,11 @@ from linspector.core.plugin import Plugin def create(configuration, environment, linspector, log): - return HTTPServerPlugin(configuration, environment, linspector, log) + return HTTPDPlugin(configuration, environment, linspector, log) # TODO: check for all required configuration options and set defaults if needed. -class HTTPServerPlugin(Plugin): +class HTTPDPlugin(Plugin): def __init__(self, configuration, environment, linspector, log): super().__init__(configuration, environment, linspector, log) diff --git a/linspector/plugins/lish.py b/linspector/plugins/lish.py new file mode 100644 index 0000000..3b91b92 --- /dev/null +++ b/linspector/plugins/lish.py @@ -0,0 +1,26 @@ +""" +This file is part of Linspector (https://linspector.org/) +Copyright (c) 2022 Johannes Findeisen . All Rights Reserved. +See LICENSE.txt (MIT license). +""" +# TODO: This plugin should become the internal Lish implemented as a plugin which does not use the +# API plugin but loads at the end when starting Linspector in interactive mode as a terminal like +# interface to the core of Linspector. +from linspector.core.plugin import Plugin + + +def create(configuration, environment, linspector, log): + return LishPlugin(configuration, environment, linspector, log) + + +# TODO: check for all required configuration options and set defaults if needed. +class LishPlugin(Plugin): + def __init__(self, configuration, environment, linspector, log): + super().__init__(configuration, environment, linspector, log) + self.__configuration = configuration + self.__environment = environment + self.__linspector = linspector + self.__log = log + + def run(self): + return diff --git a/linspector/tasks/file.py b/linspector/tasks/file.py index 1b7e695..40e1662 100644 --- a/linspector/tasks/file.py +++ b/linspector/tasks/file.py @@ -12,7 +12,6 @@ def create(configuration, environment, log): # TODO: check for all required configuration options and set defaults if needed. class FileTask(Task): - def __init__(self, configuration, environment, log): super().__init__(configuration, environment, log) self.__configuration = configuration diff --git a/requirements.freeze b/requirements.freeze index ba4ee89..ca8781f 100644 --- a/requirements.freeze +++ b/requirements.freeze @@ -1,384 +1,58 @@ -adafruit-ampy==1.1.0 -aiofiles==22.1.0 -aiohttp==3.8.3 -aiohttp-cors==0.7.0 -aiosignal==1.3.1 -alabaster==0.7.13 -ansible==7.2.0 -ansible-core==2.14.2 anyio==3.6.2 -anytree==2.8.0 -appdirs==1.4.4 -apsw==3.40.0.0 -arandr==0.1.11 -argcomplete==2.0.0 -argon2-cffi==21.3.0 -argon2-cffi-bindings==21.2.0 -asciidoc==10.2.0 -asciinema==2.2.0 -asgiref==3.5.2 -astroid==2.13.3 -asttokens==2.2.1 -async-generator==1.10 -async-timeout==4.0.2 -attrs==22.2.0 +APScheduler==3.10.0 autocommand==2.2.2 -Automat==22.10.0 -Babel==2.11.0 -backcall==0.2.0 bcrypt==4.0.1 -beautifulsoup4==4.11.1 -binwalk==2.3.3 -bitstring==3.1.9 -black==22.12.0 -bleach==6.0.0 -blessed==1.20.0 -blinker==1.5 -bottle==0.12.23 -bpython==0.23 -Brotli==1.0.9 -brotlicffi==1.0.9.2 -btrfsutil==6.1.3 -cairocffi==1.4.0 -CairoSVG==2.5.2 -cchardet==2.1.7 certifi==2022.12.7 cffi==1.15.1 -chardet==5.1.0 charset-normalizer==3.0.1 cheroot==9.0.0 CherryPy==18.8.0 click==8.1.3 -click-plugins==1.1.1 -cloudpickle==2.2.0 -colorama==0.4.6 -constantly==15.1.0 -construct==2.10.68 -contourpy==1.0.7 -crc32c==2.3 cryptography==39.0.1 -css-parser==1.0.8 -cssselect==1.2.0 -cssselect2==0.7.0 -cupshelpers==1.0 -curtsies==0.4.1 -cwcwidth==0.1.8 -cycler==0.11.0 -Cython==0.29.33 -decorator==5.1.1 -defusedxml==0.7.1 -dill==0.3.6 -distlib==0.3.6 -distro==1.8.0 -Django==4.1.5 -dnspython==2.2.1 -docutils==0.19 -doit==0.36.0 -ecdsa==0.18.0 -email-validator==1.3.1 -esptool==4.4 -evdev==1.6.1 -executing==1.2.0 -fastapi==0.89.1 -fastjsonschema==2.16.2 -feedparser==6.0.10 -fido2==1.1.0 -filelock==3.8.2 -Flask==2.2.2 -flickr-api==0.7.5 -fonttools==4.38.0 -FoxDot==0.8.12 -frozenlist==1.3.3 -fusepy==3.0.1 -future==0.18.2 -gajim==1.6.1 -ghp-import==1.1.0 -gns3-gui==2.2.37 -gns3-server==2.2.37 -gps==3.25 -greenlet==2.0.2 -gssapi==1.8.2 -gufw==22.4.0 -gunicorn==20.1.0 +fastapi==0.91.0 +fritzconnection==1.11.0 h11==0.14.0 -hiredis==2.0.0 -html2text==2020.1.16 -html5-parser==0.4.10 -html5lib==1.1 -httpcore==0.16.3 -httplib2==0.21.0 -httptools==0.5.0 -httpx==0.23.3 -hurry.filesize==0.9 -husl==4.0.3 -hyperlink==21.0.0 idna==3.4 -ifaddr==0.2.0 -imagesize==1.4.1 -importlib-metadata==5.0.0 -importlib-resources==5.10.2 -incremental==22.10.0 -inflate64==0.3.1 +importlib-metadata==4.13.0 inflect==6.0.2 -intelhex==2.3.0 -iotop==0.6 -ipython==8.9.0 -isodate==0.6.1 -isort==5.12.0 -itsdangerous==2.1.2 jaraco.classes==3.2.3 -jaraco.collections==3.5.2 +jaraco.collections==3.8.0 jaraco.context==4.3.0 jaraco.functools==3.5.2 jaraco.text==3.11.1 -jedi==0.18.2 -jeepney==0.8.0 -jimner==1.2.3 -Jinja2==3.1.2 -jsonschema==4.17.3 -keyring==23.11.0 -Kivy==2.1.0 -kiwisolver==1.4.4 -lazy-object-proxy==1.9.0 -lensfun==0.3.3 -libfdt==1.6.1 -libsigrok==0.5.2 -libvirt-python==9.0.0 -lit==15.0.7.dev0 -lockfile==0.12.2 -Logbook==1.5.3 -louis==3.24.0 -lxml==4.9.2 -Mako==1.2.4 -mallard-ducktype==1.0.2 -Markdown==3.3.7 +loguru==0.6.0 markdown-it-py==2.1.0 -Markups==3.1.3 -MarkupSafe==2.1.2 -matplotlib==3.6.2 -matplotlib-inline==0.1.6 -mccabe==0.7.0 mdurl==0.1.2 -mechanize==0.4.8 -mercurial==6.3.2 -meson==1.0.0 -micawber==0.5.4 more-itertools==9.0.0 -mpy-utils==0.1.11 -msgpack==1.0.4 -multidict==6.0.3 -multivolumefile==0.2.3 -mutagen==1.46.0 -mypy==0.991 -mypy-extensions==0.4.3 -namcap==3.3.1 -natsort==8.2.0 -nbxmpp==4.0.1 -nemo-audio-tab==5.6.0 -nemo-pastebin==5.6.0 -netaddr==0.8.0 -netifaces==0.11.0 -netsnmp-python==1.0a1 -nftables==0.1 -Nikola==8.2.3 -Nuitka==1.4 -numpy==1.24.1 -oauth2==1.9.0.post1 -ordered-set==4.1.0 -orjson==3.8.5 -packaging==23.0 -paramiko==2.11.1 -parso==0.8.3 -pass-import==3.4 -pathspec==0.11.0 -pdftotext==2.2.2 -pexpect==4.8.0 -pickleshare==0.7.5 -piexif==1.1.3 -Pillow==9.4.0 -pkginfo==1.9.6 -platformdirs==2.6.2 +nanoid==2.0.0 +paramiko==3.0.0 ply==3.11 -pmbootstrap==1.50.1 -pooch==1.6.0 portend==3.1.0 -powerline-status==2.8.3 -precis-i18n==1.0.4 -prompt-toolkit==3.0.36 -protobuf==4.21.12 -psutil==5.9.4 -ptyprocess==0.7.0 -pudb==2022.1.3 -pure-eval==0.2.2 -pwquality==1.4.5 -py-cpuinfo==9.0.0 -py7zr==0.20.2 -pyaes==1.6.1 -pyalpm==0.10.6 -pyaml==21.10.1 pyasn1==0.4.8 -pyasn1-modules==0.2.8 -pybcj==1.0.1 -pybind11==2.10.3 -pycairo==1.23.0 -pychm==0.8.6 pycparser==2.21 -pycryptodome==3.17 -pycryptodomex==3.12.0 -pycups==2.0.1 -pycurl==7.45.2 +pycryptodomex==3.17 pydantic==1.10.4 -pyelftools==0.29 -pyenchant==3.2.2 -pygal==3.0.0 Pygments==2.14.0 -PyGObject==3.42.2 -PyGObject-stubs==2.2.0 -pyinotify==0.9.6 -pykeepass==4.0.3 -pylint==2.16.1 -PyMySQL==1.0.2 -PyNaCl==1.4.0 -PyOpenGL==3.1.6 -pyOpenSSL==23.0.0 -pyparsing==3.0.9 -pyppmd==1.0.0 -Pypubsub==4.0.3 -PyQt5==5.15.9 -PyQt5-sip==12.11.1 -PyQt6==6.4.2 -PyQt6-sip==13.4.1 -PyQt6-WebEngine==6.4.0 -pyqtgraph==0.13.1 -pyroute2==0.7.3 -pyrsistent==0.19.3 -PyRSS2Gen==1.1 -pyscard==2.0.5 -pyserial==3.5 -PySide2==5.15.8 +PyNaCl==1.5.0 pysmi==0.3.4 pysnmp==4.4.12 -python-axolotl==0.2.3 -python-axolotl-curve25519==0.4.1.post2 -python-daemon==2.3.0 -python-dateutil==2.8.2 -python-dotenv==0.21.1 python-gammu==3.2.4 -python-magic==0.4.27 -python-markdown-math==0.8 -python-multipart==0.0.5 -python-yubico==1.3.3 -pytz==2022.7 +pytz==2022.7.1 pytz-deprecation-shim==0.1.0.post0 -pyudev==0.24.0 -pyusb==1.2.1 -pyxdg==0.28 -PyYAML==6.0 -pyzmq==24.0.1 -pyzstd==0.15.3 -qrcode==7.3.1 -rangehttpserver==1.2.0 -rdflib==6.2.0 -readme-renderer==37.3 -redis==4.4.0 -reedsolo==1.7.0 -Reflector==2021.11.20.2.41.3 -regex==2022.10.31 -requests==2.28.1 -requests-toolbelt==0.10.1 -resolvelib==0.8.1 -ReText==8.0.0 -rfc3986==1.5.0 +requests==2.28.2 rich==13.3.1 -rjsmin==1.2.1 -rrdtool==0.1.10 -rshell==0.0.31 -ruamel.yaml==0.17.21 -ruamel.yaml.clib==0.2.7 -s-tui==1.1.4 -scipy==1.10.0 -SCons==4.4.0 -SecretStorage==3.3.3 -Send2Trash==1.8.0 -sentry-sdk==1.15.0 -service-identity==21.1.0 -setproctitle==1.3.2 -sgmllib3k==1.0.0 -shiboken2==5.15.8 -shiv==1.0.3 six==1.16.0 -skia-python @ file:///var/tmp/python-skia/src/skia_python-87.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -smartypants==2.0.1 sniffio==1.3.0 -snowballstemmer==2.2.0 -soupsieve==2.3.2.post1 -speedtest-cli==2.1.3 -Sphinx==5.3.0 -sphinxcontrib-applehelp==1.0.4 -sphinxcontrib-devhelp==1.0.2 -sphinxcontrib-htmlhelp==2.0.1 -sphinxcontrib-jsmath==1.0.1 -sphinxcontrib-qthelp==1.0.3 -sphinxcontrib-serializinghtml==1.1.5 -SQLAlchemy==1.4.44 -sqlparse==0.4.3 -stack-data==0.6.2 -starlette==0.22.0 -stevedore==4.1.1 -supervisor==4.2.5 -sysmon==1.0.0 -tasklib==2.5.1 -TBB==0.2 -tempora==5.2.0 -texttable==1.6.7 -thonny==4.0.2 -thrift==0.17.0 -tinycss2==1.2.1 -toml==0.10.2 -tomli==2.0.1 -tomlkit==0.11.6 -tornado==6.2 -traitlets==5.9.0 -trash-cli==0.22.10.20 -trove-classifiers==2023.2.9 -twine==4.0.2 -Twisted==22.10.0 +starlette==0.24.0 +syslog2==0.5.0 +tempora==5.2.1 +textual==0.10.1 +typer==0.7.0 typing_extensions==4.4.0 -typogrify==2.0.7 tzdata==2022.7 tzlocal==4.2 -uc-micro-py==1.0.1 -ufw==0.36.1 -ujson==5.7.0 -Unidecode==1.3.6 -unrardll==0.1.5 -urh==2.9.4 -urllib3==1.26.12 -urwid==2.1.2 +urllib3==1.26.14 uvicorn==0.20.0 -uvloop==0.17.0 -validate-pyproject==0.12.1 -virtualenv==20.17.1 -virtualenv-clone==0.5.7 -virtualenvwrapper==4.8.4 -vit==2.2.0 -watchdog==2.2.1 -watchfiles==0.18.1 -wcwidth==0.2.5 -webencodings==0.5.1 -websockets==10.4 -Werkzeug==2.2.2 -wrapt==1.14.1 -wxGlade==1.0.4 -wxPython==4.2.0 -xcffib==1.2.0 -Yapsy==1.12.2 -yarl==1.8.2 -youtube-dl==2021.12.17 -yt-dlg==1.8.4 -yubikey-manager==4.0.9 +xmpp2==0.4 zc.lockfile==2.0 -zeroconf==0.39.4 -zipp==3.12.0 -zope.interface==5.5.2 -zxcvbn==4.4.28 +zipp==3.13.0