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

Commit 7b37044

Browse files
authored
feat: added named regex groups and substitute '_' for '.' (#181)
* feat: added named regex groups and substitute '_' for '.' * fix: build fix * fix: PR comments * fix: index_number takes last _ instead of first * fix: refactoring * fix: refactoring * fix: refactoring
1 parent 7b2c929 commit 7b37044

File tree

2 files changed

+30
-29
lines changed

2 files changed

+30
-29
lines changed

splunk_connect_for_snmp_poller/manager/hec_sender.py

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -215,31 +215,33 @@ def extract_additional_properties(fields, metric_name, metric_value, server_conf
215215
for family in oid_families.keys():
216216
if metric_name.startswith("sc4snmp." + family):
217217
stripped = metric_name[: metric_name.index("_")]
218-
219218
input_text = metric_name[metric_name.index("_") + 1 :] # noqa: E203
220219

221-
entries = oid_families[family][enricher_additional_varbinds]
222-
for entry in entries:
223-
if "regex" in entry and "names" in entry:
224-
regex = entry["regex"]
225-
names = entry["names"]
226-
names_list = names.split("/")
227-
220+
entries = multi_key_lookup(
221+
oid_families, (family, enricher_additional_varbinds)
222+
)
223+
if entries:
224+
regex_entries = [
225+
entry["regex"] for entry in entries if "regex" in entry
226+
]
227+
for regex in regex_entries:
228228
result = re.match(regex, input_text)
229229
if result:
230230
any_regex_matched = True
231-
for index, item in enumerate(names_list):
232-
fields[item] = result.group(index + 1)
231+
for key, value in result.groupdict().items():
232+
fields[key] = value.replace("_", ".")
233233
del fields["metric_name:" + metric_name]
234234
fields["metric_name:" + stripped] = metric_value
235-
# TODO delete blow debug statement
236-
fields["old_metric_name:" + metric_name] = metric_value
237-
continue
238-
239-
if not any_regex_matched:
240-
fields["index_number"] = input_text
241-
del fields["metric_name:" + metric_name]
242-
fields["metric_name:" + stripped] = metric_value
235+
break
236+
break
237+
238+
if not any_regex_matched:
239+
stripped = metric_name[: metric_name.rindex("_")]
240+
input_text = metric_name[metric_name.rindex("_") + 1 :] # noqa: E203
241+
242+
fields["index_number"] = input_text
243+
del fields["metric_name:" + metric_name]
244+
fields["metric_name:" + stripped] = metric_value
243245

244246

245247
def build_error_data(

tests/test_additional_data_extraction.py

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,7 @@ def test_data_extraction(self):
2828
"TCP-MIB": {
2929
"additionalVarBinds": [
3030
{
31-
"regex": "([0-9]+_[0-9]+_[0-9]+_[0-9]+)_([0-9]+)_([0-9]+_[0-9]+_[0-9]+_[0-9]+)_([0-9]+)", # noqa: E501
32-
"names": "IP_one/port/IP_two/index_number",
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
3332
}
3433
]
3534
},
@@ -38,13 +37,11 @@ def test_data_extraction(self):
3837
{"ifDescr": "interface_desc"},
3938
{"ifPhysAddress": "MAC_address"},
4039
],
41-
"additionalVarBinds": [{"indexNum": "index_number"}],
4240
},
4341
"UDP-MIB": {
4442
"additionalVarBinds": [
4543
{
46-
"regex": '(ipv4)_"([0-9]+_[0-9]+_[0-9]+_[0-9]+)"_([0-9]+)_(ipv4)_"([0-9]+_[0-9]+_[0-9]+_[0-9]+)"_([0-9]+)_([0-9]+)', # noqa: E501
47-
"names": "protocol_version_one/IP_one/port_one/protocol_version_two/IP_two/index_number/port_two", # noqa: E501
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
4845
}
4946
]
5047
},
@@ -55,7 +52,7 @@ def test_data_extraction(self):
5552
fields = {
5653
"metric_name:sc4snmp.TCP-MIB.tcpConnLocalPort_192_168_0_1_161_127_0_0_1_5": "1111"
5754
}
58-
fields2 = {"metric_name:sc4snmp.IF-MIB.ifInErrors_2": "173127"}
55+
fields2 = {"metric_name:sc4snmp.IF-MIB.ifInErrors_2_1_asdad_23": "173127"}
5956
fields3 = {
6057
'metric_name:sc4snmp.UDP-MIB.udpEndpointProcess_ipv4_"0_0_0_0"_111_ipv4_"0_0_0_0"_0_13348': "123"
6158
}
@@ -68,7 +65,7 @@ def test_data_extraction(self):
6865
)
6966

7067
extract_additional_properties(
71-
fields2, "sc4snmp.IF-MIB.ifInErrors_2", "173127", server_config
68+
fields2, "sc4snmp.IF-MIB.ifInErrors_2_1_asdad_23", "173127", server_config
7269
)
7370

7471
extract_additional_properties(
@@ -78,15 +75,17 @@ def test_data_extraction(self):
7875
server_config,
7976
)
8077

81-
self.assertEqual(fields["IP_one"], "192_168_0_1")
78+
self.assertEqual(fields["IP_one"], "192.168.0.1")
8279
self.assertEqual(fields["port"], "161")
83-
self.assertEqual(fields["IP_two"], "127_0_0_1")
80+
self.assertEqual(fields["IP_two"], "127.0.0.1")
8481
self.assertEqual(fields["index_number"], "5")
8582

83+
self.assertEqual(fields2["index_number"], "23")
84+
8685
self.assertEqual(fields3["protocol_version_one"], "ipv4")
87-
self.assertEqual(fields3["IP_one"], "0_0_0_0")
86+
self.assertEqual(fields3["IP_one"], "0.0.0.0")
8887
self.assertEqual(fields3["port_one"], "111")
8988
self.assertEqual(fields3["protocol_version_two"], "ipv4")
90-
self.assertEqual(fields3["IP_two"], "0_0_0_0")
89+
self.assertEqual(fields3["IP_two"], "0.0.0.0")
9190
self.assertEqual(fields3["index_number"], "0")
9291
self.assertEqual(fields3["port_two"], "13348")

0 commit comments

Comments
 (0)