Changes on function/metric loggers (#343)

* initial fix logger

* dix DefaultFuncLogger

* fix runner and tests

* reverting: sending async task stdout to func logger
This commit is contained in:
Pedro Nasser
2016-11-27 16:36:40 -02:00
committed by GitHub
parent b62a2304b0
commit 867eb4b176
9 changed files with 61 additions and 51 deletions

View File

@@ -27,6 +27,7 @@ type Config struct {
Image string
Timeout time.Duration
AppName string
Path string
Memory uint64
Env map[string]string
Stdin io.Reader
@@ -37,7 +38,8 @@ type Config struct {
type Runner struct {
driver drivers.Driver
taskQueue chan *containerTask
ml Logger
mlog MetricLogger
flog FuncLogger
availableMem int64
usedMem int64
usedMemMutex sync.RWMutex
@@ -50,7 +52,7 @@ var (
WaitMemoryTimeout = 10 * time.Second
)
func New(metricLogger Logger) (*Runner, error) {
func New(flog FuncLogger, mlog MetricLogger) (*Runner, error) {
// TODO: Is this really required for the container drivers? Can we remove it?
env := common.NewEnvironment(func(e *common.Environment) {})
@@ -63,7 +65,8 @@ func New(metricLogger Logger) (*Runner, error) {
r := &Runner{
driver: driver,
taskQueue: make(chan *containerTask, 100),
ml: metricLogger,
flog: flog,
mlog: mlog,
availableMem: getAvailableMemory(),
usedMem: 0,
}
@@ -100,12 +103,12 @@ func (r *Runner) queueHandler() {
}
metricBaseName := fmt.Sprintf("run.%s.", task.cfg.AppName)
r.ml.LogTime(task.ctx, metricBaseName+"wait_time", waitTime)
r.ml.LogTime(task.ctx, "run.wait_time", waitTime)
r.mlog.LogTime(task.ctx, metricBaseName+"wait_time", waitTime)
r.mlog.LogTime(task.ctx, "run.wait_time", waitTime)
if timedOut {
// Send to a signal to this task saying it cannot run
r.ml.LogCount(task.ctx, metricBaseName+"timeout", 1)
r.mlog.LogCount(task.ctx, metricBaseName+"timeout", 1)
task.canRun <- false
continue
}
@@ -159,6 +162,11 @@ func (r *Runner) Run(ctx context.Context, cfg *Config) (drivers.RunResult, error
cfg.Memory = 128
}
cfg.Stderr = r.flog.Writer(ctx, cfg.AppName, cfg.Path, cfg.Image, cfg.ID)
if cfg.Stdout == nil {
cfg.Stdout = cfg.Stderr
}
ctask := &containerTask{
ctx: ctx,
cfg: cfg,
@@ -166,7 +174,7 @@ func (r *Runner) Run(ctx context.Context, cfg *Config) (drivers.RunResult, error
}
metricBaseName := fmt.Sprintf("run.%s.", cfg.AppName)
r.ml.LogCount(ctx, metricBaseName+"requests", 1)
r.mlog.LogCount(ctx, metricBaseName+"requests", 1)
// Check if has enough available memory
// If available, use it
@@ -176,7 +184,7 @@ func (r *Runner) Run(ctx context.Context, cfg *Config) (drivers.RunResult, error
case r.taskQueue <- ctask:
default:
// If queue is full, return error
r.ml.LogCount(ctx, "queue.full", 1)
r.mlog.LogCount(ctx, "queue.full", 1)
return nil, ErrFullQueue
}
@@ -186,7 +194,7 @@ func (r *Runner) Run(ctx context.Context, cfg *Config) (drivers.RunResult, error
return nil, ErrTimeOutNoMemory
}
} else {
r.ml.LogTime(ctx, metricBaseName+"waittime", 0)
r.mlog.LogTime(ctx, metricBaseName+"waittime", 0)
}
defer r.addUsedMem(-1 * int64(cfg.Memory))
@@ -204,14 +212,14 @@ func (r *Runner) Run(ctx context.Context, cfg *Config) (drivers.RunResult, error
}
if result.Status() == "success" {
r.ml.LogCount(ctx, metricBaseName+"succeeded", 1)
r.mlog.LogCount(ctx, metricBaseName+"succeeded", 1)
} else {
r.ml.LogCount(ctx, metricBaseName+"error", 1)
r.mlog.LogCount(ctx, metricBaseName+"error", 1)
}
metricElapsed := time.Since(metricStart)
r.ml.LogTime(ctx, metricBaseName+"time", metricElapsed)
r.ml.LogTime(ctx, "run.exec_time", metricElapsed)
r.mlog.LogTime(ctx, metricBaseName+"time", metricElapsed)
r.mlog.LogTime(ctx, "run.exec_time", metricElapsed)
return result, nil
}