// `portr export` — write a one-shot report to stdout in one of several formats.
//
// See mercemay.top/src/portr/ for context.
package cmd
import (
"fmt"
"os"
"github.com/spf13/cobra"
"github.com/mercemay/portr/internal/check"
"github.com/mercemay/portr/internal/output"
"github.com/mercemay/portr/internal/output/json"
"github.com/mercemay/portr/internal/output/prometheus"
"github.com/mercemay/portr/internal/output/table"
)
var exportFormat string
var exportCmd = &cobra.Command{
Use: "export",
Short: "Write one report to stdout (table|json|prometheus)",
RunE: func(cmd *cobra.Command, _ []string) error {
cfg, err := loadConfig()
if err != nil {
return err
}
w, err := pickWriter(exportFormat)
if err != nil {
return err
}
rep, err := check.Run(cmd.Context(), cfg)
if err != nil {
return err
}
return w.Write(os.Stdout, rep)
},
}
func init() {
exportCmd.Flags().StringVarP(&exportFormat, "format", "f", "table", "table|json|prometheus")
}
func pickWriter(format string) (output.Writer, error) {
switch format {
case "table", "":
return table.New(), nil
case "json":
return json.New(true), nil
case "prometheus":
return prometheus.New(""), nil
default:
return nil, fmt.Errorf("export: unknown format %q", format)
}
}