Skip to content

Commit

Permalink
Distinct "internal" Event Types
Browse files Browse the repository at this point in the history
It was ambiguous what the "internal" event type especially stand for. As
currently both of its use cases are some kind of reevaluation - either
during the program's startup or due to an event's age -, it was renamed
to "incident-age".

To ensure database-level stability, the column type was changed from
text to a custom enum.

Closes #162.
  • Loading branch information
oxzi authored and julianbrost committed Jun 14, 2024
1 parent 6b1a76b commit fb1264c
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 16 deletions.
27 changes: 15 additions & 12 deletions internal/event/event.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,17 +37,19 @@ type Event struct {
ID int64 `json:"-"`
}

// Please keep the following types in alphabetically order and, even more important, make sure that the database type
// event_type reflects the same values.
const (
TypeState = "state"
TypeAcknowledgementSet = "acknowledgement-set"
TypeAcknowledgementCleared = "acknowledgement-cleared"
TypeInternal = "internal"
TypeAcknowledgementSet = "acknowledgement-set"
TypeCustom = "custom"
TypeDowntimeEnd = "downtime-end"
TypeDowntimeRemoved = "downtime-removed"
TypeDowntimeStart = "downtime-start"
TypeDowntimeEnd = "downtime-end"
TypeCustom = "custom"
TypeFlappingStart = "flapping-start"
TypeFlappingEnd = "flapping-end"
TypeFlappingStart = "flapping-start"
TypeIncidentAge = "incident-age"
TypeState = "state"
)

// Validate validates the current event state.
Expand All @@ -68,16 +70,17 @@ func (e *Event) Validate() error {
switch e.Type {
case "":
return fmt.Errorf("invalid event: 'type' must not be empty")
case TypeState,
TypeAcknowledgementSet,
case
TypeAcknowledgementCleared,
TypeInternal,
TypeAcknowledgementSet,
TypeCustom,
TypeDowntimeEnd,
TypeDowntimeRemoved,
TypeDowntimeStart,
TypeDowntimeEnd,
TypeCustom,
TypeFlappingEnd,
TypeFlappingStart,
TypeFlappingEnd:
TypeIncidentAge,
TypeState:
return nil
default:
return fmt.Errorf("invalid event: unsupported event type %q", e.Type)
Expand Down
2 changes: 1 addition & 1 deletion internal/incident/incident.go
Original file line number Diff line number Diff line change
Expand Up @@ -455,8 +455,8 @@ func (i *Incident) evaluateEscalations(eventTime time.Time) ([]*rule.Escalation,
i.logger.Info("Reevaluating escalations")

i.RetriggerEscalations(&event.Event{
Type: event.TypeInternal,
Time: nextEvalAt,
Type: event.TypeIncidentAge,
Message: fmt.Sprintf("Incident reached age %v", nextEvalAt.Sub(i.StartedAt.Time())),
})
})
Expand Down
4 changes: 2 additions & 2 deletions internal/incident/incidents.go
Original file line number Diff line number Diff line change
Expand Up @@ -128,8 +128,8 @@ func LoadOpenIncidents(ctx context.Context, db *database.DB, logger *logging.Log

i.RetriggerEscalations(&event.Event{
Time: time.Now(),
Type: event.TypeInternal,
Message: "Incident reevaluation at daemon startup",
Type: event.TypeIncidentAge,
Message: fmt.Sprintf("Incident reached age %v (daemon was restarted)", time.Since(i.StartedAt.Time())),
})
}

Expand Down
14 changes: 13 additions & 1 deletion schema/pgsql/schema.sql
Original file line number Diff line number Diff line change
Expand Up @@ -219,13 +219,25 @@ CREATE TABLE object_extra_tag (
CONSTRAINT pk_object_extra_tag PRIMARY KEY (object_id, tag)
);

CREATE TYPE event_type AS ENUM (
'acknowledgement-cleared',
'acknowledgement-set',
'custom',
'downtime-end',
'downtime-removed',
'downtime-start',
'flapping-end',
'flapping-start',
'incident-age',
'state'
);
CREATE TYPE severity AS ENUM ('ok', 'debug', 'info', 'notice', 'warning', 'err', 'crit', 'alert', 'emerg');

CREATE TABLE event (
id bigserial,
time bigint NOT NULL,
object_id bytea NOT NULL REFERENCES object(id),
type text NOT NULL,
type event_type NOT NULL,
severity severity,
message text,
username citext,
Expand Down
16 changes: 16 additions & 0 deletions schema/pgsql/upgrades/030.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
CREATE TYPE event_type AS ENUM (
'acknowledgement-cleared',
'acknowledgement-set',
'custom',
'downtime-end',
'downtime-removed',
'downtime-start',
'flapping-end',
'flapping-start',
'incident-age',
'state'
);

UPDATE event SET type = 'incident-age' WHERE type = 'internal';

ALTER TABLE event ALTER COLUMN type TYPE event_type USING type::event_type;

0 comments on commit fb1264c

Please sign in to comment.