Skip to content

Commit

Permalink
Simplify resource discovery query building to reduce duplication, but…
Browse files Browse the repository at this point in the history
… still be open (#1164)
  • Loading branch information
tomkerkhove authored Jul 17, 2020
1 parent 0b8d648 commit 2e9a335
Show file tree
Hide file tree
Showing 10 changed files with 20 additions and 27 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -31,20 +31,20 @@ public List<AzureResourceDefinition> 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);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public async Task<List<AzureResourceDefinition>> 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);
Expand Down

0 comments on commit 2e9a335

Please sign in to comment.