|
24 | 24 | import os
|
25 | 25 | import shutil
|
26 | 26 | from collections import defaultdict
|
27 |
| -from itertools import chain |
28 | 27 | from time import sleep
|
29 | 28 | import json
|
30 | 29 | import pytest
|
|
34 | 33 | from .helmut.splunk.cloud import CloudSplunk
|
35 | 34 | from .helmut_lib.SearchUtil import SearchUtil
|
36 | 35 | from .standard_lib.event_ingestors import IngestorHelper
|
| 36 | +from .standard_lib.CIM_Models.datamodel_definition import datamodels |
37 | 37 | import configparser
|
38 | 38 | from filelock import FileLock
|
39 | 39 |
|
@@ -803,54 +803,29 @@ def file_system_prerequisite():
|
803 | 803 |
|
804 | 804 |
|
805 | 805 | @pytest.fixture(scope="session")
|
806 |
| -def splunk_dm_recommended_fields(splunk_search_util): |
| 806 | +def splunk_dm_recommended_fields(): |
807 | 807 | """
|
808 | 808 | Returns function which gets recommended fields from Splunk for given datamodel
|
809 | 809 |
|
810 | 810 | Note that data is being dynamically retrieved from Splunk. When CIM add-on version changes
|
811 | 811 | retrieved data may differ
|
812 |
| -
|
813 |
| - Args: |
814 |
| - splunk_search_util: Other fixture preparing connection to Splunk Search. |
815 |
| -
|
816 | 812 | """
|
817 | 813 | recommended_fields = defaultdict(list)
|
818 |
| - cim_path = os.path.join( |
819 |
| - os.path.dirname(__file__), "standard_lib", "CIM_Models", "5.0.0" |
820 |
| - ) |
821 |
| - |
822 |
| - def _find(name, dictionary): |
823 |
| - for key, value in dictionary.items(): |
824 |
| - if key == name: |
825 |
| - yield value |
826 |
| - elif isinstance(value, dict): |
827 |
| - yield from _find(name, value) |
828 |
| - elif isinstance(value, list): |
829 |
| - for element in value: |
830 |
| - if isinstance(element, dict): |
831 |
| - yield from _find(name, element) |
832 | 814 |
|
833 |
| - def update_recommended_fields(model, datasets): |
834 |
| - model_key = f"{model}:{':'.join(datasets)}".strip(":") |
| 815 | + def update_recommended_fields(model, datasets, cim_version): |
| 816 | + model_key = f"{cim_version}:{model}:{':'.join(datasets)}".strip(":") |
835 | 817 |
|
836 | 818 | if model_key not in recommended_fields:
|
837 | 819 | LOGGER.info(f"Fetching {model_key} definition")
|
838 |
| - with open(os.path.join(cim_path, f"{model}.json")) as f: |
839 |
| - defined_models = json.load(f) |
840 |
| - for _object in defined_models["objects"]: |
841 |
| - object_name = _object["objectName"] |
| 820 | + datamodel_per_cim = datamodels.get(cim_version) or datamodels["latest"] |
| 821 | + datamodel = datamodel_per_cim[model] |
| 822 | + for object_name, value in datamodel.items(): |
842 | 823 | if (
|
843 |
| - _object["parentName"] == "BaseEvent" |
| 824 | + object_name == "BaseEvent" |
844 | 825 | or object_name in datasets
|
845 | 826 | or object_name == model
|
846 | 827 | ):
|
847 |
| - for fields in chain( |
848 |
| - _find("fields", _object), _find("outputFields", _object) |
849 |
| - ): |
850 |
| - for field in fields: |
851 |
| - recommended = field["comment"].get("recommended") |
852 |
| - if recommended: |
853 |
| - recommended_fields[model_key].append(field["fieldName"]) |
| 828 | + recommended_fields[model_key] += value |
854 | 829 |
|
855 | 830 | if not recommended_fields.get(model_key) or []:
|
856 | 831 | raise ValueError(f"Model {model_key} definition was not fetched")
|
|
0 commit comments