Exemplo n.º 1
0
    def notify(self, alert, query, user, new_state, app, host, options):
        try:
            data = {
                "event": "alert_state_change",
                "alert": serialize_alert(alert, full=False),
                "url_base": host,
            }

            data["alert"]["description"] = alert.custom_body
            data["alert"]["title"] = alert.custom_subject

            headers = {"Content-Type": "application/json"}
            auth = (HTTPBasicAuth(options.get("username"),
                                  options.get("password"))
                    if options.get("username") else None)
            resp = requests.post(
                options.get("url"),
                data=json_dumps(data),
                auth=auth,
                headers=headers,
                timeout=5.0,
            )
            if resp.status_code != 200:
                logging.error(
                    "webhook send ERROR. status_code => {status}".format(
                        status=resp.status_code))
        except Exception:
            logging.exception("webhook send ERROR.")
Exemplo n.º 2
0
    def post(self):
        req = request.get_json(True)
        require_fields(req, ('options', 'name', 'query_id'))

        query = models.Query.get_by_id_and_org(req['query_id'],
                                               self.current_org)
        require_access(query.groups, self.current_user, view_only)

        alert = models.Alert(
            name=req['name'],
            query_rel=query,
            user=self.current_user,
            rearm=req.get('rearm'),
            options=req['options']
        )

        models.db.session.add(alert)
        models.db.session.flush()
        models.db.session.commit()

        self.record_event({
            'action': 'create',
            'timestamp': int(time.time()),
            'object_id': alert.id,
            'object_type': 'alert'
        })

        return serialize_alert(alert)
Exemplo n.º 3
0
    def post(self):
        req = request.get_json(True)
        require_fields(req, ('options', 'name', 'query_id'))

        query = models.Query.get_by_id_and_org(req['query_id'],
                                               self.current_org)
        require_access(query, self.current_user, view_only)

        alert = models.Alert(
            name=req['name'],
            query_rel=query,
            user=self.current_user,
            rearm=req.get('rearm'),
            options=req['options'],
        )

        models.db.session.add(alert)
        models.db.session.flush()
        models.db.session.commit()

        self.record_event({
            'action': 'create',
            'object_id': alert.id,
            'object_type': 'alert'
        })

        return serialize_alert(alert)
Exemplo n.º 4
0
    def post(self, alert_id):
        ## 获得参数
        req = request.get_json(True)

        ## 提取参数
        params = project(req, ('options', 'name', 'query_id', 'rearm'))

        ## 根据参数查询
        alert = get_object_or_404(Alert.get_by_id_and_org, alert_id,
                                  self.current_org)

        ##判断权限
        require_admin_or_owner(alert.user.id)

        ######
        # for k, v in updates.items():
        #     setattr(model, k, v)

        # 进行更新
        self.update_model(alert, params)
        #######

        # 提交更新
        session.commit()

        self.record_event({
            'action': 'edit',
            'timestamp': int(time.time()),
            'object_id': alert.id,
            'object_type': 'alert'
        })

        # serialize_alert 对返回的查询列,进行特定处理,转换为前端需要的json

        return serialize_alert(alert)
Exemplo n.º 5
0
    def post(self):
        # 忽视mimetype类型,强制为Json类型

        req = request.get_json(True)

        # 判断请求参数
        require_fields(req, ('options', 'name', 'query_id'))

        #### 根据哪个query_id创建的alert
        query = Query.get_by_id_and_org(req['query_id'], self.current_org)

        ## 权限系统??????????????
        require_access(query.groups, self.current_user, view_only)

        # query_rel 是 relationShip, 传对方的行对象,需要提供
        # 但是不用提供外键对应的列
        alert = Alert(name=req['name'],
                      query_rel=query,
                      user=self.current_user,
                      rearm=req.get('rearm'),
                      options=req['options'])

        session.add(alert)
        session.flush()
        session.commit()

        self.record_event({
            'action': 'create',
            'timestamp': int(time.time()),
            'object_id': alert.id,
            'object_type': 'alert'
        })

        ### RESETFUL 规范, 不能只是响应个200,就完事了, 最好把创建好的东西返回给前端
        return serialize_alert(alert)
Exemplo n.º 6
0
    def notify(self, alert, query, user, new_state, app, host, options):
        try:
            data = {
                'event': 'alert_state_change',
                'alert': serialize_alert(alert, full=False),
                'url_base': host,
            }

            data['alert']['description'] = alert.render_template()
            data['alert']['title'] = alert.custom_subject

            headers = {'Content-Type': 'application/json'}
            auth = HTTPBasicAuth(
                options.get('username'),
                options.get('password')) if options.get('username') else None
            resp = requests.post(options.get('url'),
                                 data=json_dumps(data),
                                 auth=auth,
                                 headers=headers,
                                 timeout=5.0)
            if resp.status_code != 200:
                logging.error(
                    "webhook send ERROR. status_code => {status}".format(
                        status=resp.status_code))
        except Exception:
            logging.exception("webhook send ERROR.")
Exemplo n.º 7
0
    def post(self):
        req = request.get_json(True)
        require_fields(req, ("options", "name", "query_id"))

        query = models.Query.get_by_id_and_org(req["query_id"],
                                               self.current_org)
        require_access(query, self.current_user, view_only)

        alert = models.Alert(
            name=req["name"],
            query_rel=query,
            user=self.current_user,
            rearm=req.get("rearm"),
            options=req["options"],
        )

        models.db.session.add(alert)
        models.db.session.flush()
        models.db.session.commit()

        self.record_event({
            "action": "create",
            "object_id": alert.id,
            "object_type": "alert"
        })

        return serialize_alert(alert)
