github.com/kunnos/engine@v1.13.1/daemon/logger/context.go (about)

     1  package logger
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"strings"
     7  	"time"
     8  )
     9  
    10  // Context provides enough information for a logging driver to do its function.
    11  type Context struct {
    12  	Config              map[string]string
    13  	ContainerID         string
    14  	ContainerName       string
    15  	ContainerEntrypoint string
    16  	ContainerArgs       []string
    17  	ContainerImageID    string
    18  	ContainerImageName  string
    19  	ContainerCreated    time.Time
    20  	ContainerEnv        []string
    21  	ContainerLabels     map[string]string
    22  	LogPath             string
    23  	DaemonName          string
    24  }
    25  
    26  // ExtraAttributes returns the user-defined extra attributes (labels,
    27  // environment variables) in key-value format. This can be used by log drivers
    28  // that support metadata to add more context to a log.
    29  func (ctx *Context) ExtraAttributes(keyMod func(string) string) map[string]string {
    30  	extra := make(map[string]string)
    31  	labels, ok := ctx.Config["labels"]
    32  	if ok && len(labels) > 0 {
    33  		for _, l := range strings.Split(labels, ",") {
    34  			if v, ok := ctx.ContainerLabels[l]; ok {
    35  				if keyMod != nil {
    36  					l = keyMod(l)
    37  				}
    38  				extra[l] = v
    39  			}
    40  		}
    41  	}
    42  
    43  	env, ok := ctx.Config["env"]
    44  	if ok && len(env) > 0 {
    45  		envMapping := make(map[string]string)
    46  		for _, e := range ctx.ContainerEnv {
    47  			if kv := strings.SplitN(e, "=", 2); len(kv) == 2 {
    48  				envMapping[kv[0]] = kv[1]
    49  			}
    50  		}
    51  		for _, l := range strings.Split(env, ",") {
    52  			if v, ok := envMapping[l]; ok {
    53  				if keyMod != nil {
    54  					l = keyMod(l)
    55  				}
    56  				extra[l] = v
    57  			}
    58  		}
    59  	}
    60  
    61  	return extra
    62  }
    63  
    64  // Hostname returns the hostname from the underlying OS.
    65  func (ctx *Context) Hostname() (string, error) {
    66  	hostname, err := os.Hostname()
    67  	if err != nil {
    68  		return "", fmt.Errorf("logger: can not resolve hostname: %v", err)
    69  	}
    70  	return hostname, nil
    71  }
    72  
    73  // Command returns the command that the container being logged was
    74  // started with. The Entrypoint is prepended to the container
    75  // arguments.
    76  func (ctx *Context) Command() string {
    77  	terms := []string{ctx.ContainerEntrypoint}
    78  	terms = append(terms, ctx.ContainerArgs...)
    79  	command := strings.Join(terms, " ")
    80  	return command
    81  }
    82  
    83  // ID Returns the Container ID shortened to 12 characters.
    84  func (ctx *Context) ID() string {
    85  	return ctx.ContainerID[:12]
    86  }
    87  
    88  // FullID is an alias of ContainerID.
    89  func (ctx *Context) FullID() string {
    90  	return ctx.ContainerID
    91  }
    92  
    93  // Name returns the ContainerName without a preceding '/'.
    94  func (ctx *Context) Name() string {
    95  	return ctx.ContainerName[1:]
    96  }
    97  
    98  // ImageID returns the ContainerImageID shortened to 12 characters.
    99  func (ctx *Context) ImageID() string {
   100  	return ctx.ContainerImageID[:12]
   101  }
   102  
   103  // ImageFullID is an alias of ContainerImageID.
   104  func (ctx *Context) ImageFullID() string {
   105  	return ctx.ContainerImageID
   106  }
   107  
   108  // ImageName is an alias of ContainerImageName
   109  func (ctx *Context) ImageName() string {
   110  	return ctx.ContainerImageName
   111  }