kubernetes-operator/pkg/notifications/reason/reason.go

199 lines
5.3 KiB
Go

package reason
import "fmt"
const (
// OperatorSource defines that notification concerns operator
OperatorSource Source = "operator"
// KubernetesSource defines that notification concerns kubernetes
KubernetesSource Source = "kubernetes"
// HumanSource defines that notification concerns human
HumanSource Source = "human"
)
// Reason is interface that let us know why operator sent notification.
type Reason interface {
Short() []string
Verbose() []string
HasMessages() bool
}
// Undefined is base or untraceable reason.
type Undefined struct {
source Source
short []string
verbose []string
}
// PodRestart defines the reason why Jenkins master pod restarted.
type PodRestart struct {
Undefined
}
// PodCreation informs that pod is being created.
type PodCreation struct {
Undefined
}
// ReconcileLoopFailed defines the reason why the reconcile loop failed.
type ReconcileLoopFailed struct {
Undefined
}
// GroovyScriptExecutionFailed defines the reason why the groovy script execution failed.
type GroovyScriptExecutionFailed struct {
Undefined
}
// BaseConfigurationFailed defines the reason why base configuration phase failed.
type BaseConfigurationFailed struct {
Undefined
}
// BaseConfigurationComplete informs that base configuration is valid and complete.
type BaseConfigurationComplete struct {
Undefined
}
// UserConfigurationFailed defines the reason why user configuration phase failed.
type UserConfigurationFailed struct {
Undefined
}
// UserConfigurationComplete informs that user configuration is valid and complete.
type UserConfigurationComplete struct {
Undefined
}
// NewUndefined returns new instance of Undefined.
func NewUndefined(source Source, short []string, verbose ...string) *Undefined {
return &Undefined{source: source, short: short, verbose: checkIfVerboseEmpty(short, verbose)}
}
// NewPodRestart returns new instance of PodRestart.
func NewPodRestart(source Source, short []string, verbose ...string) *PodRestart {
restartPodMessage := fmt.Sprintf("Jenkins master pod restarted by %s:", source)
if len(short) == 1 {
short = []string{fmt.Sprintf("%s %s", restartPodMessage, short[0])}
} else if len(short) > 1 {
short = append([]string{restartPodMessage}, short...)
}
if len(verbose) == 1 {
verbose = []string{fmt.Sprintf("%s %s", restartPodMessage, verbose[0])}
} else if len(verbose) > 1 {
verbose = append([]string{restartPodMessage}, verbose...)
}
return &PodRestart{
Undefined{
source: source,
short: short,
verbose: checkIfVerboseEmpty(short, verbose),
},
}
}
// NewPodCreation returns new instance of PodCreation.
func NewPodCreation(source Source, short []string, verbose ...string) *PodCreation {
return &PodCreation{
Undefined{
source: source,
short: short,
verbose: checkIfVerboseEmpty(short, verbose),
},
}
}
// NewReconcileLoopFailed returns new instance of ReconcileLoopFailed.
func NewReconcileLoopFailed(source Source, short []string, verbose ...string) *ReconcileLoopFailed {
return &ReconcileLoopFailed{
Undefined{
source: source,
short: short,
verbose: checkIfVerboseEmpty(short, verbose),
},
}
}
// NewGroovyScriptExecutionFailed returns new instance of GroovyScriptExecutionFailed.
func NewGroovyScriptExecutionFailed(source Source, short []string, verbose ...string) *GroovyScriptExecutionFailed {
return &GroovyScriptExecutionFailed{
Undefined{
source: source,
short: short,
verbose: checkIfVerboseEmpty(short, verbose),
},
}
}
// NewBaseConfigurationFailed returns new instance of BaseConfigurationFailed.
func NewBaseConfigurationFailed(source Source, short []string, verbose ...string) *BaseConfigurationFailed {
return &BaseConfigurationFailed{
Undefined{
source: source,
short: short,
verbose: checkIfVerboseEmpty(short, verbose),
},
}
}
// NewBaseConfigurationComplete returns new instance of BaseConfigurationComplete.
func NewBaseConfigurationComplete(source Source, short []string, verbose ...string) *BaseConfigurationComplete {
return &BaseConfigurationComplete{
Undefined{
source: source,
short: short,
verbose: checkIfVerboseEmpty(short, verbose),
},
}
}
// NewUserConfigurationFailed returns new instance of UserConfigurationFailed.
func NewUserConfigurationFailed(source Source, short []string, verbose ...string) *UserConfigurationFailed {
return &UserConfigurationFailed{
Undefined{
source: source,
short: short,
verbose: checkIfVerboseEmpty(short, verbose),
},
}
}
// NewUserConfigurationComplete returns new instance of UserConfigurationComplete.
func NewUserConfigurationComplete(source Source, short []string, verbose ...string) *UserConfigurationComplete {
return &UserConfigurationComplete{
Undefined{
source: source,
short: short,
verbose: checkIfVerboseEmpty(short, verbose),
},
}
}
// Source is enum type that informs us what triggered notification.
type Source string
// Short is list of reasons.
func (p Undefined) Short() []string {
return p.short
}
// Verbose is list of reasons with details.
func (p Undefined) Verbose() []string {
return p.verbose
}
// HasMessages checks if there is any message.
func (p Undefined) HasMessages() bool {
return len(p.short) > 0 || len(p.verbose) > 0
}
func checkIfVerboseEmpty(short []string, verbose []string) []string {
if len(verbose) == 0 {
return short
}
return verbose
}