158 lines
4.5 KiB
C#
158 lines
4.5 KiB
C#
// <copyright file="Batch.cs" company="OpenTelemetry Authors">
|
|
// Copyright 2018, OpenTelemetry Authors
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
// </copyright>
|
|
|
|
namespace OpenTelemetry.Exporter.Jaeger.Implimentation
|
|
{
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
|
|
#if NET46
|
|
using Thrift.Protocol;
|
|
#else
|
|
using Thrift.Protocols;
|
|
using Thrift.Protocols.Entities;
|
|
using Thrift.Protocols.Utilities;
|
|
#endif
|
|
|
|
public class Batch : TAbstractBase
|
|
{
|
|
public Batch()
|
|
{
|
|
}
|
|
|
|
public Batch(Process process, List<JaegerSpan> spans)
|
|
: this()
|
|
{
|
|
this.Process = process;
|
|
this.Spans = spans;
|
|
}
|
|
|
|
public Process Process { get; set; }
|
|
|
|
public List<JaegerSpan> Spans { get; set; }
|
|
|
|
#if NET46
|
|
|
|
public void Write(TProtocol oprot)
|
|
{
|
|
oprot.IncrementRecursionDepth();
|
|
try
|
|
{
|
|
var struc = new TStruct("Batch");
|
|
|
|
oprot.WriteStructBegin(struc);
|
|
|
|
var field = new TField
|
|
{
|
|
Name = "process",
|
|
Type = TType.Struct,
|
|
ID = 1,
|
|
};
|
|
|
|
oprot.WriteFieldBegin(field);
|
|
this.Process.Write(oprot);
|
|
oprot.WriteFieldEnd();
|
|
|
|
field.Name = "spans";
|
|
field.Type = TType.List;
|
|
field.ID = 2;
|
|
|
|
oprot.WriteFieldBegin(field);
|
|
{
|
|
oprot.WriteListBegin(new TList(TType.Struct, this.Spans.Count));
|
|
foreach (var s in this.Spans)
|
|
{
|
|
s.Write(oprot);
|
|
}
|
|
|
|
oprot.WriteListEnd();
|
|
}
|
|
|
|
oprot.WriteFieldEnd();
|
|
oprot.WriteFieldStop();
|
|
oprot.WriteStructEnd();
|
|
}
|
|
finally
|
|
{
|
|
oprot.DecrementRecursionDepth();
|
|
}
|
|
}
|
|
|
|
#else
|
|
|
|
public async Task WriteAsync(TProtocol oprot, CancellationToken cancellationToken)
|
|
{
|
|
oprot.IncrementRecursionDepth();
|
|
try
|
|
{
|
|
var struc = new TStruct("Batch");
|
|
|
|
await oprot.WriteStructBeginAsync(struc, cancellationToken);
|
|
|
|
var field = new TField
|
|
{
|
|
Name = "process",
|
|
Type = TType.Struct,
|
|
ID = 1,
|
|
};
|
|
|
|
await oprot.WriteFieldBeginAsync(field, cancellationToken);
|
|
await this.Process.WriteAsync(oprot, cancellationToken);
|
|
await oprot.WriteFieldEndAsync(cancellationToken);
|
|
|
|
field.Name = "spans";
|
|
field.Type = TType.List;
|
|
field.ID = 2;
|
|
|
|
await oprot.WriteFieldBeginAsync(field, cancellationToken);
|
|
{
|
|
await oprot.WriteListBeginAsync(new TList(TType.Struct, this.Spans.Count), cancellationToken);
|
|
foreach (JaegerSpan s in this.Spans)
|
|
{
|
|
await s.WriteAsync(oprot, cancellationToken);
|
|
}
|
|
|
|
await oprot.WriteListEndAsync(cancellationToken);
|
|
}
|
|
|
|
await oprot.WriteFieldEndAsync(cancellationToken);
|
|
await oprot.WriteFieldStopAsync(cancellationToken);
|
|
await oprot.WriteStructEndAsync(cancellationToken);
|
|
}
|
|
finally
|
|
{
|
|
oprot.DecrementRecursionDepth();
|
|
}
|
|
}
|
|
|
|
#endif
|
|
|
|
public override string ToString()
|
|
{
|
|
var sb = new StringBuilder("Batch(");
|
|
sb.Append(", Process: ");
|
|
sb.Append(this.Process == null ? "<null>" : this.Process.ToString());
|
|
sb.Append(", Spans: ");
|
|
sb.Append(this.Spans);
|
|
sb.Append(")");
|
|
return sb.ToString();
|
|
}
|
|
}
|
|
}
|