Exemplo n.º 8
0
 def get(self, alert_id):
     alert = get_object_or_404(models.Alert.get_by_id_and_org, alert_id, self.current_org)
     require_access(alert, self.current_user, view_only)
     self.record_event({
         'action': 'view',
         'object_id': alert.id,
         'object_type': 'alert'
     })
     return serialize_alert(alert)
Exemplo n.º 9
0
    def get(self, alert_id):
        alert = get_object_or_404(Alert.get_by_id_and_org, alert_id,
                                  self.current_org)

        require_access(alert.groups, self.current_user, view_only)

        # serialize_alert 对返回的查询列,进行特定处理,转换为前端需要的json

        return serialize_alert(alert)
Exemplo n.º 10
0
 def get(self, alert_id):
     alert = get_object_or_404(models.Alert.get_by_id_and_org, alert_id,
                               self.current_org)
     require_access(alert, self.current_user, view_only)
     self.record_event({
         "action": "view",
         "object_id": alert.id,
         "object_type": "alert"
     })
     return serialize_alert(alert)
Exemplo n.º 11
0
    def post(self, alert_id):
        req = request.get_json(True)
        params = project(req, ('options', 'name', 'query_id', 'rearm'))
        alert = get_object_or_404(models.Alert.get_by_id_and_org, alert_id,
                                  self.current_org)
        require_admin_or_owner(alert.user.id)

        self.update_model(alert, params)
        models.db.session.commit()

        return serialize_alert(alert)
Exemplo n.º 12
0
 def get(self, alert_id):
     alert = get_object_or_404(models.Alert.get_by_id_and_org, alert_id,
                               self.current_org)
     require_access(alert.groups, self.current_user, view_only)
     self.record_event({
         'action': 'view',
         'timestamp': int(time.time()),
         'object_id': alert.id,
         'object_type': 'alert'
     })
     return serialize_alert(alert)
     return alert.to_dict()
Exemplo n.º 13
0
 def notify(self, alert, query, user, new_state, app, host, options):
     try:
         data = {
             'event': 'alert_state_change',
             'alert': serialize_alert(alert, full=False),
             'url_base': host 
         }
         headers = {'Content-Type': 'application/json'}
         auth = HTTPBasicAuth(options.get('username'), options.get('password')) if options.get('username') else None
         resp = requests.post(options.get('url'), data=json_dumps(data), auth=auth, headers=headers, timeout=5.0)
         if resp.status_code != 200:
             logging.error("webhook send ERROR. status_code => {status}".format(status=resp.status_code))
     except Exception:
         logging.exception("webhook send ERROR.")
Exemplo n.º 14
0
    def post(self, alert_id):
        req = request.get_json(True)
        params = project(req, ("options", "name", "query_id", "rearm"))
        alert = get_object_or_404(models.Alert.get_by_id_and_org, alert_id,
                                  self.current_org)
        require_admin_or_owner(alert.user.id)

        self.update_model(alert, params)
        models.db.session.commit()

        self.record_event({
            "action": "edit",
            "object_id": alert.id,
            "object_type": "alert"
        })

        return serialize_alert(alert)
Exemplo n.º 15
0
    def post(self, alert_id):
        req = request.get_json(True)
        params = project(req, ('options', 'name', 'query_id', 'rearm'))
        alert = get_object_or_404(models.Alert.get_by_id_and_org, alert_id, self.current_org)
        require_admin_or_owner(alert.user.id)

        self.update_model(alert, params)
        models.db.session.commit()

        self.record_event({
            'action': 'edit',
            'timestamp': int(time.time()),
            'object_id': alert.id,
            'object_type': 'alert'
        })

        return serialize_alert(alert)
Exemplo n.º 16
0
    def post(self, alert_id):
        req = request.get_json(True)
        params = project(req, ('options', 'name', 'query_id', 'rearm'))
        alert = get_object_or_404(models.Alert.get_by_id_and_org, alert_id,
                                  self.current_org)
        require_admin_or_owner(alert.user.id)

        self.update_model(alert, params)
        models.db.session.commit()

        self.record_event({
            'action': 'edit',
            'timestamp': int(time.time()),
            'object_id': alert.id,
            'object_type': 'alert'
        })

        return serialize_alert(alert)
Exemplo n.º 17
0
 def get(self):
     return [serialize_alert(alert) for alert in models.Alert.all(group_ids=self.current_user.group_ids)]
Exemplo n.º 18
0
 def get(self, alert_id):
     alert = get_object_or_404(models.Alert.get_by_id_and_org, alert_id,
                               self.current_org)
     require_access(alert, self.current_user, view_only)
     return serialize_alert(alert)
Exemplo n.º 19
0
 def get(self):
     self.record_event({"action": "list", "object_type": "alert"})
     return [
         serialize_alert(alert) for alert in models.Alert.all(
             group_ids=self.current_user.group_ids)
     ]
Exemplo n.º 20
0
 def get(self):
     return [
         serialize_alert(alert) for alert in models.Alert.all(
             group_ids=self.current_user.group_ids)
     ]
Exemplo n.º 21
0
 def get(self, alert_id):
     alert = get_object_or_404(models.Alert.get_by_id_and_org, alert_id, self.current_org)
     require_access(alert.groups, self.current_user, view_only)
     return serialize_alert(alert)
Exemplo n.º 22
0
 def get(self):
     self.record_event({
         'action': 'list',
         'object_type': 'alert'
     })
     return [serialize_alert(alert) for alert in models.Alert.all(group_ids=self.current_user.group_ids)]