package main

import (
	"fmt"
	"os"
	"time"

	"github.com/spf13/cobra"
	yaml "gopkg.in/yaml.v2"

	"github.com/directxman12/k8s-prometheus-adapter/cmd/config-gen/utils"
)

func main() {
	var labelPrefix string
	var rateInterval time.Duration

	cmd := &cobra.Command{
		Short: "Generate a config matching the legacy discovery rules",
		Long: `Generate a config that produces the same functionality
as the legacy discovery rules. This includes discovering metrics and associating
resources according to the Kubernetes instrumention conventions and the cAdvisor
conventions, and auto-converting cumulative metrics into rate metrics.`,
		RunE: func(c *cobra.Command, args []string) error {
			cfg := utils.DefaultConfig(rateInterval, labelPrefix)
			enc := yaml.NewEncoder(os.Stdout)
			if err := enc.Encode(cfg); err != nil {
				return err
			}
			return enc.Close()
		},
	}

	cmd.Flags().StringVar(&labelPrefix, "label-prefix", "",
		"Prefix to expect on labels referring to pod resources.  For example, if the prefix is "+
			"'kube_', any series with the 'kube_pod' label would be considered a pod metric")
	cmd.Flags().DurationVar(&rateInterval, "rate-interval", 5*time.Minute,
		"Period of time used to calculate rate metrics from cumulative metrics")

	if err := cmd.Execute(); err != nil {
		fmt.Fprintf(os.Stderr, "Unable to generate config: %v\n", err)
		os.Exit(1)
	}
}
