Initial commit
This commit is contained in:
89
vendor/github.com/hyperhq/hypercli/daemon/logger/factory.go
generated
vendored
Normal file
89
vendor/github.com/hyperhq/hypercli/daemon/logger/factory.go
generated
vendored
Normal file
@@ -0,0 +1,89 @@
|
||||
package logger
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"sync"
|
||||
)
|
||||
|
||||
// Creator builds a logging driver instance with given context.
|
||||
type Creator func(Context) (Logger, error)
|
||||
|
||||
// LogOptValidator checks the options specific to the underlying
|
||||
// logging implementation.
|
||||
type LogOptValidator func(cfg map[string]string) error
|
||||
|
||||
type logdriverFactory struct {
|
||||
registry map[string]Creator
|
||||
optValidator map[string]LogOptValidator
|
||||
m sync.Mutex
|
||||
}
|
||||
|
||||
func (lf *logdriverFactory) register(name string, c Creator) error {
|
||||
lf.m.Lock()
|
||||
defer lf.m.Unlock()
|
||||
|
||||
if _, ok := lf.registry[name]; ok {
|
||||
return fmt.Errorf("logger: log driver named '%s' is already registered", name)
|
||||
}
|
||||
lf.registry[name] = c
|
||||
return nil
|
||||
}
|
||||
|
||||
func (lf *logdriverFactory) registerLogOptValidator(name string, l LogOptValidator) error {
|
||||
lf.m.Lock()
|
||||
defer lf.m.Unlock()
|
||||
|
||||
if _, ok := lf.optValidator[name]; ok {
|
||||
return fmt.Errorf("logger: log validator named '%s' is already registered", name)
|
||||
}
|
||||
lf.optValidator[name] = l
|
||||
return nil
|
||||
}
|
||||
|
||||
func (lf *logdriverFactory) get(name string) (Creator, error) {
|
||||
lf.m.Lock()
|
||||
defer lf.m.Unlock()
|
||||
|
||||
c, ok := lf.registry[name]
|
||||
if !ok {
|
||||
return c, fmt.Errorf("logger: no log driver named '%s' is registered", name)
|
||||
}
|
||||
return c, nil
|
||||
}
|
||||
|
||||
func (lf *logdriverFactory) getLogOptValidator(name string) LogOptValidator {
|
||||
lf.m.Lock()
|
||||
defer lf.m.Unlock()
|
||||
|
||||
c, _ := lf.optValidator[name]
|
||||
return c
|
||||
}
|
||||
|
||||
var factory = &logdriverFactory{registry: make(map[string]Creator), optValidator: make(map[string]LogOptValidator)} // global factory instance
|
||||
|
||||
// RegisterLogDriver registers the given logging driver builder with given logging
|
||||
// driver name.
|
||||
func RegisterLogDriver(name string, c Creator) error {
|
||||
return factory.register(name, c)
|
||||
}
|
||||
|
||||
// RegisterLogOptValidator registers the logging option validator with
|
||||
// the given logging driver name.
|
||||
func RegisterLogOptValidator(name string, l LogOptValidator) error {
|
||||
return factory.registerLogOptValidator(name, l)
|
||||
}
|
||||
|
||||
// GetLogDriver provides the logging driver builder for a logging driver name.
|
||||
func GetLogDriver(name string) (Creator, error) {
|
||||
return factory.get(name)
|
||||
}
|
||||
|
||||
// ValidateLogOpts checks the options for the given log driver. The
|
||||
// options supported are specific to the LogDriver implementation.
|
||||
func ValidateLogOpts(name string, cfg map[string]string) error {
|
||||
l := factory.getLogOptValidator(name)
|
||||
if l != nil {
|
||||
return l(cfg)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user