scenario

package
v0.0.0-...-b4a6cbe Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 7, 2026 License: AGPL-3.0 Imports: 44 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type API

type API interface {
	crud.BulkAPI
	DBExport(c *gin.Context)
	ValidateTemplates(c *gin.Context)
	GetTemplateVars(c *gin.Context)
	BulkEnable(c *gin.Context)
	BulkDisable(c *gin.Context)
}

func NewApi

func NewApi(
	store Store,
	mongoExporter dbexport.Exporter,
	errorResponder httperror.Responder,
) API

type Action

type Action struct {
	Type                     string     `bson:"type" json:"type"`
	Comment                  string     `bson:"comment" json:"comment"`
	Parameters               Parameters `bson:"parameters,omitempty" json:"parameters"`
	DropScenarioIfNotMatched bool       `bson:"drop_scenario_if_not_matched" json:"drop_scenario_if_not_matched"`
	EmitTriggerSuccess       bool       `bson:"emit_trigger_success" json:"emit_trigger_success"`
	EmitTriggerFail          bool       `bson:"emit_trigger_fail" json:"emit_trigger_fail"`

	savedpattern.EntityPatternFields `bson:",inline"`
	savedpattern.AlarmPatternFields  `bson:",inline"`
}

type ActionRequest

type ActionRequest struct {
	Type                     string            `` /* 131-byte string literal not displayed */
	Parameters               action.Parameters `json:"parameters"`
	Comment                  string            `json:"comment"`
	DropScenarioIfNotMatched *bool             `json:"drop_scenario_if_not_matched" binding:"required"`
	EmitTriggerSuccess       *bool             `json:"emit_trigger_success" binding:"required"`
	EmitTriggerFail          *bool             `json:"emit_trigger_fail"`

	patternfields.EntityRequest `bson:",inline"`
	patternfields.AlarmRequest  `bson:",inline"`
}

type AggregationResult

type AggregationResult struct {
	Data       []Scenario `bson:"data" json:"data"`
	TotalCount int64      `bson:"total_count" json:"total_count"`
}

func (AggregationResult) GetData

func (r AggregationResult) GetData() any

func (AggregationResult) GetTotal

func (r AggregationResult) GetTotal() int64

type BulkDeleteRequestItem

type BulkDeleteRequestItem struct {
	ID     string `json:"_id" binding:"required"`
	Author string `json:"author" swaggerignore:"true"`
}

type BulkToggleRequestItem

type BulkToggleRequestItem struct {
	ID     string `json:"_id" binding:"required"`
	Author string `json:"author" swaggerignore:"true"`
}

type BulkUpdateRequestItem

type BulkUpdateRequestItem struct {
	EditRequest
	ID string `json:"_id" binding:"required"`
}

type CreateRequest

type CreateRequest struct {
	EditRequest
	ID string `json:"_id" binding:"id"`
}

type EditRequest

type EditRequest struct {
	Name                 string                     `json:"name" binding:"required,max=255"`
	Author               string                     `json:"author" swaggerignore:"true"`
	Enabled              *bool                      `json:"enabled" binding:"required"`
	Priority             int64                      `json:"priority" binding:"min=0"`
	Triggers             []Trigger                  `json:"triggers" binding:"required,notblank,dive"`
	DisableDuringPeriods []string                   `json:"disable_during_periods" binding:"dive,oneof=maintenance pause inactive"`
	Delay                *datetime.DurationWithUnit `json:"delay"`
	Actions              []ActionRequest            `json:"actions" binding:"required,notblank,dive"`
}

type FilteredQuery

type FilteredQuery struct {
	pagination.FilteredQuery
	SortBy string `` /* 126-byte string literal not displayed */
}

type Parameters

