1234567891011121314151617181920212223242526272829303132333435363738394041 |
- package client
- // parse_logs.go contains utility helpers for getting information out of docker
- // log lines. really, it only contains ParseDetails right now. maybe in the
- // future there will be some desire to parse log messages back into a struct?
- // that would go here if we did
- import (
- "net/url"
- "strings"
- "github.com/pkg/errors"
- )
- // ParseLogDetails takes a details string of key value pairs in the form
- // "k=v,l=w", where the keys and values are url query escaped, and each pair
- // is separated by a comma, returns a map. returns an error if the details
- // string is not in a valid format
- // the exact form of details encoding is implemented in
- // api/server/httputils/write_log_stream.go
- func ParseLogDetails(details string) (map[string]string, error) {
- pairs := strings.Split(details, ",")
- detailsMap := make(map[string]string, len(pairs))
- for _, pair := range pairs {
- p := strings.SplitN(pair, "=", 2)
- // if there is no equals sign, we will only get 1 part back
- if len(p) != 2 {
- return nil, errors.New("invalid details format")
- }
- k, err := url.QueryUnescape(p[0])
- if err != nil {
- return nil, err
- }
- v, err := url.QueryUnescape(p[1])
- if err != nil {
- return nil, err
- }
- detailsMap[k] = v
- }
- return detailsMap, nil
- }
|