def process_status_change(self, alert, status, text): from alerta.utils.api import process_status try: process_status(alert, status, text) except RejectException as e: raise ApiError(str(e), 400) except Exception as e: raise ApiError(str(e), 500)
def bulk_set_status(): status = request.json.get('status', None) text = request.json.get('text', 'bulk status update') timeout = request.json.get('timeout', None) if not status: raise ApiError("must supply 'status' as json data", 400) query = qb.from_params(request.args) alerts = Alert.find_all(query) if not alerts: raise ApiError('not found', 404) updated = [] errors = [] for alert in alerts: try: alert, status, text = process_status(alert, status, text) except RejectException as e: errors.append(str(e)) continue except Exception as e: errors.append(str(e)) continue if alert.set_status(status, text, timeout): updated.append(alert.id) if errors: raise ApiError('failed to bulk set alert status', 500, errors=errors) else: return jsonify(status='ok', updated=updated, count=len(updated))
def set_status(alert_id): status = request.json.get('status', None) text = request.json.get('text', '') timeout = request.json.get('timeout', None) if not status: raise ApiError("must supply 'status' as json data", 400) customers = g.get('customers', None) alert = Alert.find_by_id(alert_id, customers) if not alert: raise ApiError('not found', 404) try: alert, status, text = process_status(alert, status, text) alert = alert.from_status(status, text, timeout) except RejectException as e: raise ApiError(str(e), 400) except Exception as e: raise ApiError(str(e), 500) write_audit_trail.send(current_app._get_current_object(), event='alert-status-changed', message=text, user=g.user, customers=g.customers, scopes=g.scopes, resource_id=alert.id, type='alert', request=request) if alert: return jsonify(status='ok') else: raise ApiError('failed to set status', 500)
def action_alerts(alerts: List[str], action: str, text: str, timeout: Optional[int]) -> None: updated = [] errors = [] for alert_id in alerts: alert = Alert.find_by_id(alert_id) try: previous_status = alert.status alert, action, text, timeout = process_action( alert, action, text, timeout) alert = alert.from_action(action, text, timeout) except RejectException as e: errors.append(str(e)) continue except InvalidAction as e: errors.append(str(e)) continue except Exception as e: errors.append(str(e)) continue if previous_status != alert.status: try: alert, status, text = process_status(alert, alert.status, text) alert = alert.from_status(status, text, timeout) except RejectException as e: errors.append(str(e)) continue except Exception as e: errors.append(str(e)) continue updated.append(alert.id)
def set_status(alert_id): status = request.json.get('status', None) text = request.json.get('text', '') timeout = request.json.get('timeout', None) if not status: raise ApiError("must supply 'status' as json data") customers = g.get('customers', None) alert = Alert.find_by_id(alert_id, customers) if not alert: raise ApiError("not found", 404) try: alert, status, text = process_status(alert, status, text) except RejectException as e: raise ApiError(str(e), 400) except Exception as e: raise ApiError(str(e), 500) if alert.set_status(status, text, timeout): return jsonify(status="ok") else: raise ApiError("failed to set alert status", 500)
def action_alert(alert_id): action = request.json.get('action', None) text = request.json.get('text', '%s operator action' % action) timeout = request.json.get('timeout', None) if not action: raise ApiError("must supply 'action' as json data", 400) customers = g.get('customers', None) alert = Alert.find_by_id(alert_id, customers) if not alert: raise ApiError('not found', 404) try: previous_status = alert.status alert, action, text = process_action(alert, action, text) alert = alert.from_action(action, text, timeout) except RejectException as e: raise ApiError(str(e), 400) except Exception as e: raise ApiError(str(e), 500) if previous_status != alert.status: try: alert, status, text = process_status(alert, alert.status, text) except RejectException as e: raise ApiError(str(e), 400) except Exception as e: raise ApiError(str(e), 500) if alert: return jsonify(status='ok') else: raise ApiError('failed to action alert', 500)
def action_alerts(alerts: List[str], action: str, text: str, timeout: int) -> None: updated = [] errors = [] for alert_id in alerts: alert = Alert.find_by_id(alert_id) try: previous_status = alert.status alert, action, text = process_action(alert, action, text) alert = alert.from_action(action, text, timeout) except RejectException as e: errors.append(str(e)) continue except InvalidAction as e: errors.append(str(e)) continue except Exception as e: errors.append(str(e)) continue if previous_status != alert.status: try: alert, status, text = process_status(alert, alert.status, text) alert = alert.from_status(status, text, timeout) except RejectException as e: errors.append(str(e)) continue except Exception as e: errors.append(str(e)) continue updated.append(alert.id)
def action_alert(alert_id): action = request.json.get('action', None) text = request.json.get('text', '%s operator action' % action) timeout = request.json.get('timeout', None) if not action: raise ApiError("must supply 'action' as json data") customers = g.get('customers', None) alert = Alert.find_by_id(alert_id, customers) if not alert: raise ApiError("not found", 404) try: severity, status = process_action(alert, action) alert, status, text = process_status(alert, status, text) except RejectException as e: raise ApiError(str(e), 400) except Exception as e: raise ApiError(str(e), 500) if alert.set_severity_and_status(severity, status, text, timeout): return jsonify(status="ok") else: raise ApiError("failed to perform alert action", 500)
def process_status_change(self, alert, status, text): from alerta.utils.api import process_status try: alert, status, text = process_status(alert, status, text) except RejectException as e: raise ApiError(str(e), 400) except Exception as e: raise ApiError(str(e), 500) alert.tag(alert.tags) alert.update_attributes(alert.attributes) return alert, status, text
def action_alert(alert_id): action = request.json.get('action', None) text = request.json.get('text', '%s operator action' % action) timeout = request.json.get('timeout', None) if not action: raise ApiError("must supply 'action' as json data", 400) customers = g.get('customers', None) alert = Alert.find_by_id(alert_id, customers) if not alert: raise ApiError('not found', 404) previous_status = alert.status try: alert, action, text = process_action(alert, action, text) alert = alert.from_action(action, text, timeout) except RejectException as e: raise ApiError(str(e), 400) except Exception as e: raise ApiError(str(e), 500) # trigger status_change() hook only if status has changed new_status = alert.status if previous_status != new_status: alert.status = previous_status try: alert, status, text = process_status(alert, new_status, text) except RejectException as e: raise ApiError(str(e), 400) except Exception as e: raise ApiError(str(e), 500) write_audit_trail.send(current_app._get_current_object(), event='alert-actioned', message=text, user=g.user, customers=g.customers, scopes=g.scopes, resource_id=alert.id, type='alert', request=request) if alert: return jsonify(status='ok') else: raise ApiError('failed to action alert', 500)
def set_status(alert_id): status = request.json.get('status', None) text = request.json.get('text', '') if not status: raise ApiError("must supply 'status' as json data") customer = g.get('customer', None) alert = Alert.find_by_id(alert_id, customer) if not alert: raise ApiError("not found", 404) try: alert, status, text = process_status(alert, status, text) except RejectException as e: raise ApiError(str(e), 403) except Exception as e: raise ApiError(str(e), 500) if alert.set_status(status, text): return jsonify(status="ok") else: raise ApiError("failed to set alert status", 500)