diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..04fe566 --- /dev/null +++ b/.drone.yml @@ -0,0 +1,38 @@ +kind: pipeline +type: docker +name: default + +steps: + - name: static_analysis + image: "python:3.8" + commands: + - pip3 install --cache-dir='./.pipcache' pylint bandit mccabe + - pip3 install --cache-dir='./.pipcache' -r requirements.txt + - find . -name "*.py" -exec python3 -m py_compile '{}' \; + - find . -name "*.py" -exec pylint '{}' + || if [ $? -eq 1 ]; then echo "you fail"; fi + - find . -name "*.py" -exec python3 -m mccabe --min 3 '{}' + || if [ $? -eq 1 ]; then echo "you fail"; fi + - bandit -r . + || if [ $? -eq 1 ]; then echo "you fail"; fi + + - name: code-analysis + image: aosapps/drone-sonar-plugin + settings: + sonar_host: + from_secret: SONAR_HOST + sonar_token: + from_secret: SONAR_CODE + + - name: sentry + image: tormachris/drone-sentry + settings: + sentry_project: ${DRONE_REPO_NAME} + sentry_domain: sentry.kmlabz.com + sentry_token: + from_secret: SENTRY_TOKEN + + - name: ms-teams + image: kuperiu/drone-teams + settings: + webhook: + from_secret: TEAMS_WEBHOOK + when: + status: [ failure ] diff --git a/.gitignore b/.gitignore index 13d1490..f345153 100644 --- a/.gitignore +++ b/.gitignore @@ -129,3 +129,4 @@ dmypy.json # Pyre type checker .pyre/ +.idea/ \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..c5c9f3b --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +sentry_sdk \ No newline at end of file diff --git a/src/app.py b/src/app.py new file mode 100644 index 0000000..91501d1 --- /dev/null +++ b/src/app.py @@ -0,0 +1,31 @@ +#!/usr/bin/env python3 +import logging +import sentry_sdk +from sentry_sdk.integrations.logging import LoggingIntegration +import config + +""" +Main Entrypoint +""" + +__author__ = "@tormakris" +__copyright__ = "Copyright 2020, Birbnetes Team" +__module_name__ = "app" +__version__text__ = "1" + +sentry_logging = LoggingIntegration( + level=logging.INFO, + event_level=logging.ERROR +) + +if config.SENTRY_DSN: + sentry_sdk.init( + dsn=config.SENTRY_DSN, + integrations=[sentry_logging], + traces_sample_rate=1.0, + send_default_pii=True, + release=config.RELEASE_ID, + environment=config.RELEASEMODE, + _experiments={"auto_enabling_integrations": True} + ) + diff --git a/src/config.py b/src/config.py new file mode 100644 index 0000000..aabbd62 --- /dev/null +++ b/src/config.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python3 +import os + +""" +Main Flask RESTful API +""" + +__author__ = "@tormakris" +__copyright__ = "Copyright 2020, Birbnetes Team" +__module_name__ = "app" +__version__text__ = "1" + +SENTRY_DSN = os.environ.get("SENTRY_DSN") +RELEASE_ID = os.environ.get("RELEASE_ID", "test") +RELEASEMODE = os.environ.get("INPUT_SERVICE_RELEASEMODE", "dev") diff --git a/src/preprocessor/__init__.py b/src/preprocessor/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/preprocessor/abcpreprocessor.py b/src/preprocessor/abcpreprocessor.py new file mode 100644 index 0000000..6c9f327 --- /dev/null +++ b/src/preprocessor/abcpreprocessor.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 +from abc import ABC, abstractmethod + +""" +Abstract base class for Sender +""" + +__author__ = "@tormakris" +__copyright__ = "Copyright 2020, Birbnetes Team" +__module_name__ = "abcpreprocessor" +__version__text__ = "1" + + +class AbcPreProcessor(ABC): + """ + Abstract base class PreProcessor. Responsible for manipulating input data from a sensor. + """ + @abstractmethod + def preprocesssignal(self, signal): + """ + Preprocess a signal. + :return: + """ + pass diff --git a/src/sender/__init__.py b/src/sender/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/sender/abcsender.py b/src/sender/abcsender.py new file mode 100644 index 0000000..636f34c --- /dev/null +++ b/src/sender/abcsender.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 +from abc import ABC, abstractmethod + +""" +Abstract base class for Sender +""" + +__author__ = "@tormakris" +__copyright__ = "Copyright 2020, Birbnetes Team" +__module_name__ = "abcsender" +__version__text__ = "1" + + +class AbcSender(ABC): + """ + Abstract base class Sender. Responsible for sending results to the cloud. + """ + @abstractmethod + def sendvalue(self, value, decision): + """ + Send a value to the cloud. + :return: + """ + pass diff --git a/src/sensor/__init__.py b/src/sensor/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/sensor/abcsensor.py b/src/sensor/abcsensor.py new file mode 100644 index 0000000..be59daf --- /dev/null +++ b/src/sensor/abcsensor.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 +from abc import ABC, abstractmethod + +""" +Abstract base class for Sensor +""" + +__author__ = "@tormakris" +__copyright__ = "Copyright 2020, Birbnetes Team" +__module_name__ = "abcsensor" +__version__text__ = "1" + + +class AbcSensor(ABC): + """ + Abstract base class Sensor. Responsible for value retrieval from hardware sensors. + """ + @abstractmethod + def getvalue(self): + """ + Retrieve a value from a sensor. + :return: + """ + pass diff --git a/src/signal_processor/__init__.py b/src/signal_processor/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/signal_processor/abcsignalprocessor.py b/src/signal_processor/abcsignalprocessor.py new file mode 100644 index 0000000..648b25a --- /dev/null +++ b/src/signal_processor/abcsignalprocessor.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 +from abc import ABC, abstractmethod + +""" +Abstract base class for signalprocessor +""" + +__author__ = "@tormakris" +__copyright__ = "Copyright 2020, Birbnetes Team" +__module_name__ = "abcsignalprocessor" +__version__text__ = "1" + + +class AbcSignalProcessor(ABC): + """ + Abstract base class Signal Processor. Responsible for handling a signal processor pipeline. + """ + @abstractmethod + def processcurrentsignal(self): + """ + Process a signal. + :return: + """ + pass