func MetricsCommand()

in internal/onetime/configure/oracle/metrics.go [32:94]


func MetricsCommand(cfg *cliconfig.Configure) *cobra.Command {
	var (
		enableMetrics       bool
		metricsFrequency    time.Duration
		metricsMaxThreads   int64
		metricsQueryTimeout time.Duration
	)

	metricsCmd := &cobra.Command{
		Use:   "metrics",
		Short: "Configure Oracle metrics collection",
		Long: `Configure Oracle metrics collection settings.

This includes enabling metrics, setting the collection frequency,
managing connection parameters, and adding/removing SQL queries.`,
		Run: func(cmd *cobra.Command, args []string) {
			cfg.ValidateOracleMetrics()

			if cmd.Flags().Changed("frequency") {
				msg := fmt.Sprintf("Oracle Metrics Frequency: %v", metricsFrequency)
				cfg.LogToBoth(cmd.Context(), msg)
				cfg.Configuration.OracleConfiguration.OracleMetrics.CollectionFrequency = dpb.New(metricsFrequency)
				cfg.OracleConfigModified = true
			}
			if cmd.Flags().Changed("max-threads") {
				msg := fmt.Sprintf("Oracle Metrics Max Threads: %v", metricsMaxThreads)
				cfg.LogToBoth(cmd.Context(), msg)
				cfg.Configuration.OracleConfiguration.OracleMetrics.MaxExecutionThreads = metricsMaxThreads
				cfg.OracleConfigModified = true
			}
			if cmd.Flags().Changed("query-timeout") {
				msg := fmt.Sprintf("Oracle Metrics Query Timeout: %v", metricsQueryTimeout)
				cfg.LogToBoth(cmd.Context(), msg)
				cfg.Configuration.OracleConfiguration.OracleMetrics.QueryTimeout = dpb.New(metricsQueryTimeout)
				cfg.OracleConfigModified = true
			}

			if cmd.Flags().Changed("enabled") {
				// If metrics are enabled, but there are no connection parameters, disable metrics.
				if enableMetrics && (cfg.Configuration.OracleConfiguration.GetOracleMetrics().GetConnectionParameters() == nil ||
					len(cfg.Configuration.OracleConfiguration.GetOracleMetrics().GetConnectionParameters()) == 0) {
					cfg.LogToBoth(cmd.Context(), "Metrics Enabled, but no connection parameters found.  Disabling metrics.")
					enableMetrics = false
				}
				msg := fmt.Sprintf("Oracle Metrics Enabled: %v", enableMetrics)
				cfg.LogToBoth(cmd.Context(), msg)
				cfg.Configuration.OracleConfiguration.OracleMetrics.Enabled = &enableMetrics
				cfg.OracleConfigModified = true
			}
		},
	}

	// Add flags for the metrics
	metricsCmd.Flags().BoolVar(&enableMetrics, "enabled", false, "Enable Oracle metrics")
	metricsCmd.Flags().DurationVar(&metricsFrequency, "frequency", time.Duration(configuration.DefaultOracleMetricsFrequency), "Metrics update frequency (e.g., 5m, 1h)")
	metricsCmd.Flags().Int64Var(&metricsMaxThreads, "max-threads", int64(configuration.DefaultOracleMetricsMaxThreads), "Maximum number of threads to use for metrics collection")
	metricsCmd.Flags().DurationVar(&metricsQueryTimeout, "query-timeout", time.Duration(configuration.DefaultOracleMetricsQueryTimeout), "Query timeout")

	// Add subcommands for managing connections and queries
	metricsCmd.AddCommand(newMetricsConnectionAddCmd(cfg))

	return metricsCmd
}