diff --git a/src/Promitor.Agents.ResourceDiscovery/Graph/ResourceDiscoveryQuery.cs b/src/Promitor.Agents.ResourceDiscovery/Graph/ResourceDiscoveryQuery.cs index 70446a3f0..1a90aa24d 100644 --- a/src/Promitor.Agents.ResourceDiscovery/Graph/ResourceDiscoveryQuery.cs +++ b/src/Promitor.Agents.ResourceDiscovery/Graph/ResourceDiscoveryQuery.cs @@ -31,20 +31,20 @@ public List ParseQueryResults(JObject unparsedResults) return foundResources; } - public virtual string DefineQuery(ResourceCriteria criteria) + public virtual GraphQueryBuilder DefineQuery(ResourceCriteria criteria) { - var query = GraphQueryBuilder.ForResourceType(ResourceTypes) + var graphQueryBuilder = GraphQueryBuilder.ForResourceType(ResourceTypes) .WithSubscriptionsWithIds(criteria.Subscriptions) // Filter on queried subscriptions defined in landscape .WithResourceGroupsWithName(criteria.ResourceGroups) .WithinRegions(criteria.Regions) .WithTags(criteria.Tags) - .Project("subscriptionId", "resourceGroup", "type", "name", "id") - .Build(); + .Project(ProjectedFieldNames); - return query; + return graphQueryBuilder; } public abstract string[] ResourceTypes { get; } + public abstract string[] ProjectedFieldNames { get; } public abstract AzureResourceDefinition ParseResults(JToken resultRowEntry); } diff --git a/src/Promitor.Agents.ResourceDiscovery/Graph/ResourceTypes/AppPlanDiscoveryQuery.cs b/src/Promitor.Agents.ResourceDiscovery/Graph/ResourceTypes/AppPlanDiscoveryQuery.cs index 3822112fb..fec528025 100644 --- a/src/Promitor.Agents.ResourceDiscovery/Graph/ResourceTypes/AppPlanDiscoveryQuery.cs +++ b/src/Promitor.Agents.ResourceDiscovery/Graph/ResourceTypes/AppPlanDiscoveryQuery.cs @@ -8,6 +8,7 @@ namespace Promitor.Agents.ResourceDiscovery.Graph.ResourceTypes public class AppPlanDiscoveryQuery : ResourceDiscoveryQuery { public override string[] ResourceTypes => new[] { "microsoft.web/serverfarms" }; + public override string[] ProjectedFieldNames => new[] { "subscriptionId", "resourceGroup", "type", "name" }; public override AzureResourceDefinition ParseResults(JToken resultRowEntry) { diff --git a/src/Promitor.Agents.ResourceDiscovery/Graph/ResourceTypes/AppServiceResourceDiscoveryQuery.cs b/src/Promitor.Agents.ResourceDiscovery/Graph/ResourceTypes/AppServiceResourceDiscoveryQuery.cs index 76bf00205..bbe880d4e 100644 --- a/src/Promitor.Agents.ResourceDiscovery/Graph/ResourceTypes/AppServiceResourceDiscoveryQuery.cs +++ b/src/Promitor.Agents.ResourceDiscovery/Graph/ResourceTypes/AppServiceResourceDiscoveryQuery.cs @@ -5,6 +5,7 @@ namespace Promitor.Agents.ResourceDiscovery.Graph.ResourceTypes public abstract class AppServiceResourceDiscoveryQuery : ResourceDiscoveryQuery { public override string[] ResourceTypes => new[] { "microsoft.web/sites", "microsoft.web/sites/slots" }; + public override string[] ProjectedFieldNames => new[] { "subscriptionId", "resourceGroup", "type", "name", "id" }; public (string AppName, string SlotName) DetermineAppDetails(string resourceName) { diff --git a/src/Promitor.Agents.ResourceDiscovery/Graph/ResourceTypes/ContainerRegistryDiscoveryQuery.cs b/src/Promitor.Agents.ResourceDiscovery/Graph/ResourceTypes/ContainerRegistryDiscoveryQuery.cs index 1ffe40f35..1d12bc25b 100644 --- a/src/Promitor.Agents.ResourceDiscovery/Graph/ResourceTypes/ContainerRegistryDiscoveryQuery.cs +++ b/src/Promitor.Agents.ResourceDiscovery/Graph/ResourceTypes/ContainerRegistryDiscoveryQuery.cs @@ -7,8 +7,8 @@ namespace Promitor.Agents.ResourceDiscovery.Graph.ResourceTypes { public class ContainerRegistryDiscoveryQuery : ResourceDiscoveryQuery { - public static string ResourceType = "microsoft.containerregistry/registries"; public override string[] ResourceTypes => new[] { "microsoft.containerregistry/registries" }; + public override string[] ProjectedFieldNames => new[] { "subscriptionId", "resourceGroup", "type", "name", "id" }; public override AzureResourceDefinition ParseResults(JToken resultRowEntry) { diff --git a/src/Promitor.Agents.ResourceDiscovery/Graph/ResourceTypes/FunctionAppDiscoveryQuery.cs b/src/Promitor.Agents.ResourceDiscovery/Graph/ResourceTypes/FunctionAppDiscoveryQuery.cs index 7a8549b43..fc3d7e5f0 100644 --- a/src/Promitor.Agents.ResourceDiscovery/Graph/ResourceTypes/FunctionAppDiscoveryQuery.cs +++ b/src/Promitor.Agents.ResourceDiscovery/Graph/ResourceTypes/FunctionAppDiscoveryQuery.cs @@ -9,18 +9,12 @@ namespace Promitor.Agents.ResourceDiscovery.Graph.ResourceTypes { public class FunctionAppDiscoveryQuery : AppServiceResourceDiscoveryQuery { - public override string DefineQuery(ResourceCriteria criteria) + public override GraphQueryBuilder DefineQuery(ResourceCriteria criteria) { - var query = GraphQueryBuilder.ForResourceType(ResourceTypes) - .Where("kind", Operator.Contains, "functionapp") - .WithSubscriptionsWithIds(criteria.Subscriptions) // Filter on queried subscriptions defined in landscape - .WithResourceGroupsWithName(criteria.ResourceGroups) - .WithinRegions(criteria.Regions) - .WithTags(criteria.Tags) - .Project("subscriptionId", "resourceGroup", "type", "name") - .Build(); + var graphQueryBuilder = base.DefineQuery(criteria) + .Where("kind", Operator.Contains, "functionapp"); - return query; + return graphQueryBuilder; } public override AzureResourceDefinition ParseResults(JToken resultRowEntry) diff --git a/src/Promitor.Agents.ResourceDiscovery/Graph/ResourceTypes/LogicAppDiscoveryQuery.cs b/src/Promitor.Agents.ResourceDiscovery/Graph/ResourceTypes/LogicAppDiscoveryQuery.cs index bff208941..ac0314d24 100644 --- a/src/Promitor.Agents.ResourceDiscovery/Graph/ResourceTypes/LogicAppDiscoveryQuery.cs +++ b/src/Promitor.Agents.ResourceDiscovery/Graph/ResourceTypes/LogicAppDiscoveryQuery.cs @@ -8,6 +8,7 @@ namespace Promitor.Agents.ResourceDiscovery.Graph.ResourceTypes public class LogicAppDiscoveryQuery : ResourceDiscoveryQuery { public override string[] ResourceTypes => new[] { "microsoft.logic/workflows" }; + public override string[] ProjectedFieldNames => new[] { "subscriptionId", "resourceGroup", "type", "name", "id" }; public override AzureResourceDefinition ParseResults(JToken resultRowEntry) { diff --git a/src/Promitor.Agents.ResourceDiscovery/Graph/ResourceTypes/VirtualMachineDiscoveryQuery.cs b/src/Promitor.Agents.ResourceDiscovery/Graph/ResourceTypes/VirtualMachineDiscoveryQuery.cs index ce5459237..7787f8ac9 100644 --- a/src/Promitor.Agents.ResourceDiscovery/Graph/ResourceTypes/VirtualMachineDiscoveryQuery.cs +++ b/src/Promitor.Agents.ResourceDiscovery/Graph/ResourceTypes/VirtualMachineDiscoveryQuery.cs @@ -8,6 +8,7 @@ namespace Promitor.Agents.ResourceDiscovery.Graph.ResourceTypes public class VirtualMachineDiscoveryQuery : ResourceDiscoveryQuery { public override string[] ResourceTypes => new[] { "microsoft.compute/virtualmachines" }; + public override string[] ProjectedFieldNames => new[] { "subscriptionId", "resourceGroup", "type", "name" }; public override AzureResourceDefinition ParseResults(JToken resultRowEntry) { diff --git a/src/Promitor.Agents.ResourceDiscovery/Graph/ResourceTypes/VirtualMachineScaleSetDiscoveryQuery.cs b/src/Promitor.Agents.ResourceDiscovery/Graph/ResourceTypes/VirtualMachineScaleSetDiscoveryQuery.cs index ec163dda1..4330a7df3 100644 --- a/src/Promitor.Agents.ResourceDiscovery/Graph/ResourceTypes/VirtualMachineScaleSetDiscoveryQuery.cs +++ b/src/Promitor.Agents.ResourceDiscovery/Graph/ResourceTypes/VirtualMachineScaleSetDiscoveryQuery.cs @@ -8,6 +8,7 @@ namespace Promitor.Agents.ResourceDiscovery.Graph.ResourceTypes public class VirtualMachineScaleSetDiscoveryQuery : ResourceDiscoveryQuery { public override string[] ResourceTypes => new[] { "microsoft.compute/virtualmachinescalesets" }; + public override string[] ProjectedFieldNames => new[] { "subscriptionId", "resourceGroup", "type", "name", "id" }; public override AzureResourceDefinition ParseResults(JToken resultRowEntry) { diff --git a/src/Promitor.Agents.ResourceDiscovery/Graph/ResourceTypes/WebAppDiscoveryQuery.cs b/src/Promitor.Agents.ResourceDiscovery/Graph/ResourceTypes/WebAppDiscoveryQuery.cs index 28a226ce8..2adb4bfa6 100644 --- a/src/Promitor.Agents.ResourceDiscovery/Graph/ResourceTypes/WebAppDiscoveryQuery.cs +++ b/src/Promitor.Agents.ResourceDiscovery/Graph/ResourceTypes/WebAppDiscoveryQuery.cs @@ -9,18 +9,12 @@ namespace Promitor.Agents.ResourceDiscovery.Graph.ResourceTypes { public class WebAppDiscoveryQuery : AppServiceResourceDiscoveryQuery { - public override string DefineQuery(ResourceCriteria criteria) + public override GraphQueryBuilder DefineQuery(ResourceCriteria criteria) { - var query = GraphQueryBuilder.ForResourceType(ResourceTypes) - .Where("kind", Operator.DoesNotContain, "functionapp") - .WithSubscriptionsWithIds(criteria.Subscriptions) // Filter on queried subscriptions defined in landscape - .WithResourceGroupsWithName(criteria.ResourceGroups) - .WithinRegions(criteria.Regions) - .WithTags(criteria.Tags) - .Project("subscriptionId", "resourceGroup", "type", "name") - .Build(); + var graphQueryBuilder = base.DefineQuery(criteria) + .Where("kind", Operator.DoesNotContain, "functionapp"); - return query; + return graphQueryBuilder; } public override AzureResourceDefinition ParseResults(JToken resultRowEntry) diff --git a/src/Promitor.Agents.ResourceDiscovery/Repositories/ResourceRepository.cs b/src/Promitor.Agents.ResourceDiscovery/Repositories/ResourceRepository.cs index d60fee5cf..4832a0603 100644 --- a/src/Promitor.Agents.ResourceDiscovery/Repositories/ResourceRepository.cs +++ b/src/Promitor.Agents.ResourceDiscovery/Repositories/ResourceRepository.cs @@ -49,7 +49,7 @@ public async Task> GetResourcesAsync(string resour var resourceDiscovery = ResourceDiscoveryFactory.UseResourceDiscoveryFor(resourceDiscoveryGroupDefinition.Type); // 1. Create query per type - var query = resourceDiscovery.DefineQuery(resourceDiscoveryGroupDefinition.Criteria); + var query = resourceDiscovery.DefineQuery(resourceDiscoveryGroupDefinition.Criteria).Build(); // 2. Run Query var unparsedResults = await _azureResourceGraph.QueryAsync(query);