diff --git a/grafana_wtf/commands.py b/grafana_wtf/commands.py index c479e71..8a36070 100644 --- a/grafana_wtf/commands.py +++ b/grafana_wtf/commands.py @@ -41,6 +41,7 @@ def run(): grafana-wtf [options] plugins list [--id=] grafana-wtf [options] plugins status [--id=] grafana-wtf [options] channels [--uid=] + grafana-wtf [options] channels [--name=] grafana-wtf --version grafana-wtf (-h | --help) @@ -352,6 +353,8 @@ def run(): if options.channels: if options.uid: response = engine.channels_list_by_uid(options.uid) + elif options.name: + response = engine.channels_list_by_name(options.name) else: response = engine.channels_list() output_results(output_format, response) diff --git a/grafana_wtf/core.py b/grafana_wtf/core.py index bf3ac57..4b70060 100644 --- a/grafana_wtf/core.py +++ b/grafana_wtf/core.py @@ -616,7 +616,11 @@ def channels_list(self): return self.grafana.notifications.lookup_channels() def channels_list_by_uid(self, channel_uid): - channel = self.grafana.notifications.get_channel_by_uid(channel_uid) + try: + channel = self.grafana.notifications.get_channel_by_uid(channel_uid) + except GrafanaClientError as ex: + log.error(f"Error fetching the channel {channel_uid}: {ex}") + raise SystemExit(1) # Scan dashboards and panels to find where the channel is used dashboards = self.scan_dashboards() @@ -649,6 +653,19 @@ def extract_channel_related_information(channel_uid, dashboard, panel): ) return related_information + def channels_list_by_name(self, name): + channel_list = self.channels_list() + channel_uid = "" + for channel in channel_list: + if channel["name"] == name: + channel_uid = channel["uid"] + break + if channel_uid: + return self.channels_list_by_uid(channel_uid) + else: + log.info(f"Channel with the name {name} doesn't exist") + raise SystemExit(0) + class Indexer: def __init__(self, engine: GrafanaWtf):