From eddab9a954a5a97d3a5864b8743d478e04f809e7 Mon Sep 17 00:00:00 2001 From: Mariya Solovey Date: Tue, 21 Apr 2026 16:54:49 +0300 Subject: [PATCH] Fix stats query params: sending_streams[] and add --esps filter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fix stats get: wrong param name streams[] → sending_streams[] (was silently ignored by the API, making --streams filter have no effect) - Add --esps flag (email_service_providers[]) to all 5 stats commands: get, by-domain, by-category, by-esp, by-date - Improve --streams flag description to clarify valid values Co-Authored-By: Claude Opus 4.6 --- internal/commands/stats/by_category.go | 7 ++++++- internal/commands/stats/by_date.go | 7 ++++++- internal/commands/stats/by_domain.go | 7 ++++++- internal/commands/stats/by_esp.go | 7 ++++++- internal/commands/stats/get.go | 17 +++++++++++------ 5 files changed, 35 insertions(+), 10 deletions(-) diff --git a/internal/commands/stats/by_category.go b/internal/commands/stats/by_category.go index f4ee724..7c33553 100644 --- a/internal/commands/stats/by_category.go +++ b/internal/commands/stats/by_category.go @@ -18,6 +18,7 @@ type ByCategoryOptions struct { DomainIDs []string Streams []string Categories []string + ESPs []string } func NewCmdByCategory(f *cmdutil.Factory) *cobra.Command { @@ -50,6 +51,9 @@ func NewCmdByCategory(f *cmdutil.Factory) *cobra.Command { for _, cat := range opts.Categories { params.Add("categories[]", cat) } + for _, esp := range opts.ESPs { + params.Add("email_service_providers[]", esp) + } fullPath := fmt.Sprintf("%s?%s", path, params.Encode()) @@ -68,8 +72,9 @@ func NewCmdByCategory(f *cmdutil.Factory) *cobra.Command { cmd.Flags().StringVar(&opts.StartDate, "start-date", "", "Start date (required)") cmd.Flags().StringVar(&opts.EndDate, "end-date", "", "End date (required)") cmd.Flags().StringSliceVar(&opts.DomainIDs, "domain-ids", nil, "Filter by domain IDs") - cmd.Flags().StringSliceVar(&opts.Streams, "streams", nil, "Filter by streams") + cmd.Flags().StringSliceVar(&opts.Streams, "streams", nil, "Filter by sending streams (e.g. transactional, bulk)") cmd.Flags().StringSliceVar(&opts.Categories, "categories", nil, "Filter by categories") + cmd.Flags().StringSliceVar(&opts.ESPs, "esps", nil, "Filter by email service providers (e.g. Google, Yahoo)") _ = cmd.MarkFlagRequired("start-date") _ = cmd.MarkFlagRequired("end-date") diff --git a/internal/commands/stats/by_date.go b/internal/commands/stats/by_date.go index 195368c..d5a8c0f 100644 --- a/internal/commands/stats/by_date.go +++ b/internal/commands/stats/by_date.go @@ -18,6 +18,7 @@ type ByDateOptions struct { DomainIDs []string Streams []string Categories []string + ESPs []string } func NewCmdByDate(f *cmdutil.Factory) *cobra.Command { @@ -50,6 +51,9 @@ func NewCmdByDate(f *cmdutil.Factory) *cobra.Command { for _, cat := range opts.Categories { params.Add("categories[]", cat) } + for _, esp := range opts.ESPs { + params.Add("email_service_providers[]", esp) + } fullPath := fmt.Sprintf("%s?%s", path, params.Encode()) @@ -68,8 +72,9 @@ func NewCmdByDate(f *cmdutil.Factory) *cobra.Command { cmd.Flags().StringVar(&opts.StartDate, "start-date", "", "Start date (required)") cmd.Flags().StringVar(&opts.EndDate, "end-date", "", "End date (required)") cmd.Flags().StringSliceVar(&opts.DomainIDs, "domain-ids", nil, "Filter by domain IDs") - cmd.Flags().StringSliceVar(&opts.Streams, "streams", nil, "Filter by streams") + cmd.Flags().StringSliceVar(&opts.Streams, "streams", nil, "Filter by sending streams (e.g. transactional, bulk)") cmd.Flags().StringSliceVar(&opts.Categories, "categories", nil, "Filter by categories") + cmd.Flags().StringSliceVar(&opts.ESPs, "esps", nil, "Filter by email service providers (e.g. Google, Yahoo)") _ = cmd.MarkFlagRequired("start-date") _ = cmd.MarkFlagRequired("end-date") diff --git a/internal/commands/stats/by_domain.go b/internal/commands/stats/by_domain.go index d62cfa3..def30a5 100644 --- a/internal/commands/stats/by_domain.go +++ b/internal/commands/stats/by_domain.go @@ -18,6 +18,7 @@ type ByDomainOptions struct { DomainIDs []string Streams []string Categories []string + ESPs []string } func NewCmdByDomain(f *cmdutil.Factory) *cobra.Command { @@ -50,6 +51,9 @@ func NewCmdByDomain(f *cmdutil.Factory) *cobra.Command { for _, cat := range opts.Categories { params.Add("categories[]", cat) } + for _, esp := range opts.ESPs { + params.Add("email_service_providers[]", esp) + } fullPath := fmt.Sprintf("%s?%s", path, params.Encode()) @@ -68,8 +72,9 @@ func NewCmdByDomain(f *cmdutil.Factory) *cobra.Command { cmd.Flags().StringVar(&opts.StartDate, "start-date", "", "Start date (required)") cmd.Flags().StringVar(&opts.EndDate, "end-date", "", "End date (required)") cmd.Flags().StringSliceVar(&opts.DomainIDs, "domain-ids", nil, "Filter by domain IDs") - cmd.Flags().StringSliceVar(&opts.Streams, "streams", nil, "Filter by streams") + cmd.Flags().StringSliceVar(&opts.Streams, "streams", nil, "Filter by sending streams (e.g. transactional, bulk)") cmd.Flags().StringSliceVar(&opts.Categories, "categories", nil, "Filter by categories") + cmd.Flags().StringSliceVar(&opts.ESPs, "esps", nil, "Filter by email service providers (e.g. Google, Yahoo)") _ = cmd.MarkFlagRequired("start-date") _ = cmd.MarkFlagRequired("end-date") diff --git a/internal/commands/stats/by_esp.go b/internal/commands/stats/by_esp.go index da34955..7a8b7bf 100644 --- a/internal/commands/stats/by_esp.go +++ b/internal/commands/stats/by_esp.go @@ -18,6 +18,7 @@ type ByESPOptions struct { DomainIDs []string Streams []string Categories []string + ESPs []string } func NewCmdByESP(f *cmdutil.Factory) *cobra.Command { @@ -50,6 +51,9 @@ func NewCmdByESP(f *cmdutil.Factory) *cobra.Command { for _, cat := range opts.Categories { params.Add("categories[]", cat) } + for _, esp := range opts.ESPs { + params.Add("email_service_providers[]", esp) + } fullPath := fmt.Sprintf("%s?%s", path, params.Encode()) @@ -68,8 +72,9 @@ func NewCmdByESP(f *cmdutil.Factory) *cobra.Command { cmd.Flags().StringVar(&opts.StartDate, "start-date", "", "Start date (required)") cmd.Flags().StringVar(&opts.EndDate, "end-date", "", "End date (required)") cmd.Flags().StringSliceVar(&opts.DomainIDs, "domain-ids", nil, "Filter by domain IDs") - cmd.Flags().StringSliceVar(&opts.Streams, "streams", nil, "Filter by streams") + cmd.Flags().StringSliceVar(&opts.Streams, "streams", nil, "Filter by sending streams (e.g. transactional, bulk)") cmd.Flags().StringSliceVar(&opts.Categories, "categories", nil, "Filter by categories") + cmd.Flags().StringSliceVar(&opts.ESPs, "esps", nil, "Filter by email service providers (e.g. Google, Yahoo)") _ = cmd.MarkFlagRequired("start-date") _ = cmd.MarkFlagRequired("end-date") diff --git a/internal/commands/stats/get.go b/internal/commands/stats/get.go index 57c4cec..fbc926c 100644 --- a/internal/commands/stats/get.go +++ b/internal/commands/stats/get.go @@ -187,11 +187,12 @@ var dateStatsColumns = []output.Column{ } type GetOptions struct { - StartDate string - EndDate string - DomainIDs []string - Streams []string + StartDate string + EndDate string + DomainIDs []string + Streams []string Categories []string + ESPs []string } func NewCmdGet(f *cmdutil.Factory) *cobra.Command { @@ -219,11 +220,14 @@ func NewCmdGet(f *cmdutil.Factory) *cobra.Command { params.Add("sending_domain_ids[]", d) } for _, s := range opts.Streams { - params.Add("streams[]", s) + params.Add("sending_streams[]", s) } for _, cat := range opts.Categories { params.Add("categories[]", cat) } + for _, esp := range opts.ESPs { + params.Add("email_service_providers[]", esp) + } fullPath := fmt.Sprintf("%s?%s", path, params.Encode()) @@ -242,8 +246,9 @@ func NewCmdGet(f *cmdutil.Factory) *cobra.Command { cmd.Flags().StringVar(&opts.StartDate, "start-date", "", "Start date (required)") cmd.Flags().StringVar(&opts.EndDate, "end-date", "", "End date (required)") cmd.Flags().StringSliceVar(&opts.DomainIDs, "domain-ids", nil, "Filter by domain IDs") - cmd.Flags().StringSliceVar(&opts.Streams, "streams", nil, "Filter by streams") + cmd.Flags().StringSliceVar(&opts.Streams, "streams", nil, "Filter by sending streams (e.g. transactional, bulk)") cmd.Flags().StringSliceVar(&opts.Categories, "categories", nil, "Filter by categories") + cmd.Flags().StringSliceVar(&opts.ESPs, "esps", nil, "Filter by email service providers (e.g. Google, Yahoo)") _ = cmd.MarkFlagRequired("start-date") _ = cmd.MarkFlagRequired("end-date")