def incoming(self, query_string, payload): if payload and payload['state'] == 'alerting': return [parse_grafana(payload, match, query_string) for match in payload.get('evalMatches', [])] elif payload and payload['state'] == 'ok' and payload.get('ruleId'): try: query = qb.from_dict({'attributes.ruleId': str(payload['ruleId'])}) existingAlerts = Alert.find_all(query) except Exception as e: raise ApiError(str(e), 500) alerts = [] for updateAlert in existingAlerts: updateAlert.severity = 'normal' updateAlert.status = 'closed' try: alert = process_alert(updateAlert) except RejectException as e: raise ApiError(str(e), 403) except Exception as e: raise ApiError(str(e), 500) alerts.append(alert) return alerts else: raise ApiError('no alerts in Grafana notification payload', 400)
def find_by_user(user: str) -> List['ApiKey']: """ List API keys for a user. """ return [ ApiKey.from_db(key) for key in db.get_keys(qb.from_dict({'user': user})) ]
def find_by_user(user): """ List API keys for a user. """ return [ ApiKey.from_db(key) for key in db.get_keys(qb.from_dict({"user": user})) ]
def grafana(): alerts = [] data = request.json if data and data['state'] == 'alerting': for match in data.get('evalMatches', []): try: incomingAlert = parse_grafana(data, match, request.args) except ValueError as e: return jsonify(status='error', message=str(e)), 400 incomingAlert.customer = assign_customer(wanted=incomingAlert.customer) add_remote_ip(request, incomingAlert) try: alert = process_alert(incomingAlert) except RejectException as e: return jsonify(status='error', message=str(e)), 403 except Exception as e: return jsonify(status='error', message=str(e)), 500 alerts.append(alert) elif data and data['state'] == 'ok' and data.get('ruleId', None): try: query = qb.from_dict({'attributes.ruleId': str(data['ruleId'])}) existingAlerts = Alert.find_all(query) except Exception as e: raise ApiError(str(e), 500) for updateAlert in existingAlerts: updateAlert.severity = 'normal' updateAlert.status = 'closed' try: alert = process_alert(updateAlert) except RejectException as e: raise ApiError(str(e), 403) except Exception as e: raise ApiError(str(e), 500) alerts.append(alert) else: raise ApiError('no alerts in Grafana notification payload', 400) for alert in alerts: text = 'grafana alert received via webhook' write_audit_trail.send(current_app._get_current_object(), event='webhook-received', message=text, user=g.user, customers=g.customers, scopes=g.scopes, resource_id=alert.id, type='alert', request=request) if len(alerts) == 1: return jsonify(status='ok', id=alerts[0].id, alert=alerts[0].serialize), 201 else: return jsonify(status='ok', ids=[alert.id for alert in alerts]), 201
def grafana(): alerts = [] data = request.json if data and data['state'] == 'alerting': for match in data.get('evalMatches', []): try: incomingAlert = parse_grafana(data, match) except ValueError as e: return jsonify(status="error", message=str(e)), 400 if g.get('customer', None): incomingAlert.customer = g.get('customer') add_remote_ip(request, incomingAlert) try: alert = process_alert(incomingAlert) except RejectException as e: return jsonify(status="error", message=str(e)), 403 except Exception as e: return jsonify(status="error", message=str(e)), 500 alerts.append(alert) elif data and data['state'] == 'ok' and data.get('ruleId', None): try: query = qb.from_dict({'attributes.ruleId': str(data['ruleId'])}) existingAlerts = Alert.find_all(query) except Exception as e: raise ApiError(str(e), 500) for updateAlert in existingAlerts: updateAlert.severity = 'normal' updateAlert.status = 'closed' try: alert = process_alert(updateAlert) except RejectException as e: raise ApiError(str(e), 403) except Exception as e: raise ApiError(str(e), 500) alerts.append(alert) else: raise ApiError("no alerts in Grafana notification payload", 400) if len(alerts) == 1: return jsonify(status="ok", id=alerts[0].id, alert=alerts[0].serialize), 201 else: return jsonify(status="ok", ids=[alert.id for alert in alerts]), 201
def oembed(format): try: url = request.args['url'] title = request.args['title'] except Exception as e: return jsonify(status='error', message=str(e)), 400 try: o = urlparse(url) except Exception as e: return jsonify(status='error', message=str(e)), 400 if o.path.endswith('/alerts/count'): try: query = qb.from_dict(parse_qs(o.query)) severity_count = db.get_counts_by_severity(query) except Exception as e: return jsonify(status='error', message=str(e)), 500 max = 'none' if severity_count.get('informational', 0) > 0: max = 'informational' if severity_count.get('warning', 0) > 0: max = 'warning' if severity_count.get('minor', 0) > 0: max = 'minor' if severity_count.get('major', 0) > 0: max = 'major' if severity_count.get('critical', 0) > 0: max = 'critical' html = render_template('oembed/counts.html', title=title, max=max, counts=severity_count) headers = {'Access-Control-Allow-Origin': '*'} return jsonify(version='1.0', type='rich', title=title, provider_name='Alerta', provider_url=request.url_root, html=html), 200, headers elif o.path.endswith('/alerts/top10/count'): # TODO: support top10 oembed widget pass else: return jsonify(status='error', message='unsupported oEmbed URL scheme'), 400
def find_by_user(user): """ List API keys for a user. """ return [ApiKey.from_db(key) for key in db.get_keys(qb.from_dict({"user": user}))]
def find_by_user(user: str) -> List['ApiKey']: """ List API keys for a user. """ return [ApiKey.from_db(key) for key in db.get_keys(qb.from_dict({'user': user}))]