mirror of
https://github.com/fnproject/fn.git
synced 2022-10-28 21:29:17 +03:00
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:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user