本文整理汇总了Python中notification.models.ScheduledNotification类的典型用法代码示例。如果您正苦于以下问题:Python ScheduledNotification类的具体用法?Python ScheduledNotification怎么用?Python ScheduledNotification使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了ScheduledNotification类的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: forward_incident
def forward_incident(request):
try:
with transaction.atomic():
incident = Incident.objects.get(id=request.POST['id'])
user = User.objects.get(id=request.POST['user_id'])
ScheduledNotification.remove_all_for_incident(incident)
NotificationHelper.notify_user_about_incident(incident, user)
event_log_message = "%s changed assignee of incident : %s to %s" % (
request.user.username, incident.incident_key, user.username)
event_log = EventLog()
event_log.user = request.user
event_log.action = "forward"
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 Incident.DoesNotExist:
messages.error(request, 'Incident not found')
return HttpResponseRedirect(request.POST['url'])
except User.DoesNotExist:
messages.error(request, 'Incident not found')
return HttpResponseRedirect(request.POST['url'])
except ValidationError as e:
messages.error(request, e.messages)
return HttpResponseRedirect(request.POST['url'])
示例2: silence
def silence(request, incident_id):
try:
incident = Incident.objects.get(id=incident_id)
silence_for = request.POST.get('silence_for')
url = request.POST.get("url")
if IncidentSilenced.objects.filter(incident=incident).count() < 1:
silenced_incident = IncidentSilenced()
silenced_incident.incident = incident
silenced_incident.silenced_until = timezone.now(
) + timezone.timedelta(hours=int(silence_for))
silenced_incident.silenced = True
silenced_incident.save()
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
event_log.action = 'silence_incident'
event_log.user = request.user
event_log.service_key = incident.service_key
event_log.data = event_log_message
event_log.occurred_at = timezone.now()
event_log.save()
ScheduledNotification.remove_all_for_incident(incident)
incident.event_type = Incident.ACKNOWLEDGE
incident.save()
unsilence_incident.apply_async(
(incident_id,), eta=silenced_incident.silenced_until)
return HttpResponseRedirect(url)
except Service.DoesNotExist:
raise Http404
示例3: create
def create(self, request, *args, **kwargs):
try:
token = Token.objects.get(key = request.DATA["service_key"])
serviceToken = ServiceTokens.objects.get(token_id=token)
service = serviceToken.service_id
except ServiceTokens.DoesNotExist:
return Response({}, status=status.HTTP_404_NOT_FOUND)
except Token.DoesNotExist:
return Response({}, status=status.HTTP_403_FORBIDDEN)
with transaction.atomic():
try:
incident = Incident.objects.get(incident_key = request.DATA["incident_key"], service_key = service)
event_log_message = "%s api key changed %s from %s to %s" % (serviceToken.name, incident.incident_key, incident.event_type, request.DATA['event_type'])
except (Incident.DoesNotExist, KeyError):
incident = Incident()
try:
incident.incident_key = request.DATA["incident_key"]
except KeyError:
if request.DATA["event_type"] == Incident.TRIGGER:
incident.incident_key = base64.urlsafe_b64encode(uuid.uuid1().bytes).replace('=', '')
else:
response = {}
response["status"] = "failure"
response["message"] = "Mandatory parameter missing"
return Response(response, status=status.HTTP_400_BAD_REQUEST)
incident.service_key = service
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 ):
event_log = EventLog()
event_log.service_key = incident.service_key
event_log.data = event_log_message
event_log.occurred_at = datetime.now()
event_log.save()
incident.event_type = request.DATA["event_type"]
incident.description = request.DATA["description"][:100]
incident.details =request.DATA["details"]
incident.occurred_at = datetime.now()
try:
incident.full_clean()
except ValidationError as e:
return Response({'errors': e.messages}, status=status.HTTP_400_BAD_REQUEST)
incident.save()
if incident.event_type == Incident.TRIGGER:
NotificationHelper.notify_incident(incident)
if incident.event_type == "resolve" or incident.event_type == Incident.ACKNOWLEDGE:
ScheduledNotification.remove_all_for_incident(incident)
headers = self.get_success_headers(request.POST)
response = {}
response["status"] = "success"
response["message"] = "Event processed"
response["incident_key"] = incident.incident_key
return Response(response, status=status.HTTP_201_CREATED, headers=headers)
示例4: generate_notifications_for_user
def generate_notifications_for_user(incident, user, delay=None, preparedmsg = None):
now = timezone.make_aware(datetime.now(), timezone.get_current_timezone())
current_time = now
notifications = []
methods = user.notification_methods.order_by('position').all()
method_index = 0
for method in methods:
if delay is None:
notification_time = incident.service_key.retry * method_index + incident.service_key.escalate_after
else:
notification_time = method_index * delay
notify_at = current_time + timedelta(minutes=notification_time)
notification = ScheduledNotification()
notification.incident = incident
notification.user_to_notify = user
notification.notifier = method.method
notification.send_at = notify_at
if preparedmsg is None:
uri = settings.BASE_URL + "/incidents/details/" + str(incident.id)
notification.message = "A Service is experiencing a problem: " + incident.incident_key + " " + incident.description + ". Handle at: " + uri
else:
notification.message = preparedmsg
notifications.append(notification)
print "Notify %s at %s with method: %s" % (user.username, notify_at, notification.notifier)
method_index += 1
# todo: error handling
return notifications
示例5: _update_type
def _update_type(user, ids, event_type):
for incident_id in ids:
with transaction.atomic():
incident = Incident.objects.get(id=int(incident_id))
logmessage = EventLog()
logmessage.service_key = incident.service_key
logmessage.user = user
logmessage.action = event_type
logmessage.data = "%s changed %s from %s to %s" % (
user.username,
incident.incident_key,
incident.event_type,
event_type)
logmessage.occurred_at = timezone.now()
incident.event_type = event_type
incident.occurred_at = timezone.now()
incident.save()
logmessage.incident_key = incident
logmessage.save()
if incident.event_type == Incident.RESOLVE or incident.event_type == Incident.ACKNOWLEDGE:
ScheduledNotification.remove_all_for_incident(incident)
示例6: update_type
def update_type(request):
try:
with transaction.atomic():
incident = Incident.objects.get(id = request.POST['id'])
logmessage = EventLog()
logmessage.service_key = incident.service_key
logmessage.data = "%s changed %s from %s to %s" % (request.user.username, incident.incident_key, incident.event_type, request.POST['event_type'])
logmessage.occurred_at = datetime.now()
logmessage.save()
incident.event_type = request.POST['event_type']
incident.occurred_at = datetime.now()
incident.save()
if incident.event_type == "resolve" or incident.event_type == Incident.ACKNOWLEDGE:
ScheduledNotification.remove_all_for_incident(incident)
except Incident.DoesNotExist:
messages.error(request, 'Incident not found')
return HttpResponseRedirect(request.POST['url'])
except ValidationError as e:
messages.error(request, e.messages)
return HttpResponseRedirect(request.POST['url'])
示例7: generate_notifications_for_incident
def generate_notifications_for_incident(incident):
now = timezone.make_aware(datetime.now(), timezone.get_current_timezone())
duty_officers = get_escalation_for_service(incident.service_key)
current_time = now
notifications = []
for officer_index, duty_officer in enumerate(duty_officers):
escalation_time = incident.service_key.escalate_after * (officer_index + 1)
escalate_at = current_time + timedelta(minutes=escalation_time)
methods = duty_officer.notification_methods.all()
method_index = 0
for method in methods:
notification_time = incident.service_key.retry * method_index + incident.service_key.escalate_after * officer_index
notify_at = current_time + timedelta(minutes=notification_time)
if notify_at < escalate_at:
notification = ScheduledNotification()
notification.incident = incident
notification.user_to_notify = duty_officer
notification.notifier = method.method
notification.send_at = notify_at
uri = settings.BASE_URL + "/incidents/details/" + str(incident.id)
notification.message = "A Service is experiencing a problem: " + incident.incident_key + " " + incident.description + ". Handle at: " + uri
notifications.append(notification)
print "Notify %s at %s with method: %s" % (duty_officer.username, notify_at, notification.notifier)
else:
break
method_index += 1
# todo: error handling
return notifications