mirror of https://github.com/docker/docs.git
Engine: improved logging and identification of jobs
This commit is contained in:
parent
ca6f0aa107
commit
4e7cb37dcc
|
@ -5,6 +5,7 @@ import (
|
||||||
"os"
|
"os"
|
||||||
"log"
|
"log"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
"strings"
|
||||||
"github.com/dotcloud/docker/utils"
|
"github.com/dotcloud/docker/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -33,6 +34,11 @@ type Engine struct {
|
||||||
root string
|
root string
|
||||||
handlers map[string]Handler
|
handlers map[string]Handler
|
||||||
hack Hack // data for temporary hackery (see hack.go)
|
hack Hack // data for temporary hackery (see hack.go)
|
||||||
|
id string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (eng *Engine) Root() string {
|
||||||
|
return eng.root
|
||||||
}
|
}
|
||||||
|
|
||||||
func (eng *Engine) Register(name string, handler Handler) error {
|
func (eng *Engine) Register(name string, handler Handler) error {
|
||||||
|
@ -84,6 +90,10 @@ func New(root string) (*Engine, error) {
|
||||||
return eng, nil
|
return eng, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (eng *Engine) String() string {
|
||||||
|
return fmt.Sprintf("%s|%s", eng.Root(), eng.id[:8])
|
||||||
|
}
|
||||||
|
|
||||||
// Job creates a new job which can later be executed.
|
// Job creates a new job which can later be executed.
|
||||||
// This function mimics `Command` from the standard os/exec package.
|
// This function mimics `Command` from the standard os/exec package.
|
||||||
func (eng *Engine) Job(name string, args ...string) *Job {
|
func (eng *Engine) Job(name string, args ...string) *Job {
|
||||||
|
@ -102,3 +112,8 @@ func (eng *Engine) Job(name string, args ...string) *Job {
|
||||||
return job
|
return job
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func (eng *Engine) Logf(format string, args ...interface{}) (n int, err error) {
|
||||||
|
prefixedFormat := fmt.Sprintf("[%s] %s\n", eng, strings.TrimRight(format, "\n"))
|
||||||
|
return fmt.Printf(prefixedFormat, args...)
|
||||||
|
}
|
||||||
|
|
|
@ -6,7 +6,6 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"fmt"
|
"fmt"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"github.com/dotcloud/docker/utils"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// A job is the fundamental unit of work in the docker engine.
|
// A job is the fundamental unit of work in the docker engine.
|
||||||
|
@ -38,9 +37,10 @@ type Job struct {
|
||||||
// If the job returns a failure status, an error is returned
|
// If the job returns a failure status, an error is returned
|
||||||
// which includes the status.
|
// which includes the status.
|
||||||
func (job *Job) Run() error {
|
func (job *Job) Run() error {
|
||||||
randId := utils.RandomString()[:4]
|
job.Logf("{")
|
||||||
fmt.Printf("Job #%s: %s\n", randId, job)
|
defer func() {
|
||||||
defer fmt.Printf("Job #%s: %s = '%s'", randId, job, job.status)
|
job.Logf("}")
|
||||||
|
}()
|
||||||
if job.handler == nil {
|
if job.handler == nil {
|
||||||
job.status = "command not found"
|
job.status = "command not found"
|
||||||
} else {
|
} else {
|
||||||
|
@ -54,7 +54,20 @@ func (job *Job) Run() error {
|
||||||
|
|
||||||
// String returns a human-readable description of `job`
|
// String returns a human-readable description of `job`
|
||||||
func (job *Job) String() string {
|
func (job *Job) String() string {
|
||||||
return strings.Join(append([]string{job.Name}, job.Args...), " ")
|
s := fmt.Sprintf("%s.%s(%s)", job.Eng, job.Name, strings.Join(job.Args, ", "))
|
||||||
|
// FIXME: if a job returns the empty string, it will be printed
|
||||||
|
// as not having returned.
|
||||||
|
// (this only affects String which is a convenience function).
|
||||||
|
if job.status != "" {
|
||||||
|
var okerr string
|
||||||
|
if job.status == "0" {
|
||||||
|
okerr = "OK"
|
||||||
|
} else {
|
||||||
|
okerr = "ERR"
|
||||||
|
}
|
||||||
|
s = fmt.Sprintf("%s = %s (%s)", s, okerr, job.status)
|
||||||
|
}
|
||||||
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
func (job *Job) Getenv(key string) (value string) {
|
func (job *Job) Getenv(key string) (value string) {
|
||||||
|
@ -169,3 +182,8 @@ func (job *Job) Environ() map[string]string {
|
||||||
}
|
}
|
||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (job *Job) Logf(format string, args ...interface{}) (n int, err error) {
|
||||||
|
prefixedFormat := fmt.Sprintf("[%s] %s\n", job, strings.TrimRight(format, "\n"))
|
||||||
|
return fmt.Fprintf(job.Stdout, prefixedFormat, args...)
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue