Browse Source

use epoch to compare timestamp

bergquist 7 years ago
parent
commit
c21938d4c4

+ 2 - 2
pkg/models/alert_notifications.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
 }
 

+ 1 - 1
pkg/services/alerting/notifier.go

@@ -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,
 				}
 

+ 3 - 3
pkg/services/alerting/notifiers/base.go

@@ -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 {

+ 1 - 2
pkg/services/alerting/notifiers/base_test.go

@@ -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)
 		}
 	}

+ 17 - 17
pkg/services/sqlstore/migrations/alert_mig.go

@@ -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},
-	}))
 }