func()

in internal/scanners/synw/synw.go [43:115]


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

	workspaces, err := a.listWorkspaces()
	if err != nil {

		return nil, err
	}
	engine := models.RecommendationEngine{}
	rules := a.getWorkspaceRules()
	sqlPoolRules := a.getSqlPoolRules()
	sparkPoolRules := a.getSparkPoolRules()
	results := []models.AzqrServiceResult{}

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

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

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

		sqlPools, err := a.listSqlPools(resourceGroupName, *w.Name)
		if err != nil {
			return nil, err
		}

		for _, s := range sqlPools {
			var result models.AzqrServiceResult
			rr := engine.EvaluateRecommendations(sqlPoolRules, s, scanContext)

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

		sparkPools, err := a.listSparkPools(resourceGroupName, *w.Name)
		if err != nil {
			return nil, err
		}

		for _, s := range sparkPools {
			var result models.AzqrServiceResult
			rr := engine.EvaluateRecommendations(sparkPoolRules, s, scanContext)

			result = models.AzqrServiceResult{
				SubscriptionID:   a.config.SubscriptionID,
				SubscriptionName: a.config.SubscriptionName,
				ResourceGroup:    resourceGroupName,
				ServiceName:      *s.Name,
				Type:             *s.Type,
				Location:         *w.Location,
				Recommendations:  rr,
			}
			results = append(results, result)
		}
	}
	return results, nil
}