func()

in internal/scanners/sql/sql.go [45:114]


func (c *SQLScanner) Scan(scanContext *models.ScanContext) ([]models.AzqrServiceResult, error) {
	models.LogSubscriptionScan(c.config.SubscriptionID, c.ResourceTypes()[0])

	sql, err := c.listSQL()
	if err != nil {
		return nil, err
	}
	engine := models.RecommendationEngine{}
	rules := c.getServerRules()
	databaseRules := c.getDatabaseRules()
	poolRules := c.getPoolRules()
	results := []models.AzqrServiceResult{}

	for _, sql := range sql {
		rr := engine.EvaluateRecommendations(rules, sql, scanContext)

		resourceGroupName := models.GetResourceGroupFromResourceID(*sql.ID)

		results = append(results, models.AzqrServiceResult{
			SubscriptionID:  c.config.SubscriptionID,
			ResourceGroup:   resourceGroupName,
			ServiceName:     *sql.Name,
			Type:            *sql.Type,
			Location:        *sql.Location,
			Recommendations: rr,
		})

		pools, err := c.listPools(resourceGroupName, *sql.Name)
		if err != nil {
			return nil, err
		}
		for _, pool := range pools {
			rr := engine.EvaluateRecommendations(poolRules, pool, scanContext)

			results = append(results, models.AzqrServiceResult{
				SubscriptionID:   c.config.SubscriptionID,
				SubscriptionName: c.config.SubscriptionName,
				ResourceGroup:    resourceGroupName,
				ServiceName:      *pool.Name,
				Type:             *pool.Type,
				Location:         *pool.Location,
				Recommendations:  rr,
			})
		}

		databases, err := c.listDatabases(resourceGroupName, *sql.Name)
		if err != nil {
			return nil, err
		}
		for _, database := range databases {
			if strings.ToLower(*database.Name) == "master" {
				continue
			}

			rr := engine.EvaluateRecommendations(databaseRules, database, scanContext)

			results = append(results, models.AzqrServiceResult{
				SubscriptionID:   c.config.SubscriptionID,
				SubscriptionName: c.config.SubscriptionName,
				ResourceGroup:    resourceGroupName,
				ServiceName:      *database.Name,
				Type:             *database.Type,
				Location:         *database.Location,
				Recommendations:  rr,
			})
		}
	}

	return results, nil
}