use epoch to compare timestamp

pull/12145/head
bergquist 8 years ago
parent 72224dbe37
commit c21938d4c4
  1. 4
      pkg/models/alert_notifications.go
  2. 2
      pkg/services/alerting/notifier.go
  3. 6
      pkg/services/alerting/notifiers/base.go
  4. 3
      pkg/services/alerting/notifiers/base_test.go
  5. 34
      pkg/services/sqlstore/migrations/alert_mig.go

@ -80,7 +80,7 @@ type AlertNotificationJournal struct {
OrgId int64
AlertId int64
NotifierId int64
SentAt time.Time
SentAt int64
Success bool
}
@ -88,7 +88,7 @@ type RecordNotificationJournalCommand struct {
OrgId int64
AlertId int64
NotifierId int64
SentAt time.Time
SentAt int64
Success bool
}

@ -87,7 +87,7 @@ func (n *notificationService) sendNotifications(evalContext *EvalContext, notifi
OrgId: evalContext.Rule.OrgId,
AlertId: evalContext.Rule.Id,
NotifierId: not.GetNotifierId(),
SentAt: time.Now(),
SentAt: time.Now().Unix(),
Success: success,
}

@ -41,14 +41,14 @@ func NewNotifierBase(model *models.AlertNotification) NotifierBase {
}
}
func defaultShouldNotify(context *alerting.EvalContext, sendReminder bool, frequency time.Duration, lastNotify *time.Time) bool {
func defaultShouldNotify(context *alerting.EvalContext, sendReminder bool, frequency time.Duration, lastNotify time.Time) bool {
// Only notify on state change.
if context.PrevAlertState == context.Rule.State && !sendReminder {
return false
}
// Do not notify if interval has not elapsed
if sendReminder && lastNotify != nil && lastNotify.Add(frequency).After(time.Now()) {
if sendReminder && !lastNotify.IsZero() && lastNotify.Add(frequency).After(time.Now()) {
return false
}
@ -86,7 +86,7 @@ func (n *NotifierBase) ShouldNotify(c *alerting.EvalContext) bool {
return true
}
return defaultShouldNotify(c, n.SendReminder, n.Frequency, &cmd.Result.SentAt)
return defaultShouldNotify(c, n.SendReminder, n.Frequency, time.Unix(cmd.Result.SentAt, 0))
}
func (n *NotifierBase) GetType() string {

@ -65,8 +65,7 @@ func TestShouldSendAlertNotification(t *testing.T) {
State: tc.newState,
})
evalContext.Rule.State = tc.prevState
timeNow := time.Now()
if defaultShouldNotify(evalContext, true, 0, &timeNow) != tc.expected {
if defaultShouldNotify(evalContext, true, 0, time.Now()) != tc.expected {
t.Errorf("failed %s. expected %+v to return %v", tc.name, tc, tc.expected)
}
}

@ -74,6 +74,22 @@ func addAlertMigrations(mg *Migrator) {
mg.AddMigration("add index alert_notification org_id & name", NewAddIndexMigration(alert_notification, alert_notification.Indices[0]))
mg.AddMigration("Update alert table charset", NewTableCharsetMigration("alert", []*Column{
{Name: "name", Type: DB_NVarchar, Length: 255, Nullable: false},
{Name: "message", Type: DB_Text, Nullable: false},
{Name: "state", Type: DB_NVarchar, Length: 190, Nullable: false},
{Name: "settings", Type: DB_Text, Nullable: false},
{Name: "severity", Type: DB_Text, Nullable: false},
{Name: "execution_error", Type: DB_Text, Nullable: false},
{Name: "eval_data", Type: DB_Text, Nullable: true},
}))
mg.AddMigration("Update alert_notification table charset", NewTableCharsetMigration("alert_notification", []*Column{
{Name: "name", Type: DB_NVarchar, Length: 190, Nullable: false},
{Name: "type", Type: DB_NVarchar, Length: 255, Nullable: false},
{Name: "settings", Type: DB_Text, Nullable: false},
}))
notification_journal := Table{
Name: "alert_notification_journal",
Columns: []*Column{
@ -81,7 +97,7 @@ func addAlertMigrations(mg *Migrator) {
{Name: "org_id", Type: DB_BigInt, Nullable: false},
{Name: "alert_id", Type: DB_BigInt, Nullable: false},
{Name: "notifier_id", Type: DB_BigInt, Nullable: false},
{Name: "sent_at", Type: DB_DateTime, Nullable: false},
{Name: "sent_at", Type: DB_BigInt, Nullable: false},
{Name: "success", Type: DB_Bool, Nullable: false},
},
Indices: []*Index{
@ -91,20 +107,4 @@ func addAlertMigrations(mg *Migrator) {
mg.AddMigration("create notification_journal table v1", NewAddTableMigration(notification_journal))
mg.AddMigration("add index notification_journal org_id & alert_id & notifier_id", NewAddIndexMigration(notification_journal, notification_journal.Indices[0]))
mg.AddMigration("Update alert table charset", NewTableCharsetMigration("alert", []*Column{
{Name: "name", Type: DB_NVarchar, Length: 255, Nullable: false},
{Name: "message", Type: DB_Text, Nullable: false},
{Name: "state", Type: DB_NVarchar, Length: 190, Nullable: false},
{Name: "settings", Type: DB_Text, Nullable: false},
{Name: "severity", Type: DB_Text, Nullable: false},
{Name: "execution_error", Type: DB_Text, Nullable: false},
{Name: "eval_data", Type: DB_Text, Nullable: true},
}))
mg.AddMigration("Update alert_notification table charset", NewTableCharsetMigration("alert_notification", []*Column{
{Name: "name", Type: DB_NVarchar, Length: 190, Nullable: false},
{Name: "type", Type: DB_NVarchar, Length: 255, Nullable: false},
{Name: "settings", Type: DB_Text, Nullable: false},
}))
}

Loading…
Cancel
Save