8
8
"github.com/jedib0t/go-pretty/v6/table"
9
9
"github.com/jedib0t/go-pretty/v6/text"
10
10
"github.com/kaytu-io/kaytu/pkg/plugin/proto/src/golang"
11
+ "github.com/kaytu-io/kaytu/pkg/utils"
11
12
"os"
12
13
"sync"
13
14
"time"
@@ -122,7 +123,7 @@ func getItemString(item *golang.OptimizationItem) string {
122
123
totalSaving += dev .CurrentCost - dev .RightSizedCost
123
124
}
124
125
}
125
- row = append (row , item .Id , item .ResourceType , item .Region , item .Platform , fmt .Sprintf ("$%.2f " , totalSaving ))
126
+ row = append (row , item .Id , item .ResourceType , item .Region , item .Platform , fmt .Sprintf ("$%s " , utils . FormatFloat ( totalSaving ) ))
126
127
t .AppendRow (row )
127
128
itemString += t .Render ()
128
129
itemString += "\n " + bold .Sprint ("Devices" ) + ":"
@@ -196,7 +197,7 @@ func getDeviceString(dev *golang.Device) string {
196
197
t .AppendHeader (headers )
197
198
var row table.Row
198
199
var itemString string
199
- row = append (row , "└─ " + dev .DeviceId , dev .ResourceType , dev .Runtime , dev .CurrentCost , dev .RightSizedCost , fmt .Sprintf ("$%.2f " , dev .CurrentCost - dev .RightSizedCost ))
200
+ row = append (row , "└─ " + dev .DeviceId , dev .ResourceType , dev .Runtime , dev .CurrentCost , dev .RightSizedCost , fmt .Sprintf ("$%s " , utils . FormatFloat ( dev .CurrentCost - dev .RightSizedCost ) ))
200
201
t .AppendRow (row )
201
202
itemString += t .Render ()
202
203
itemString += "\n " + bold .Sprint ("Properties" ) + ":\n " + getPropertiesString (dev .Properties )
@@ -281,29 +282,25 @@ func (v *NonInteractiveView) PublishResultsReady(ready *golang.ResultsReady) {
281
282
v .resultsReady <- ready .Ready
282
283
}
283
284
284
- func (v * NonInteractiveView ) WaitAndShowResults (showResults bool , csvExport bool , jsonExport bool ) error {
285
+ func (v * NonInteractiveView ) WaitAndShowResults (nonInteractiveFlag string ) error {
285
286
go v .WaitForAllItems ()
286
287
go v .WaitForJobs ()
287
288
for {
288
289
select {
289
290
case ready := <- v .resultsReady :
290
291
if ready == true {
291
- if showResults {
292
+ if nonInteractiveFlag == "table" {
292
293
str , err := v .OptimizationsString ()
293
294
if err != nil {
294
295
return err
295
296
}
296
- os .Stderr .WriteString (str )
297
- }
298
- if csvExport {
297
+ os .Stdout .WriteString (str )
298
+ } else if nonInteractiveFlag == "csv" {
299
299
csvHeaders , csvRows := exportCsv (v .items )
300
- file , err := os .Create ("export.csv" )
301
- if err != nil {
302
- return err
303
- }
304
- writer := csv .NewWriter (file )
300
+ out := os .Stdout
301
+ writer := csv .NewWriter (out )
305
302
306
- err = writer .Write (csvHeaders )
303
+ err : = writer .Write (csvHeaders )
307
304
if err != nil {
308
305
return err
309
306
}
@@ -315,12 +312,11 @@ func (v *NonInteractiveView) WaitAndShowResults(showResults bool, csvExport bool
315
312
}
316
313
}
317
314
writer .Flush ()
318
- err = file .Close ()
315
+ err = out .Close ()
319
316
if err != nil {
320
317
return err
321
318
}
322
- }
323
- if jsonExport {
319
+ } else if nonInteractiveFlag == "json" {
324
320
jsonValue := struct {
325
321
Items []* golang.OptimizationItem
326
322
}{
@@ -331,19 +327,21 @@ func (v *NonInteractiveView) WaitAndShowResults(showResults bool, csvExport bool
331
327
return err
332
328
}
333
329
334
- file , err := os .Create ( "export.json" )
330
+ out := os .Stdout
335
331
if err != nil {
336
332
return err
337
333
}
338
334
339
- _ , err = file .Write (jsonData )
335
+ _ , err = out .Write (jsonData )
340
336
if err != nil {
341
337
return err
342
338
}
343
- err = file .Close ()
339
+ err = out .Close ()
344
340
if err != nil {
345
341
return err
346
342
}
343
+ } else {
344
+ os .Stderr .WriteString ("output mode not recognized!" )
347
345
}
348
346
return nil
349
347
}
@@ -427,8 +425,8 @@ func exportCsv(items []*golang.OptimizationItem) ([]string, [][]string) {
427
425
for _ , d := range i .Devices {
428
426
for _ , p := range d .Properties {
429
427
rows = append (rows , []string {
430
- i .Id , i .ResourceType , i .Region , i .Platform , fmt .Sprintf ("$%.2f " , totalSaving ),
431
- d .DeviceId , d .ResourceType , d .Runtime , fmt .Sprintf ("$%.2f " , d .CurrentCost ), fmt .Sprintf ("$%.2f " , d .RightSizedCost ), fmt .Sprintf ("$%.2f " , d .CurrentCost - d .RightSizedCost ),
428
+ i .Id , i .ResourceType , i .Region , i .Platform , fmt .Sprintf ("$%s " , utils . FormatFloat ( totalSaving ) ),
429
+ d .DeviceId , d .ResourceType , d .Runtime , fmt .Sprintf ("$%s " , utils . FormatFloat ( d .CurrentCost )) , fmt .Sprintf ("$%s " , utils . FormatFloat ( d .RightSizedCost )) , fmt .Sprintf ("$%s " , utils . FormatFloat ( d .CurrentCost - d .RightSizedCost ) ),
432
430
p .Key , p .Current , p .Average , p .Max , p .Recommended ,
433
431
})
434
432
}
0 commit comments