Exemplo n.º 1
0
def incident_update(incident_update_id, user_id):

    incident_update_notification_module = IncidentUpdateNotificationModule()
    subscriber_module = SubscriberModule()
    task_module = TaskModule()

    for subscriber in subscriber_module.get_iterator():
        notification = incident_update_notification_module.is_subscriber_notified(
            incident_update_id, subscriber.id)
        if notification:
            # Send notification.id to the queue again
            task_module.delay("notify_subscriber",
                              {"notification_id": notification.id}, user_id)

        else:
            # Create new notification and send to queue
            new_notification = incident_update_notification_module.insert_one({
                "status":
                "pending",
                "incident_update_id":
                incident_update_id,
                "subscriber_id":
                subscriber.id
            })
            if new_notification:
                # Send new_notification.id to the Queue
                task_module.delay("notify_subscriber",
                                  {"notification_id": new_notification.id},
                                  user_id)

    return {"status": "passed", "result": "{}", "notify_type": "passed"}
Exemplo n.º 2
0
    def get(self, request, incident_id, update_id):

        self.__context = Context()
        self.__incident = IncidentModule()
        self.__incident_update = IncidentUpdateModule()
        self.__incident_update_component = IncidentUpdateComponentModule()
        self.__component = ComponentModule()
        self.__component_group = ComponentGroupModule()
        self.__incident_update_notification = IncidentUpdateNotificationModule(
        )
        self.__correlation_id = request.META[
            "X-Correlation-ID"] if "X-Correlation-ID" in request.META else ""
        incident = self.__incident.get_one_by_id(incident_id)

        if not incident:
            raise Http404("Incident not found.")

        update = self.__incident_update.get_one_by_id(update_id)

        if not update:
            raise Http404("Incident update not found.")

        update["datetime"] = update["datetime"].strftime("%b %d %Y %H:%M:%S")
        update["message"] = markdown2.markdown(update["message"])
        update[
            "notified_subscribers"] = self.__incident_update_notification.count_by_update_status(
                update["id"], IncidentUpdateNotificationModule.SUCCESS)
        update[
            "failed_subscribers"] = self.__incident_update_notification.count_by_update_status(
                update["id"], IncidentUpdateNotificationModule.FAILED)

        components = self.__format_components(self.__component.get_all())
        affected_components = self.__format_affected_components(
            self.__incident_update_component.get_all(update_id))

        self.__context.autoload_options()
        self.__context.autoload_user(
            request.user.id if request.user.is_authenticated else None)
        self.__context.push({
            "page_title":
            _("View Incident Update  · %s") % self.__context.get(
                "app_name", os.getenv("APP_NAME", "Silverback")),
            "update":
            update,
            "incident":
            incident,
            "components":
            components,
            "affected_components":
            affected_components
        })

        return render(request, self.template_name, self.__context.get())
Exemplo n.º 3
0
 def __init__(self):
     self.__request = Request()
     self.__response = Response()
     self.__helpers = Helpers()
     self.__form = Form()
     self.__incident = IncidentModule()
     self.__incident_update = IncidentUpdateModule()
     self.__task = Task_Module()
     self.__notification = NotificationModule()
     self.__subscriber = SubscriberModule()
     self.__incident_update_notification = IncidentUpdateNotificationModule()
     self.__logger = self.__helpers.get_logger(__name__)
     self.__form.add_validator(ExtraRules())
Exemplo n.º 4
0
def incident_update(incident_update_id, user_id, correlation_id=""):
    logger = Helpers().get_logger(__name__)

    logger.info(
        _("Worker started processing incident_update task with parameters %(parameters)s {'correlationId':'%(correlationId)s'}"
          ) % {
              "parameters": json.dumps({}),
              "correlationId": correlation_id
          })

    incident_update_notification_module = IncidentUpdateNotificationModule()
    subscriber_module = SubscriberModule()
    task_module = TaskModule()

    for subscriber in subscriber_module.get_iterator():
        notification = incident_update_notification_module.is_subscriber_notified(
            incident_update_id, subscriber.id)
        if notification:
            # Send notification.id to the queue again
            task_module.delay("notify_subscriber",
                              {"notification_id": notification.id}, user_id)

        else:
            # Create new notification and send to queue
            new_notification = incident_update_notification_module.insert_one({
                "status":
                "pending",
                "incident_update_id":
                incident_update_id,
                "subscriber_id":
                subscriber.id
            })
            if new_notification:
                # Send new_notification.id to the Queue
                task_module.delay("notify_subscriber",
                                  {"notification_id": new_notification.id},
                                  user_id)

    return {"status": "passed", "result": "{}", "notify_type": "passed"}
Exemplo n.º 5
0
def notify_subscriber(notification_id):

    option_entity = OptionEntity()
    incident_update_notification_module = IncidentUpdateNotificationModule()

    app_name = option_entity.get_value_by_key("app_name")
    app_email = option_entity.get_value_by_key("app_email")
    app_url = option_entity.get_value_by_key("app_url")

    notification = incident_update_notification_module.get_one_by_id(
        notification_id)
    incident_update = notification["incident_update"]
    incident = notification["incident_update"].incident
    subscriber = notification["subscriber"]

    data = {}
    data["incident_uri"] = incident.uri
    data["incident_update_time"] = incident_update.datetime.strftime(
        "%b %d %Y %H:%M:%S")
    data["incident_type"] = incident_update.status.title()
    data["incident_update"] = markdown2.markdown(incident_update.message)

    if notification["status"] == "pending":
        # send the notification for the first time
        if subscriber.type == SubscriberModule.EMAIL:
            status = __deliver_email(
                app_name, app_email, app_url, [subscriber.email],
                _("%(app_name)s Incident Update: %(incident_name)s") % {
                    "app_name": app_name,
                    "incident_name": incident.name
                }, "mails/incident_update.html", data, False)
        elif subscriber.type == SubscriberModule.PHONE:
            status = __deliver_sms(
                app_name, subscriber.phone, "%s%s" %
                (app_url.strip("/"),
                 reverse("app.web.incidents", kwargs={'uri': incident.uri})))
        elif subscriber.type == SubscriberModule.ENDPOINT:
            status = __deliver_webhook(subscriber.endpoint,
                                       subscriber.auth_token, '{}' % ())

        if status:
            # message sent
            incident_update_notification_module.update_one_by_id(
                notification["id"], {"status": "success"})

        else:
            # message failed
            incident_update_notification_module.update_one_by_id(
                notification["id"], {"status": "failed"})

    elif notification["status"] == "failed":
        # Retry to send the notification
        if subscriber.type == SubscriberModule.EMAIL:
            status = __deliver_email(
                app_name, app_email, app_url, [subscriber.email],
                _("%(app_name)s Incident Update: %(incident_name)s") % {
                    "app_name": app_name,
                    "incident_name": incident.name
                }, "mails/incident_update.html", data, False)
        elif subscriber.type == SubscriberModule.PHONE:
            status = __deliver_sms(
                app_name, subscriber.phone, "%s%s" %
                (app_url.strip("/"),
                 reverse("app.web.incidents", kwargs={'uri': incident.uri})))
        elif subscriber.type == SubscriberModule.ENDPOINT:
            status = __deliver_webhook(subscriber.endpoint,
                                       subscriber.auth_token, '{}' % ())
        if status:
            # message sent again
            incident_update_notification_module.update_one_by_id(
                notification["id"], {"status": "success"})
    else:
        print("skip subscriber#%s!" % subscriber.id)

    return {"status": "passed", "result": "{}", "notify_type": "passed"}