Skip to content

Commit f810fcc

Browse files
committed
refactor: consolidate CLI flags into Config struct
- Replace global flag variables with Config struct - Move flag declarations from package level to main() function - Update function signatures to accept Config instead of individual parameters - Pass Config to execCount, sendQuery, and runInteractive functions - Add concurrency field to TUI model for query execution - Update warnInvalidFlagPlacement to accept flags parameter - Return empty results instead of searching for "*" in TUI when query is empty This change improves code organization by grouping related configuration values and reduces function parameter counts, making the codebase more maintainable.
1 parent 1ce9271 commit f810fcc

File tree

2 files changed

+70
-49
lines changed

2 files changed

+70
-49
lines changed

loggly.go

Lines changed: 50 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -57,19 +57,17 @@ const usage = `
5757
/Black(Berry)?/
5858
`
5959

60-
// Command options.
61-
var flags = flag.NewFlagSet("loggly", flag.ExitOnError)
62-
var count = flags.Bool("count", false, "")
63-
var concurrency = flags.Int("concurrency", 3, "")
64-
var versionQuery = flags.Bool("version", false, "")
65-
var tui = flags.Bool("tui", false, "")
66-
var account = flags.String("account", "", "")
67-
var maxPages = flags.Int64("maxPages", 3, "")
68-
var token = flags.String("token", "", "")
69-
var size = flags.Int("size", 100, "")
70-
var from = flags.String("from", "-24h", "")
71-
var to = flags.String("to", "now", "")
72-
var allMsg = flags.Bool("all", false, "")
60+
type Config struct {
61+
Account string
62+
Token string
63+
Size int
64+
From string
65+
To string
66+
Count bool
67+
AllMsg bool
68+
MaxPages int64
69+
Concurrency int
70+
}
7371

