package pkg import ( "errors" "strconv" "strings" ) type MBLBProfile struct { ProfileCommon EgressHigh int `json:"egress_high"` //egress-high 50 EgressLow int `json:"egress_low"` //egress-low 5 IngressHigh int `json:"ingress_high"` //ingress-high 50 IngressLow int `json:"ingress_low"` //ingress-low 5 IsolateAbort string `json:"isolate_abort"` //isolate-abort enabled IsolateClient string `json:"isolate_client"` //isolate-client disabled IsolateExpire string `json:"isolate_expire"` //isolate-expire enabled IsolateServer string `json:"isolate_server"` //isolate-server enabled MinConn int `json:"min_conn"` //min-conn 0 ShutdownTimeout int `json:"shutdown_timeout"` //shutdown-timeout 5 TagTTL int `json:"tag_ttl"` //tag-ttl 60 } func ParseMBLB(raw string) (*MBLBProfile, error) { p := new(MBLBProfile) split := strings.Split(raw, "\n") if !strings.Contains(split[0], "ltm profile mblb") { return nil, errors.New("not an mblb profile") } p.ProfileCommon = parseCommon(raw) for _, line := range split { f := strings.Fields(line) switch strings.ToLower(f[0]) { case "egress-high": i, err := strconv.Atoi(f[1]) if err != nil { log.WithField("data", f[1]).Error(err.Error()) return nil, err } p.EgressHigh = i case "egress-low": i, err := strconv.Atoi(f[1]) if err != nil { log.WithField("data", f[1]).Error(err.Error()) return nil, err } p.EgressLow = i case "ingress-high": i, err := strconv.Atoi(f[1]) if err != nil { log.WithField("data", f[1]).Error(err.Error()) return nil, err } p.IngressHigh = i case "ingress-low": i, err := strconv.Atoi(f[1]) if err != nil { log.WithField("data", f[1]).Error(err.Error()) return nil, err } p.IngressLow = i case "isolate-abort": p.IsolateAbort = f[1] case "isolate-client": p.IsolateClient = f[1] case "isolate-expire": p.IsolateExpire = f[1] case "isolate-server": p.IsolateServer = f[1] case "min-conn": i, err := strconv.Atoi(f[1]) if err != nil { log.WithField("data", f[1]).Error(err.Error()) return nil, err } p.MinConn = i case "shutdown-timeout": i, err := strconv.Atoi(f[1]) if err != nil { log.WithField("data", f[1]).Error(err.Error()) return nil, err } p.ShutdownTimeout = i case "tag-ttl": i, err := strconv.Atoi(f[1]) if err != nil { log.WithField("data", f[1]).Error(err.Error()) return nil, err } p.TagTTL = i } } return p, nil }