in internal/graph/graph_scanner.go [81:146]
func (a AprlScanner) getAprlRecommendations(path string) map[string]map[string]models.AprlRecommendation {
r := map[string]map[string]models.AprlRecommendation{}
fsys, err := fs.Sub(embededFiles, path)
if err != nil {
return nil
}
q := map[string]string{}
err = fs.WalkDir(fsys, ".", func(path string, d fs.DirEntry, err error) error {
if err != nil {
return err
}
if !d.IsDir() && strings.HasSuffix(path, ".kql") {
content, err := fs.ReadFile(fsys, path)
if err != nil {
return err
}
fileName := strings.TrimSuffix(d.Name(), ".kql")
q[fileName] = string(content)
}
return nil
})
if err != nil {
return nil
}
err = fs.WalkDir(fsys, ".", func(path string, d fs.DirEntry, err error) error {
if err != nil {
return err
}
if !d.IsDir() && strings.HasSuffix(path, ".yaml") {
content, err := fs.ReadFile(fsys, path)
if err != nil {
return err
}
var recommendations []models.AprlRecommendation
err = yaml.Unmarshal(content, &recommendations)
if err != nil {
return err
}
for _, recommendation := range recommendations {
t := strings.ToLower(recommendation.ResourceType)
if _, ok := r[t]; !ok {
r[t] = map[string]models.AprlRecommendation{}
}
if i, ok := q[recommendation.RecommendationID]; ok {
recommendation.GraphQuery = i
}
r[t][recommendation.RecommendationID] = recommendation
}
}
return nil
})
if err != nil {
return nil
}
return r
}