Skip to content

Commit 73995ba

Browse files
Krishna-Chaitanya4Krishna Chaitanya Yadav Perugu
andauthored
feat(resources): add Azure DocumentDB MongoCluster support (#2713)
Co-authored-by: Krishna Chaitanya Yadav Perugu <[email protected]>
1 parent 9d8c8fa commit 73995ba

File tree

16 files changed

+204
-3
lines changed

16 files changed

+204
-3
lines changed

changelog/content/experimental/unreleased.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ version:
66

77
#### Scraper
88

9-
None.
9+
- {{% tag added %}} Provide support for DocumentDB MongoCluster ([docs](https://docs.promitor.io/scraping/providers/mongo-cluster/))
1010

1111
#### Resource Discovery
1212

13-
None.
13+
- {{% tag added %}} Provide support for DocumentDB MongoCluster ([docs](https://docs.promitor.io/scraping/providers/mongo-cluster/))

changelog/content/released/v2.15.0-scraper.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,4 @@ version: Scraper - v2.15.0
1010
- {{% tag feature %}} Provide new health check based on data freshness
1111
- {{% tag fixed %}} Azure Monitor Scraper: batch based on aggregation in addition to existing criteria
1212

13-
Full release notes can be found [here](https://github.com/tomkerkhove/promitor/releases/tag/Scraper-v2.15.0).
13+
Full release notes can be found [here](https://github.com/tomkerkhove/promitor/releases/tag/Scraper-v2.15.0).

src/Promitor.Agents.ResourceDiscovery/Graph/ResourceDiscoveryFactory.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ public static ResourceDiscoveryQuery UseResourceDiscoveryFor(ResourceType resour
6262
return new LogicAppDiscoveryQuery();
6363
case ResourceType.MariaDb:
6464
return new MariaDbDiscoveryQuery();
65+
case ResourceType.MongoCluster:
66+
return new MongoClusterDiscoveryQuery();
6567
case ResourceType.MonitorAutoscale:
6668
return new MonitorAutoscaleDiscoveryQuery();
6769
case ResourceType.MySql:
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
using GuardNet;
2+
using Newtonsoft.Json.Linq;
3+
using Promitor.Core.Contracts;
4+
using Promitor.Core.Contracts.ResourceTypes;
5+
6+
namespace Promitor.Agents.ResourceDiscovery.Graph.ResourceTypes
7+
{
8+
public class MongoClusterDiscoveryQuery : ResourceDiscoveryQuery
9+
{
10+
public override string[] ResourceTypes => new[] { "microsoft.documentdb/mongoclusters" };
11+
public override string[] ProjectedFieldNames => new[] { "subscriptionId", "resourceGroup", "type", "name" };
12+
13+
public override AzureResourceDefinition ParseResults(JToken resultRowEntry)
14+
{
15+
Guard.NotNull(resultRowEntry, nameof(resultRowEntry));
16+
17+
var resource = new MongoClusterResourceDefinition(resultRowEntry[0]?.ToString(), resultRowEntry[1]?.ToString(), resultRowEntry[3]?.ToString());
18+
return resource;
19+
}
20+
}
21+
}

src/Promitor.Agents.Scraper/Validation/Factories/MetricValidatorFactory.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@ internal static IMetricValidator GetValidatorFor(ResourceType resourceType)
7171
return new LogicAppMetricValidator();
7272
case ResourceType.MariaDb:
7373
return new MariaDbMetricValidator();
74+
case ResourceType.MongoCluster:
75+
return new MongoClusterMetricValidator();
7476
case ResourceType.MonitorAutoscale:
7577
return new MonitorAutoscaleMetricValidator();
7678
case ResourceType.MySql:
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
using System.Collections.Generic;
2+
using System.Linq;
3+
using GuardNet;
4+
using Promitor.Core.Scraping.Configuration.Model.Metrics;
5+
using Promitor.Agents.Scraper.Validation.MetricDefinitions.Interfaces;
6+
using Promitor.Core.Contracts.ResourceTypes;
7+
8+
namespace Promitor.Agents.Scraper.Validation.MetricDefinitions.ResourceTypes
9+
{
10+
internal class MongoClusterMetricValidator : IMetricValidator
11+
{
12+
public IEnumerable<string> Validate(MetricDefinition metricDefinition)
13+
{
14+
Guard.NotNull(metricDefinition, nameof(metricDefinition));
15+
16+
foreach (var resourceDefinition in metricDefinition.Resources.Cast<MongoClusterResourceDefinition>())
17+
{
18+
if (string.IsNullOrWhiteSpace(resourceDefinition.ClusterName))
19+
{
20+
yield return "No Mongo cluster name is configured";
21+
}
22+
}
23+
}
24+
}
25+
}

src/Promitor.Core.Contracts/ResourceType.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,5 +58,6 @@ public enum ResourceType
5858
AzureFirewall = 53,
5959
CognitiveServicesAccount = 54,
6060
DnsZone = 55,
61+
MongoCluster = 56,
6162
}
6263
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
namespace Promitor.Core.Contracts.ResourceTypes
2+
{
3+
public class MongoClusterResourceDefinition : AzureResourceDefinition
4+
{
5+
public MongoClusterResourceDefinition(string subscriptionId, string resourceGroupName, string clusterName)
6+
: base(ResourceType.MongoCluster, subscriptionId, resourceGroupName, clusterName)
7+
{
8+
ClusterName = clusterName;
9+
}
10+
11+
public string ClusterName { get; }
12+
}
13+
}

src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AzureResourceDeserializerFactory.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,9 @@ public IDeserializer<AzureResourceDefinitionV1> GetDeserializerFor(ResourceType
111111
case ResourceType.MariaDb:
112112
var mariaDbLogger = _loggerFactory.CreateLogger<MariaDbDeserializer>();
113113
return new MariaDbDeserializer(mariaDbLogger);
114+
case ResourceType.MongoCluster:
115+
var mongoClusterLogger = _loggerFactory.CreateLogger<MongoClusterDeserializer>();
116+
return new MongoClusterDeserializer(mongoClusterLogger);
114117
case ResourceType.MonitorAutoscale:
115118
var monitorAutoscaleLogger = _loggerFactory.CreateLogger<MonitorAutoscaleDeserializer>();
116119
return new MonitorAutoscaleDeserializer(monitorAutoscaleLogger);

src/Promitor.Core.Scraping/Configuration/Serialization/v1/Mapping/V1MappingProfile.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ public V1MappingProfile()
5757
CreateMap<LogAnalyticsResourceV1, LogAnalyticsResourceDefinition>();
5858
CreateMap<LogicAppResourceV1, LogicAppResourceDefinition>();
5959
CreateMap<MariaDbResourceV1, MariaDbResourceDefinition>();
60+
CreateMap<MongoClusterResourceV1, MongoClusterResourceDefinition>();
6061
CreateMap<MonitorAutoscaleResourceV1, MonitorAutoscaleResourceDefinition>();
6162
CreateMap<MySqlResourceV1, MySqlResourceDefinition>();
6263
CreateMap<NatGatewayResourceV1, NatGatewayResourceDefinition>();
@@ -119,6 +120,7 @@ public V1MappingProfile()
119120
.Include<LogAnalyticsResourceV1, LogAnalyticsResourceDefinition>()
120121
.Include<LogicAppResourceV1, LogicAppResourceDefinition>()
121122
.Include<MariaDbResourceV1, MariaDbResourceDefinition>()
123+
.Include<MongoClusterResourceV1, MongoClusterResourceDefinition>()
122124
.Include<MonitorAutoscaleResourceV1, MonitorAutoscaleResourceDefinition>()
123125
.Include<MySqlResourceV1, MySqlResourceDefinition>()
124126
.Include<NatGatewayResourceV1, NatGatewayResourceDefinition>()

0 commit comments

Comments
 (0)