package pkg import ( "errors" "strconv" "strings" ) type FixProfile struct { ProfileCommon ErrorAction string `json:"error_action"` FullLogonParsing bool `json:"full_logon_parsing"` MessageLogPublisher string `json:"message_log_publisher"` QuickParsing bool `json:"quick_parsing"` ReportLogPublisher string `json:"report_log_publisher"` ResponseParsing bool `json:"response_parsing"` SenderTagClass string `json:"sender_tag_class"` StatisticsSampleInt int `json:"statistics_sample_interval"` } func ParseFixProfile(raw string) (*FixProfile, error) { p := new(FixProfile) split := strings.Split(raw, "\n") if !strings.Contains(split[0], "ltm profile fix") { return nil, errors.New("not a fix profile") } p.ProfileCommon = parseCommon(raw) for _, line := range split { f := strings.Fields(line) switch strings.ToLower(f[0]) { case "error-action": p.ErrorAction = strings.Join(f[1:], " ") case "full-logon-parsing": p.FullLogonParsing = parseBool(f[1]) case "message-log-publisher": p.MessageLogPublisher = strings.Join(f[1:], " ") case "quick-parsing": p.QuickParsing = parseBool(f[1]) case "report-log-publisher": p.ReportLogPublisher = strings.Join(f[1:], " ") case "response-parsing": p.ResponseParsing = parseBool(f[1]) case "sender-tag-class": p.SenderTagClass = strings.Join(f[1:], " ") case "statistics-sample-interval": i, err := strconv.Atoi(f[1]) if err != nil { log.WithField("data", f[1]).Error(err.Error()) return nil, err } p.StatisticsSampleInt = i } } return p, nil }