Files
shadowdaoandClaude Sonnet 5.5 962d708fdd Rename Go module paths to repo.anhonesthost.net/CyberCoveLLC/threshold
Rename root, api and sdk module paths (imports, go.mod, go_package,
ldflags, build scripts, buf configs) and regenerate protobuf/gateway
code with the project's pinned toolchain. Wire identifiers unchanged.
api gets a local replace for sdk; root/api/sdk require v0.1.0.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-12 10:33:41 -07:00

157 lines
4.4 KiB
Go

// Copyright IBM Corp. 2020, 2026
// SPDX-License-Identifier: BUSL-1.1
package billingcmd
import (
"fmt"
"strings"
"repo.anhonesthost.net/CyberCoveLLC/threshold/api"
"repo.anhonesthost.net/CyberCoveLLC/threshold/api/billing"
"repo.anhonesthost.net/CyberCoveLLC/threshold/internal/cmd/base"
"github.com/mitchellh/go-wordwrap"
)
func init() {
extraActionsFlagsMapFunc = extraActionsFlagsMapFuncImpl
extraSynopsisFunc = extraSynopsisFuncImpl
extraFlagsFunc = extraFlagsFuncImpl
extraFlagsHandlingFunc = extraFlagsHandlingFuncImpl
executeExtraActions = executeExtraActionsImpl
printCustomActionOutput = printCustomActionOutputImpl
}
type extraCmdVars struct {
flagStartTime string
flagEndTime string
monthlyActiveUsers *billing.MonthlyActiveUsersResult
}
func extraActionsFlagsMapFuncImpl() map[string][]string {
return map[string][]string{
"monthly-active-users": {"start-time", "end-time"},
}
}
func extraSynopsisFuncImpl(c *Command) string {
switch c.Func {
case "monthly-active-users":
var in string
switch {
case strings.HasPrefix(c.Func, "start-time"):
in = "Get monthly active users, starting from this time (YYYY-MM format)."
case strings.HasPrefix(c.Func, "end-time"):
in = "Get monthly active users, ending at this time (YYYY-MM format)."
}
return wordwrap.WrapString(in, base.TermWidth)
default:
return ""
}
}
func extraFlagsFuncImpl(c *Command, _ *base.FlagSets, f *base.FlagSet) {
flagsMap[c.Func] = append(flagsMap[c.Func], "start-time", "end-time")
f.StringVar(&base.StringVar{
Name: "start-time",
Target: &c.flagStartTime,
Usage: "Get monthly active users, starting from this time (YYYY-MM format).",
})
f.StringVar(&base.StringVar{
Name: "end-time",
Target: &c.flagEndTime,
Usage: "Get monthly active users, ending at this time (YYYY-MM format).",
})
}
func extraFlagsHandlingFuncImpl(c *Command, _ *base.FlagSets, opts *[]billing.Option) bool {
switch c.Func {
case "monthly-active-users":
if len(c.flagStartTime) != 0 {
*opts = append(*opts, billing.WithStartTime(c.flagStartTime))
}
if len(c.flagEndTime) != 0 {
*opts = append(*opts, billing.WithEndTime(c.flagEndTime))
}
}
return true
}
func executeExtraActionsImpl(c *Command, origResp *api.Response, origError error, billingClient *billing.Client, _ uint32, opts []billing.Option) (*api.Response, error) {
switch c.Func {
case "monthly-active-users":
var err error
c.monthlyActiveUsers, err = billingClient.MonthlyActiveUsers(c.Context, opts...)
if err != nil {
return nil, err
}
}
return origResp, origError
}
func printCustomActionOutputImpl(c *Command) (bool, error) {
switch c.Func {
case "monthly-active-users":
switch base.Format(c.UI) {
case "table":
items := c.monthlyActiveUsers.GetItems().([]*billing.ActiveUsers)
var ret []string
ret = append(ret, "Billing information:")
ret = append(ret, "")
for i := range items {
ret = append(ret,
fmt.Sprintf(" Count: %d", items[i].Count),
fmt.Sprintf(" Start Time: %s", items[i].StartTime),
fmt.Sprintf(" End Time: %s", items[i].EndTime),
"",
)
}
c.UI.Output(base.WrapForHelpText(ret))
return true, nil
case "json":
if ok := c.PrintJsonItem(c.monthlyActiveUsers.GetResponse()); !ok {
return false, fmt.Errorf("error formatting as JSON")
}
return true, nil
}
}
return false, nil
}
func (c *Command) extraHelpFunc(helpMap map[string]func() string) string {
var helpStr string
switch c.Func {
case "":
helpStr = base.WrapForHelpText([]string{
"Usage: threshold billing [sub command] [options] [args]",
"",
" This command allows for collecting Threshold billing reports. Example:",
"",
" Monthly active users:",
"",
` $ threshold billing monthly-active-users`,
"",
" Please see the billing subcommand help for detailed usage information.",
})
case "monthly-active-users":
helpStr = base.WrapForHelpText([]string{
"Usage: threshold billing monthly-active-users [options]",
"",
" This command allows for collecting active Threshold user reports, by month. Example:",
"",
" Monthly active users between September 2023 and February 2024:",
"",
` $ threshold billing monthly-active-users -start-time="2023-09" -end-time="2024-02"`,
"",
" Please see the billing subcommand help for detailed usage information.",
})
}
return helpStr + c.Flags().Help()
}