Skip to content

Commit

Permalink
Determine whether an incident is new by its StartedAt timestamp
Browse files Browse the repository at this point in the history
We don't need to pass this info around methods since we can easily
determine whether an incident is new based on its `StartedAt` timestamp.

Co-Authored-By: Sukhwinder Dhillon <sukhwinder.dhillon@icinga.com>
  • Loading branch information
2 people authored and julianbrost committed May 17, 2024
1 parent 28c02af commit 904980c
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 13 deletions.
7 changes: 4 additions & 3 deletions internal/incident/incident.go
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ func (i *Incident) IsNotifiable(role ContactRole) bool {
}

// ProcessEvent processes the given event for the current incident in an own transaction.
func (i *Incident) ProcessEvent(ctx context.Context, ev *event.Event, created bool) error {
func (i *Incident) ProcessEvent(ctx context.Context, ev *event.Event) error {
i.Lock()
defer i.Unlock()

Expand All @@ -131,7 +131,8 @@ func (i *Incident) ProcessEvent(ctx context.Context, ev *event.Event, created bo
return errors.New("can't insert event and fetch its ID")
}

if created {
isNew := i.StartedAt.Time().IsZero()
if isNew {
err = i.processIncidentOpenedEvent(ctx, tx, ev)
if err != nil {
return err
Expand All @@ -148,7 +149,7 @@ func (i *Incident) ProcessEvent(ctx context.Context, ev *event.Event, created bo

switch ev.Type {
case event.TypeState:
if !created {
if !isNew {
if err := i.processSeverityChangedEvent(ctx, tx, ev); err != nil {
return err
}
Expand Down
19 changes: 9 additions & 10 deletions internal/incident/incidents.go
Original file line number Diff line number Diff line change
Expand Up @@ -145,32 +145,31 @@ func LoadOpenIncidents(ctx context.Context, db *icingadb.DB, logger *logging.Log
func GetCurrent(
ctx context.Context, db *icingadb.DB, obj *object.Object, logger *logging.Logger, runtimeConfig *config.RuntimeConfig,
create bool,
) (*Incident, bool, error) {
) (*Incident, error) {
currentIncidentsMu.Lock()
defer currentIncidentsMu.Unlock()

created := false
currentIncident := currentIncidents[obj]

if currentIncident == nil && create {
created = true

incidentLogger := logger.With(zap.String("object", obj.DisplayName()))
currentIncident = NewIncident(db, obj, runtimeConfig, incidentLogger)

currentIncidents[obj] = currentIncident
}

if !created && currentIncident != nil {
if currentIncident != nil {
currentIncident.Lock()
defer currentIncident.Unlock()

if err := currentIncident.restoreRecipients(ctx); err != nil {
return nil, false, err
if !currentIncident.StartedAt.Time().IsZero() {
if err := currentIncident.restoreRecipients(ctx); err != nil {
return nil, err
}
}
}

return currentIncident, created, nil
return currentIncident, nil
}

func RemoveCurrent(obj *object.Object) {
Expand Down Expand Up @@ -215,7 +214,7 @@ func ProcessEvent(
}

createIncident := ev.Severity != event.SeverityNone && ev.Severity != event.SeverityOK
currentIncident, created, err := GetCurrent(
currentIncident, err := GetCurrent(
ctx,
db,
obj,
Expand All @@ -239,5 +238,5 @@ func ProcessEvent(
}
}

return currentIncident.ProcessEvent(ctx, ev, created)
return currentIncident.ProcessEvent(ctx, ev)
}

0 comments on commit 904980c

Please sign in to comment.