diff --git a/.circleci/config.yml b/.circleci/config.yml index ac71fe4a..0f1557e7 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -40,6 +40,17 @@ jobs: path: build-container destination: build-container + format-code: + docker: + - image: circleci/python:3.8.6 + steps: + - checkout + - run: + name: "Check Formatting" + command: | + pip install black + black --check ./ --exclude mibs + release: docker: - image: circleci/node:12 @@ -68,11 +79,11 @@ jobs: - run: name: Release Docker Hub command: | - export VERSION=${CIRCLE_TAG:=CIRCLE_SHA1} + export VERSION=${CIRCLE_TAG:=CIRCLE_SHA1} VERSION_DOCKER_MMP=$(echo $VERSION | sed -n 's/v\([0-9]*\.[0-9]*\.[0-9]*\).*/\1/p') VERSION_DOCKER_MM=$(echo $VERSION | sed -n 's/v\([0-9]*\.[0-9]*\).*/\1/p') VERSION_DOCKER_M=$(echo $VERSION | sed -n 's/v\([0-9]*\).*/\1/p') - + curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python3 - source $HOME/.poetry/env poetry build @@ -112,7 +123,7 @@ jobs: command: | go get -v -u github.com/tcnksm/ghr PATH=$PATH:/usr/local/go/bin - export VERSION=${CIRCLE_TAG:=CIRCLE_SHA1} + export VERSION=${CIRCLE_TAG:=CIRCLE_SHA1} [[ $VERSION =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]] && ISPRE="-prerelease" $HOME/go/bin/ghr -t ${GH_TOKEN} -u ${CIRCLE_PROJECT_USERNAME} -r ${CIRCLE_PROJECT_REPONAME} -c ${CIRCLE_SHA1} ${ISPRE} ${VERSION} /tmp/workspace/ - store_artifacts: @@ -122,6 +133,8 @@ workflows: version: 2 build_test: jobs: + - format-code + - build: context: - gdi-github diff --git a/.gitignore b/.gitignore index 35638095..2c71a2f4 100644 --- a/.gitignore +++ b/.gitignore @@ -156,3 +156,6 @@ dmypy.json .pyre/ mibs/.DS_Store .DS_Store + +# Intellij +.idea \ No newline at end of file diff --git a/splunk_connect_for_snmp_mib_server/__init__.py b/splunk_connect_for_snmp_mib_server/__init__.py index 1d487bc2..3ca78203 100644 --- a/splunk_connect_for_snmp_mib_server/__init__.py +++ b/splunk_connect_for_snmp_mib_server/__init__.py @@ -1,3 +1,5 @@ import logging.config -logging.basicConfig(level=logging.INFO, format='%(asctime)s | %(name)s | %(levelname)s | %(message)s') +logging.basicConfig( + level=logging.INFO, format="%(asctime)s | %(name)s | %(levelname)s | %(message)s" +) diff --git a/splunk_connect_for_snmp_mib_server/mib_server.py b/splunk_connect_for_snmp_mib_server/mib_server.py index 924e522e..43ab88d1 100644 --- a/splunk_connect_for_snmp_mib_server/mib_server.py +++ b/splunk_connect_for_snmp_mib_server/mib_server.py @@ -1,58 +1,58 @@ from flask import Flask, request, abort, jsonify, send_from_directory from flask_autoindex import AutoIndex import os -import yaml +import yaml from splunk_connect_for_snmp_mib_server.mongo import MibsRepository, OidsRepository from splunk_connect_for_snmp_mib_server.translator import Translator import logging logger = logging.getLogger(__name__) + class MibServer: def __init__(self, args, server_config): self._args = args self._server_config = server_config self._translator = Translator(server_config) self._flask_app = self.build_flask_app() - - def build_flask_app(self): + + def build_flask_app(self): app = Flask(__name__) # ppath = os.environ['MIBS_SERVER_URL'] ppath = self._server_config["snmp"]["mibs"]["mibs_path"] files_index = AutoIndex(app, ppath, add_url_rules=False) - @app.route('/') + @app.route("/") def hello(): return "Hello, This is SNMP MIB server!" # Custom indexing - @app.route('/files/') - @app.route('/files/') - def autoindex(path='.'): + @app.route("/files/") + @app.route("/files/") + def autoindex(path="."): logger.debug(f"path: {path}") return files_index.render_autoindex(path) # Translate oid - @app.route('/translation', methods=['POST']) + @app.route("/translation", methods=["POST"]) def translator(): logger.debug(request.json) - var_binds = request.json.get('var_binds') + var_binds = request.json.get("var_binds") metric = request.args.get("metric") logger.debug(f"type of var_binds: {type(var_binds)}") logger.debug(f"var_binds: {var_binds}") logger.debug(f"type of metric: {str(metric)} -- metric: {metric}") if metric == "True": # TODO - # If metric is true, var_binds just has one + # If metric is true, var_binds just has one var_bind = var_binds[0] - result = self._translator.format_metric_data(var_bind) + result = self._translator.format_metric_data(var_bind) else: result = self._translator.format_trap_event(var_binds) return result - + return app - + def run_mib_server(self): # TODO poetry run fails when debug=True - self._flask_app.run(host="0.0.0.0",port=self._args.port) - + self._flask_app.run(host="0.0.0.0", port=self._args.port) diff --git a/splunk_connect_for_snmp_mib_server/snmp_mib_server.py b/splunk_connect_for_snmp_mib_server/snmp_mib_server.py index ecb643f7..186cfe99 100644 --- a/splunk_connect_for_snmp_mib_server/snmp_mib_server.py +++ b/splunk_connect_for_snmp_mib_server/snmp_mib_server.py @@ -1,6 +1,6 @@ import argparse import os -import yaml +import yaml from splunk_connect_for_snmp_mib_server.mongo import MibsRepository, OidsRepository from splunk_connect_for_snmp_mib_server.mib_server import MibServer import logging @@ -13,12 +13,13 @@ def upload_mibs(server_config): mib_files_dir = server_config["snmp"]["mibs"]["dir"] mibs_collection = MibsRepository(mibs_mongo_config) # TODO do we need to clean up before loading - # Clean up + # Clean up mibs_collection.clear() # Upload all mib files in specific dir into mongo mibs_collection.upload_files(mib_files_dir) logger.debug("Uploaded all mib files into mongo!") + def main(): logger.info(f"Startup Config") parser = argparse.ArgumentParser() @@ -36,7 +37,6 @@ def main(): ) parser.add_argument("-c", "--config", default="config.yaml", help="Config File") - args = parser.parse_args() log_level = args.loglevel.upper() @@ -51,15 +51,13 @@ def main(): with open(config_file, "r") as yamlfile: server_config = yaml.load(yamlfile, Loader=yaml.FullLoader) - - # Upload mib fiels into mongo upload_mibs(server_config) - + # Init MibServer mib_server = MibServer(args, server_config) mib_server.run_mib_server() if __name__ == "__main__": - main() \ No newline at end of file + main() diff --git a/tests/test_mongo.py b/tests/test_mongo.py index c16c1a9b..2bafa2df 100644 --- a/tests/test_mongo.py +++ b/tests/test_mongo.py @@ -1,33 +1,39 @@ import sys -sys.path.append('../') + +sys.path.append("../") from splunk_connect_for_snmp_mib_server.mongo import MibsRepository import os def main(): - mongo_config = {'host': 'localhost', 'port': 27017, 'database': 'test', 'collection': 'mibs'} + mongo_config = { + "host": "localhost", + "port": 27017, + "database": "test", + "collection": "mibs", + } mongo = MibsRepository(mongo_config) mongo.clear() # Upload mib files in /mibs/test to mongo - mib_files_dir = os.path.join(os.getcwd(), "..", "mibs","test") + mib_files_dir = os.path.join(os.getcwd(), "..", "mibs", "test") mongo.upload_files(mib_files_dir) # Search mib files based on oid oid = "1, 3, 6, 1, 4, 1, 43, 2, 29, 1, 1" filename = mongo.search_oid(oid) print(filename) - + # Delete one specifc file if filename: mongo.delete_mib(filename) print(mongo.search_oid(oid)) # Delete multiple files - filename_regex="A3COM" + filename_regex = "A3COM" mongo.delete_mib(filename_regex) -if __name__ == '__main__': - main() \ No newline at end of file +if __name__ == "__main__": + main() diff --git a/tests/test_translator.py b/tests/test_translator.py index c0bb0692..2f573320 100644 --- a/tests/test_translator.py +++ b/tests/test_translator.py @@ -1,12 +1,16 @@ import sys -sys.path.append('../') + +sys.path.append("../") import yaml + # from splunk_connect_for_snmp_mib_server.mongo import OidsRepository from splunk_connect_for_snmp_mib_server.translator import Translator import os import logging + logger = logging.getLogger(__name__) + def main(): logger.debug("Start:....") # Read config file @@ -18,27 +22,27 @@ def main(): my_translator = Translator(server_config) var_binds_list = [ - { - "oid": '1.3.6.1.2.1.1.3.0', - "oid_type": "ObjectName", - "val": "123", - "val_type": "TimeTicks" - }, - { - "oid": '1.3.6.1.6.3.1.1.4.1.0', - "oid_type": "ObjectName", - "val": "1.3.6.1.4.1.1978.2.14.1.1.1", - "val_type": "ObjectIdentifier" - }, - { - "oid": '1.3.6.1.6.3.1.1.4.1.0', - "oid_type": "ObjectName", - "val": "1.3.6.1.4.1.90000.1", - "val_type": "ObjectIdentifier" - } - ] + { + "oid": "1.3.6.1.2.1.1.3.0", + "oid_type": "ObjectName", + "val": "123", + "val_type": "TimeTicks", + }, + { + "oid": "1.3.6.1.6.3.1.1.4.1.0", + "oid_type": "ObjectName", + "val": "1.3.6.1.4.1.1978.2.14.1.1.1", + "val_type": "ObjectIdentifier", + }, + { + "oid": "1.3.6.1.6.3.1.1.4.1.0", + "oid_type": "ObjectName", + "val": "1.3.6.1.4.1.90000.1", + "val_type": "ObjectIdentifier", + }, + ] my_translator.format_trap_event(var_binds_list) -if __name__ == '__main__': - main() +if __name__ == "__main__": + main()