mirror of
https://github.com/thegeeklab/drone-plugin-lib.git
synced 2024-11-24 23:40:39 +00:00
Add errors package for exit code handling
To get a better exit code handling including logrus logging I have defined a custom errors package which uses logrus to log error messages.
This commit is contained in:
parent
7d346ea6f4
commit
5f7190189d
73
errors/errors.go
Normal file
73
errors/errors.go
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
package errors
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ExitCoder defines the interface for exit code handling.
|
||||||
|
type ExitCoder interface {
|
||||||
|
error
|
||||||
|
Code() int
|
||||||
|
Fields() logrus.Fields
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExitError simply implements the defined interface.
|
||||||
|
type ExitError struct {
|
||||||
|
message interface{}
|
||||||
|
code int
|
||||||
|
fields logrus.Fields
|
||||||
|
}
|
||||||
|
|
||||||
|
// Error implements the ExitCoder interface.
|
||||||
|
func (e ExitError) Error() string {
|
||||||
|
return fmt.Sprintf("%v", e.message)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Code implements the ExitCoder interface.
|
||||||
|
func (e ExitError) Code() int {
|
||||||
|
return e.code
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fields implements the ExitCoder interface.
|
||||||
|
func (e ExitError) Fields() logrus.Fields {
|
||||||
|
return e.fields
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExitMessage initiales a new ExitCoder implementation.
|
||||||
|
func ExitMessage(message interface{}) ExitError {
|
||||||
|
return ExitError{
|
||||||
|
message: message,
|
||||||
|
code: 1,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithFields initiales a new ExitCoder implementation.
|
||||||
|
func WithFields(message interface{}, fields logrus.Fields) ExitError {
|
||||||
|
return ExitError{
|
||||||
|
message: message,
|
||||||
|
code: 1,
|
||||||
|
fields: fields,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// HandleExit ist used within the main handler to exit properly.
|
||||||
|
func HandleExit(err error) {
|
||||||
|
if err == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if e, ok := err.(ExitCoder); ok {
|
||||||
|
if e.Error() != "" {
|
||||||
|
logrus.WithFields(
|
||||||
|
e.Fields(),
|
||||||
|
).Error(
|
||||||
|
e.Error(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
os.Exit(e.Code())
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user