7472
// Print usage and exit.
7573
func printUsage() {
@@ -121,9 +119,9 @@ func printLogMSG(events []any) error {
121119
return printJSON(ret)
122120
}
123121

124-
func execCount(ctx context.Context, query string, from string, to string) {
125-
c := search.New(*account, *token)
126-
q := search.NewQuery(query).Size(1).From(from).To(to)
122+
func execCount(ctx context.Context, config Config, query string) {
123+
c := search.New(config.Account, config.Token)
124+
q := search.NewQuery(query).Size(1).From(config.From).To(config.To)
127125
res, err := c.Fetch(ctx, *q)
128126
for {
129127
select {
@@ -140,8 +138,8 @@ func execCount(ctx context.Context, query string, from string, to string) {
140138
}
141139
}
142140

143-
func printRes(res search.Response) {
144-
if *allMsg {
141+
func printRes(allMsg bool, res search.Response) {
142+
if allMsg {
145143
check(printJSON(res.Events))
146144
return
147145
}
@@ -153,15 +151,11 @@ func printRes(res search.Response) {
153151

154152
func sendQuery(
155153
ctx context.Context,
154+
config Config,
156155
query string,
157-
size int,
158-
from string,
159-
to string,
160-
maxPages int64,
161-
concurrency int,
162156
) {
163-
c := search.New(*account, *token).SetConcurrency(concurrency)
164-
q := search.NewQuery(query).Size(size).From(from).To(to).MaxPage(maxPages)
157+
c := search.New(config.Account, config.Token).SetConcurrency(config.Concurrency)
158+
q := search.NewQuery(query).Size(config.Size).From(config.From).To(config.To).MaxPage(config.MaxPages)
165159
res, err := c.Fetch(ctx, *q)
166160

167161
for {
@@ -170,7 +164,7 @@ func sendQuery(
170164
check(ctx.Err())
171165
return
172166
case r := <-res:
173-
printRes(r)
167+
printRes(config.AllMsg, r)
174168
case e := <-err:
175169
check(e)
176170
return
@@ -179,7 +173,7 @@ func sendQuery(
179173

180174
}
181175

182-
func warnInvalidFlagPlacement(args []string) {
176+
func warnInvalidFlagPlacement(flags *flag.FlagSet, args []string) {
183177
currentFlags := make(map[string]bool)
184178
flags.VisitAll(func(f *flag.Flag) {
185179
currentFlags["-"+f.Name] = true
@@ -220,6 +214,19 @@ func contextWithInterrupt(ctx context.Context) (context.Context, context.CancelF
220214
}
221215

222216
func main() {
217+
// Command options.
218+
var flags = flag.NewFlagSet("loggly", flag.ExitOnError)
219+
var count = flags.Bool("count", false, "")
220+
var concurrency = flags.Int("concurrency", 3, "")
221+
var versionQuery = flags.Bool("version", false, "")
222+
var tui = flags.Bool("tui", false, "")
223+
var account = flags.String("account", "", "")
224+
var maxPages = flags.Int64("maxPages", 3, "")
225+
var token = flags.String("token", "", "")
226+
var size = flags.Int("size", 100, "")
227+
var from = flags.String("from", "-24h", "")
228+
var to = flags.String("to", "now", "")
229+
var allMsg = flags.Bool("all", false, "")
223230
flags.Usage = printUsage
224231
flags.Parse(os.Args[1:])
225232

@@ -229,7 +236,7 @@ func main() {
229236
}
230237

231238
args := flags.Args()
232-
warnInvalidFlagPlacement(args)
239+
warnInvalidFlagPlacement(flags, args)
233240
warnHighConcurrency(*concurrency)
234241
query := strings.Join(args, " ")
235242
ctx, cancel := contextWithInterrupt(context.Background())
@@ -238,15 +245,27 @@ func main() {
238245
assert(*account != "", "-account required")
239246
assert(*token != "", "-token required")
240247

248+
config := Config{
249+
Account: *account,
250+
Token: *token,
251+
Size: *size,
252+
From: *from,
253+
To: *to,
254+
Count: *count,
255+
AllMsg: *allMsg,
256+
MaxPages: *maxPages,
257+
Concurrency: *concurrency,
258+
}
259+
241260
if *tui {
242-
runInteractive(ctx, *account, *token, *size, *maxPages, query, *from, *to)
261+
runInteractive(ctx, config, query)
243262
return
244263
}
245264

246265
if *count {
247-
execCount(ctx, query, *from, *to)
266+
execCount(ctx, config, query)
248267
return
249268
}
250269

251-
sendQuery(ctx, query, *size, *from, *to, *maxPages, *concurrency)
270+
sendQuery(ctx, config, query)
252271
}

tui.go

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -134,13 +134,14 @@ func (i valueItem) Title() string { return i.value }
134134
func (i valueItem) Description() string { return fmt.Sprintf("%d occurrences", i.count) }
135135

136136
type model struct {
137-
ctx context.Context
138-
account string
139-
token string
140-
from string
141-
to string
142-
size int
143-
maxPages int64
137+
ctx context.Context
138+
account string
139+
token string
140+
from string
141+
concurrency int
142+
to string
143+
size int
144+
maxPages int64
144145

145146
queryInput textinput.Model
146147
fieldsList list.Model
@@ -196,7 +197,7 @@ var (
196197
Foreground(lipgloss.Color("241"))
197198
)
198199

199-
func initialModel(ctx context.Context, account, token string, size int, maxPages int64, query, from, to string) model {
200+
func initialModel(ctx context.Context, config Config, query string) model {
200201
ti := textinput.New()
201202
ti.Placeholder = "Enter your Loggly query..."
202203
ti.Focus()
@@ -228,12 +229,13 @@ func initialModel(ctx context.Context, account, token string, size int, maxPages
228229

229230
return model{
230231
ctx: ctx,
231-
account: account,
232-
token: token,
233-
size: size,
234-
maxPages: maxPages,
235-
from: from,
236-
to: to,
232+
account: config.Account,
233+
token: config.Token,
234+
size: config.Size,
235+
maxPages: config.MaxPages,
236+
from: config.From,
237+
to: config.To,
238+
concurrency: config.Concurrency,
237239
queryInput: ti,
238240
fieldsList: fieldsList,
239241
valuesList: valuesList,
@@ -512,10 +514,10 @@ func (m *model) executeQuery() tea.Cmd {
512514
return func() tea.Msg {
513515
query := m.queryInput.Value()
514516
if query == "" {
515-
query = "*"
517+
return resultsMsg{results: []map[string]any{}}
516518
}
517519

518-
c := search.New(m.account, m.token).SetConcurrency(1)
520+
c := search.New(m.account, m.token).SetConcurrency(m.concurrency)
519521
q := search.NewQuery(query).Size(m.size).From(m.from).To(m.to).MaxPage(m.maxPages)
520522
resChan, errChan := c.Fetch(m.ctx, *q)
521523

@@ -722,9 +724,9 @@ func (m *model) showDetailView(item resultItem) {
722724
m.detailView.SetContent(string(data))
723725
}
724726

725-
func runInteractive(ctx context.Context, account, token string, size int, maxPages int64, query, from, to string) {
727+
func runInteractive(ctx context.Context, config Config, query string) {
726728
p := tea.NewProgram(
727-
initialModel(ctx, account, token, size, maxPages, query, from, to),
729+
initialModel(ctx, config, query),
728730
tea.WithAltScreen(),
729731
)
730732

0 commit comments

Comments
 (0)