/ cabot / urls.py
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      ]