1export default class UrlBuilder {
2  static buildAzureMonitorGetMetricNamespacesUrl(
3    baseUrl: string,
4    subscriptionId: string,
5    resourceGroup: string,
6    metricDefinition: string,
7    resourceName: string,
8    apiVersion: string
9  ) {
10    const metricDefinitionArray = metricDefinition.split('/');
11    const resourceNameArray = resourceName.split('/');
12    const provider = metricDefinitionArray.shift();
13    const urlArray = [baseUrl, subscriptionId, 'resourceGroups', resourceGroup, 'providers', provider];
14    for (const i in metricDefinitionArray) {
15      urlArray.push(metricDefinitionArray[i]);
16      urlArray.push(resourceNameArray[i]);
17    }
18    const urlPrefix = urlArray.join('/');
19    return `${urlPrefix}/providers/microsoft.insights/metricNamespaces?api-version=${apiVersion}`;
20  }
21
22  static buildAzureMonitorGetMetricNamesUrl(
23    baseUrl: string,
24    subscriptionId: string,
25    resourceGroup: string,
26    metricDefinition: string,
27    resourceName: string,
28    metricNamespace: string,
29    apiVersion: string
30  ) {
31    const metricDefinitionArray = metricDefinition.split('/');
32    const resourceNameArray = resourceName.split('/');
33    const provider = metricDefinitionArray.shift();
34    const urlArray = [baseUrl, subscriptionId, 'resourceGroups', resourceGroup, 'providers', provider];
35    for (const i in metricDefinitionArray) {
36      urlArray.push(metricDefinitionArray[i]);
37      urlArray.push(resourceNameArray[i]);
38    }
39    const urlPrefix = urlArray.join('/');
40    return (
41      `${urlPrefix}/providers/microsoft.insights/metricdefinitions?api-version=${apiVersion}` +
42      `&metricnamespace=${encodeURIComponent(metricNamespace)}`
43    );
44  }
45}
46