这是indexloc提供的服务,不要输入任何密码
Skip to content
This repository was archived by the owner on Feb 8, 2019. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 56 additions & 4 deletions openduty/incidents.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,24 @@ class IncidentViewSet(viewsets.ModelViewSet):
queryset = Incident.objects.all()
serializer_class = IncidentSerializer

def is_relevant(self, incident, new_event_type):
"""
Check incident conditions
:param incident: Actual incident
:param new_event_type: Reported event_type
:return: True if relevant else False
"""
# There is already an incident
if incident.event_type:
# True if not acknowleged or type is resolve
return (incident.event_type != Incident.ACKNOWLEDGE or
(incident.event_type == Incident.ACKNOWLEDGE and
new_event_type == Incident.RESOLVE))
# New incident
else:
# True if this is a trigger action
return new_event_type == Incident.TRIGGER

def create(self, request, *args, **kwargs):
try:
token = Token.objects.get(key=request.DATA["service_key"])
Expand Down Expand Up @@ -83,7 +101,7 @@ def create(self, request, *args, **kwargs):
event_log_message = "%s api key created %s with status %s" % (
serviceToken.name, incident.incident_key, request.DATA['event_type'])

if incident.event_type != Incident.ACKNOWLEDGE or (incident.event_type == Incident.ACKNOWLEDGE and request.DATA["event_type"] == Incident.RESOLVE):
if self.is_relevant(incident, request.DATA['event_type']):
event_log = EventLog()
# Anonymous user for testing
if request.user.is_anonymous():
Expand All @@ -110,7 +128,7 @@ def create(self, request, *args, **kwargs):
event_log.action = incident.event_type
event_log.save()
servicesilenced = ServiceSilenced.objects.filter(
service=service).count() > 1
service=service).count() > 0
if incident.event_type == Incident.TRIGGER and not servicesilenced:
NotificationHelper.notify_incident(incident)
if incident.event_type == "resolve" or incident.event_type == Incident.ACKNOWLEDGE:
Expand Down Expand Up @@ -146,12 +164,22 @@ def get_queryset(self):
def details(request, id):
try:
incident = Incident.objects.get(id=id)
try:
service_silenced = ServiceSilenced.objects.get(service=incident.service_key).silenced
except ServiceSilenced.DoesNotExist:
service_silenced = False
try:
is_obj = IncidentSilenced.objects.get(incident=incident)
incident_silenced = str(is_obj.silenced_until - timezone.now()).split(".")[0]
except IncidentSilenced.DoesNotExist:
incident_silenced = False
users = User.objects.all()
history = EventLog.objects.filter(
incident_key=incident).order_by('-occurred_at')
return TemplateResponse(request, 'incidents/details.html', {
'item': incident, 'users': users, 'url': request.get_full_path(),
'history_list': history
'history_list': history, 'service_silenced': service_silenced,
'incident_silenced': incident_silenced
})
except Service.DoesNotExist:
raise Http404
Expand Down Expand Up @@ -252,7 +280,7 @@ def silence(request, incident_id):
) + timezone.timedelta(hours=int(silence_for))
silenced_incident.silenced = True
silenced_incident.save()
event_log_message = "%s silenced the of incident %s for %s hours" % (
event_log_message = "%s silenced incident %s for %s hours" % (
request.user.username, incident.incident_key, silence_for)
event_log = EventLog()
event_log.incident_key = incident
Expand All @@ -270,3 +298,27 @@ def silence(request, incident_id):
return HttpResponseRedirect(url)
except Service.DoesNotExist:
raise Http404

@login_required()
@require_http_methods(["POST"])
def unsilence(request, incident_id):
try:
incident = Incident.objects.get(id = incident_id)
url = request.POST.get("url")
try:
IncidentSilenced.objects.filter(incident=incident).delete()
event_log_message = "%s removed silence from incident %s" % (request.user.username, incident.incident_key)
event_log = EventLog()
event_log.action = 'unsilence_incident'
event_log.user = request.user
event_log.incident_key = incident
event_log.service_key = incident.service_key
event_log.data = event_log_message
event_log.occurred_at = timezone.now()
event_log.save()
except IncidentSilenced.DoesNotExist:
# No need to delete
pass
return HttpResponseRedirect(url)
except Service.DoesNotExist:
raise Http404
Loading