in source/msam/chalicelib/cloudwatch.py [0:0]
def get_cloudwatch_events_state_groups(state):
"""
Group all events by down, degraded and running pipelines.
Currently only applicable to aws.medialive source which includes MediaLive channel and multiplex.
"""
group = {}
group["down"] = []
group["running"] = []
group["degraded"] = []
events = get_cloudwatch_events_state(state)
for event in events:
if "pipeline" in event["detail"]:
arn = event["resource_arn"]
pipeline = event["detail"]["pipeline"]
def is_same_arn(i):
return bool(i["resource_arn"] == arn)
def is_same_pl(i):
return bool("pipeline" in i["detail"]
and i["detail"]["pipeline"] == pipeline)
def is_diff_pl(i):
return bool("pipeline" in i["detail"]
and i["detail"]["pipeline"] != pipeline)
def is_pl_down(i):
return bool("pipeline_state" in i["detail"]
and not i["detail"]["pipeline_state"])
same_arn_events = list(filter(is_same_arn, events))
all_down_pipelines = list(filter(is_pl_down, same_arn_events))
same_down_pipelines = list(filter(is_same_pl, all_down_pipelines))
diff_down_pipelines = list(filter(is_diff_pl, all_down_pipelines))
if len(diff_down_pipelines) > 0 and len(same_down_pipelines) == 0:
event["detail"]["degraded"] = bool(True)
group["degraded"].append(event)
elif len(
diff_down_pipelines) == 0 and len(same_down_pipelines) > 0:
event["detail"]["degraded"] = bool(True)
group["degraded"].append(event)
elif len(diff_down_pipelines) > 0 and len(same_down_pipelines) > 0:
event["detail"]["degraded"] = bool(False)
group["down"].append(event)
else:
event["detail"]["degraded"] = bool(False)
group["running"].append(event)
else:
event["detail"]["degraded"] = bool(False)
group["running"].append(event)
return group