package pkg import ( "errors" "strconv" "strings" ) type ( AnalyticsProfile struct { ProfileCommon Alerts string `json:"alerts"` CapturedTrafficExternalLogging string `json:"captured_traffic_external_logging"` CapturedTrafficInternalLogging string `json:"captured_traffic_internal_logging"` CollectGeo string `json:"collect_geo"` CollectIP string `json:"collect_ip"` CollectMaxTpsAndThroughput string `json:"collect_max_tps_and_throughput"` CollectMethods string `json:"collect_methods"` CollectPageLoadTime string `json:"collect_page_load_time"` CollectResponseCodes string `json:"collect_response_codes"` CollectSubnets string `json:"collect_subnets"` CollectURL string `json:"collect_url"` CollectUserAgent string `json:"collect_user_agent"` CollectUserSessions string `json:"collect_user_sessions"` CollectedStatsExternalLogging string `json:"collected_stats_external_logging"` CollectedStatsInternalLogging string `json:"collected_stats_internal_logging"` ExternalLoggingPublisher string `json:"external_logging_publisher"` NotificationByEmail string `json:"notification_by_email"` NotificationBySNMP string `json:"notification_by_snmp"` NotificationBySyslog string `json:"notification_by_syslog"` NotificationEmailAddresses string `json:"notification_email_addresses"` PublishiRuleStatistics string `json:"publish_irule_statistics"` Sampling string `json:"sampling"` SessionCookieSecurity string `json:"session_cookie_security"` SessionTimeoutMinutes int `json:"session_timeout_minutes"` SMTPConfig string `json:"smtp_config"` SubnetMasks string `json:"subnet_masks"` TrafficCapture string `json:"traffic_capture"` } ) func ParseAnalyticsProfile(raw string) (*AnalyticsProfile, error) { p := new(AnalyticsProfile) split := strings.Split(raw, "\n") if !strings.Contains(split[0], "ltm profile analytics") { return nil, errors.New("not an analytics profile") } p.ProfileCommon = parseCommon(raw) for _, line := range split { f := strings.Fields(line) switch strings.ToLower(f[0]) { case "alerts": p.Alerts = strings.Join(f[1:], " ") case "captured-traffic-external-logging": p.CapturedTrafficExternalLogging = strings.Join(f[1:], " ") case "captured-traffic-internal-logging": p.CapturedTrafficInternalLogging = strings.Join(f[1:], " ") case "collect-geo": p.CollectGeo = strings.Join(f[1:], " ") case "collect-ip": p.CollectIP = strings.Join(f[1:], " ") case "collect-max-tps-and-throughput": p.CollectMaxTpsAndThroughput = strings.Join(f[1:], " ") case "collect-methods": p.CollectMethods = strings.Join(f[1:], " ") case "collect-page-load-time": p.CollectPageLoadTime = strings.Join(f[1:], " ") case "collect-response-codes": p.CollectResponseCodes = strings.Join(f[1:], " ") case "collect-subnets": p.CollectSubnets = strings.Join(f[1:], " ") case "collect-url": p.CollectURL = strings.Join(f[1:], " ") case "collect-user-agent": p.CollectUserAgent = strings.Join(f[1:], " ") case "collect-user-sessions": p.CollectUserSessions = strings.Join(f[1:], " ") case "collected-stats-external-logging": p.CollectedStatsExternalLogging = strings.Join(f[1:], " ") case "collected-stats-internal-logging": p.CollectedStatsInternalLogging = strings.Join(f[1:], " ") case "external-logging-publisher": p.ExternalLoggingPublisher = strings.Join(f[1:], " ") case "notification-by-email": p.NotificationByEmail = strings.Join(f[1:], " ") case "notification-by-snmp": p.NotificationBySNMP = strings.Join(f[1:], " ") case "notification-by-syslog": p.NotificationBySyslog = strings.Join(f[1:], " ") case "notification-email-addresses": p.NotificationEmailAddresses = strings.Join(f[1:], " ") case "publish-irule-statistics": p.PublishiRuleStatistics = strings.Join(f[1:], " ") case "sampling": p.Sampling = strings.Join(f[1:], " ") case "session-cookie-security": p.SessionCookieSecurity = strings.Join(f[1:], " ") case "session-timeout-minutes": i, err := strconv.Atoi(f[1]) if err != nil { log.WithField("data", f[1]).Error(err.Error()) return nil, err } p.SessionTimeoutMinutes = i case "smtp-config": p.SMTPConfig = strings.Join(f[1:], " ") case "subnet-masks": p.SubnetMasks = strings.Join(f[1:], " ") case "traffic-capture": p.TrafficCapture = strings.Join(f[1:], " ") } } return p, nil }