...

Text file src/go.opentelemetry.io/otel/internal/shared/otlp/otlptrace/otlptracetest/collector.go.tmpl

Documentation: go.opentelemetry.io/otel/internal/shared/otlp/otlptrace/otlptracetest

     1// Code created by gotmpl. DO NOT MODIFY.
     2// source: internal/shared/otlp/otlptrace/otlptracetest/collector.go.tmpl
     3
     4// Copyright The OpenTelemetry Authors
     5//
     6// Licensed under the Apache License, Version 2.0 (the "License");
     7// you may not use this file except in compliance with the License.
     8// You may obtain a copy of the License at
     9//
    10//     http://www.apache.org/licenses/LICENSE-2.0
    11//
    12// Unless required by applicable law or agreed to in writing, software
    13// distributed under the License is distributed on an "AS IS" BASIS,
    14// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    15// See the License for the specific language governing permissions and
    16// limitations under the License.
    17
    18package otlptracetest
    19
    20import (
    21	"sort"
    22
    23	collectortracepb "go.opentelemetry.io/proto/otlp/collector/trace/v1"
    24	commonpb "go.opentelemetry.io/proto/otlp/common/v1"
    25	resourcepb "go.opentelemetry.io/proto/otlp/resource/v1"
    26	tracepb "go.opentelemetry.io/proto/otlp/trace/v1"
    27)
    28
    29// TracesCollector mocks a collector for the end-to-end testing.
    30type TracesCollector interface {
    31	Stop() error
    32	GetResourceSpans() []*tracepb.ResourceSpans
    33}
    34
    35// SpansStorage stores the spans. Mock collectors can use it to
    36// store spans they have received.
    37type SpansStorage struct {
    38	rsm       map[string]*tracepb.ResourceSpans
    39	spanCount int
    40}
    41
    42// NewSpansStorage creates a new spans storage.
    43func NewSpansStorage() SpansStorage {
    44	return SpansStorage{
    45		rsm: make(map[string]*tracepb.ResourceSpans),
    46	}
    47}
    48
    49// AddSpans adds spans to the spans storage.
    50func (s *SpansStorage) AddSpans(request *collectortracepb.ExportTraceServiceRequest) {
    51	for _, rs := range request.GetResourceSpans() {
    52		rstr := resourceString(rs.Resource)
    53		if existingRs, ok := s.rsm[rstr]; !ok {
    54			s.rsm[rstr] = rs
    55			// TODO (rghetia): Add support for library Info.
    56			if len(rs.ScopeSpans) == 0 {
    57				rs.ScopeSpans = []*tracepb.ScopeSpans{
    58					{
    59						Spans: []*tracepb.Span{},
    60					},
    61				}
    62			}
    63			s.spanCount += len(rs.ScopeSpans[0].Spans)
    64		} else {
    65			if len(rs.ScopeSpans) > 0 {
    66				newSpans := rs.ScopeSpans[0].GetSpans()
    67				existingRs.ScopeSpans[0].Spans = append(existingRs.ScopeSpans[0].Spans, newSpans...)
    68				s.spanCount += len(newSpans)
    69			}
    70		}
    71	}
    72}
    73
    74// GetSpans returns the stored spans.
    75func (s *SpansStorage) GetSpans() []*tracepb.Span {
    76	spans := make([]*tracepb.Span, 0, s.spanCount)
    77	for _, rs := range s.rsm {
    78		spans = append(spans, rs.ScopeSpans[0].Spans...)
    79	}
    80	return spans
    81}
    82
    83// GetResourceSpans returns the stored resource spans.
    84func (s *SpansStorage) GetResourceSpans() []*tracepb.ResourceSpans {
    85	rss := make([]*tracepb.ResourceSpans, 0, len(s.rsm))
    86	for _, rs := range s.rsm {
    87		rss = append(rss, rs)
    88	}
    89	return rss
    90}
    91
    92func resourceString(res *resourcepb.Resource) string {
    93	sAttrs := sortedAttributes(res.GetAttributes())
    94	rstr := ""
    95	for _, attr := range sAttrs {
    96		rstr = rstr + attr.String()
    97	}
    98	return rstr
    99}
   100
   101func sortedAttributes(attrs []*commonpb.KeyValue) []*commonpb.KeyValue {
   102	sort.Slice(attrs[:], func(i, j int) bool {
   103		return attrs[i].Key < attrs[j].Key
   104	})
   105	return attrs
   106}

View as plain text