database: changed Notification interface name
This commit is contained in:
parent
6c69377343
commit
ff9303905b
@ -167,9 +167,9 @@ type Session interface {
|
|||||||
// always considered first page.
|
// always considered first page.
|
||||||
FindVulnerabilityNotification(name string, limit int, oldVulnerabilityPage pagination.Token, newVulnerabilityPage pagination.Token) (noti VulnerabilityNotificationWithVulnerable, found bool, err error)
|
FindVulnerabilityNotification(name string, limit int, oldVulnerabilityPage pagination.Token, newVulnerabilityPage pagination.Token) (noti VulnerabilityNotificationWithVulnerable, found bool, err error)
|
||||||
|
|
||||||
// MarkNotificationNotified marks a Notification as notified now, assuming
|
// MarkNotificationAsRead marks a Notification as notified now, assuming
|
||||||
// the requested notification is in the database.
|
// the requested notification is in the database.
|
||||||
MarkNotificationNotified(name string) error
|
MarkNotificationAsRead(name string) error
|
||||||
|
|
||||||
// DeleteNotification removes a Notification in the database.
|
// DeleteNotification removes a Notification in the database.
|
||||||
DeleteNotification(name string) error
|
DeleteNotification(name string) error
|
||||||
|
@ -43,7 +43,7 @@ type MockSession struct {
|
|||||||
FctFindNewNotification func(lastNotified time.Time) (NotificationHook, bool, error)
|
FctFindNewNotification func(lastNotified time.Time) (NotificationHook, bool, error)
|
||||||
FctFindVulnerabilityNotification func(name string, limit int, oldPage pagination.Token, newPage pagination.Token) (
|
FctFindVulnerabilityNotification func(name string, limit int, oldPage pagination.Token, newPage pagination.Token) (
|
||||||
vuln VulnerabilityNotificationWithVulnerable, ok bool, err error)
|
vuln VulnerabilityNotificationWithVulnerable, ok bool, err error)
|
||||||
FctMarkNotificationNotified func(name string) error
|
FctMarkNotificationAsRead func(name string) error
|
||||||
FctDeleteNotification func(name string) error
|
FctDeleteNotification func(name string) error
|
||||||
FctUpdateKeyValue func(key, value string) error
|
FctUpdateKeyValue func(key, value string) error
|
||||||
FctFindKeyValue func(key string) (string, bool, error)
|
FctFindKeyValue func(key string) (string, bool, error)
|
||||||
@ -186,9 +186,9 @@ func (ms *MockSession) FindVulnerabilityNotification(name string, limit int, old
|
|||||||
panic("required mock function not implemented")
|
panic("required mock function not implemented")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ms *MockSession) MarkNotificationNotified(name string) error {
|
func (ms *MockSession) MarkNotificationAsRead(name string) error {
|
||||||
if ms.FctMarkNotificationNotified != nil {
|
if ms.FctMarkNotificationAsRead != nil {
|
||||||
return ms.FctMarkNotificationNotified(name)
|
return ms.FctMarkNotificationAsRead(name)
|
||||||
}
|
}
|
||||||
panic("required mock function not implemented")
|
panic("required mock function not implemented")
|
||||||
}
|
}
|
||||||
|
@ -289,23 +289,23 @@ func (tx *pgSession) FindVulnerabilityNotification(name string, limit int, oldPa
|
|||||||
return noti, true, nil
|
return noti, true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (tx *pgSession) MarkNotificationNotified(name string) error {
|
func (tx *pgSession) MarkNotificationAsRead(name string) error {
|
||||||
if name == "" {
|
if name == "" {
|
||||||
return commonerr.NewBadRequestError("Empty notification name is not allowed")
|
return commonerr.NewBadRequestError("Empty notification name is not allowed")
|
||||||
}
|
}
|
||||||
|
|
||||||
r, err := tx.Exec(updatedNotificationNotified, name)
|
r, err := tx.Exec(updatedNotificationAsRead, name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return handleError("updatedNotificationNotified", err)
|
return handleError("updatedNotificationAsRead", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
affected, err := r.RowsAffected()
|
affected, err := r.RowsAffected()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return handleError("updatedNotificationNotified", err)
|
return handleError("updatedNotificationAsRead", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if affected <= 0 {
|
if affected <= 0 {
|
||||||
return handleError("updatedNotificationNotified", errNotificationNotFound)
|
return handleError("updatedNotificationAsRead", errNotificationNotFound)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -200,7 +200,7 @@ func TestFindNewNotification(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// can't find the notified
|
// can't find the notified
|
||||||
assert.Nil(t, tx.MarkNotificationNotified("test"))
|
assert.Nil(t, tx.MarkNotificationAsRead("test"))
|
||||||
// if the notified time is before
|
// if the notified time is before
|
||||||
noti, ok, err = tx.FindNewNotification(time.Now().Add(-time.Duration(10 * time.Second)))
|
noti, ok, err = tx.FindNewNotification(time.Now().Add(-time.Duration(10 * time.Second)))
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
@ -225,16 +225,16 @@ func TestFindNewNotification(t *testing.T) {
|
|||||||
assert.False(t, ok)
|
assert.False(t, ok)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestMarkNotificationNotified(t *testing.T) {
|
func TestMarkNotificationAsRead(t *testing.T) {
|
||||||
datastore, tx := openSessionForTest(t, "MarkNotificationNotified", true)
|
datastore, tx := openSessionForTest(t, "MarkNotificationAsRead", true)
|
||||||
defer closeTest(t, datastore, tx)
|
defer closeTest(t, datastore, tx)
|
||||||
|
|
||||||
// invalid case: notification doesn't exist
|
// invalid case: notification doesn't exist
|
||||||
assert.NotNil(t, tx.MarkNotificationNotified("non-existing"))
|
assert.NotNil(t, tx.MarkNotificationAsRead("non-existing"))
|
||||||
// valid case
|
// valid case
|
||||||
assert.Nil(t, tx.MarkNotificationNotified("test"))
|
assert.Nil(t, tx.MarkNotificationAsRead("test"))
|
||||||
// valid case
|
// valid case
|
||||||
assert.Nil(t, tx.MarkNotificationNotified("test"))
|
assert.Nil(t, tx.MarkNotificationAsRead("test"))
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestDeleteNotification(t *testing.T) {
|
func TestDeleteNotification(t *testing.T) {
|
||||||
|
@ -168,7 +168,7 @@ const (
|
|||||||
INSERT INTO Vulnerability_Notification(name, created_at, old_vulnerability_id, new_vulnerability_id)
|
INSERT INTO Vulnerability_Notification(name, created_at, old_vulnerability_id, new_vulnerability_id)
|
||||||
VALUES ($1, $2, $3, $4)`
|
VALUES ($1, $2, $3, $4)`
|
||||||
|
|
||||||
updatedNotificationNotified = `
|
updatedNotificationAsRead = `
|
||||||
UPDATE Vulnerability_Notification
|
UPDATE Vulnerability_Notification
|
||||||
SET notified_at = CURRENT_TIMESTAMP
|
SET notified_at = CURRENT_TIMESTAMP
|
||||||
WHERE name = $1`
|
WHERE name = $1`
|
||||||
|
@ -16,7 +16,6 @@ package pgsql
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"encoding/json"
|
|
||||||
"errors"
|
"errors"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -220,17 +219,6 @@ func (tx *pgSession) insertVulnerabilities(vulnerabilities []database.Vulnerabil
|
|||||||
return vulnIDs, nil
|
return vulnIDs, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// castMetadata marshals the given database.MetadataMap and unmarshals it again to make sure that
|
|
||||||
// everything has the interface{} type.
|
|
||||||
// It is required when comparing crafted MetadataMap against MetadataMap that we get from the
|
|
||||||
// database.
|
|
||||||
func castMetadata(m database.MetadataMap) database.MetadataMap {
|
|
||||||
c := make(database.MetadataMap)
|
|
||||||
j, _ := json.Marshal(m)
|
|
||||||
json.Unmarshal(j, &c)
|
|
||||||
return c
|
|
||||||
}
|
|
||||||
|
|
||||||
func (tx *pgSession) lockFeatureVulnerabilityCache() error {
|
func (tx *pgSession) lockFeatureVulnerabilityCache() error {
|
||||||
_, err := tx.Exec(lockVulnerabilityAffects)
|
_, err := tx.Exec(lockVulnerabilityAffects)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -93,7 +93,7 @@ func RunNotifier(config *notification.Config, datastore database.Datastore, stop
|
|||||||
go func() {
|
go func() {
|
||||||
success, interrupted := handleTask(*notification, stopper, config.Attempts)
|
success, interrupted := handleTask(*notification, stopper, config.Attempts)
|
||||||
if success {
|
if success {
|
||||||
err := markNotificationNotified(datastore, notification.Name)
|
err := markNotificationAsRead(datastore, notification.Name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.WithError(err).Error("Failed to mark notification notified")
|
log.WithError(err).Error("Failed to mark notification notified")
|
||||||
}
|
}
|
||||||
@ -196,14 +196,14 @@ func findNewNotification(datastore database.Datastore, renotifyInterval time.Dur
|
|||||||
return tx.FindNewNotification(time.Now().Add(-renotifyInterval))
|
return tx.FindNewNotification(time.Now().Add(-renotifyInterval))
|
||||||
}
|
}
|
||||||
|
|
||||||
func markNotificationNotified(datastore database.Datastore, name string) error {
|
func markNotificationAsRead(datastore database.Datastore, name string) error {
|
||||||
tx, err := datastore.Begin()
|
tx, err := datastore.Begin()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.WithError(err).Error("an error happens when beginning database transaction")
|
log.WithError(err).Error("an error happens when beginning database transaction")
|
||||||
}
|
}
|
||||||
defer tx.Rollback()
|
defer tx.Rollback()
|
||||||
|
|
||||||
if err := tx.MarkNotificationNotified(name); err != nil {
|
if err := tx.MarkNotificationAsRead(name); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return tx.Commit()
|
return tx.Commit()
|
||||||
|
Loading…
Reference in New Issue
Block a user