Ejemplo n.º 1
0
        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()));
        }
Ejemplo n.º 2
0
        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()));
        }