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

Commit

Permalink
fix: apply default frequency for dynamic profiles
Browse files Browse the repository at this point in the history
  • Loading branch information
weliasz committed Oct 18, 2021
1 parent 7c4e432 commit 0143b04
Show file tree
Hide file tree
Showing 5 changed files with 24 additions and 23 deletions.
2 changes: 1 addition & 1 deletion splunk_connect_for_snmp_poller/manager/poller.py
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,7 @@ def process_unmatched_devices(self, server_config):

if any(descr):
assigned_profiles = assign_profiles_to_device(
profiles["profiles"], descr
profiles["profiles"], descr, host
)
processed_devices.add(host)

Expand Down
17 changes: 9 additions & 8 deletions splunk_connect_for_snmp_poller/manager/poller_utilities.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@

logger = logging.getLogger(__name__)

DEFAULT_POLLING_FREQUENCY = 60


def _should_process_current_line(inventory_record: dict):
return should_process_inventory_line(
Expand Down Expand Up @@ -76,20 +78,19 @@ def parse_inventory_file(inventory_file_path, profiles, fetch_frequency=True):
agent["version"],
agent["community"],
agent["profile"],
get_frequency(agent, profiles, 60)
get_frequency(agent, profiles, DEFAULT_POLLING_FREQUENCY)
if fetch_frequency and agent["profile"] != DYNAMIC_PROFILE
else None,
)


def get_frequency(agent, profiles, default_frequency):
if "profile" in agent:
frequency = multi_key_lookup(
profiles, ("profiles", agent["profile"], "frequency")
)
if frequency:
return frequency
logger.debug(f'Default frequency was assigned for agent = {agent.get("host")}')
frequency = multi_key_lookup(
profiles, ("profiles", agent["profile"], "frequency")
)
if frequency:
return frequency
logger.debug(f'Default frequency was assigned for agent = {agent.get("host")}, profile = {agent["profile"]}')
return default_frequency


Expand Down
14 changes: 10 additions & 4 deletions splunk_connect_for_snmp_poller/manager/profile_matching.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import yaml

from splunk_connect_for_snmp_poller.manager.mib_server_client import get_mib_profiles
from splunk_connect_for_snmp_poller.manager.poller_utilities import DEFAULT_POLLING_FREQUENCY
from splunk_connect_for_snmp_poller.manager.realtime.oid_constant import OidConstant
from splunk_connect_for_snmp_poller.utilities import multi_key_lookup

Expand All @@ -33,20 +34,25 @@ def extract_desc(realtime_collection):
return sys_descr, sys_object_id


def assign_profiles_to_device(profiles, device_desc):
def assign_profiles_to_device(profiles, device_desc, host):
result = []
for profile in profiles:
if "patterns" in profiles[profile]:
match_profile_with_device(device_desc, profile, profiles, result)
match_profile_with_device(device_desc, profile, profiles, result, host)
return result


def match_profile_with_device(device_desc, profile, profiles, result):
def match_profile_with_device(device_desc, profile, profiles, result, host):
for pattern in profiles[profile]["patterns"]:
compiled = re.compile(pattern)
for desc in device_desc:
if desc and compiled.match(desc):
result.append((profile, profiles[profile]["frequency"]))
if "frequency" in profiles[profile]:
frequency = profiles[profile]["frequency"]
else:
frequency = DEFAULT_POLLING_FREQUENCY
logger.debug(f'Default frequency was assigned for agent = {host}, profile = {profile}')
result.append((profile, frequency))
return


Expand Down
6 changes: 0 additions & 6 deletions tests/test_poller_utilities.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,12 +54,6 @@ def test_return_frequency(self):
result = get_frequency(agent, profiles, 60)
self.assertEqual(result, 20)

def test_return_default_frequency_when_agent_does_not_have_profile(self):
agent = {}
profiles = {"profiles": {"some_profile": {"frequency": 20}}}
result = get_frequency(agent, profiles, 60)
self.assertEqual(result, 60)

def test_return_default_frequency_when_agent_profile_not_present_in_profiles(self):
agent = {"profile": "some_profile"}
profiles = {"profiles": {"some_profile_2": {"frequency": 20}}}
Expand Down
8 changes: 4 additions & 4 deletions tests/test_profile_matching.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ def test_return_tuple_with_none_values(self):
def test_assign_profile_to_device(self):
profiles = {"zeus": {"patterns": [".*zeus.*"], "frequency": 20}}

result = assign_profiles_to_device(profiles, ("My zeus device", None))
result = assign_profiles_to_device(profiles, ("My zeus device", None), "localhost")

self.assertEqual(len(result), 1)
profile, frequency = next(iter(result))
Expand All @@ -72,7 +72,7 @@ def test_assign_multiple_profile_to_device(self):
}

result = assign_profiles_to_device(
profiles, ("My zeus device, linux 2.3.4", None)
profiles, ("My zeus device, linux 2.3.4", None), "localhost"
)

self.assertEqual(len(result), 2)
Expand All @@ -90,7 +90,7 @@ def test_assign_multiple_profile_to_device_from_different_descs(self):
"linux": {"patterns": [".*linux.*"], "frequency": 30},
}

result = assign_profiles_to_device(profiles, ("My zeus device", "linux 2.3.4"))
result = assign_profiles_to_device(profiles, ("My zeus device", "linux 2.3.4"), "localhost")

self.assertEqual(len(result), 2)
profile, frequency = result[0]
Expand All @@ -104,6 +104,6 @@ def test_assign_multiple_profile_to_device_from_different_descs(self):
def test_no_assignment_when_patterns_are_missing(self):
profiles = {"zeus": {"frequency": 20}}

result = assign_profiles_to_device(profiles, ("My zeus device", None))
result = assign_profiles_to_device(profiles, ("My zeus device", None), "localhost")

self.assertEqual(len(result), 0)

0 comments on commit 0143b04

Please sign in to comment.