199 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			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
 | |
| }
 |