Skip to content

Commit

Permalink
Fixed #143 & #144
Browse files Browse the repository at this point in the history
  • Loading branch information
cmendible committed Sep 13, 2023
1 parent 2c91668 commit 6fc89c7
Show file tree
Hide file tree
Showing 14 changed files with 62 additions and 87 deletions.
52 changes: 23 additions & 29 deletions cmd/azqr/scan.go
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ func scan(cmd *cobra.Command, serviceScanners []scanners.IAzureScanner) {

cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
log.Fatal().Err(err)
log.Fatal().Err(err).Msg("Failed to get Azure credentials")
}

ctx := context.Background()
Expand All @@ -162,7 +162,7 @@ func scan(cmd *cobra.Command, serviceScanners []scanners.IAzureScanner) {
} else {
subs, err := listSubscriptions(ctx, cred, clientOptions)
if err != nil {
log.Fatal().Err(err)
log.Fatal().Err(err).Msg("Failed to list subscriptions")
}
for _, s := range subs {
subscriptions = append(subscriptions, *s.SubscriptionID)
Expand All @@ -172,7 +172,9 @@ func scan(cmd *cobra.Command, serviceScanners []scanners.IAzureScanner) {
var ruleResults []scanners.AzureServiceResult
var defenderResults []scanners.DefenderResult
var advisorResults []scanners.AdvisorResult
var costResult *scanners.CostResult
costResult := &scanners.CostResult{
Items: []*scanners.CostResultItem{},
}

ctx, cancel := context.WithCancel(ctx)
defer cancel()
Expand All @@ -188,7 +190,7 @@ func scan(cmd *cobra.Command, serviceScanners []scanners.IAzureScanner) {
if resourceGroupName != "" {
exists, err := checkExistenceResourceGroup(ctx, s, resourceGroupName, cred, clientOptions)
if err != nil {
log.Fatal().Err(err)
log.Fatal().Err(err).Msg("Failed to check existence of Resource Group")
}

if !exists {
Expand All @@ -198,7 +200,7 @@ func scan(cmd *cobra.Command, serviceScanners []scanners.IAzureScanner) {
} else {
rgs, err := listResourceGroup(ctx, s, cred, clientOptions)
if err != nil {
log.Fatal().Err(err)
log.Fatal().Err(err).Msg("Failed to list Resource Groups")
}
for _, rg := range rgs {
resourceGroups = append(resourceGroups, *rg.Name)
Expand All @@ -214,27 +216,27 @@ func scan(cmd *cobra.Command, serviceScanners []scanners.IAzureScanner) {

err = peScanner.Init(config)
if err != nil {
log.Fatal().Err(err)
log.Fatal().Err(err).Msg("Failed to initialize Private Endpoint Scanner")
}
peResults, err := peScanner.ListResourcesWithPrivateEndpoints()
if err != nil {
if shouldSkipError(err) {
peResults = map[string]bool{}
} else {
log.Fatal().Err(err)
log.Fatal().Err(err).Msg("Failed to list resources with Private Endpoints")
}
}

err = diagnosticsScanner.Init(config)
if err != nil {
log.Fatal().Err(err)
log.Fatal().Err(err).Msg("Failed to initialize Diagnostic Settings Scanner")
}
diagResults, err := diagnosticsScanner.ListResourcesWithDiagnosticSettings()
if err != nil {
if shouldSkipError(err) {
diagResults = map[string]bool{}
} else {
log.Fatal().Err(err)
log.Fatal().Err(err).Msg("Failed to list resources with Diagnostic Settings")
}
}

Expand All @@ -246,7 +248,7 @@ func scan(cmd *cobra.Command, serviceScanners []scanners.IAzureScanner) {
for _, a := range serviceScanners {
err := a.Init(config)
if err != nil {
log.Fatal().Err(err)
log.Fatal().Err(err).Msg("Failed to initialize scanner")
}
}

Expand All @@ -268,7 +270,7 @@ func scan(cmd *cobra.Command, serviceScanners []scanners.IAzureScanner) {
res, err := retry(3, 10*time.Millisecond, s, r, &scanContext)
if err != nil {
cancel()
log.Fatal().Err(err)
log.Fatal().Err(err).Msg("Failed to scan")
}
ch <- res
}(r, s)
Expand All @@ -283,15 +285,15 @@ func scan(cmd *cobra.Command, serviceScanners []scanners.IAzureScanner) {
if defender {
err = defenderScanner.Init(config)
if err != nil {
log.Fatal().Err(err)
log.Fatal().Err(err).Msg("Failed to initialize Defender Scanner")
}

res, err := defenderScanner.ListConfiguration()
if err != nil {
if shouldSkipError(err) {
res = []scanners.DefenderResult{}
} else {
log.Fatal().Err(err)
log.Fatal().Err(err).Msg("Failed to list Defender configuration")
}
}
defenderResults = append(defenderResults, res...)
Expand All @@ -300,15 +302,15 @@ func scan(cmd *cobra.Command, serviceScanners []scanners.IAzureScanner) {
if advisor {
err = advisorScanner.Init(config)
if err != nil {
log.Fatal().Err(err)
log.Fatal().Err(err).Msg("Failed to initialize Advisor Scanner")
}

rec, err := advisorScanner.ListRecommendations()
if err != nil {
if shouldSkipError(err) {
rec = []scanners.AdvisorResult{}
} else {
log.Fatal().Err(err)
log.Fatal().Err(err).Msg("Failed to list Advisor recommendations")
}
}
advisorResults = append(advisorResults, rec...)
Expand All @@ -317,23 +319,15 @@ func scan(cmd *cobra.Command, serviceScanners []scanners.IAzureScanner) {
if cost {
err = costScanner.Init(config)
if err != nil {
log.Fatal().Err(err)
log.Fatal().Err(err).Msg("Failed to initialize Cost Scanner")
}
costs, err := costScanner.QueryCosts()
if err != nil {
if shouldSkipError(err) {
costs = &scanners.CostResult{
Items: []*scanners.CostResultItem{},
}
} else {
log.Fatal().Err(err)
}
}
if costResult == nil {
costResult = costs
} else {
costResult.Items = append(costResult.Items, costs.Items...)
if err != nil && !shouldSkipError(err) {
log.Fatal().Err(err).Msg("Failed to query costs")
}
costResult.From = costs.From
costResult.To = costs.To
costResult.Items = append(costResult.Items, costs.Items...)
}
}

Expand Down
2 changes: 1 addition & 1 deletion docs/scan_results/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,4 +84,4 @@ This section shows the Azure Advisor Recommendations with the following informat

## Costs

Shows the Azure Costs for the period between the 1st day of the previous month and the day **Azure Quick Review (azqr)** is used to scan the services.
Displays the Azure Actual Costs for the period from the first day of the current month until the day Azure Quick Review (azqr) is used.
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ require (
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.1.0
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/subscription/armsubscription v1.0.0
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/webpubsub/armwebpubsub v1.0.0
github.com/rs/zerolog v1.29.1
github.com/rs/zerolog v1.30.0
github.com/spf13/cobra v1.6.1
github.com/xuri/excelize/v2 v2.7.0
golang.org/x/text v0.10.0
Expand Down
6 changes: 3 additions & 3 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -113,9 +113,9 @@ github.com/richardlehane/mscfb v1.0.4/go.mod h1:YzVpcZg9czvAuhk9T+a3avCpcFPMUWm7
github.com/richardlehane/msoleps v1.0.1/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg=
github.com/richardlehane/msoleps v1.0.3 h1:aznSZzrwYRl3rLKRT3gUk9am7T/mLNSnJINvN0AQoVM=
github.com/richardlehane/msoleps v1.0.3/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg=
github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
github.com/rs/zerolog v1.29.1 h1:cO+d60CHkknCbvzEWxP0S9K6KqyTjrCNUy1LdQLCGPc=
github.com/rs/zerolog v1.29.1/go.mod h1:Le6ESbR7hc+DP6Lt1THiV8CQSdkkNrd3R0XbEgp3ZBU=
github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
github.com/rs/zerolog v1.30.0 h1:SymVODrcRsaRaSInD9yQtKbtWqwsfoPcRff/oRXLj4c=
github.com/rs/zerolog v1.30.0/go.mod h1:/tk+P47gFdPXq4QYjvCmT5/Gsug2nagsFWBWhAiSi1w=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA=
github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY=
Expand Down
6 changes: 3 additions & 3 deletions internal/renderers/advisor.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ func renderAdvisor(f *excelize.File, data ReportData) {
if len(data.AdvisorData) > 0 {
_, err := f.NewSheet("Advisor")
if err != nil {
log.Fatal().Err(err)
log.Fatal().Err(err).Msg("Failed to create Advisor sheet")
}

headers := data.AdvisorData[0].GetProperties()
Expand All @@ -31,11 +31,11 @@ func renderAdvisor(f *excelize.File, data ReportData) {
currentRow += 1
cell, err := excelize.CoordinatesToCellName(1, currentRow)
if err != nil {
log.Fatal().Err(err)
log.Fatal().Err(err).Msg("Failed to get cell")
}
err = f.SetSheetRow("Advisor", cell, &row)
if err != nil {
log.Fatal().Err(err)
log.Fatal().Err(err).Msg("Failed to set row")
}
}

Expand Down
10 changes: 5 additions & 5 deletions internal/renderers/cost.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ func renderCosts(f *excelize.File, data ReportData) {
if data.CostData != nil && len(data.CostData.Items) > 0 {
_, err := f.NewSheet("Costs")
if err != nil {
log.Fatal().Err(err)
log.Fatal().Err(err).Msg("Failed to create Costs sheet")
}

headers := data.CostData.GetProperties()
Expand All @@ -29,27 +29,27 @@ func renderCosts(f *excelize.File, data ReportData) {

cell, err := excelize.CoordinatesToCellName(2, 1)
if err != nil {
log.Fatal().Err(err)
log.Fatal().Err(err).Msg("Failed to get cell")
}

err = f.SetCellDefault(
"Costs",
cell,
fmt.Sprintf("Costs from %s to %s", data.CostData.From.Format("2006-01-02"), data.CostData.To.Format("2006-01-02")))
if err != nil {
log.Fatal().Err(err)
log.Fatal().Err(err).Msg("Failed to set cell")
}

currentRow := 4
for _, row := range rows {
currentRow += 1
cell, err := excelize.CoordinatesToCellName(1, currentRow)
if err != nil {
log.Fatal().Err(err)
log.Fatal().Err(err).Msg("Failed to get cell")
}
err = f.SetSheetRow("Costs", cell, &row)
if err != nil {
log.Fatal().Err(err)
log.Fatal().Err(err).Msg("Failed to set row")
}
}

Expand Down
6 changes: 3 additions & 3 deletions internal/renderers/defender.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ func renderDefender(f *excelize.File, data ReportData) {
if len(data.DefenderData) > 0 {
_, err := f.NewSheet("Defender")
if err != nil {
log.Fatal().Err(err)
log.Fatal().Err(err).Msg("Failed to create Defender sheet")
}

headers := data.DefenderData[0].GetProperties()
Expand All @@ -31,11 +31,11 @@ func renderDefender(f *excelize.File, data ReportData) {
currentRow += 1
cell, err := excelize.CoordinatesToCellName(1, currentRow)
if err != nil {
log.Fatal().Err(err)
log.Fatal().Err(err).Msg("Failed to get cell")
}
err = f.SetSheetRow("Defender", cell, &row)
if err != nil {
log.Fatal().Err(err)
log.Fatal().Err(err).Msg("Failed to set row")
}
}

Expand Down
18 changes: 9 additions & 9 deletions internal/renderers/excel.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ func CreateExcelReport(data ReportData) {
f := excelize.NewFile()
defer func() {
if err := f.Close(); err != nil {
log.Fatal().Err(err)
log.Fatal().Err(err).Msg("Failed to close Excel file")
}
}()

Expand All @@ -31,7 +31,7 @@ func CreateExcelReport(data ReportData) {
renderCosts(f, data)

if err := f.SaveAs(filename); err != nil {
log.Fatal().Err(err)
log.Fatal().Err(err).Msg("Failed to save Excel file")
}
}

Expand Down Expand Up @@ -74,20 +74,20 @@ func createFirstRow(f *excelize.File, sheet string, headers []string) {
currentRow := 4
cell, err := excelize.CoordinatesToCellName(1, currentRow)
if err != nil {
log.Fatal().Err(err)
log.Fatal().Err(err).Msg("Failed to get cell")
}
err = f.SetSheetRow(sheet, cell, &headers)
if err != nil {
log.Fatal().Err(err)
log.Fatal().Err(err).Msg("Failed to set row")
}
font := excelize.Font{Bold: true}
style, err := f.NewStyle(&excelize.Style{Font: &font})
if err != nil {
log.Fatal().Err(err)
log.Fatal().Err(err).Msg("Failed to create style")
}
err = f.SetRowStyle(sheet, 4, 4, style)
if err != nil {
log.Fatal().Err(err)
log.Fatal().Err(err).Msg("Failed to set style")
}
}

Expand All @@ -107,11 +107,11 @@ func configureSheet(f *excelize.File, sheet string, headers []string, currentRow

cell, err := excelize.CoordinatesToCellName(len(headers), currentRow)
if err != nil {
log.Fatal().Err(err)
log.Fatal().Err(err).Msg("Failed to get cell")
}
err = f.AutoFilter(sheet, fmt.Sprintf("A4:%s", cell), nil)
if err != nil {
log.Fatal().Err(err)
log.Fatal().Err(err).Msg("Failed to set autofilter")
}

logo := embeded.GetTemplates("microsoft.png")
Expand All @@ -121,6 +121,6 @@ func configureSheet(f *excelize.File, sheet string, headers []string, currentRow
Positioning: "absolute",
}
if err := f.AddPictureFromBytes(sheet, "A1", "Azure Logo", ".png", logo, opt); err != nil {
log.Fatal().Err(err)
log.Fatal().Err(err).Msg("Failed to add logo")
}
}
6 changes: 3 additions & 3 deletions internal/renderers/overview.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ func renderOverview(f *excelize.File, data ReportData) {
if len(data.MainData) > 0 {
err := f.SetSheetName("Sheet1", "Overview")
if err != nil {
log.Fatal().Err(err)
log.Fatal().Err(err).Msg("Failed to rename sheet")
}

headers := data.MainData[0].GetHeaders()
Expand All @@ -31,11 +31,11 @@ func renderOverview(f *excelize.File, data ReportData) {
currentRow += 1
cell, err := excelize.CoordinatesToCellName(1, currentRow)
if err != nil {
log.Fatal().Err(err)
log.Fatal().Err(err).Msg("Failed to get cell")
}
err = f.SetSheetRow("Overview", cell, &row)
if err != nil {
log.Fatal().Err(err)
log.Fatal().Err(err).Msg("Failed to set row")
}
}

Expand Down
6 changes: 3 additions & 3 deletions internal/renderers/recommendations.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ func renderRecommendations(f *excelize.File, data ReportData) {
if len(data.MainData) > 0 {
_, err := f.NewSheet("Recommendations")
if err != nil {
log.Fatal().Err(err)
log.Fatal().Err(err).Msg("Failed to create Recommendations sheet")
}

renderedRules := map[string]bool{}
Expand Down Expand Up @@ -46,11 +46,11 @@ func renderRecommendations(f *excelize.File, data ReportData) {
currentRow += 1
cell, err := excelize.CoordinatesToCellName(1, currentRow)
if err != nil {
log.Fatal().Err(err)
log.Fatal().Err(err).Msg("Failed to get cell")
}
err = f.SetSheetRow("Recommendations", cell, &row)
if err != nil {
log.Fatal().Err(err)
log.Fatal().Err(err).Msg("Failed to set row")
}

setHyperLink(f, "Recommendations", 6, currentRow)
Expand Down
Loading

0 comments on commit 6fc89c7

Please sign in to comment.