private void AddRemainingParametersForWebApps(List <MdmQueryParameters> queryParameters, string resourceId, int seriesResolutionInMinutes)
        {
            var hostArray = resourceId.Split(".");

            if (hostArray.Length < 3)
            {
                return;
            }

            var paramDnsSuffix = new MdmQueryParameters
            {
                query       = $"//*[id='DNSSuffix']",
                replacement = $"{hostArray[1]}.{hostArray[2]}"
            };

            queryParameters.Add(paramDnsSuffix);

            var paramAppName = new MdmQueryParameters
            {
                query       = $"//*[id='appName']",
                replacement = hostArray[0]
            };

            queryParameters.Add(paramAppName);

            var paramTimeResolution = new MdmQueryParameters
            {
                query       = $"//*[id='timeResolution']",
                replacement = seriesResolutionInMinutes.ToString()
            };

            queryParameters.Add(paramTimeResolution);
        }
        private void AddMdmInformationToMetadata(IEnumerable <Tuple <string, string, IEnumerable <KeyValuePair <string, string> > > > definitions,
                                                 DateTime startTimeUtc,
                                                 DateTime endTimeUtc,
                                                 int seriesResolutionInMinutes)
        {
            var    queryParameters = new List <MdmQueryParameters>();
            var    dashboard       = string.Empty;
            string resourceId      = string.Empty;

            foreach (var d in definitions)
            {
                //Item1 - NameSpace
                //Item2 - MetricName

                if (string.IsNullOrWhiteSpace(dashboard))
                {
                    if (d.Item1 == "Microsoft/Web/AppServicePlans")
                    {
                        dashboard = "WAWS Shoebox/App Service Plans/Per Resource Instance";
                    }
                    else if (d.Item1 == "Microsoft/Web/WebApps")
                    {
                        dashboard = "WAWS Shoebox/Web Apps/Per Resource";
                    }
                }

                foreach (var instanceDimension in d.Item3.Where(x => x.Key != "ServerName"))
                {
                    if (string.Equals(instanceDimension.Key, "ResourceId", StringComparison.OrdinalIgnoreCase) &&
                        !string.IsNullOrWhiteSpace(instanceDimension.Value))
                    {
                        resourceId = instanceDimension.Value;
                    }

                    var queryValue = $"//*[id='{instanceDimension.Key}']";
                    if (!queryParameters.Any(x => x.query == queryValue))
                    {
                        var mdmParameter = new MdmQueryParameters
                        {
                            query       = queryValue,
                            replacement = instanceDimension.Value
                        };

                        queryParameters.Add(mdmParameter);
                    }
                }

                if (dashboard == "WAWS Shoebox/Web Apps/Per Resource")
                {
                    AddRemainingParametersForWebApps(queryParameters, resourceId, seriesResolutionInMinutes);
                }
            }

            if (queryParameters.Count > 0 && !string.IsNullOrWhiteSpace(dashboard))
            {
                bool   urlExists    = false;
                string finalUrl     = string.Empty;
                var    urlParmeters = $"dashboard/{dashboard}?overrides={JsonConvert.SerializeObject(queryParameters)}&globalStartTime={GetDateTimeInEpochMilliseconds(startTimeUtc)}&globalEndTime={GetDateTimeInEpochMilliseconds(endTimeUtc)}&pinGlobalTimeRange=true";

                finalUrl = $"https://jarvis-west.dc.ad.msft.net/{urlParmeters} ";

                urlExists = Metadata.PropertyBag.Any(x => x.Key == "Query" &&
                                                     x.Value.GetType() == typeof(DataProviderMetadataQuery) &&
                                                     x.Value.CastTo <DataProviderMetadataQuery>().Url.Equals(finalUrl, StringComparison.OrdinalIgnoreCase));
                if (!urlExists)
                {
                    Metadata.PropertyBag.Add(new KeyValuePair <string, object>("Query", new DataProviderMetadataQuery()
                    {
                        Text = finalUrl, Url = finalUrl
                    }));
                }
            }
        }