/// <summary> /// Initializes an new instance of the PSMetricDefinition class /// </summary> /// <param name="metricDefinition">The MetricDefinition</param> public PSMetricDefinition(MetricDefinition metricDefinition) { // Keep the original value (localized string, Dictionary, List) in the base base.Dimensions = metricDefinition.Dimensions; base.MetricAvailabilities = metricDefinition.MetricAvailabilities; base.Name = metricDefinition.Name; base.Properties = metricDefinition.Properties; this.MetricAvailabilities = new PSAvailabilityCollection(metricDefinition.MetricAvailabilities); this.Name = metricDefinition.Name.ToString(localizedValue: false); this.PrimaryAggregationType = metricDefinition.PrimaryAggregationType; this.Properties = new PSDictionaryElement(metricDefinition.Properties); this.ResourceId = metricDefinition.ResourceId; this.Unit = metricDefinition.Unit; }
/// <summary> /// Initializes an new instance of the PSMetricDefinitionNoDetails class /// </summary> /// <param name="metricDefinition">The MetricDefinition</param> public PSMetricDefinitionNoDetails(MetricDefinition metricDefinition) { // Keep the original value (localized string, Dictionary, List) in the base base.Name = metricDefinition.Name; // Because of the above protected internals these two properties won't show in the output, but they will be there for the base class this.Dimensions = metricDefinition.Dimensions; this.MetricAvailabilities = metricDefinition.MetricAvailabilities; this.Name = metricDefinition.Name != null ? metricDefinition.Name.Value : null; this.PrimaryAggregationType = metricDefinition.PrimaryAggregationType; this.Properties = metricDefinition.Properties; this.ResourceId = metricDefinition.ResourceId; this.Unit = metricDefinition.Unit; }
private static bool IsMetricDefinitionIncluded(MetricFilter filter, MetricDefinition metricDefinition) { return filter == null || filter.DimensionFilters.Any(x => string.Equals(metricDefinition.Name.Value, x.Name, StringComparison.Ordinal)); }
private static bool IsBlobSasMetric(MetricDefinition definition, TimeSpan timeGrain) { MetricAvailability availability = definition.MetricAvailabilities.FirstOrDefault(a => a.TimeGrain.Equals(timeGrain)); // Definition has requested availability, Location is null (non-SAS) or contains SAS key if (availability != null) { return availability.BlobLocation != null; } // Definition has availabilities, but none with the requested timegrain (Bad request) if (definition.MetricAvailabilities.Any()) { throw new InvalidOperationException(string.Format( CultureInfo.InvariantCulture, "MetricDefinition for {0} does not contain an availability with timegrain {1}", definition.Name.Value, timeGrain)); } // Definition has no availablilities (metrics are not configured for this resource), return empty metrics (non-SAS) return false; }
private bool SupportsRequestedDimensions(MetricDefinition definition, MetricFilter filter) { MetricDimension metric = filter.DimensionFilters.FirstOrDefault(df => string.Equals(df.Name, definition.Name.Value, StringComparison.OrdinalIgnoreCase)); var supportedDimensionNames = definition.Dimensions.Select(dim => dim.Name); var supportedDimensionValues = definition.Dimensions.ToDictionary(dim => dim.Name.Value, dim => dim.Values.Select(v => v.Value)); // No dimensions specified for this metric if (metric == null || metric.Dimensions == null) { return true; } foreach (MetricFilterDimension dimension in metric.Dimensions) { // find dimension in definition Dimension d = definition.Dimensions.FirstOrDefault(dim => string.Equals(dim.Name.Value, dimension.Name)); // Dimension name does't show up in definition if (d == null) { return false; } // Requested dimension has any value that don't show up in the values list for the definiton if (dimension.Values.Any(value => !d.Values.Select(v => v.Value).Contains(value, StringComparer.OrdinalIgnoreCase))) { return false; } } return true; }