class RssHistory(View): """RSS History Page Controller""" @redirect_if_not_installed def get(self, request): self.__correlation_id = request.META["X-Correlation-ID"] if "X-Correlation-ID" in request.META else "" self.__fg = FeedGenerator() self.__context = Context() self.__option_entity = OptionEntity() self.__context.autoload_options() self.__context.push({ "page_title": self.__context.get("app_name", os.getenv("APP_NAME", "Silverback")), "is_authenticated": request.user and request.user.is_authenticated }) self.__fg.id('http://silverbackhq.org') self.__fg.title('Some Testfeed') self.__fg.author({'name': 'John Doe', 'email': '*****@*****.**'}) self.__fg.link(href='http://example.com', rel='alternate') self.__fg.logo('http://ex.com/logo.jpg') self.__fg.subtitle('This is a cool feed!') self.__fg.link(href='http://silverbackhq.org/test.atom', rel='self') self.__fg.language('en') return HttpResponse(self.__fg.atom_str(), content_type='text/xml')
class IncidentUpdateAdd(View): """Incident Update Add Page Controller""" template_name = 'templates/admin/incident/update/add.html' @login_if_not_authenticated def get(self, request, incident_id): self.__context = Context() self.__incident = IncidentModule() self.__incident_update = IncidentUpdateModule() self.__component = ComponentModule() self.__component_group = ComponentGroupModule() 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.") self.__context.autoload_options() self.__context.autoload_user( request.user.id if request.user.is_authenticated else None) self.__context.push({ "page_title": _("Add Incident Update · %s") % self.__context.get( "app_name", os.getenv("APP_NAME", "Silverback")), "incident": incident }) return render(request, self.template_name, self.__context.get())
class Register(View): template_name = 'templates/register.html' __user = None __context = None __option_entity = None __correlation_id = None @redirect_if_not_installed @redirect_if_authenticated def get(self, request, token): self.__correlation_id = request.META[ "X-Correlation-ID"] if "X-Correlation-ID" in request.META else "" self.__user = UserModule() self.__context = Context() self.__option_entity = OptionEntity() if not self.__user.check_register_request(token): messages.error( request, _("Register token is expired or invalid, Please contact system administrator!" )) return redirect("app.web.login") self.__context.autoload_options() self.__context.push({ "page_title": _("Register · %s") % self.__context.get( "app_name", os.getenv("APP_NAME", "Silverback")), "register_request": self.__user.get_register_request_by_token(token) }) return render(request, self.template_name, self.__context.get())
class SubscriberEdit(View): """Subscriber Edit Page Controller""" template_name = 'templates/admin/subscriber/edit.html' @login_if_not_authenticated def get(self, request, subscriber_id): self.__context = Context() self.__subscriber = SubscriberModule() self.__correlation_id = request.META[ "X-Correlation-ID"] if "X-Correlation-ID" in request.META else "" subscriber = self.__subscriber.get_one_by_id(subscriber_id) if not subscriber: raise Http404("Subscriber not found.") self.__context.autoload_options() self.__context.autoload_user( request.user.id if request.user.is_authenticated else None) self.__context.push({ "page_title": _("Edit Subscriber · %s") % self.__context.get( "app_name", os.getenv("APP_NAME", "Silverback")), "subscriber": subscriber }) return render(request, self.template_name, self.__context.get())
class ResetPassword(View): """Reset Password Page Controller""" template_name = 'templates/reset_password.html' @redirect_if_not_installed @redirect_if_authenticated def get(self, request, token): self.__correlation_id = request.META[ "X-Correlation-ID"] if "X-Correlation-ID" in request.META else "" self.__reset_password_core = ResetPasswordModule() self.__context = Context() self.__option_entity = OptionEntity() self.__context.autoload_options() self.__context.push({ "page_title": _("Reset Password · %s") % self.__context.get( "app_name", os.getenv("APP_NAME", "Silverback")), "reset_token": token }) if not self.__reset_password_core.check_token(token): messages.error( request, _("Reset token is expired or invalid, Please request another token!" )) return redirect("app.web.forgot_password") return render(request, self.template_name, self.__context.get())
class Login(View): template_name = 'templates/login.html' __context = None __option_entity = None @redirect_if_not_installed @redirect_if_authenticated def get(self, request): self.__context = Context() self.__option_entity = Option_Entity() self.__context.autoload_options() self.__context.push({ "page_title": _("Login · %s") % self.__context.get("app_name", os.getenv("APP_NAME", "Kraven")) }) if "redirect" in request.GET: self.__context.push({"redirect_url": request.GET["redirect"]}) else: self.__context.push( {"redirect_url": reverse("app.web.admin.dashboard")}) return render(request, self.template_name, self.__context.get())
class ComponentGroupEdit(View): """Component Group Edit Page Controller""" template_name = 'templates/admin/component_group/edit.html' @login_if_not_authenticated def get(self, request, group_id): self.__context = Context() self.__component_group = ComponentGroupModule() self.__correlation_id = request.META[ "X-Correlation-ID"] if "X-Correlation-ID" in request.META else "" group = self.__component_group.get_one_by_id(group_id) if not group: raise Http404("Component group not found.") self.__context.autoload_options() self.__context.autoload_user( request.user.id if request.user.is_authenticated else None) self.__context.push({ "page_title": _("Edit Component Group · %s") % self.__context.get( "app_name", os.getenv("APP_NAME", "Silverback")), "group": group }) return render(request, self.template_name, self.__context.get())
def handler500(request, exception=None, template_name='templates/500.html'): correlation_id = request.META[ "X-Correlation-ID"] if "X-Correlation-ID" in request.META else "" helpers = Helpers() logger = helpers.get_logger(__name__) if exception is not None: logger.error( "Server Error: %(exception)s {'correlationId':'%(correlationId)s'}" % { "exception": exception, "correlationId": correlation_id }) template_name = 'templates/500.html' context = Context() context.autoload_options() context.push({ "page_title": _("500 · %s") % context.get("app_name", os.getenv("APP_NAME", "Silverback")) }) return render(request, template_name, context.get(), status=500)
class Login(View): """Login Page Controller""" template_name = 'templates/login.html' @redirect_if_not_installed @redirect_if_authenticated def get(self, request): self.__correlation_id = request.META[ "X-Correlation-ID"] if "X-Correlation-ID" in request.META else "" self.__context = Context() self.__option_entity = OptionEntity() self.__context.autoload_options() self.__context.push({ "page_title": _("Login · %s") % self.__context.get("app_name", os.getenv("APP_NAME", "Silverback")) }) if "redirect" in request.GET: self.__context.push({"redirect_url": request.GET["redirect"]}) else: self.__context.push( {"redirect_url": reverse("app.web.admin.dashboard")}) return render(request, self.template_name, self.__context.get())
class MetricEdit(View): """Metric Edit Page Controller""" template_name = 'templates/admin/metric/edit.html' @login_if_not_authenticated def get(self, request, metric_id): self.__context = Context() self.__metric = MetricModule() self.__correlation_id = request.META[ "X-Correlation-ID"] if "X-Correlation-ID" in request.META else "" metric = self.__metric.get_one_by_id(metric_id) if not metric: raise Http404("Metric not found.") self.__context.autoload_options() self.__context.autoload_user( request.user.id if request.user.is_authenticated else None) self.__context.push({ "page_title": _("Edit Metric · %s") % self.__context.get( "app_name", os.getenv("APP_NAME", "Silverback")), "metric": metric }) metric["data"] = json.loads(metric["data"]) return render(request, self.template_name, self.__context.get())
def handler404(request, exception=None, template_name='templates/404.html'): """404 Error Page Controller""" correlation_id = request.META[ "X-Correlation-ID"] if "X-Correlation-ID" in request.META else "" helpers = Helpers() logger = helpers.get_logger(__name__) if exception is not None: logger.debug( "Route Not Found: %(exception)s {'correlationId':'%(correlationId)s'}" % { "exception": exception, "correlationId": correlation_id }) template_name = 'templates/404.html' context = Context() context.autoload_options() context.push({ "page_title": _("404 · %s") % context.get("app_name", os.getenv("APP_NAME", "Silverback")) }) return render(request, template_name, context.get(), status=404)
class Reset_Password(View): template_name = 'templates/reset_password.html' __reset_password_core = None __context = None __option_entity = None @redirect_if_not_installed @redirect_if_authenticated def get(self, request, token): self.__reset_password_core = Reset_Password_Module() self.__context = Context() self.__option_entity = Option_Entity() self.__context.autoload_options() self.__context.push({ "page_title": _("Reset Password · %s") % self.__context.get("app_name", os.getenv("APP_NAME", "Kraven")), "reset_token": token }) if not self.__reset_password_core.check_token(token): messages.error(request, _("Reset token is expired or invalid, Please request another token!")) return redirect("app.web.forgot_password") return render(request, self.template_name, self.__context.get())
class IncidentList(View): """Incident List Page Controller""" template_name = 'templates/admin/incident/list.html' @login_if_not_authenticated def get(self, request): self.__context = Context() self.__incident = IncidentModule() self.__incident_update = IncidentUpdateModule() self.__component = ComponentModule() self.__component_group = ComponentGroupModule() self.__correlation_id = request.META[ "X-Correlation-ID"] if "X-Correlation-ID" in request.META else "" self.__context.autoload_options() self.__context.autoload_user( request.user.id if request.user.is_authenticated else None) self.__context.push({ "page_title": _("Incidents · %s") % self.__context.get("app_name", os.getenv("APP_NAME", "Silverback")) }) return render(request, self.template_name, self.__context.get())
class Dashboard(View): """Dashboard Page Controller""" template_name = 'templates/admin/dashboard.html' @login_if_not_authenticated def get(self, request): self.__context = Context() self.__dashboard = DashboardModule() self.__correlation_id = request.META[ "X-Correlation-ID"] if "X-Correlation-ID" in request.META else "" self.__context.autoload_options() self.__context.autoload_user( request.user.id if request.user.is_authenticated else None) self.__context.push({ "page_title": _("Dashboard · %s") % self.__context.get( "app_name", os.getenv("APP_NAME", "Silverback")), "count": { "incidents": self.__dashboard.incidents_count(), "subscribers": self.__dashboard.subscribers_count(), "components": self.__dashboard.components_count(), "component_groups": self.__dashboard.component_groups_count(), "metrics": self.__dashboard.metrics_count(), "users": self.__dashboard.users_count(), "delivered_notifications": self.__dashboard.notifications_count("success"), "failed_notifications": self.__dashboard.notifications_count("failed") }, "chart": { "subscribers": self.__dashboard.subscribers_chart(), "components": self.__dashboard.components_chart(), "delivered_notifications": self.__dashboard.notifications_chart("success", 14), "failed_notifications": self.__dashboard.notifications_chart("failed", 14), "incidents": self.__dashboard.incidents_chart() }, "open_incidents": self.__dashboard.get_open_incidents(), "affected_components": self.__dashboard.get_affected_components() }) return render(request, self.template_name, self.__context.get())
class StatusPageHistory(View): template_name = 'templates/status_page_history.html' __context = None __option_entity = None __status_page_module = None __correlation_id = None @redirect_if_not_installed def get(self, request, period): self.__correlation_id = request.META[ "X-Correlation-ID"] if "X-Correlation-ID" in request.META else "" self.__context = Context() self.__option_entity = OptionEntity() self.__status_page_module = StatusPageModule() period = int(period) if period < 1: raise Http404("History period not found.") data = self.__status_page_module.get_incidents_for_period(period) if not data: raise Http404("History period not found.") self.__context.autoload_options() self.__context.push({ "page_title": self.__context.get("app_name", os.getenv("APP_NAME", "Silverback")), "logo_url": self.__status_page_module.get_logo_url(), "favicon_url": self.__status_page_module.get_favicon_url(), "is_authenticated": request.user and request.user.is_authenticated, "prev_link": period + 1, "next_link": period - 1 if period > 1 else 0, "history_period": data["period"], "past_incidents": data["incidents"], }) return render(request, self.template_name, self.__context.get())
class Home(View): template_name = 'templates/home.html' __context = None __option_entity = None @redirect_if_not_installed def get(self, request): self.__context = Context() self.__option_entity = Option_Entity() self.__context.autoload_options() self.__context.push({ "page_title": self.__context.get("app_name", os.getenv("APP_NAME", "Kraven")), "is_authenticated": request.user and request.user.is_authenticated }) return render(request, self.template_name, self.__context.get())
def handler404(request, exception=None, template_name='templates/404.html'): helpers = Helpers() logger = helpers.get_logger(__name__) if exception != None: logger.debug("Route Not Found: %s" % exception) template_name = 'templates/404.html' context = Context() context.autoload_options() context.push({ "page_title": _("404 · %s") % context.get("app_name", os.getenv("APP_NAME", "Kevin")) }) return render(request, template_name, context.get(), status=404)
class Forgot_Password(View): template_name = 'templates/forgot_password.html' __context = None __option_entity = None @redirect_if_not_installed @redirect_if_authenticated def get(self, request): self.__context = Context() self.__option_entity = Option_Entity() self.__context.autoload_options() self.__context.push({ "page_title": _("Forgot Password · %s") % self.__context.get("app_name", os.getenv("APP_NAME", "Kraven")) }) return render(request, self.template_name, self.__context.get())
def handler500(request, exception=None, template_name='templates/500.html'): helpers = Helpers() logger = helpers.get_logger(__name__) if exception != None: logger.error("Server Error: %s" % exception) template_name = 'templates/500.html' context = Context() context.autoload_options() context.push({ "page_title": _("500 · %s") % context.get("app_name", os.getenv("APP_NAME", "Kevin")) }) return render(request, template_name, context.get(), status=500)
class StatusPageIndex(View): template_name = 'templates/status_page_index.html' __context = None __option_entity = None __status_page_module = None __correlation_id = None @redirect_if_not_installed def get(self, request): self.__correlation_id = request.META[ "X-Correlation-ID"] if "X-Correlation-ID" in request.META else "" self.__context = Context() self.__option_entity = OptionEntity() self.__status_page_module = StatusPageModule() self.__context.autoload_options() self.__context.push({ "page_title": self.__context.get("app_name", os.getenv("APP_NAME", "Silverback")), "is_authenticated": request.user and request.user.is_authenticated, "system_status": self.__status_page_module.get_system_status(), "about_site": self.__status_page_module.get_about_site(), "logo_url": self.__status_page_module.get_logo_url(), "favicon_url": self.__status_page_module.get_favicon_url(), "past_incidents": self.__status_page_module.get_past_incidents(7), "system_metrics": self.__status_page_module.get_system_metrics(), "services": self.__status_page_module.get_services() }) return render(request, self.template_name, self.__context.get())
class Settings(View): """Settings Page Controller""" template_name = 'templates/admin/settings.html' @login_if_not_authenticated_or_no_permission("manage_settings") def get(self, request): self.__context = Context() self.__upgrade = Upgrade() self.__acl = ACL() self.__correlation_id = request.META[ "X-Correlation-ID"] if "X-Correlation-ID" in request.META else "" self.__context.autoload_options() self.__context.autoload_user( request.user.id if request.user.is_authenticated else None) self.__context.load_options({ "app_name": "", "app_email": "", "app_url": "", "app_description": "", "google_analytics_account": "", "reset_mails_messages_count": "", "reset_mails_expire_after": "", "access_tokens_expire_after": "", "prometheus_token": "", "newrelic_api_key": "" }) self.__context.push({ "current": self.__upgrade.get_current_version(), "latest": self.__upgrade.get_latest_version() }) self.__context.push({ "page_title": _("Settings · %s") % self.__context.get("app_name", os.getenv("APP_NAME", "Silverback")) }) return render(request, self.template_name, self.__context.get())
class MetricAdd(View): """Metric Add Page Controller""" template_name = 'templates/admin/metric/add.html' @login_if_not_authenticated def get(self, request): self.__context = Context() self.__metric = MetricModule() self.__correlation_id = request.META[ "X-Correlation-ID"] if "X-Correlation-ID" in request.META else "" self.__context.autoload_options() self.__context.autoload_user( request.user.id if request.user.is_authenticated else None) self.__context.push({ "page_title": _("Add a Metric · %s") % self.__context.get("app_name", os.getenv("APP_NAME", "Silverback")) }) return render(request, self.template_name, self.__context.get())
class ForgotPassword(View): template_name = 'templates/forgot_password.html' __context = None __option_entity = None __correlation_id = None @redirect_if_not_installed @redirect_if_authenticated def get(self, request): self.__correlation_id = request.META["X-Correlation-ID"] if "X-Correlation-ID" in request.META else "" self.__context = Context() self.__option_entity = OptionEntity() self.__context.autoload_options() self.__context.push({ "page_title": _("Forgot Password · %s") % self.__context.get("app_name", os.getenv("APP_NAME", "Silverback")) }) return render(request, self.template_name, self.__context.get())
class StatusPageSingle(View): template_name = 'templates/status_page_single.html' __context = None __option_entity = None __status_page_module = None __correlation_id = None @redirect_if_not_installed def get(self, request, uri): self.__correlation_id = request.META[ "X-Correlation-ID"] if "X-Correlation-ID" in request.META else "" self.__context = Context() self.__option_entity = OptionEntity() self.__status_page_module = StatusPageModule() incident = self.__status_page_module.get_incident_by_uri(uri) if not incident: raise Http404("Incident not found.") self.__context.autoload_options() self.__context.push({ "page_title": self.__context.get("app_name", os.getenv("APP_NAME", "Silverback")), "logo_url": self.__status_page_module.get_logo_url(), "favicon_url": self.__status_page_module.get_favicon_url(), "is_authenticated": request.user and request.user.is_authenticated, "uri": uri, "incident": incident }) return render(request, self.template_name, self.__context.get())
class UserAdd(View): """User Add Page Controller""" template_name = 'templates/admin/user/add.html' @login_if_not_authenticated_or_no_permission("manage_settings") def get(self, request): self.__context = Context() self.__user = UserModule() self.__correlation_id = request.META[ "X-Correlation-ID"] if "X-Correlation-ID" in request.META else "" self.__context.autoload_options() self.__context.autoload_user( request.user.id if request.user.is_authenticated else None) self.__context.push({ "page_title": _("Add a User · %s") % self.__context.get("app_name", os.getenv("APP_NAME", "Silverback")) }) return render(request, self.template_name, self.__context.get())
class Notification(View): """Notification List Page Controller""" template_name = 'templates/admin/notification.html' @login_if_not_authenticated def get(self, request): self.__context = Context() self.__acl = ACL() self.__correlation_id = request.META[ "X-Correlation-ID"] if "X-Correlation-ID" in request.META else "" self.__context.autoload_options() self.__context.autoload_user( request.user.id if request.user.is_authenticated else None) self.__context.push({ "page_title": _("Notification · %s") % self.__context.get("app_name", os.getenv("APP_NAME", "Silverback")) }) return render(request, self.template_name, self.__context.get())
class Builder(View): """Builder Page Controller""" template_name = 'templates/admin/builder.html' @login_if_not_authenticated_or_no_permission("manage_settings") def get(self, request): self.__context = Context() self.__metric = MetricModule() self.__component = ComponentModule() self.__component_group = ComponentGroupModule() self.__correlation_id = request.META[ "X-Correlation-ID"] if "X-Correlation-ID" in request.META else "" self.__context.autoload_options() self.__context.autoload_user( request.user.id if request.user.is_authenticated else None) self.__context.load_options({ "builder_headline": "", "builder_favicon_url": "", "builder_logo_url": "", "builder_about": "", "builder_components": json.dumps([]), "builder_metrics": json.dumps([]) }) self.__context.push({ "page_title": _("Status Page Builder · %s") % self.__context.get( "app_name", os.getenv("APP_NAME", "Silverback")), "groups": self.__format_groups(self.__component.get_all_groups()), "components": self.__format_components(self.__component.get_all()), "metrics": self.__format_metrics(self.__metric.get_all()) }) self.__context.push({ "builder_components": json.loads(str(self.__context.get("builder_components"))), "builder_metrics": json.loads(str(self.__context.get("builder_metrics"))) }) return render(request, self.template_name, self.__context.get()) def __format_components(self, components): components_list = [] for component in components: components_list.append({ "id": "c-%d" % component.id, "name": component.name }) return components_list def __format_groups(self, groups): groups_list = [] for group in groups: groups_list.append({"id": "g-%d" % group.id, "name": group.name}) return groups_list def __format_metrics(self, metrics): metrics_list = [] for metric in metrics: metrics_list.append({ "id": "m-%d" % metric.id, "title": metric.title }) return metrics_list
class IncidentUpdateView(View): """Incident Update View Page Controller""" template_name = 'templates/admin/incident/update/view.html' @login_if_not_authenticated 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()) def __format_components(self, components): components_list = [] for component in components: components_list.append({ "id": component.id, "name": component.name }) return components_list def __format_affected_components(self, affected_components): affected_components_list = [] for affected_component in affected_components: affected_components_list.append({ "id": affected_component.id, "component_id": affected_component.component.id, "component_name": affected_component.component.name, "type": affected_component.type }) return affected_components_list