internal void InternaltRegisterSpanNamesForCollection(ICollection <string> spanNames)
 {
     lock (samples)
     {
         foreach (string spanName in spanNames)
         {
             if (!samples.ContainsKey(spanName))
             {
                 samples[spanName] = new PerSpanNameSamples();
             }
         }
     }
 }
        public override IList <ISpanData> GetErrorSampledSpans(ISampledSpanStoreErrorFilter filter)
        {
            int numSpansToReturn   = filter.MaxSpansToReturn == 0 ? MAX_PER_SPAN_NAME_SAMPLES : filter.MaxSpansToReturn;
            IList <SpanBase> spans = new List <SpanBase>();

            // Try to not keep the lock to much, do the SpanImpl -> SpanData conversion outside the lock.
            lock (samples) {
                PerSpanNameSamples perSpanNameSamples = samples[filter.SpanName];
                if (perSpanNameSamples != null)
                {
                    spans = perSpanNameSamples.GetErrorSamples(filter.CanonicalCode, numSpansToReturn);
                }
            }
            List <ISpanData> ret = new List <ISpanData>(spans.Count);

            foreach (SpanBase span in spans)
            {
                ret.Add(span.ToSpanData());
            }
            return(ret.AsReadOnly());
        }
        public override void ConsiderForSampling(ISpan ispan)
        {
            SpanBase span = ispan as SpanBase;

            if (span != null)
            {
                lock (samples)
                {
                    string spanName = span.Name;
                    if (span.IsSampleToLocalSpanStore && !samples.ContainsKey(spanName))
                    {
                        samples[spanName] = new PerSpanNameSamples();
                    }
                    samples.TryGetValue(spanName, out PerSpanNameSamples perSpanNameSamples);
                    if (perSpanNameSamples != null)
                    {
                        perSpanNameSamples.ConsiderForSampling(span);
                    }
                }
            }
        }
Пример #4
0
        public override IEnumerable <ISpanData> GetLatencySampledSpans(ISampledSpanStoreLatencyFilter filter)
        {
            int numSpansToReturn   = filter.MaxSpansToReturn == 0 ? MaxPerSpanNameSamples : filter.MaxSpansToReturn;
            IList <SpanBase> spans = new List <SpanBase>();

            // Try to not keep the lock to much, do the SpanImpl -> SpanData conversion outside the lock.
            lock (this.samples)
            {
                PerSpanNameSamples perSpanNameSamples = this.samples[filter.SpanName];
                if (perSpanNameSamples != null)
                {
                    spans = perSpanNameSamples.GetLatencySamples(filter.LatencyLowerNs, filter.LatencyUpperNs, numSpansToReturn);
                }
            }

            List <ISpanData> ret = new List <ISpanData>(spans.Count);

            foreach (SpanBase span in spans)
            {
                ret.Add(span.ToSpanData());
            }

            return(ret.AsReadOnly());
        }
        /// <inheritdoc/>
        public override IEnumerable <SpanData> GetErrorSampledSpans(ISampledSpanStoreErrorFilter filter)
        {
            int numSpansToReturn         = filter.MaxSpansToReturn == 0 ? MaxPerSpanNameSamples : filter.MaxSpansToReturn;
            IEnumerable <SpanBase> spans = Enumerable.Empty <SpanBase>();

            // Try to not keep the lock to much, do the SpanImpl -> SpanData conversion outside the lock.
            lock (this.samples)
            {
                PerSpanNameSamples perSpanNameSamples = this.samples[filter.SpanName];
                if (perSpanNameSamples != null)
                {
                    spans = perSpanNameSamples.GetErrorSamples(filter.CanonicalCode, numSpansToReturn);
                }
            }

            List <SpanData> ret = new List <SpanData>(spans.Count());

            foreach (SpanBase span in spans)
            {
                ret.Add(span.ToSpanData());
            }

            return(ret.AsReadOnly());
        }