package pkg import ( "errors" "strconv" "strings" ) type MSSQLProfile struct { ProfileCommon ReadPool string `json:"read_pool"` ReadWriteSplitByCommand string `json:"read_write_split_by_command"` ReadWriteSplitByUser string `json:"read_write_split_by_user"` UserCanWriteByDefault bool `json:"user_can_write_by_default"` UserList []string `json:"user_list"` WritePersistTimer int `json:"write_persist_timer"` WritePool string `json:"write_pool"` } func ParseMSSQL(raw string) (*MSSQLProfile, error) { p := new(MSSQLProfile) split := strings.Split(raw, "\n") if !strings.Contains(split[0], "ltm profile mssql") { return nil, errors.New("not an mssql profile") } p.ProfileCommon = parseCommon(raw) p.UserList = []string{} for _, line := range split { f := strings.Fields(line) switch strings.ToLower(f[0]) { case "read-pool": p.ReadPool = strings.Join(f[1:], " ") case "read-write-split-by-command": p.ReadWriteSplitByCommand = f[1] case "read-write-split-by-user": p.ReadWriteSplitByUser = f[1] case "user-list": if f[1] != "none" { p.UserList = f[2 : len(f)-1] } case "user-can-write-by-default": p.UserCanWriteByDefault = parseBool(f[1]) case "write-persist-timer": i, err := strconv.Atoi(f[1]) if err != nil { log.WithField("data", f[1]).Error(err.Error()) return nil, err } p.WritePersistTimer = i case "write-pool": p.WritePool = strings.Join(f[1:], " ") } } return p, nil }