mirror of
https://github.com/kastenhq/kubestr.git
synced 2024-12-15 17:50:57 +00:00
122 lines
2.7 KiB
Go
122 lines
2.7 KiB
Go
|
package kubestr
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"os"
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
// ErrorColor formatted color red
|
||
|
ErrorColor = "\033[1;31m%s\033[0m"
|
||
|
// SuccessColor formatted color green
|
||
|
SuccessColor = "\033[1;32m%s\033[0m"
|
||
|
// YellowColor formatted color yellow
|
||
|
YellowColor = "\033[1;33m%s\033[0m"
|
||
|
)
|
||
|
|
||
|
// Status is a generic structure to return a status
|
||
|
type Status struct {
|
||
|
StatusCode StatusCode
|
||
|
StatusMessage string
|
||
|
Raw interface{} `json:",omitempty"`
|
||
|
}
|
||
|
|
||
|
// StatusCode type definition
|
||
|
type StatusCode string
|
||
|
|
||
|
const (
|
||
|
// StatusOK is the success status code
|
||
|
StatusOK = StatusCode("OK")
|
||
|
// StatusWarning is the informational status code
|
||
|
StatusWarning = StatusCode("Warning")
|
||
|
// StatusError is the failure status code
|
||
|
StatusError = StatusCode("Error")
|
||
|
// StatusInfo is the Info status code
|
||
|
StatusInfo = StatusCode("Info")
|
||
|
)
|
||
|
|
||
|
// Print prints a status message with a given prefix
|
||
|
func (s *Status) Print(prefix string) {
|
||
|
switch s.StatusCode {
|
||
|
case StatusOK:
|
||
|
printSuccessMessage(prefix + s.StatusMessage)
|
||
|
case StatusError:
|
||
|
printErrorMessage(prefix + s.StatusMessage)
|
||
|
case StatusWarning:
|
||
|
printWarningMessage(prefix + s.StatusMessage)
|
||
|
default:
|
||
|
printInfoMessage(prefix + s.StatusMessage)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// printErrorMessage prints the error message
|
||
|
func printErrorMessage(errorMesg string) {
|
||
|
fmt.Printf("%s - ", errorMesg)
|
||
|
fmt.Printf(ErrorColor, "Error")
|
||
|
fmt.Println()
|
||
|
}
|
||
|
|
||
|
// printSuccessMessage prints the success message
|
||
|
func printSuccessMessage(message string) {
|
||
|
fmt.Printf("%s - ", message)
|
||
|
fmt.Printf(SuccessColor, "OK")
|
||
|
fmt.Println()
|
||
|
}
|
||
|
|
||
|
// printInfoMessage prints a warning
|
||
|
func printInfoMessage(message string) {
|
||
|
fmt.Println(message)
|
||
|
}
|
||
|
|
||
|
// printWarningMessage prints a warning
|
||
|
func printWarningMessage(message string) {
|
||
|
fmt.Printf(YellowColor+"\n", message)
|
||
|
}
|
||
|
|
||
|
// TestOutput is the generic return value for tests
|
||
|
type TestOutput struct {
|
||
|
TestName string
|
||
|
Status []Status
|
||
|
Raw interface{} `json:",omitempty"`
|
||
|
}
|
||
|
|
||
|
// Print prints a TestRetVal as a string output
|
||
|
func (t *TestOutput) Print() {
|
||
|
fmt.Println(t.TestName + ":")
|
||
|
for _, status := range t.Status {
|
||
|
status.Print(" ")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func makeTestOutput(testname string, code StatusCode, mesg string, raw interface{}) *TestOutput {
|
||
|
return &TestOutput{
|
||
|
TestName: testname,
|
||
|
Status: []Status{makeStatus(code, mesg, nil)},
|
||
|
Raw: raw,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func makeStatus(code StatusCode, mesg string, raw interface{}) Status {
|
||
|
return Status{
|
||
|
StatusCode: code,
|
||
|
StatusMessage: mesg,
|
||
|
Raw: raw,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func convertSetToSlice(set map[string]struct{}) []string {
|
||
|
var slice []string
|
||
|
for i := range set {
|
||
|
slice = append(slice, i)
|
||
|
}
|
||
|
return slice
|
||
|
}
|
||
|
|
||
|
// getPodNamespace gets the pods namespace or returns default
|
||
|
func getPodNamespace() string {
|
||
|
if val, ok := os.LookupEnv(PodNamespaceEnvKey); ok {
|
||
|
return val
|
||
|
}
|
||
|
return DefaultNS
|
||
|
}
|