urls.py
1 from django.conf.urls import include, url 2 from django.conf import settings 3 from cabot.cabotapp.views import ( 4 about, run_status_check, graphite_api_data, checks_run_recently, 5 duplicate_icmp_check, duplicate_graphite_check, duplicate_http_check, duplicate_jenkins_check, 6 duplicate_instance, acknowledge_alert, remove_acknowledgement, 7 GraphiteCheckCreateView, GraphiteCheckUpdateView, 8 HttpCheckCreateView, HttpCheckUpdateView, 9 ICMPCheckCreateView, ICMPCheckUpdateView, 10 JenkinsCheckCreateView, JenkinsCheckUpdateView, 11 StatusCheckDeleteView, StatusCheckListView, StatusCheckDetailView, 12 StatusCheckResultDetailView, StatusCheckReportView, UserProfileUpdateAlert, 13 PluginSettingsView, AlertTestView, AlertTestPluginView, SetupView, OnCallView) 14 15 from cabot.cabotapp.views import (InstanceListView, InstanceDetailView, 16 InstanceUpdateView, InstanceCreateView, InstanceDeleteView, 17 ServiceListView, ServicePublicListView, ServiceDetailView, 18 ServiceUpdateView, ServiceCreateView, ServiceDeleteView, 19 UserProfileUpdateView, ShiftListView, subscriptions) 20 21 from cabot.cabotapp.utils import cabot_needs_setup 22 23 from cabot import rest_urls 24 from rest_framework.documentation import include_docs_urls 25 26 from django.contrib import admin 27 from django.views.generic.base import RedirectView 28 from django.views.static import serve 29 from django.shortcuts import redirect 30 from django.contrib.auth.views import login, logout, password_reset, password_reset_done, password_reset_confirm 31 admin.autodiscover() 32 33 from importlib import import_module 34 import logging 35 import os 36 37 logger = logging.getLogger(__name__) 38 39 def first_time_setup_wrapper(func): 40 def wrapper(*args, **kwargs): 41 if cabot_needs_setup(): 42 return redirect('first_time_setup') 43 else: 44 return func(*args, **kwargs) 45 return wrapper 46 47 48 def home_authentication_switcher(request, *args, **kwargs): 49 if cabot_needs_setup(): 50 return redirect('first_time_setup') 51 if not request.user.is_authenticated(): 52 return ServicePublicListView.as_view()(request, *args, **kwargs) 53 else: 54 return ServiceListView.as_view()(request, *args, **kwargs) 55 56 urlpatterns = [ 57 # for the password reset views 58 url('^', include('django.contrib.auth.urls')), 59 60 url(r'^(?P<path>favicon\.ico)$', serve, name='favicon', 61 kwargs={'document_root': os.path.join(settings.STATIC_ROOT, 'arachnys/img')}), 62 63 url(r'^$', view=home_authentication_switcher, 64 name='dashboard'), 65 url(r'^subscriptions/', view=subscriptions, 66 name='subscriptions'), 67 url(r'^accounts/login/', view=first_time_setup_wrapper(login), name='login'), 68 url(r'^accounts/logout/', view=logout, name='logout'), 69 url(r'^setup/', view=SetupView.as_view(), name='first_time_setup'), 70 url(r'^accounts/password-reset/', 71 view=password_reset, name='password-reset'), 72 url(r'^accounts/password-reset-done/', 73 view=password_reset_done, name='password-reset-done'), 74 url(r'^accounts/password-reset-confirm/', 75 view=password_reset_confirm, name='password-reset-confirm'), 76 url(r'^status/', view=checks_run_recently, 77 name='system-status'), 78 url(r'^about/', view=about, 79 name='about-cabot'), 80 81 url(r'^services/', view=ServiceListView.as_view(), 82 name='services'), 83 url(r'^public/', view=ServicePublicListView.as_view(), 84 name='public'), 85 url(r'^service/create/', view=ServiceCreateView.as_view(), 86 name='create-service'), 87 url(r'^service/update/(?P<pk>\d+)/', 88 view=ServiceUpdateView.as_view(), name='update-service'), 89 url(r'^service/delete/(?P<pk>\d+)/', 90 view=ServiceDeleteView.as_view(), name='delete-service'), 91 url(r'^service/(?P<pk>\d+)/', 92 view=ServiceDetailView.as_view(), name='service'), 93 url(r'^service/acknowledge_alert/(?P<pk>\d+)/', 94 view=acknowledge_alert, name='acknowledge-alert'), 95 url(r'^service/remove_acknowledgement/(?P<pk>\d+)/', 96 view=remove_acknowledgement, name='remove-acknowledgement'), 97 98 url(r'^instances/', view=InstanceListView.as_view(), 99 name='instances'), 100 url(r'^instance/create/', view=InstanceCreateView.as_view(), 101 name='create-instance'), 102 url(r'^instance/update/(?P<pk>\d+)/', 103 view=InstanceUpdateView.as_view(), name='update-instance'), 104 url(r'^instance/duplicate/(?P<pk>\d+)/', 105 view=duplicate_instance, name='duplicate-instance'), 106 url(r'^instance/delete/(?P<pk>\d+)/', 107 view=InstanceDeleteView.as_view(), name='delete-instance'), 108 url(r'^instance/(?P<pk>\d+)/', 109 view=InstanceDetailView.as_view(), name='instance'), 110 111 url(r'^checks/$', view=StatusCheckListView.as_view(), 112 name='checks'), 113 url(r'^check/run/(?P<pk>\d+)/', 114 view=run_status_check, name='run-check'), 115 url(r'^check/delete/(?P<pk>\d+)/', 116 view=StatusCheckDeleteView.as_view(), name='delete-check'), 117 url(r'^check/(?P<pk>\d+)/', 118 view=StatusCheckDetailView.as_view(), name='check'), 119 url(r'^checks/report/$', 120 view=StatusCheckReportView.as_view(), name='checks-report'), 121 122 url(r'^icmpcheck/create/', view=ICMPCheckCreateView.as_view(), 123 name='create-icmp-check'), 124 url(r'^icmpcheck/update/(?P<pk>\d+)/', 125 view=ICMPCheckUpdateView.as_view(), name='update-icmp-check'), 126 url(r'^icmpcheck/duplicate/(?P<pk>\d+)/', 127 view=duplicate_icmp_check, name='duplicate-icmp-check'), 128 url(r'^graphitecheck/create/', 129 view=GraphiteCheckCreateView.as_view(), name='create-graphite-check'), 130 url(r'^graphitecheck/update/(?P<pk>\d+)/', 131 view=GraphiteCheckUpdateView.as_view(), name='update-graphite-check'), 132 url(r'^graphitecheck/duplicate/(?P<pk>\d+)/', 133 view=duplicate_graphite_check, name='duplicate-graphite-check'), 134 url(r'^httpcheck/create/', view=HttpCheckCreateView.as_view(), 135 name='create-http-check'), 136 url(r'^httpcheck/update/(?P<pk>\d+)/', 137 view=HttpCheckUpdateView.as_view(), name='update-http-check'), 138 url(r'^httpcheck/duplicate/(?P<pk>\d+)/', 139 view=duplicate_http_check, name='duplicate-http-check'), 140 url(r'^jenkins_check/create/', view=JenkinsCheckCreateView.as_view(), 141 name='create-jenkins-check'), 142 url(r'^jenkins_check/update/(?P<pk>\d+)/', 143 view=JenkinsCheckUpdateView.as_view(), name='update-jenkins-check'), 144 url(r'^jenkins_check/duplicate/(?P<pk>\d+)/', 145 view=duplicate_jenkins_check, 146 name='duplicate-jenkins-check'), 147 148 url(r'^result/(?P<pk>\d+)/', 149 view=StatusCheckResultDetailView.as_view(), name='result'), 150 url(r'^shifts/', view=ShiftListView.as_view(), 151 name='shifts'), 152 url(r'^graphite/', view=graphite_api_data, 153 name='graphite-data'), 154 url(r'^user/(?P<pk>\d+)/profile/$', 155 view=UserProfileUpdateView.as_view(), name='user-profile'), 156 url(r'^alert-test/$', 157 view=AlertTestView.as_view(), name='alert-test'), 158 url(r'^alert-test-plugin/$', 159 view=AlertTestPluginView.as_view(), name='alert-test-plugin'), 160 url(r'^plugin-settings/$', 161 view=RedirectView.as_view(url='global/', permanent=False), name='plugin-settings-global'), 162 url(r'^plugin-settings/(?P<plugin_name>.+)/$', 163 view=PluginSettingsView.as_view(), name='plugin-settings'), 164 url(r'^user/(?P<pk>\d+)/profile/(?P<alerttype>.+)/', 165 view=UserProfileUpdateAlert.as_view(), name='update-alert-user-data'), 166 url(r'^admin/', include(admin.site.urls)), 167 # Comment below line to disable browsable rest api 168 url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')), 169 url(r'^api/', include(rest_urls.router.urls)), 170 url(r'^api/oncall', view=OnCallView.as_view(), name='oncall'), 171 url(r'^docs/', include_docs_urls(title="Cabot API", description="An API to create and view Cabot checks and services.")) 172 ] 173 174 def append_plugin_urls(): 175 """ 176 Appends plugin specific URLs to the urlpatterns variable. 177 """ 178 global urlpatterns 179 for plugin in settings.CABOT_PLUGINS_ENABLED_PARSED: 180 try: 181 _module = import_module('%s.urls' % plugin) 182 except ImportError: 183 pass 184 else: 185 urlpatterns += [ 186 url(r'^plugins/%s/' % plugin, include('%s.urls' % plugin)) 187 ] 188 189 190 append_plugin_urls() 191 192 if settings.AUTH_SOCIAL: 193 urlpatterns += [ 194 url('', include('social_django.urls', namespace='social')) 195 ] 196 197 if settings.URL_PREFIX.strip('/'): 198 urlpatterns = [ 199 url(r'^%s/' % settings.URL_PREFIX.strip('/'), include(urlpatterns)) 200 ]