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

Commit 86611d3

Browse files
authored
feat: suffix parsing (#187)
* feat: suffix parsing * fix: build fix * fix: build fix * fix: PR comments * fix: fix
1 parent 23f86d5 commit 86611d3

File tree

4 files changed

+16
-117
lines changed

4 files changed

+16
-117
lines changed

splunk_connect_for_snmp_poller/manager/hec_sender.py

Lines changed: 9 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
# limitations under the License.
1515
# ########################################################################
1616
import json
17-
import re
1817
import time
1918

2019
import requests
@@ -27,12 +26,6 @@
2726
)
2827
from splunk_connect_for_snmp_poller.manager.data.inventory_record import InventoryRecord
2928
from splunk_connect_for_snmp_poller.manager.static.mib_enricher import MibEnricher
30-
from splunk_connect_for_snmp_poller.manager.variables import (
31-
enricher_additional_varbinds,
32-
enricher_name,
33-
enricher_oid_family,
34-
)
35-
from splunk_connect_for_snmp_poller.utilities import multi_key_lookup
3629

3730
logger = get_logger(__name__)
3831

@@ -77,7 +70,6 @@ def post_data_to_splunk_hec(
7770
index,
7871
ir: InventoryRecord,
7972
additional_metric_fields,
80-
server_config,
8173
one_time_flag=False,
8274
mib_enricher=None,
8375
is_error=False,
@@ -93,7 +85,6 @@ def post_data_to_splunk_hec(
9385
index["metric_index"],
9486
ir,
9587
additional_metric_fields,
96-
server_config,
9788
one_time_flag=one_time_flag,
9889
mib_enricher=mib_enricher,
9990
)
@@ -184,13 +175,13 @@ def build_metric_data(
184175
index,
185176
ir: InventoryRecord,
186177
additional_metric_fields,
187-
server_config,
188178
one_time_flag=False,
189179
mib_enricher=None,
190180
):
191181
json_val = json.loads(variables_binds)
192182
metric_name = json_val["metric_name"]
193183
metric_value = json_val["_value"]
184+
parsed_index = json_val.get("parsed_index")
194185
fields = {
195186
f"metric_name:{metric_name}": metric_value,
196187
EventField.FREQUENCY.value: ir.frequency_str,
@@ -208,47 +199,20 @@ def build_metric_data(
208199
else:
209200
builder.add(EventField.SOURCETYPE, "sc4snmp:metric")
210201

211-
extract_additional_properties(fields, metric_name, metric_value, server_config)
202+
extract_additional_properties(fields, metric_name, metric_value, parsed_index)
212203

213204
builder.add_fields(fields)
214205
return builder.build()
215206

216207

217-
def extract_additional_properties(fields, metric_name, metric_value, server_config):
218-
result = multi_key_lookup(server_config, (enricher_name, enricher_oid_family))
219-
oid_families = result if result else []
220-
any_regex_matched = False
221-
222-
for family in oid_families.keys():
223-
if metric_name.startswith("sc4snmp." + family):
224-
stripped = metric_name[: metric_name.index("_")]
225-
input_text = metric_name[metric_name.index("_") + 1 :] # noqa: E203
208+
def extract_additional_properties(fields, metric_name, metric_value, parsed_index):
209+
stripped = metric_name[: metric_name.index("_")]
210+
del fields["metric_name:" + metric_name]
211+
fields["metric_name:" + stripped] = metric_value
226212

227-
entries = multi_key_lookup(
228-
oid_families, (family, enricher_additional_varbinds)
229-
)
230-
if entries:
231-
regex_entries = [
232-
entry["regex"] for entry in entries if "regex" in entry
233-
]
234-
for regex in regex_entries:
235-
result = re.match(regex, input_text)
236-
if result:
237-
any_regex_matched = True
238-
for key, value in result.groupdict().items():
239-
fields[key] = value.replace("_", ".")
240-
del fields["metric_name:" + metric_name]
241-
fields["metric_name:" + stripped] = metric_value
242-
break
243-
break
244-
245-
if not any_regex_matched:
246-
stripped = metric_name[: metric_name.rindex("_")]
247-
input_text = metric_name[metric_name.rindex("_") + 1 :] # noqa: E203
248-
249-
fields["index_number"] = input_text
250-
del fields["metric_name:" + metric_name]
251-
fields["metric_name:" + stripped] = metric_value
213+
if parsed_index:
214+
for key, value in parsed_index.items():
215+
fields[key] = value
252216

253217

254218
def build_error_data(

splunk_connect_for_snmp_poller/manager/task_utilities.py

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,6 @@ async def snmp_get_handler(
229229
ir,
230230
additional_metric_fields,
231231
var_binds,
232-
server_config,
233232
):
234233
"""
235234
Perform the SNMP Get for an oid,
@@ -261,7 +260,6 @@ async def snmp_get_handler(
261260
index,
262261
ir,
263262
additional_metric_fields,
264-
server_config,
265263
one_time_flag=OnetimeFlag.is_a_walk(one_time_flag),
266264
mib_enricher=mib_enricher,
267265
)
@@ -278,7 +276,6 @@ async def snmp_get_handler(
278276
index,
279277
ir,
280278
additional_metric_fields,
281-
server_config,
282279
one_time_flag=OnetimeFlag.is_a_walk(one_time_flag),
283280
is_error=is_error,
284281
)
@@ -333,7 +330,6 @@ def _any_walk_failure_happened(
333330
is_metric,
334331
ir,
335332
additional_metric_fields,
336-
server_config,
337333
var_binds,
338334
):
339335
is_error, result = prepare_error_message(
@@ -349,7 +345,6 @@ def _any_walk_failure_happened(
349345
index,
350346
ir,
351347
additional_metric_fields,
352-
server_config,
353348
one_time_flag=one_time_flag,
354349
is_error=is_error,
355350
)
@@ -390,7 +385,6 @@ async def snmp_bulk_handler(
390385
ir,
391386
additional_metric_fields,
392387
var_binds,
393-
server_config,
394388
):
395389
"""
396390
Perform the SNMP Bulk for an array of oids
@@ -426,7 +420,6 @@ async def snmp_bulk_handler(
426420
index,
427421
ir,
428422
additional_metric_fields,
429-
server_config,
430423
one_time_flag=OnetimeFlag.is_a_walk(one_time_flag),
431424
mib_enricher=mib_enricher,
432425
)
@@ -443,7 +436,6 @@ async def snmp_bulk_handler(
443436
index,
444437
ir,
445438
additional_metric_fields,
446-
server_config,
447439
one_time_flag=OnetimeFlag.is_a_walk(one_time_flag),
448440
is_error=is_error,
449441
)
@@ -464,7 +456,6 @@ async def walk_handler(
464456
one_time_flag,
465457
ir,
466458
additional_metric_fields,
467-
server_config,
468459
):
469460
"""
470461
Perform the SNMP Walk for oid end with *,
@@ -493,7 +484,6 @@ async def walk_handler(
493484
is_metric,
494485
ir,
495486
additional_metric_fields,
496-
server_config,
497487
var_binds,
498488
):
499489
if OnetimeFlag.is_a_walk(one_time_flag):
@@ -509,7 +499,6 @@ async def walk_handler(
509499
index,
510500
ir,
511501
additional_metric_fields,
512-
server_config,
513502
one_time_flag=OnetimeFlag.is_a_walk(one_time_flag),
514503
)
515504
if OnetimeFlag.is_a_walk(one_time_flag):
@@ -567,7 +556,6 @@ async def walk_handler_with_enricher(
567556
one_time_flag,
568557
ir,
569558
additional_metric_fields,
570-
server_config,
571559
):
572560
"""
573561
Perform the SNMP Walk for oid end with *,
@@ -597,7 +585,6 @@ async def walk_handler_with_enricher(
597585
is_metric,
598586
ir,
599587
additional_metric_fields,
600-
server_config,
601588
var_binds,
602589
):
603590
break
@@ -620,7 +607,6 @@ async def walk_handler_with_enricher(
620607
index,
621608
ir,
622609
additional_metric_fields,
623-
server_config,
624610
one_time_flag=OnetimeFlag.is_a_walk(one_time_flag),
625611
)
626612

splunk_connect_for_snmp_poller/manager/tasks.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@ async def get_snmp_data(
6767
one_time_flag,
6868
ir,
6969
additional_metric_fields,
70-
server_config,
7170
):
7271
if var_binds:
7372
try:
@@ -86,7 +85,6 @@ async def get_snmp_data(
8685
ir,
8786
additional_metric_fields,
8887
var_binds,
89-
server_config,
9088
)
9189
except Exception as e:
9290
logger.exception(f"Error occurred while calling {handler.__name__}(): {e}")
@@ -172,7 +170,6 @@ async def snmp_polling_async(
172170
one_time_flag,
173171
ir,
174172
additional_metric_fields,
175-
server_config,
176173
]
177174
get_bulk_specific_parameters = [mongo_connection, enricher_presence]
178175
try:

tests/test_additional_data_extraction.py

Lines changed: 7 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -22,70 +22,22 @@
2222

2323
class TestAdditionalDataExtraction(TestCase):
2424
def test_data_extraction(self):
25-
server_config = {
26-
"enricher": {
27-
"oidFamily": {
28-
"TCP-MIB": {
29-
"additionalVarBinds": [
30-
{
31-
"regex": "(?P<IP_one>[0-9]+_[0-9]+_[0-9]+_[0-9]+)_(?P<port>[0-9]+)_(?P<IP_two>[0-9]+_[0-9]+_[0-9]+_[0-9]+)_(?P<index_number>[0-9]+)", # noqa: E501
32-
}
33-
]
34-
},
35-
"IF-MIB": {
36-
"existingVarBinds": [
37-
{"ifDescr": "interface_desc"},
38-
{"ifPhysAddress": "MAC_address"},
39-
],
40-
},
41-
"UDP-MIB": {
42-
"additionalVarBinds": [
43-
{
44-
"regex": '(?P<protocol_version_one>ipv4)_"(?P<IP_one>[0-9]+_[0-9]+_[0-9]+_[0-9]+)"_(?P<port_one>[0-9]+)_(?P<protocol_version_two>ipv4)_"(?P<IP_two>[0-9]+_[0-9]+_[0-9]+_[0-9]+)"_(?P<index_number>[0-9]+)_(?P<port_two>[0-9]+)', # noqa: E501
45-
}
46-
]
47-
},
48-
}
49-
}
50-
}
5125

5226
fields = {
5327
"metric_name:sc4snmp.TCP-MIB.tcpConnLocalPort_192_168_0_1_161_127_0_0_1_5": "1111"
5428
}
55-
fields2 = {"metric_name:sc4snmp.IF-MIB.ifInErrors_2_1_asdad_23": "173127"}
56-
fields3 = {
57-
'metric_name:sc4snmp.UDP-MIB.udpEndpointProcess_ipv4_"0_0_0_0"_111_ipv4_"0_0_0_0"_0_13348': "123"
29+
30+
parsed_index = {
31+
"test1": "value1",
32+
"test2": "value2",
5833
}
5934

6035
extract_additional_properties(
6136
fields,
6237
"sc4snmp.TCP-MIB.tcpConnLocalPort_192_168_0_1_161_127_0_0_1_5",
6338
"1111",
64-
server_config,
65-
)
66-
67-
extract_additional_properties(
68-
fields2, "sc4snmp.IF-MIB.ifInErrors_2_1_asdad_23", "173127", server_config
39+
parsed_index,
6940
)
7041

71-
extract_additional_properties(
72-
fields3,
73-
'sc4snmp.UDP-MIB.udpEndpointProcess_ipv4_"0_0_0_0"_111_ipv4_"0_0_0_0"_0_13348',
74-
"123",
75-
server_config,
76-
)
77-
78-
self.assertEqual(fields["IP_one"], "192.168.0.1")
79-
self.assertEqual(fields["port"], "161")
80-
self.assertEqual(fields["IP_two"], "127.0.0.1")
81-
self.assertEqual(fields["index_number"], "5")
82-
83-
self.assertEqual(fields2["index_number"], "23")
84-
85-
self.assertEqual(fields3["protocol_version_one"], "ipv4")
86-
self.assertEqual(fields3["IP_one"], "0.0.0.0")
87-
self.assertEqual(fields3["port_one"], "111")
88-
self.assertEqual(fields3["protocol_version_two"], "ipv4")
89-
self.assertEqual(fields3["IP_two"], "0.0.0.0")
90-
self.assertEqual(fields3["index_number"], "0")
91-
self.assertEqual(fields3["port_two"], "13348")
42+
self.assertEqual(fields["test1"], "value1")
43+
self.assertEqual(fields["test2"], "value2")

0 commit comments

Comments
 (0)