github.com/khulnasoft/cli@v0.0.0-20240402070845-01bcad7beefa/service/logs/parse_logs.go (about) 1 /*Package logs contains tools for parsing docker log lines. 2 */ 3 package logs 4 5 import ( 6 "net/url" 7 "strings" 8 9 "github.com/pkg/errors" 10 ) 11 12 // ParseLogDetails parses a string of key value pairs in the form 13 // "k=v,l=w", where the keys and values are url query escaped, and each pair 14 // is separated by a comma. Returns a map of the key value pairs on success, 15 // and an error if the details string is not in a valid format. 16 // 17 // The details string encoding is implemented in 18 // github.com/moby/moby/api/server/httputils/write_log_stream.go 19 func ParseLogDetails(details string) (map[string]string, error) { 20 pairs := strings.Split(details, ",") 21 detailsMap := make(map[string]string, len(pairs)) 22 for _, pair := range pairs { 23 k, v, ok := strings.Cut(pair, "=") 24 if !ok || k == "" { 25 // missing equal sign, or no key. 26 return nil, errors.New("invalid details format") 27 } 28 var err error 29 k, err = url.QueryUnescape(k) 30 if err != nil { 31 return nil, err 32 } 33 v, err = url.QueryUnescape(v) 34 if err != nil { 35 return nil, err 36 } 37 detailsMap[k] = v 38 } 39 return detailsMap, nil 40 }