Skip to content
This repository was archived by the owner on Dec 17, 2021. It is now read-only.

Commit cf15434

Browse files
lstoppaweliasz
andauthored
Feature/mib unit tests (#28)
* code cleaning * feat: add unit-test to MIB server - added initial trap_translator_test using mongomock (for mongodb) - removed unused imports/variables - fixed Python warnings (like case-sensitiveness of variables' names) * feat: add unit-test to MIB server (#2) - added negative tests for format_trap * feat: add unit-test to MIB server (#3) - handling missing input parameters for format_trap (we now check that each var_bind has at least the following keys: [ "oid", "val", "oid_type", "val_type" ] - added unit-test for convering it * feat: add unit-test to MIB server (#4) - added positive unit-tests for metrics - added negative unit-tests for metrics * bug(translation): exception when translating IP-MIB::ipNetToMediaPhysAddress - we have a weird error when translating this OID: 1.3.6.1.2.1.4.22.1.2 * bug(translation): exception when translating IP-MIB::ipNetToMediaPhysAddress (#2) - replace spaces with colon for Hex-STRING types Co-authored-by: weliasz <[email protected]>
1 parent e2b31e8 commit cf15434

File tree

8 files changed

+273
-121
lines changed

8 files changed

+273
-121
lines changed

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ Flask = "^1.1.2"
1515
Flask-AutoIndex = "^0.6.6"
1616

1717
[tool.poetry.dev-dependencies]
18+
mongomock = "^3.22.1"
1819

1920
[tool.poetry.scripts]
2021
sc4snmp-mib-server = "splunk_connect_for_snmp_mib_server.snmp_mib_server:main"

splunk_connect_for_snmp_mib_server/mib_server.py

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
1-
from flask import Flask, request, abort, jsonify, send_from_directory
1+
from flask import Flask, request
22
from flask_autoindex import AutoIndex
3-
import os
4-
import yaml
5-
from splunk_connect_for_snmp_mib_server.mongo import MibsRepository, OidsRepository
63
from splunk_connect_for_snmp_mib_server.translator import Translator
74
import logging
85

@@ -18,9 +15,8 @@ def __init__(self, args, server_config):
1815

1916
def build_flask_app(self):
2017
app = Flask(__name__)
21-
# ppath = os.environ['MIBS_SERVER_URL']
22-
ppath = self._server_config["snmp"]["mibs"]["mibs_path"]
23-
files_index = AutoIndex(app, ppath, add_url_rules=False)
18+
mibs_path = self._server_config["snmp"]["mibs"]["mibs_path"]
19+
files_index = AutoIndex(app, mibs_path, add_url_rules=False)
2420

2521
@app.route("/")
2622
def hello():
@@ -43,8 +39,7 @@ def translator():
4339
logger.debug(f"var_binds: {var_binds}")
4440
logger.debug(f"type of metric: {str(metric)} -- metric: {metric}")
4541
if metric == "True":
46-
# TODO
47-
# If metric is true, var_binds just has one
42+
# if metric is true, var_binds has just one element
4843
var_bind = var_binds[0]
4944
result = self._translator.format_metric_data(var_bind)
5045
else:
@@ -54,5 +49,5 @@ def translator():
5449
return app
5550

5651
def run_mib_server(self):
57-
# TODO poetry run fails when debug=True
52+
# poetry run fails when debug=True
5853
self._flask_app.run(host="0.0.0.0", port=self._args.port)

splunk_connect_for_snmp_mib_server/mongo.py

Lines changed: 4 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from pymongo import MongoClient
1+
import pymongo
22
import os
33
import logging
44

@@ -7,26 +7,16 @@
77

88
class MibsRepository:
99
def __init__(self, mongo_config):
10-
"""
11-
Create a collection in mongodb to store mib files
12-
"""
13-
self._client = MongoClient(
10+
self._client = pymongo.MongoClient(
1411
os.environ["MONGO_SERVICE_SERVICE_HOST"],
1512
int(os.environ["MONGO_SERVICE_SERVICE_PORT"]),
1613
)
1714
self._mibs = self._client[mongo_config["database"]][mongo_config["collection"]]
1815

1916
def upload_files(self, mib_files_dir):
20-
"""
21-
Upload mib files from dir to mongo
22-
@param mib_files_dir: the path of the mib files directory
23-
"""
24-
# TODO check duplicate before insert, using filename as PK
2517
for filename in os.listdir(mib_files_dir):
2618
file_path = mib_files_dir + "/" + filename
27-
# print(file_path)
2819
with open(file_path, "r") as mib_file:
29-
# TODO add try catch, insert only if PK doesn't exit
3020
try:
3121
self._mibs.insert_one(
3222
dict(content=mib_file.read(), filename=filename, _id=filename)
@@ -37,41 +27,29 @@ def upload_files(self, mib_files_dir):
3727
)
3828

3929
def search_oid(self, oid):
40-
"""
41-
Search mib file based on oid
42-
@param oid: oid, format: "1, 3, 6, 1, 4, 1, 2356, 11, 0, 0, 10000"
43-
@return mib filename
44-
"""
4530
data = self._mibs.find_one({"content": {"$regex": oid}})
4631
if data:
4732
return data["filename"]
4833
else:
4934
return None
5035

5136
def delete_mib(self, filename):
52-
"""
53-
Delete mib files based on filename
54-
@param filename: mib filename
55-
"""
5637
self._mibs.delete_many({"filename": {"$regex": filename}})
5738

5839
def clear(self):
59-
"""
60-
Clear the collection
61-
"""
6240
self._mibs.remove()
6341

6442

6543
class OidsRepository:
6644
def __init__(self, mongo_config):
67-
self._client = MongoClient(
45+
self._client = pymongo.MongoClient(
6846
os.environ["MONGO_SERVICE_SERVICE_HOST"],
6947
int(os.environ["MONGO_SERVICE_SERVICE_PORT"]),
7048
)
7149
self._oids = self._client[mongo_config["database"]][mongo_config["collection"]]
7250

7351
def contains_oid(self, oid):
74-
return self._oids.find({"oid": oid}).count()
52+
return self._oids.count_documents({"oid": oid})
7553

7654
def add_oid(self, oid):
7755
self._oids.insert_one({"oid": oid})

splunk_connect_for_snmp_mib_server/snmp_mib_server.py

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import argparse
2-
import os
32
import yaml
4-
from splunk_connect_for_snmp_mib_server.mongo import MibsRepository, OidsRepository
3+
from splunk_connect_for_snmp_mib_server.mongo import MibsRepository
54
from splunk_connect_for_snmp_mib_server.mib_server import MibServer
65
import logging
76

@@ -36,25 +35,19 @@ def main():
3635
"--hec_threads", default=10, help="Max http worker thread count", type=int
3736
)
3837
parser.add_argument("-c", "--config", default="config.yaml", help="Config File")
39-
4038
args = parser.parse_args()
41-
4239
log_level = args.loglevel.upper()
4340
config_file = args.config
4441

4542
logging.getLogger().setLevel(log_level)
4643
logger.info(f"Log Level is {log_level}")
4744
logger.info(f"Config file is {config_file}")
48-
4945
logger.info("Completed Argument parsing")
5046

5147
with open(config_file, "r") as yamlfile:
5248
server_config = yaml.load(yamlfile, Loader=yaml.FullLoader)
5349

54-
# Upload mib fiels into mongo
5550
upload_mibs(server_config)
56-
57-
# Init MibServer
5851
mib_server = MibServer(args, server_config)
5952
mib_server.run_mib_server()
6053

0 commit comments

Comments
 (0)