Skip to content

Instantly share code, notes, and snippets.

@foamdino
Last active November 19, 2018 09:06
Show Gist options
  • Select an option

  • Save foamdino/817a2cb653660b6eacbf0db74e4600ca to your computer and use it in GitHub Desktop.

Select an option

Save foamdino/817a2cb653660b6eacbf0db74e4600ca to your computer and use it in GitHub Desktop.
victorops-to-lambstatus
def get_status_status_from_victorops_status (victorops_status, victorOps_current_alert_phase):
if victorops_status == "CRITICAL" and victorOps_current_alert_phase == "UNACKED":
return "Identified"
elif victorops_status == "CRITICAL" and victorOps_current_alert_phase == "ACKED":
return "Investigating"
elif victorOps_current_alert_phase == "RESOLVED" or victorops_status == "RESOLVED" :
return "Resolved"
else:
return "Monitoring"
def lambda_handler(event, context):
message_json = json.loads(event["body"])
print(json.dumps(message_json))
name = "Incident"
message = message_json["data"]
victorOps_id = message_json["entityId"]
victorOps_status = message_json["currentState"]
victorOps_current_alert_phase = message_json["currentAlertPhase"]
victorOps_routing_key=message_json["routingKey"]
component = get_component_from_victorops_incident(message_json)
incident_class = get_incident_class(message_json)
status = get_status_status_from_victorops_status (victorOps_status, victorOps_current_alert_phase)
config = db.get_routing_config_by_routing_key(victorOps_routing_key)
print ("Routing config is {} ".format(config))
print ("Identified affected component as {}, status as {} and incident class as {}".format(component,status, incident_class))
newIncident = {}
newIncident["status"] = status
newIncident["component"] = component
newIncident["name"] = get_incident_name(incident_class, component)
new_msg = get_message_for_victorops_incident(newIncident)
incident = db.load_incident (victorOps_routing_key, victorOps_id)
if incident is None:
# New incident
print ("Incident {} is new".format(victorOps_id))
result = lambstatusapi.post_to_status_page (victorOps_routing_key, newIncident, new_msg)
newIncident["statuspage_id"] = result["incidentID"]
db.save_incident(victorOps_routing_key, victorOps_id, newIncident)
lambstatusapi.update_component_status (config, component, get_component_status(incident_class))
print ("Incident {} has been mapped to {}".format(victorOps_id,result["incidentID"]))
else:
# Update Incident
print ("Incident {} is existing and maps to {}".format(victorOps_id,incident["statuspage_id"]))
lambstatusapi.update_to_status_page (config, incident,newIncident["status"],new_msg)
lambstatusapi.update_component_status (config, component, get_component_status(incident_class))
if newIncident["status"] == "Resolved":
db.delete_incident(victorOps_routing_key, victorOps_id)
lambstatusapi.update_component_status (config, component, "Operational")
return {
"statusCode": 200,
"body": json.dumps(
{"message": "OK",
"name":newIncident["name"],
"component":component,
"status":newIncident.get("status","unknown"),
"msg" : new_msg
}
),
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment