package cmd import ( "fmt" "git.db.org.ai/dborg/internal/formatter" "git.db.org.ai/dborg/internal/models" "github.com/spf13/cobra" ) var moonCmd = &cobra.Command{ Use: "moon [query]", Aliases: []string{"mn"}, Short: "Search moon logs", Long: `Search moon logs with various filters. Requires admin API key.`, Args: argsOrStdin(1), RunE: runMoon, } func init() { rootCmd.AddCommand(moonCmd) moonCmd.Flags().StringP("filename", "F", "", "Filter by filename") moonCmd.Flags().IntP("max_hits", "n", 10, "Maximum number of hits to return") moonCmd.Flags().StringP("sort_by", "s", "", "Sort by field (ingest_timestamp or date_posted)") moonCmd.Flags().StringP("ingest_start_date", "i", "", "Ingest timestamp start date") moonCmd.Flags().StringP("ingest_end_date", "e", "", "Ingest timestamp end date") moonCmd.Flags().StringP("posted_start_date", "p", "", "Date posted start date") moonCmd.Flags().StringP("posted_end_date", "D", "", "Date posted end date") moonCmd.Flags().StringP("format", "f", "json", "Response format (json or custom like 'ulp', 'up', 'pul')") } func runMoon(cmd *cobra.Command, args []string) error { c, err := newClient() if err != nil { return err } filename, _ := cmd.Flags().GetString("filename") maxHits, _ := cmd.Flags().GetInt("max_hits") sortBy, _ := cmd.Flags().GetString("sort_by") if sortBy != "" && sortBy != "ingest_timestamp" && sortBy != "date_posted" { return fmt.Errorf("invalid sort_by value: must be 'ingest_timestamp' or 'date_posted'") } ingestStart, _ := cmd.Flags().GetString("ingest_start_date") ingestEnd, _ := cmd.Flags().GetString("ingest_end_date") postedStart, _ := cmd.Flags().GetString("posted_start_date") postedEnd, _ := cmd.Flags().GetString("posted_end_date") format, _ := cmd.Flags().GetString("format") return forEachQuery(args, func(query string) error { params := &models.MoonParams{ Query: query, Filename: filename, MaxHits: maxHits, SortBy: sortBy, IngestStartDate: ingestStart, IngestEndDate: ingestEnd, PostedStartDate: postedStart, PostedEndDate: postedEnd, Format: format, } response, err := c.SearchMoonLogs(params) if err != nil { return err } if err := checkError(response.Error); err != nil { return err } if params.Format != "json" { fmt.Println(response.Message) return nil } output, err := formatter.FormatMoonResults(response, IsJSONOutput()) if err != nil { return err } printOutput(output) return nil }) }