Пример #1
0
        public static unsafe CEventTrace.SpanId ConvertSpanId(SpanId spanId)
        {
            var internalSpanId = new CEventTrace.SpanId();

            ApiInterop.Memcpy(internalSpanId.Data, spanId.Data, SpanId.SpanIdSize);
            return(internalSpanId);
        }
Пример #2
0
        // Returns the SpanId of the newly-created Span in the EventTracer
        public SpanId AddSpan(SpanId[] causes)
        {
            unsafe
            {
                if (causes == null)
                {
                    return(AddSpan());
                }

                var causeIds = new CEventTrace.SpanId[causes.Length];
                for (var i = 0; i < causes.Length; i++)
                {
                    causeIds[i] = ParameterConversion.ConvertSpanId(causes[i]);
                }

                CEventTrace.SpanId createdSpanId;
                fixed(CEventTrace.SpanId *fixedCauseIds = causeIds)
                {
                    createdSpanId = CEventTrace.EventTracerAddSpan(eventTracer, fixedCauseIds, (uint)causeIds.Length);
                }

                var newSpanId = new SpanId();
                ApiInterop.Memcpy(newSpanId.Data, createdSpanId.Data, SpanId.SpanIdSize);

                return(newSpanId);
            }
        }
Пример #3
0
        public static unsafe Item ConvertItem(CEventTrace.Item *itemContainer)
        {
            var newItem = new Item();

            if (itemContainer->ItemType == 0)
            {
                // The item is newly initialized so return an empty Item
                return(newItem);
            }

            newItem.ItemType = (ItemType)itemContainer->ItemType;
            switch (newItem.ItemType)
            {
            case ItemType.Span:
                newItem.Span = new Span();

                var newSpan = newItem.Span.Value;
                ApiInterop.Memcpy(newSpan.Id.Data, itemContainer->ItemUnion.Span.Id.Data, SpanId.SpanIdSize);

                newSpan.Causes = new SpanId[(int)itemContainer->ItemUnion.Span.CauseCount];
                for (var i = 0; i < newSpan.Causes.Length; i++)
                {
                    fixed(byte *spanIdDest = newSpan.Causes[i].Data)
                    {
                        ApiInterop.Memcpy(spanIdDest, itemContainer->ItemUnion.Span.Causes[i].Data, SpanId.SpanIdSize);
                    }
                }

                newItem.Span = newSpan;
                break;

            case ItemType.Event:
                newItem.Event = new Event();

                var newEvent = newItem.Event.GetValueOrDefault();
                newEvent.Id = new SpanId();
                ApiInterop.Memcpy(newEvent.Id.Data, itemContainer->ItemUnion.Event.Id.Data, SpanId.SpanIdSize);

                newEvent.UnixTimestampMillis = itemContainer->ItemUnion.Event.UnixTimestampMillis;
                newEvent.Type    = ApiInterop.FromUtf8Cstr(itemContainer->ItemUnion.Event.Type);
                newEvent.Message = ApiInterop.FromUtf8Cstr(itemContainer->ItemUnion.Event.Message);

                newEvent.Data = new TraceEventData(itemContainer->ItemUnion.Event.Data);
                var fields = newEvent.Data.GetAll();
                // Release memory allocated to the underlying event data in the itemContainer
                newEvent.Data.EventData.Dispose();

                // Add the data to the newly initialized event data struct
                newEvent.Data = new TraceEventData(fields);

                newItem.Event = newEvent;
                break;

            default:
                throw new NotSupportedException("Invalid Item Type provided.");
            }

            return(newItem);
        }
Пример #4
0
        private static SpanId GetNullSpanId()
        {
            var nativeSpanId = new SpanId();
            var nullSpanId   = CEventTrace.SpanIdNull();

            unsafe
            {
                ApiInterop.Memcpy(nativeSpanId.Data, nullSpanId.Data, SpanIdSize);
            }

            return(nativeSpanId);
        }
Пример #5
0
        public SpanId AddSpan()
        {
            var newSpanId = new SpanId();

            unsafe
            {
                var createdSpanId = CEventTrace.EventTracerAddSpan(eventTracer, null, 0);
                ApiInterop.Memcpy(newSpanId.Data, createdSpanId.Data, SpanId.SpanIdSize);
            }

            return(newSpanId);
        }
Пример #6
0
        public SpanId GetActiveSpanId()
        {
            var nativeSpanId = CEventTrace.EventTracerGetActiveSpanId(eventTracer);
            var spanId       = new SpanId();

            unsafe
            {
                ApiInterop.Memcpy(spanId.Data, nativeSpanId.Data, SpanId.SpanIdSize);
            }

            return(spanId);
        }
Пример #7
0
        public SpanId AddSpan(SpanId spanId)
        {
            var newSpanId = new SpanId();

            unsafe
            {
                var internalSpanId = ParameterConversion.ConvertSpanId(spanId);
                var createdSpanId  = CEventTrace.EventTracerAddSpan(eventTracer, &internalSpanId, 1);
                ApiInterop.Memcpy(newSpanId.Data, createdSpanId.Data, SpanId.SpanIdSize);
            }

            return(newSpanId);
        }