type Parameters struct {
	Output string `json:"output,omitempty" bson:"output"`

	ForwardAuthor *bool  `json:"forward_author,omitempty" bson:"forward_author"`
	Author        string `json:"author,omitempty" bson:"author"`

	// ChangeState
	State *types.CpsNumber `json:"state,omitempty" bson:"state"`
	// AssocTicket
	Ticket         string            `json:"ticket,omitempty" bson:"ticket"`
	TicketURL      string            `json:"ticket_url,omitempty" bson:"ticket_url"`
	TicketURLTitle string            `json:"ticket_url_title,omitempty" bson:"ticket_url_title"`
	TicketData     map[string]string `json:"ticket_data,omitempty" bson:"ticket_data"`
	// AssocTicket and Webhook
	TicketSystemName string `json:"ticket_system_name,omitempty" bson:"ticket_system_name"`
	// Snooze and Pbehavior
	Duration *datetime.DurationWithUnit `json:"duration,omitempty" bson:"duration"`
	// Pbehavior
	Name           string            `json:"name,omitempty" bson:"name"`
	Reason         *pbehavior.Reason `json:"reason,omitempty" bson:"reason"`
	Type           *pbehavior.Type   `json:"type,omitempty" bson:"type"`
	RRule          string            `json:"rrule,omitempty" bson:"rrule"`
	Tstart         *int64            `json:"tstart,omitempty" bson:"tstart"`
	Tstop          *int64            `json:"tstop,omitempty" bson:"tstop"`
	StartOnTrigger *bool             `json:"start_on_trigger,omitempty" bson:"start_on_trigger"`
	// Webhook
	webhook.Webhook    `bson:",inline"`
	SkipForChild       *bool `json:"skip_for_child,omitempty" bson:"skip_for_child"`
	SkipForInstruction *bool `json:"skip_for_instruction,omitempty" bson:"skip_for_instruction,omitempty"`
}

type Scenario

type Scenario struct {
	ID                   string                     `bson:"_id" json:"_id"`
	Name                 string                     `bson:"name" json:"name"`
	Author               *author.Author             `bson:"author" json:"author"`
	Enabled              bool                       `bson:"enabled" json:"enabled"`
	DisableDuringPeriods []string                   `bson:"disable_during_periods" json:"disable_during_periods"`
	Triggers             []Trigger                  `bson:"triggers" json:"triggers"`
	Actions              []Action                   `bson:"actions" json:"actions"`
	Priority             int64                      `bson:"priority" json:"priority"`
	Delay                *datetime.DurationWithUnit `bson:"delay" json:"delay"`
	Created              datetime.CpsTime           `bson:"created,omitempty" json:"created,omitzero" swaggertype:"integer"`
	Updated              datetime.CpsTime           `bson:"updated,omitempty" json:"updated,omitzero" swaggertype:"integer"`
}

type Store

type Store interface {
	Insert(ctx context.Context, r CreateRequest) (*Scenario, error)
	Find(ctx context.Context, q FilteredQuery) (*AggregationResult, error)
	GetOneBy(ctx context.Context, id string) (*Scenario, error)
	Update(ctx context.Context, r UpdateRequest) (*Scenario, error)
	Delete(ctx context.Context, id, userID string) (bool, error)
	ValidateTemplates(ctx context.Context, request TemplateRequest) (map[string]template.ValidateResponse, error)
	GetTemplateVars(ctx context.Context) (TemplateVarsResponse, error)
	Toggle(ctx context.Context, r BulkToggleRequestItem, enabled bool) (bool, error)
}

func NewStore

func NewStore(
	db mongo.DbClient,
	authorProvider author.Provider,
	transformer patternfields.Transformer,
	tplValidator tplvalidator.Validator,
	tplExecutor libtemplate.Executor,
	tplConfigProvider config.TemplateConfigProvider,
	encoder encoding.Encoder,
	decoder encoding.Decoder,
) Store

type TemplateActionParameters

type TemplateActionParameters struct {
	Output        string                                 `json:"output"`
	Author        string                                 `json:"author"`
	ForwardAuthor *bool                                  `json:"forward_author"`
	Request       *template.TemplateParameters           `json:"request"`
	DeclareTicket *template.TemplateWebhookDeclareTicket `json:"declare_ticket"`
}

type TemplateActionRequest

type TemplateActionRequest struct {
	Type       string                   `json:"type" binding:"required"`
	Parameters TemplateActionParameters `json:"parameters"`
}

