Skip to content

Commit

Permalink
Merge pull request #111 from Azure/zerolog
Browse files Browse the repository at this point in the history
using zerolog
  • Loading branch information
cmendible authored Jul 4, 2023
2 parents ae7580f + 8c8334a commit b236e0d
Show file tree
Hide file tree
Showing 43 changed files with 186 additions and 151 deletions.
10 changes: 10 additions & 0 deletions cmd/azqr/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,13 @@
package azqr

import (
"os"
"time"

"github.com/spf13/cobra"

"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
)

var (
Expand All @@ -23,5 +29,9 @@ var rootCmd = &cobra.Command{
}

func Execute() {
output := zerolog.ConsoleWriter{Out: os.Stdout, TimeFormat: time.RFC3339}

log.Logger = zerolog.New(output).With().Timestamp().Logger()

cobra.CheckErr(rootCmd.Execute())
}
59 changes: 36 additions & 23 deletions cmd/azqr/scan.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ package azqr
import (
"context"
"fmt"
"log"
"strings"
"sync"
"time"
Expand Down Expand Up @@ -35,6 +34,8 @@ import (
"github.com/Azure/azqr/internal/scanners/sql"
"github.com/Azure/azqr/internal/scanners/st"
"github.com/Azure/azqr/internal/scanners/wps"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"

"github.com/Azure/azqr/internal/renderers"
"github.com/Azure/azure-sdk-for-go/sdk/azcore"
Expand All @@ -54,6 +55,8 @@ func init() {
scanCmd.PersistentFlags().BoolP("costs", "c", false, "Scan Azure Costs")
scanCmd.PersistentFlags().StringP("output-prefix", "o", "azqr_report", "Output file prefix")
scanCmd.PersistentFlags().BoolP("mask", "m", true, "Mask the subscription id in the report")
scanCmd.PersistentFlags().BoolP("debug", "", false, "Set log level to debug")

rootCmd.AddCommand(scanCmd)
}

Expand Down Expand Up @@ -103,9 +106,17 @@ func scan(cmd *cobra.Command, serviceScanners []scanners.IAzureScanner) {
advisor, _ := cmd.Flags().GetBool("advisor")
cost, _ := cmd.Flags().GetBool("costs")
mask, _ := cmd.Flags().GetBool("mask")
debug, _ := cmd.Flags().GetBool("debug")

// Default level for this example is info, unless debug flag is present
zerolog.SetGlobalLevel(zerolog.InfoLevel)
if debug {
zerolog.SetGlobalLevel(zerolog.DebugLevel)
log.Debug().Msg("Debug logging enabled")
}

if subscriptionID == "" && resourceGroupName != "" {
log.Fatal("Resource Group name can only be used with a Subscription Id")
log.Fatal().Msg("Resource Group name can only be used with a Subscription Id")
}

current_time := time.Now()
Expand All @@ -117,7 +128,7 @@ func scan(cmd *cobra.Command, serviceScanners []scanners.IAzureScanner) {

cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
log.Fatal(err)
log.Fatal().Err(err)
}

ctx := context.Background()
Expand All @@ -138,7 +149,7 @@ func scan(cmd *cobra.Command, serviceScanners []scanners.IAzureScanner) {
} else {
subs, err := listSubscriptions(ctx, cred, clientOptions)
if err != nil {
log.Fatal(err)
log.Fatal().Err(err)
}
for _, s := range subs {
subscriptions = append(subscriptions, *s.SubscriptionID)
Expand All @@ -164,17 +175,17 @@ func scan(cmd *cobra.Command, serviceScanners []scanners.IAzureScanner) {
if resourceGroupName != "" {
exists, err := checkExistenceResourceGroup(ctx, s, resourceGroupName, cred, clientOptions)
if err != nil {
log.Fatal(err)
log.Fatal().Err(err)
}

if !exists {
log.Fatalf("Resource Group %s does not exist", resourceGroupName)
log.Fatal().Msgf("Resource Group %s does not exist", resourceGroupName)
}
resourceGroups = append(resourceGroups, resourceGroupName)
} else {
rgs, err := listResourceGroup(ctx, s, cred, clientOptions)
if err != nil {
log.Fatal(err)
log.Fatal().Err(err)
}
for _, rg := range rgs {
resourceGroups = append(resourceGroups, *rg.Name)
Expand All @@ -190,20 +201,20 @@ func scan(cmd *cobra.Command, serviceScanners []scanners.IAzureScanner) {

err = peScanner.Init(config)
if err != nil {
log.Fatal(err)
log.Fatal().Err(err)
}
peResults, err := peScanner.ListResourcesWithPrivateEndpoints()
if err != nil {
log.Fatal(err)
log.Fatal().Err(err)
}

err = diagnosticsScanner.Init(config)
if err != nil {
log.Fatal(err)
log.Fatal().Err(err)
}
diagResults, err := diagnosticsScanner.ListResourcesWithDiagnosticSettings()
if err != nil {
log.Fatal(err)
log.Fatal().Err(err)
}

scanContext := scanners.ScanContext{
Expand All @@ -214,12 +225,12 @@ func scan(cmd *cobra.Command, serviceScanners []scanners.IAzureScanner) {
for _, a := range serviceScanners {
err := a.Init(config)
if err != nil {
log.Fatal(err)
log.Fatal().Err(err)
}
}

for _, r := range resourceGroups {
log.Printf("Scanning Resource Group %s", r)
log.Info().Msgf("Scanning Resource Group %s", r)
var wg sync.WaitGroup
ch := make(chan []scanners.AzureServiceResult, 5)
wg.Add(len(serviceScanners))
Expand All @@ -236,7 +247,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)
log.Fatal().Err(err)
}
ch <- res
}(r, s)
Expand All @@ -251,37 +262,37 @@ func scan(cmd *cobra.Command, serviceScanners []scanners.IAzureScanner) {
if defender {
err = defenderScanner.Init(config)
if err != nil {
log.Fatal(err)
log.Fatal().Err(err)
}

res, err := defenderScanner.ListConfiguration()
if err != nil {
log.Fatal(err)
log.Fatal().Err(err)
}
defenderResults = append(defenderResults, res...)
}

if advisor {
err = advisorScanner.Init(config)
if err != nil {
log.Fatal(err)
log.Fatal().Err(err)
}

rec, err := advisorScanner.ListRecommendations()
if err != nil {
log.Fatal(err)
log.Fatal().Err(err)
}
advisorResults = append(advisorResults, rec...)
}

if cost {
err = costScanner.Init(config)
if err != nil {
log.Fatal(err)
log.Fatal().Err(err)
}
costs, err := costScanner.QueryCosts()
if err != nil {
log.Fatal(err)
log.Fatal().Err(err)
}
if costResult == nil {
costResult = costs
Expand All @@ -305,7 +316,7 @@ func scan(cmd *cobra.Command, serviceScanners []scanners.IAzureScanner) {
xslx := fmt.Sprintf("%s.xlsx", reportData.OutputFileName)
renderers.CreatePBIReport(xslx)

log.Println("Scan completed.")
log.Info().Msg("Scan completed.")
}

func retry(attempts int, sleep time.Duration, a scanners.IAzureScanner, r string, scanContext *scanners.ScanContext) ([]scanners.AzureServiceResult, error) {
Expand All @@ -319,15 +330,17 @@ func retry(attempts int, sleep time.Duration, a scanners.IAzureScanner, r string
errAsString := err.Error()

if strings.Contains(errAsString, "ERROR CODE: Subscription Not Registered") {
log.Println("Subscription Not Registered. Skipping Scan...")
log.Info().Msg("Subscription Not Registered. Skipping Scan...")
return []scanners.AzureServiceResult{}, nil
}

if i >= (attempts - 1) {
log.Printf("Retry limit reached. Error: %s", errAsString)
log.Info().Msgf("Retry limit reached. Error: %s", errAsString)
break
}

log.Debug().Msgf("Retrying after error: %s", errAsString)

time.Sleep(sleep)
sleep *= 2
}
Expand Down
5 changes: 4 additions & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ require (
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/Azure/go-autorest/autorest/to v0.4.0
github.com/rs/zerolog v1.29.1
github.com/spf13/cobra v1.6.1
github.com/xuri/excelize/v2 v2.7.0
golang.org/x/text v0.10.0
Expand All @@ -50,6 +51,8 @@ require (
github.com/google/uuid v1.3.0 // indirect
github.com/inconshreveable/mousetrap v1.0.1 // indirect
github.com/kylelemons/godebug v1.1.0 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.19 // indirect
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect
github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 // indirect
github.com/richardlehane/mscfb v1.0.4 // indirect
Expand All @@ -61,5 +64,5 @@ require (
golang.org/x/crypto v0.7.0 // indirect
golang.org/x/image v0.5.0 // indirect
golang.org/x/net v0.8.0 // indirect
golang.org/x/sys v0.6.0 // indirect
golang.org/x/sys v0.9.0 // indirect
)
19 changes: 18 additions & 1 deletion go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -73,11 +73,13 @@ github.com/Azure/go-autorest/autorest/to v0.4.0 h1:oXVqrxakqqV1UZdSazDOPOLvOIz+X
github.com/Azure/go-autorest/autorest/to v0.4.0/go.mod h1:fE8iZBn7LQR7zH/9XU2NcPR4o9jEImooCeWJcYV/zLE=
github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0 h1:OBhqkivkhkMqLPymWEppkm7vgPQY2XsHoEkaMQ0AdZY=
github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0/go.mod h1:kgDmCTgBzIEPFElEF+FK0SdjAor06dRq2Go927dnQ6o=
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI=
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg=
github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
Expand All @@ -86,17 +88,28 @@ github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7P
github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw=
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8=
github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU=
github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/richardlehane/mscfb v1.0.4 h1:WULscsljNPConisD5hR0+OyZjwK46Pfyr6mPu5ZawpM=
github.com/richardlehane/mscfb v1.0.4/go.mod h1:YzVpcZg9czvAuhk9T+a3avCpcFPMUWm7gK3DypaEsUk=
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/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 Expand Up @@ -137,11 +150,15 @@ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5h
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.9.0 h1:KS/R3tvhPqvJvwcKfnBHJwwthS11LRhmM5D59eEXa0s=
golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ=
Expand Down
10 changes: 5 additions & 5 deletions internal/renderers/advisor.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,16 @@ package renderers

import (
_ "image/png"
"log"

"github.com/rs/zerolog/log"
"github.com/xuri/excelize/v2"
)

func renderAdvisor(f *excelize.File, data ReportData) {
if len(data.AdvisorData) > 0 {
_, err := f.NewSheet("Advisor")
if err != nil {
log.Fatal(err)
log.Fatal().Err(err)
}

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

configureSheet(f, "Advisor", heathers, currentRow)
} else {
log.Println("Skipping Advisor. No data to render")
log.Info().Msg("Skipping Advisor. No data to render")
}
}
Loading

0 comments on commit b236e0d

Please sign in to comment.