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
}