Skip to content

Commit a0b0595

Browse files
committed
fix: cost stage now reports dates as expected
1 parent e90b76f commit a0b0595

File tree

8 files changed

+30
-45
lines changed

8 files changed

+30
-45
lines changed

internal/models/models.go

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -122,15 +122,10 @@ type (
122122
SubscriptionID, SubscriptionName, Name, Tier string
123123
}
124124

125-
// CostResult - Cost result
125+
// CostResult - Cost result,
126126
CostResult struct {
127-
From, To time.Time
128-
Items []*CostResultItem
129-
}
130-
131-
// CostResultItem - Cost result,
132-
CostResultItem struct {
133127
SubscriptionID, SubscriptionName, ServiceName, Value, Currency string
128+
From, To time.Time
134129
}
135130

136131
// AdvisorResult - Advisor result

internal/pipeline/stage_cost.go

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ func (s *CostStage) Execute(ctx *ScanContext) error {
2727
costScanner := scanners.CostScanner{}
2828

2929
// Scan costs for all subscriptions
30-
var allCostItems []*models.CostResultItem
30+
var allCosts []*models.CostResult
3131
for subid := range ctx.Subscriptions {
3232
scannerConfig := &models.ScannerConfig{
3333
Ctx: ctx.Ctx,
@@ -36,15 +36,13 @@ func (s *CostStage) Execute(ctx *ScanContext) error {
3636
SubscriptionID: subid,
3737
}
3838
result := costScanner.Scan(scannerConfig)
39-
if result != nil && result.Items != nil {
40-
allCostItems = append(allCostItems, result.Items...)
39+
if len(result) > 0 {
40+
allCosts = append(allCosts, result...)
4141
}
4242
}
4343

4444
// Aggregate all cost items into report data
45-
ctx.ReportData.Cost = &models.CostResult{
46-
Items: allCostItems,
47-
}
45+
ctx.ReportData.Cost = allCosts
4846

4947
return nil
5048
}

internal/renderers/csv/csv_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ func TestCreateCsvReport(t *testing.T) {
3636
Advisor: []*models.AdvisorResult{},
3737
AzurePolicy: []*models.AzurePolicyResult{},
3838
ArcSQL: []*models.ArcSQLResult{},
39-
Cost: &models.CostResult{},
39+
Cost: []*models.CostResult{},
4040
Resources: []*models.Resource{},
4141
ExludedResources: []*models.Resource{},
4242
ResourceTypeCount: []models.ResourceTypeCount{},
@@ -92,7 +92,7 @@ func TestCreateCsvReportWithPlugins(t *testing.T) {
9292
Advisor: []*models.AdvisorResult{},
9393
AzurePolicy: []*models.AzurePolicyResult{},
9494
ArcSQL: []*models.ArcSQLResult{},
95-
Cost: &models.CostResult{},
95+
Cost: []*models.CostResult{},
9696
Resources: []*models.Resource{},
9797
ExludedResources: []*models.Resource{},
9898
ResourceTypeCount: []models.ResourceTypeCount{},

internal/renderers/excel/cost.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ func renderCosts(f *excelize.File, data *renderers.ReportData) {
2929
createFirstRow(f, "Costs", headers)
3030

3131
// Skip if no data to render
32-
if data.Cost == nil || len(data.Cost.Items) == 0 {
32+
if len(data.Cost) == 0 {
3333
log.Info().Msg("Skipping Costs. No data to render")
3434
}
3535

internal/renderers/excel/excel_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ func TestCreateExcelReport(t *testing.T) {
2222
name: "empty report",
2323
data: &renderers.ReportData{
2424
OutputFileName: "test_empty",
25-
Cost: &models.CostResult{},
25+
Cost: []*models.CostResult{},
2626
Stages: models.NewStageConfigs(),
2727
},
2828
checkErr: false,
@@ -31,7 +31,7 @@ func TestCreateExcelReport(t *testing.T) {
3131
name: "report with APRL data",
3232
data: &renderers.ReportData{
3333
OutputFileName: "test_aprl",
34-
Cost: &models.CostResult{},
34+
Cost: []*models.CostResult{},
3535
Stages: models.NewStageConfigs(),
3636
Graph: []*models.GraphResult{
3737
{

internal/renderers/json/json_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ func TestCreateJsonOutput(t *testing.T) {
8080
Advisor: []*models.AdvisorResult{},
8181
AzurePolicy: []*models.AzurePolicyResult{},
8282
ArcSQL: []*models.ArcSQLResult{},
83-
Cost: &models.CostResult{},
83+
Cost: []*models.CostResult{},
8484
Resources: []*models.Resource{},
8585
ExludedResources: []*models.Resource{},
8686
ResourceTypeCount: []models.ResourceTypeCount{},
@@ -119,7 +119,7 @@ func TestCreateJsonReport(t *testing.T) {
119119
Advisor: []*models.AdvisorResult{},
120120
AzurePolicy: []*models.AzurePolicyResult{},
121121
ArcSQL: []*models.ArcSQLResult{},
122-
Cost: &models.CostResult{},
122+
Cost: []*models.CostResult{},
123123
Resources: []*models.Resource{},
124124
ExludedResources: []*models.Resource{},
125125
ResourceTypeCount: []models.ResourceTypeCount{},
@@ -191,7 +191,7 @@ func TestCreateJsonReportWithPlugins(t *testing.T) {
191191
Advisor: []*models.AdvisorResult{},
192192
AzurePolicy: []*models.AzurePolicyResult{},
193193
ArcSQL: []*models.ArcSQLResult{},
194-
Cost: &models.CostResult{},
194+
Cost: []*models.CostResult{},
195195
Resources: []*models.Resource{},
196196
ExludedResources: []*models.Resource{},
197197
ResourceTypeCount: []models.ResourceTypeCount{},

internal/renderers/report_data.go

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ type (
2020
Advisor []*models.AdvisorResult
2121
AzurePolicy []*models.AzurePolicyResult
2222
ArcSQL []*models.ArcSQLResult
23-
Cost *models.CostResult
23+
Cost []*models.CostResult
2424
Recommendations map[string]map[string]models.GraphRecommendation
2525
Resources []*models.Resource
2626
ExludedResources []*models.Resource
@@ -101,10 +101,10 @@ func (rd *ReportData) CostTable() [][]string {
101101
headers := []string{"From", "To", "Subscription Id", "Subscription Name", "Service Name", "Value", "Currency"}
102102

103103
rows := [][]string{}
104-
for _, r := range rd.Cost.Items {
104+
for _, r := range rd.Cost {
105105
row := []string{
106-
rd.Cost.From.Format("2006-01-02"),
107-
rd.Cost.To.Format("2006-01-02"),
106+
r.From.Format("2006-01-02"),
107+
r.To.Format("2006-01-02"),
108108
MaskSubscriptionID(r.SubscriptionID, rd.Mask),
109109
r.SubscriptionName,
110110
r.ServiceName,
@@ -333,11 +333,9 @@ func NewReportData(outputFile string, mask bool, stages *models.StageConfigs) Re
333333
Advisor: []*models.AdvisorResult{},
334334
AzurePolicy: []*models.AzurePolicyResult{},
335335
ArcSQL: []*models.ArcSQLResult{},
336-
Cost: &models.CostResult{
337-
Items: []*models.CostResultItem{},
338-
},
339-
ResourceTypeCount: []models.ResourceTypeCount{},
340-
Stages: stages,
336+
Cost: []*models.CostResult{},
337+
ResourceTypeCount: []models.ResourceTypeCount{},
338+
Stages: stages,
341339
}
342340
}
343341

internal/scanners/cost.go

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ func (s *CostScanner) init(config *models.ScannerConfig) error {
2929
}
3030

3131
// QueryCosts - Query Costs.
32-
func (s *CostScanner) QueryCosts() (*models.CostResult, error) {
32+
func (s *CostScanner) QueryCosts() ([]*models.CostResult, error) {
3333
models.LogSubscriptionScan(s.config.SubscriptionID, "Costs")
3434
timeframeType := armcostmanagement.TimeframeTypeCustom
3535
etype := armcostmanagement.ExportTypeActualCost
@@ -66,28 +66,24 @@ func (s *CostScanner) QueryCosts() (*models.CostResult, error) {
6666
return nil, err
6767
}
6868

69-
result := models.CostResult{
70-
From: fromTime,
71-
To: toTime,
72-
Items: []*models.CostResultItem{},
73-
}
69+
result := []*models.CostResult{}
7470

7571
for _, v := range resp.Properties.Rows {
76-
result.Items = append(result.Items, &models.CostResultItem{
72+
result = append(result, &models.CostResult{
73+
From: fromTime,
74+
To: toTime,
7775
SubscriptionID: s.config.SubscriptionID,
7876
SubscriptionName: s.config.SubscriptionName,
7977
ServiceName: fmt.Sprintf("%v", v[1]),
8078
Value: fmt.Sprintf("%v", v[0]),
8179
Currency: fmt.Sprintf("%v", v[2]),
8280
})
8381
}
84-
return &result, nil
82+
return result, nil
8583
}
8684

87-
func (s *CostScanner) Scan(config *models.ScannerConfig) *models.CostResult {
88-
costResult := &models.CostResult{
89-
Items: []*models.CostResultItem{},
90-
}
85+
func (s *CostScanner) Scan(config *models.ScannerConfig) []*models.CostResult {
86+
costResult := []*models.CostResult{}
9187
err := s.init(config)
9288
if err != nil {
9389
log.Fatal().Err(err).Msg("Failed to initialize Cost Scanner")
@@ -96,8 +92,6 @@ func (s *CostScanner) Scan(config *models.ScannerConfig) *models.CostResult {
9692
if err != nil && !models.ShouldSkipError(err) {
9793
log.Fatal().Err(err).Msg("Failed to query costs")
9894
}
99-
costResult.From = costs.From
100-
costResult.To = costs.To
101-
costResult.Items = append(costResult.Items, costs.Items...)
95+
costResult = append(costResult, costs...)
10296
return costResult
10397
}

0 commit comments

Comments
 (0)