Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions splunk_add_on_ucc_framework/commands/build.py
Original file line number Diff line number Diff line change
Expand Up @@ -447,7 +447,7 @@ def generate(
global_config = global_config_lib.GlobalConfig.from_file(gc_path)
global_config.cleanup_unwanted_params()
# handle the update of globalConfig before validating
global_config_update.handle_global_config_update(global_config)
global_config_update.handle_global_config_update(global_config, gc_path)
try:
validator = global_config_validator.GlobalConfigValidator(
internal_root_dir, global_config
Expand All @@ -458,7 +458,7 @@ def generate(
logger.error(f"globalConfig file is not valid. Error: {e}")
sys.exit(1)
global_config.update_addon_version(addon_version)
global_config.dump(global_config.original_path)
global_config.dump(gc_path)
logger.info(
f"Updated and saved add-on version in the globalConfig file to {addon_version}"
)
Expand Down Expand Up @@ -553,7 +553,7 @@ def generate(
"custom",
)
dashboard.generate_dashboard(
global_config, ta_name, dashboard_definition_json_path
global_config, gc_path, ta_name, dashboard_definition_json_path
)

else:
Expand Down
3 changes: 2 additions & 1 deletion splunk_add_on_ucc_framework/dashboard.py
Original file line number Diff line number Diff line change
Expand Up @@ -333,6 +333,7 @@ def generate_dashboard_content(

def generate_dashboard(
global_config: global_config_lib.GlobalConfig,
global_config_path: str,
addon_name: str,
definition_json_path: str,
) -> None:
Expand Down Expand Up @@ -366,7 +367,7 @@ def generate_dashboard(
if PANEL_CUSTOM in panel_names:
dashboard_components_path = os.path.abspath(
os.path.join(
global_config.original_path,
global_config_path,
os.pardir,
"custom_dashboard.json",
)
Expand Down
8 changes: 1 addition & 7 deletions splunk_add_on_ucc_framework/global_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,11 +64,9 @@ def __init__(
self,
content: Dict[str, Any],
is_yaml: bool,
original_path: str,
) -> None:
self._content = content
self._is_global_config_yaml = is_yaml
self._original_path = original_path
self.user_defined_handlers = UserDefinedRestHandlers()

@classmethod
Expand All @@ -79,7 +77,7 @@ def from_file(cls, global_config_path: str) -> "GlobalConfig":
content = (
yaml_load(config_raw) if is_global_config_yaml else json.loads(config_raw)
)
return GlobalConfig(content, is_global_config_yaml, global_config_path)
return GlobalConfig(content, is_global_config_yaml)

def parse_user_defined_handlers(self) -> None:
"""Parse user-defined REST handlers from globalConfig["options"]["restHandlers"]"""
Expand Down Expand Up @@ -202,10 +200,6 @@ def version(self) -> str:
def ucc_version(self) -> str:
return self.meta["_uccVersion"]

@property
def original_path(self) -> str:
return self._original_path

@property
def schema_version(self) -> Optional[str]:
return self.meta.get("schemaVersion")
Expand Down
38 changes: 22 additions & 16 deletions splunk_add_on_ucc_framework/global_config_update.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,9 @@ def _handle_dropping_api_version_update(
global_config.update_schema_version("0.0.3")


def _handle_alert_action_updates(global_config: global_config_lib.GlobalConfig) -> None:
def _handle_alert_action_updates(
global_config: global_config_lib.GlobalConfig, global_config_path: str
) -> None:
if global_config.has_alerts():
updated_alerts = []
for alert in global_config.alerts:
Expand All @@ -98,11 +100,13 @@ def _handle_alert_action_updates(global_config: global_config_lib.GlobalConfig)
# in either case, we create a new list and fill it with updated alerts, if any
updated_alerts.append(modified_alert)
global_config._content["alerts"] = updated_alerts
global_config.dump(global_config.original_path)
global_config.dump(global_config_path)
global_config.update_schema_version("0.0.4")


def _handle_xml_dashboard_update(global_config: global_config_lib.GlobalConfig) -> None:
def _handle_xml_dashboard_update(
global_config: global_config_lib.GlobalConfig, global_config_path: str
) -> None:
panels_to_migrate = [
"addon_version",
"events_ingested_by_sourcetype",
Expand All @@ -117,11 +121,13 @@ def _handle_xml_dashboard_update(global_config: global_config_lib.GlobalConfig)
f"Instead, use just one panel: \"'name': 'default'\""
)
global_config.dashboard["panels"] = [{"name": "default"}]
global_config.dump(global_config.original_path)
global_config.dump(global_config_path)
global_config.update_schema_version("0.0.5")


def handle_global_config_update(global_config: global_config_lib.GlobalConfig) -> None:
def handle_global_config_update(
global_config: global_config_lib.GlobalConfig, global_config_path: str
) -> None:
"""Handle changes in globalConfig file."""
version = global_config.schema_version or "0.0.0"
logger.info(f"Current globalConfig schema version is {version}")
Expand All @@ -147,7 +153,7 @@ def handle_global_config_update(global_config: global_config_lib.GlobalConfig) -

if _version_tuple(version) < _version_tuple("0.0.1"):
_handle_biased_terms_update(global_config)
global_config.dump(global_config.original_path)
global_config.dump(global_config_path)
logger.info("Updated globalConfig schema to version 0.0.1")

if _version_tuple(version) < _version_tuple("0.0.2"):
Expand Down Expand Up @@ -213,44 +219,44 @@ def handle_global_config_update(global_config: global_config_lib.GlobalConfig) -
)
del service_options["onLoad"]
global_config.update_schema_version("0.0.2")
global_config.dump(global_config.original_path)
global_config.dump(global_config_path)
logger.info("Updated globalConfig schema to version 0.0.2")

if _version_tuple(version) < _version_tuple("0.0.3"):
_handle_dropping_api_version_update(global_config)
global_config.dump(global_config.original_path)
global_config.dump(global_config_path)
logger.info("Updated globalConfig schema to version 0.0.3")

if _version_tuple(version) < _version_tuple("0.0.4"):
_handle_alert_action_updates(global_config)
global_config.dump(global_config.original_path)
_handle_alert_action_updates(global_config, global_config_path)
global_config.dump(global_config_path)
logger.info("Updated globalConfig schema to version 0.0.4")

if _version_tuple(version) < _version_tuple("0.0.5"):
_handle_xml_dashboard_update(global_config)
global_config.dump(global_config.original_path)
_handle_xml_dashboard_update(global_config, global_config_path)
global_config.dump(global_config_path)
logger.info("Updated globalConfig schema to version 0.0.5")

if _version_tuple(version) < _version_tuple("0.0.6"):
global_config.update_schema_version("0.0.6")
_dump_with_migrated_tabs(global_config, global_config.original_path)
_dump_with_migrated_tabs(global_config, global_config_path)
logger.info("Updated globalConfig schema to version 0.0.6")

if _version_tuple(version) < _version_tuple("0.0.7"):
global_config.update_schema_version("0.0.7")
_dump_with_migrated_entities(
global_config, global_config.original_path, [IntervalEntity]
global_config, global_config_path, [IntervalEntity]
)
logger.info("Updated globalConfig schema to version 0.0.7")

if _version_tuple(version) < _version_tuple("0.0.8"):
_stop_build_on_placeholder_usage(global_config)
global_config.dump(global_config.original_path)
global_config.dump(global_config_path)
logger.info("Updated globalConfig schema to version 0.0.8")

if _version_tuple(version) < _version_tuple("0.0.9"):
_dump_enable_from_global_config(global_config)
global_config.dump(global_config.original_path)
global_config.dump(global_config_path)
logger.info("Updated globalConfig schema to version 0.0.9")


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"meta": {
"name": "Splunk_TA_UCCExample",
"restRoot": "splunk_ta_uccexample",
"version": "5.56.0+09ad75911",
"version": "5.60.0+34ad0cb7a",
"displayName": "Splunk UCC test Add-on",
"schemaVersion": "0.0.9"
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,7 @@
"meta": {
"name": "test_addon",
"restRoot": "test_addon",
"version": "5.57.0+f11804ebf",
"version": "5.60.0+34ad0cb7a",
"displayName": "This is my add-on",
"schemaVersion": "0.0.9"
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2090,7 +2090,7 @@
"meta": {
"name": "Splunk_TA_UCCExample",
"restRoot": "splunk_ta_uccexample",
"version": "5.58.1+10197a346",
"version": "5.60.0+34ad0cb7a",
"displayName": "Splunk UCC test Add-on",
"schemaVersion": "0.0.9",
"supportedThemes": [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1246,7 +1246,7 @@
"meta": {
"name": "Splunk_TA_UCCExample",
"restRoot": "splunk_ta_uccexample",
"version": "5.57.0+f11804ebf",
"version": "5.60.0+34ad0cb7a",
"displayName": "Splunk UCC test Add-on",
"schemaVersion": "0.0.9"
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -769,7 +769,7 @@
"meta": {
"name": "Splunk_TA_UCCExample",
"restRoot": "splunk_ta_uccexample",
"version": "5.57.0+f11804ebf",
"version": "5.60.0+34ad0cb7a",
"displayName": "Splunk UCC test Add-on",
"schemaVersion": "0.0.9"
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@
"meta": {
"name": "Splunk_TA_UCCExample",
"restRoot": "splunk_ta_uccexample",
"version": "5.55.0+1bb56cc1",
"version": "1.1.1",
"displayName": "Splunk UCC test Add-on",
"schemaVersion": "0.0.9"
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
"meta": {
"name": "Splunk_TA_UCCExample",
"restRoot": "splunk_ta_uccexample",
"version": "5.57.0+f11804ebf",
"version": "5.60.0+34ad0cb7a",
"displayName": "Splunk UCC test Add-on",
"schemaVersion": "0.0.9"
}
Expand Down
48 changes: 40 additions & 8 deletions tests/unit/test_dashboard.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ def test_generate_only_default_dashboard(global_config_all_json, tmp_path):

dashboard.generate_dashboard(
global_config_all_json,
helpers.get_testdata_file_path("valid_config.json"),
"Splunk_TA_UCCExample",
str(definition_jsons_file_path),
)
Expand All @@ -68,12 +69,17 @@ def setup(tmp_path):
os.makedirs(tmp_ta_path)
custom_dash_path = os.path.join(tmp_ta_path, "custom_dashboard.json")
definition_jsons_file_path = tmp_path / "custom"
yield global_config, custom_dash_path, definition_jsons_file_path
yield global_config, global_config_path, custom_dash_path, definition_jsons_file_path
shutil.rmtree(tmp_ta_path)


def test_generate_dashboard_default_and_custom_components(setup, tmp_path):
global_config, custom_dash_path, definition_jsons_file_path = setup
(
global_config,
global_config_path,
custom_dash_path,
definition_jsons_file_path,
) = setup

with open(custom_dash_path, "w") as file:
file.write(json.dumps(custom_definition))
Expand All @@ -82,6 +88,7 @@ def test_generate_dashboard_default_and_custom_components(setup, tmp_path):
path_abs.return_value = custom_dash_path
dashboard.generate_dashboard(
global_config,
global_config_path,
"Splunk_TA_UCCExample",
str(definition_jsons_file_path),
)
Expand All @@ -101,7 +108,7 @@ def test_generate_dashboard_default_and_custom_components(setup, tmp_path):


def test_generate_dashboard_only_custom_components(setup, tmp_path):
_, custom_dash_path, definition_jsons_file_path = setup
_, _, custom_dash_path, definition_jsons_file_path = setup

global_config_path = helpers.get_testdata_file_path(
"valid_config_only_custom_dashboard.json"
Expand All @@ -115,6 +122,7 @@ def test_generate_dashboard_only_custom_components(setup, tmp_path):
path_abs.return_value = custom_dash_path
dashboard.generate_dashboard(
global_config,
global_config_path,
"Splunk_TA_UCCExample",
str(definition_jsons_file_path),
)
Expand All @@ -134,10 +142,15 @@ def test_generate_dashboard_only_custom_components(setup, tmp_path):


def test_generate_dashboard_with_custom_components_no_file(setup, tmp_path, caplog):
global_config, custom_dash_path, definition_jsons_file_path = setup
(
global_config,
global_config_path,
custom_dash_path,
definition_jsons_file_path,
) = setup
custom_dashboard_path = os.path.abspath(
os.path.join(
global_config.original_path,
global_config_path,
os.pardir,
"custom_dashboard.json",
)
Expand All @@ -146,6 +159,7 @@ def test_generate_dashboard_with_custom_components_no_file(setup, tmp_path, capl
with pytest.raises(SystemExit):
dashboard.generate_dashboard(
global_config,
global_config_path,
"Splunk_TA_UCCExample",
str(definition_jsons_file_path),
)
Expand All @@ -155,7 +169,12 @@ def test_generate_dashboard_with_custom_components_no_file(setup, tmp_path, capl
def test_generate_dashboard_with_custom_components_invalid_xml_file(
setup, tmp_path, caplog
):
global_config, custom_dash_path, definition_jsons_file_path = setup
(
global_config,
global_config_path,
custom_dash_path,
definition_jsons_file_path,
) = setup
with open(custom_dash_path, "w") as file:
file.write("")

Expand All @@ -165,14 +184,20 @@ def test_generate_dashboard_with_custom_components_invalid_xml_file(
path_abs.return_value = custom_dash_path
dashboard.generate_dashboard(
global_config,
global_config_path,
"Splunk_TA_UCCExample",
str(definition_jsons_file_path),
)
assert expected_msg in caplog.text


def test_generate_dashboard_with_custom_components_no_content(setup, tmp_path, caplog):
global_config, custom_dash_path, definition_jsons_file_path = setup
(
global_config,
global_config_path,
custom_dash_path,
definition_jsons_file_path,
) = setup

with open(custom_dash_path, "w") as file:
file.write("{}")
Expand All @@ -182,6 +207,7 @@ def test_generate_dashboard_with_custom_components_no_content(setup, tmp_path, c
path_abs.return_value = custom_dash_path
dashboard.generate_dashboard(
global_config,
global_config_path,
"Splunk_TA_UCCExample",
str(definition_jsons_file_path),
)
Expand Down Expand Up @@ -218,7 +244,12 @@ def test_generate_dashboard_with_custom_components_no_content(setup, tmp_path, c
def test_custom_license_usage_search(
setup, tmp_path, caplog, custom_settings, expected_result
):
global_config, custom_dash_path, definition_jsons_file_path = setup
(
global_config,
global_config_path,
custom_dash_path,
definition_jsons_file_path,
) = setup

settings = {
"settings": {
Expand All @@ -238,6 +269,7 @@ def test_custom_license_usage_search(
path_abs.return_value = custom_dash_path
dashboard.generate_dashboard(
global_config,
global_config_path,
"Splunk_TA_UCCExample",
str(definition_jsons_file_path),
)
Expand Down
1 change: 0 additions & 1 deletion tests/unit/test_global_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ def test_global_config_parse(filename):
assert global_config.namespace == "splunk_ta_uccexample"
assert global_config.product == "Splunk_TA_UCCExample"
assert global_config.display_name == "Splunk UCC test Add-on"
assert global_config.original_path == global_config_path
assert global_config.schema_version == "0.0.3"
assert global_config.version == "1.0.0"
assert global_config.has_pages() is True
Expand Down
Loading
Loading