type TemplateRequest

type TemplateRequest struct {
	Rule struct {
		TemplateRuleRequest
		ID string `json:"_id" binding:"id"`
	} `json:"rule"`
	TestData struct {
		Test  string `json:"test"`
		Event string `json:"event"`
		// TestData.Responses keys correspond with Rule.Actions keys
		Responses             map[int]string `json:"responses"`
		TicketStatusResponses map[int]string `json:"ticket_status_responses"`
	} `json:"testdata"`
}

type TemplateRuleRequest

type TemplateRuleRequest struct {
	Name     string                  `json:"name" binding:"required"`
	Triggers []Trigger               `json:"triggers" binding:"required,notblank,dive"`
	Actions  []TemplateActionRequest `json:"actions" binding:"required,notblank,dive"`
}

type TemplateVarsResponse

type TemplateVarsResponse struct {
	Output       []template.VarResponse `json:"output"`
	Author       []template.VarResponse `json:"author"`
	FirstWebhook []template.VarResponse `json:"first_webhook"`
	Webhook      []template.VarResponse `json:"webhook"`
	Ticket       []template.VarResponse `json:"ticket"`
	TicketStatus []template.VarResponse `json:"ticket_status"`
}

type Trigger

type Trigger struct {
	// Possible trigger type values.
	//   * `create` - Alarm creation
	//   * `statedec` - Alarm state decrease
	//   * `changestate` - Alarm state has been changed by "change state" action
	//   * `stateinc` - Alarm state increase
	//   * `changestatus` - Alarm status changes eg. flapping
	//   * `ack` - Alarm has been acked
	//   * `ackremove` - Alarm has been unacked
	//   * `cancel` - Alarm has been cancelled
	//   * `uncancel` - Alarm has been uncancelled
	//   * `comment` - Alarm has been commented
	//   * `declareticketwebhook` - Ticket has been declared by the webhook
	//   * `declareticketwebhookfail` - Ticket is failed to be declared by the webhook
	//   * `assocticket` - Ticket has been associated with an alarm
	//   * `snooze` - Alarm has been snoozed
	//   * `unsnooze` - Alarm has been unsnoozed
	//   * `pbhenter` - Alarm enters a periodic behavior
	//   * `pbhleave` - Alarm leaves a periodic behavior
	//   * `activate` - Alarm has been activated
	//   * `resolve` - Alarm has been resolved
	//   * `instructionfail` - Manual instruction has failed
	//   * `autoinstructionfail` - Auto instruction has failed
	//   * `instructionjobfail` - Manual or auto instruction's job is failed
	//   * `instructionjobcomplete` - Manual or auto instruction's job is completed
	//   * `instructioncomplete` - Manual instruction is completed
	//   * `autoinstructioncomplete` - Auto instruction is completed
	//   * `autoinstructionresultok` - Alarm is in OK state after all auto instructions
	//   * `autoinstructionresultfail` - Alarm is in not in OK state after all auto instructions
	//   * `eventscount` - Alarm check events count
	//   * `changedoutput` - Alarm output is changed
	//   * `changedlongoutput` - Alarm long output is changed
	Type      string `` /* 449-byte string literal not displayed */
	Threshold int    `json:"threshold,omitempty" binding:"required_if=Type eventscount,excluded_unless=Type eventscount,omitempty,gt=1"`
}

func (*Trigger) String

func (t *Trigger) String() string

func (*Trigger) UnmarshalBSONValue

func (t *Trigger) UnmarshalBSONValue(valueType byte, b []byte) error

type UpdateRequest

type UpdateRequest struct {
	EditRequest
	ID string `json:"-"`
}

type Validator

type Validator struct {
	// contains filtered or unexported fields
}

func NewValidator

func NewValidator(templateExecutor template.Executor) *Validator

func (*Validator) ValidateActionRequest

func (v *Validator) ValidateActionRequest(sl validator.StructLevel)

Source Files

  • api.go
  • models.go
  • store.go
  • validator.go

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL