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
}