Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 9 additions & 3 deletions cli/cmd/network_report.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ replicated network report <network-id> --watch`,

cmd.Flags().BoolVarP(&r.args.networkReportWatch, "watch", "w", false, "Watch for new network events in real-time (polls every 2 seconds)")
cmd.Flags().BoolVar(&r.args.networkReportSummary, "summary", false, "Get aggregated report summary with statistics instead of individual events")
cmd.Flags().BoolVar(&r.args.networkReportShowExternalOnly, "show-external-only", true, "Show only external network traffic")

return cmd
}
Expand All @@ -68,6 +69,11 @@ func (r *runners) getNetworkReport(cmd *cobra.Command, args []string) error {

// Don't call getNetworkIDFromArg here. Reporting API supports short IDs and will also work for networks that have been deleted.

// Validate flags
if r.args.networkReportSummary && cmd.Flags().Lookup("show-external-only").Changed {
return fmt.Errorf("cannot use --show-external-only and --summary flags together")
}

// Get the initial network report or summary depending on args provided
if r.args.networkReportSummary {
return r.getNetworkReportSummary(cmd.Context())
Expand All @@ -77,7 +83,7 @@ func (r *runners) getNetworkReport(cmd *cobra.Command, args []string) error {
}

func (r *runners) getNetworkReportEvents() error {
report, err := r.kotsAPI.GetNetworkReport(r.args.networkReportID)
report, err := r.kotsAPI.GetNetworkReport(r.args.networkReportID, r.args.networkReportShowExternalOnly)
if errors.Cause(err) == platformclient.ErrForbidden {
return ErrCompatibilityMatrixTermsNotAccepted
} else if err != nil {
Expand Down Expand Up @@ -111,9 +117,9 @@ func (r *runners) getNetworkReportEvents() error {
for range time.Tick(2 * time.Second) {
var newReport *types.NetworkReport
if lastEventTime != nil {
newReport, err = r.kotsAPI.GetNetworkReportAfter(r.args.networkReportID, lastEventTime)
newReport, err = r.kotsAPI.GetNetworkReportAfter(r.args.networkReportID, lastEventTime, r.args.networkReportShowExternalOnly)
} else {
newReport, err = r.kotsAPI.GetNetworkReport(r.args.networkReportID)
newReport, err = r.kotsAPI.GetNetworkReport(r.args.networkReportID, r.args.networkReportShowExternalOnly)
}

if err != nil {
Expand Down
7 changes: 4 additions & 3 deletions cli/cmd/runner.go
Original file line number Diff line number Diff line change
Expand Up @@ -254,9 +254,10 @@ type runnerArgs struct {
lsNetworkEndTime string
lsNetworkWatch bool

networkReportID string
networkReportWatch bool
networkReportSummary bool
networkReportID string
networkReportWatch bool
networkReportSummary bool
networkReportShowExternalOnly bool

updateNetworkPolicy string
updateNetworkCollectReport bool
Expand Down
11 changes: 7 additions & 4 deletions pkg/kotsclient/network_report.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,18 @@ import (
"github.com/replicatedhq/replicated/pkg/types"
)

func (c *VendorV3Client) GetNetworkReport(id string) (*types.NetworkReport, error) {
return c.GetNetworkReportAfter(id, nil)
func (c *VendorV3Client) GetNetworkReport(id string, showExternalOnly bool) (*types.NetworkReport, error) {
return c.GetNetworkReportAfter(id, nil, showExternalOnly)
}

func (c *VendorV3Client) GetNetworkReportAfter(id string, after *time.Time) (*types.NetworkReport, error) {
func (c *VendorV3Client) GetNetworkReportAfter(id string, after *time.Time, showExternalOnly bool) (*types.NetworkReport, error) {
urlPath := fmt.Sprintf("/v3/network/%s/report", id)
v := url.Values{}
if after != nil {
v := url.Values{}
v.Set("after", after.Format(time.RFC3339Nano))
}
v.Set("show-external-only", fmt.Sprintf("%t", showExternalOnly))
if len(v) > 0 {
urlPath = fmt.Sprintf("%s?%s", urlPath, v.Encode())
}

Expand Down
Loading