private static StoredTargetInfo TryGetStoredTarget( Target target, MetricInfo[] metrics, IMessageLogger messageLogger) { var metricsByType = metrics.ToDictionary(m => m.AttributeType); var result = new List <StoredMetricValue>(metricsByType.Count); foreach (var metricAttribute in target.Method.GetMetadataAttributes <IStoredMetricValue>(true).ToArray()) { if (!metricsByType.ContainsKey(metricAttribute.MetricAttributeType)) { // TODO: improve check for primary metric? if (metricAttribute.MetricAttributeType != MetricInfo.PrimaryMetric.AttributeType) { // TODO: common API for unknown metrics, refactor it to base? var metricName = metricAttribute.MetricAttributeType.GetShortAttributeName(); messageLogger.WriteInfoMessage( target, $"Metric {metricName} not listed in config and therefore is ignored.", $"List of metrics is exposed as {nameof(ICompetitionConfig)}.{nameof(ICompetitionConfig.GetMetrics)}()."); } continue; } // Transport object allows to not hold ref to the attribute. var storedMetric = new StoredMetricValue( metricAttribute.MetricAttributeType, metricAttribute.Min, metricAttribute.Max, metricAttribute.UnitOfMeasurement); result.Add(storedMetric); } return(new StoredTargetInfo(result.ToArray())); }
private static StoredTargetInfo TryGetStoredTarget( Target target, MetricInfo[] metrics, IMessageLogger messageLogger) { var metricsByType = metrics.ToDictionary(m => m.AttributeType); var result = new List <StoredMetricValue>(metricsByType.Count); foreach (var metricAttribute in target.Method.GetMetadataAttributes <IStoredMetricValue>(true).ToArray()) { if (!metricsByType.ContainsKey(metricAttribute.MetricAttributeType)) { // TODO: improve check for primary metric? if (metricAttribute.MetricAttributeType != MetricInfo.PrimaryMetric.AttributeType) { // TODO: common API for unknown metrics, refactor it to base? messageLogger.WriteInfoMessage( target, $"unknown metric {metricAttribute.MetricAttributeType.Name}, ignored."); } continue; } // Transport object used to not hold ref to the attribute. var storedMetric = new StoredMetricValue( metricAttribute.MetricAttributeType, metricAttribute.Min, metricAttribute.Max, metricAttribute.UnitOfMeasurement); result.Add(storedMetric); } return(new StoredTargetInfo(result.ToArray())); }