public static async Task <IList <ISpan> > ScanAsync( [NotNull] this IHerculesTracingClient client, [NotNull] TraceScanAsyncQuery query, TimeSpan perRequestTimeout, CancellationToken cancellationToken = default) { var result = new List <ISpan>(); var state = TracePagingState.Empty; while (true) { var readQuery = new TraceReadQuery(query.TraceId) { ParentSpanId = query.ParentSpanId, Limit = query.BatchSize, PagingState = state }; var readPayload = (await client.ReadAsync(readQuery, perRequestTimeout, cancellationToken).ConfigureAwait(false)).Payload; result.AddRange(readPayload.Spans); if (readPayload.Spans.Count == 0 || readPayload.Next.State == null || result.Count > query.Limit) { break; } state = readPayload.Next; } return(result); }
public static Request WithTraceReadQuery(this Request request, TraceReadQuery query) { return(request .WithAdditionalQueryParameter("traceId", query.TraceId) .WithAdditionalQueryParameter("parentSpanId", query.ParentSpanId) .WithAdditionalQueryParameter("limit", query.Limit) .WithAdditionalQueryParameter("pagingState", query.PagingState.State)); }
public async Task <ReadTraceResult> ReadAsync(TraceReadQuery query, TimeSpan timeout, CancellationToken cancellationToken = default) { try { var request = Request.Get("/trace").WithTraceReadQuery(query); var result = await client.SendAsync(request, timeout, cancellationToken : cancellationToken).ConfigureAwait(false); var status = ResponseAnalyzer.Analyze(result.Response, out var errorMessage); var payload = default(ReadTracePayload); if (status == HerculesStatus.Success) { payload = CreateReadTracePayload(JsonConvert.DeserializeObject <TraceResponseDto>(result.Response.Content.ToString())); } return(new ReadTraceResult(status, payload, errorMessage)); } catch (Exception error) { log.Error(error); return(new ReadTraceResult(HerculesStatus.UnknownError, default, error.Message));
public static IEnumerable <ISpan> Scan( [NotNull] this IHerculesTracingClient client, [NotNull] TraceScanQuery query, TimeSpan perRequestTimeout, CancellationToken cancellationToken = default) { var state = TracePagingState.Empty; while (true) { var readQuery = new TraceReadQuery(query.TraceId) { ParentSpanId = query.ParentSpanId, Limit = query.BatchSize, PagingState = state }; var readPayload = client.Read(readQuery, perRequestTimeout, cancellationToken).Payload; if (readPayload.Spans.Count == 0) { break; } foreach (var @event in readPayload.Spans) { yield return(@event); } if (readPayload.Next.State == null) { break; } state = readPayload.Next; } }
public static ReadTraceResult Read( [NotNull] this IHerculesTracingClient client, [NotNull] TraceReadQuery query, TimeSpan timeout, CancellationToken cancellationToken = default) => client.ReadAsync(query, timeout, cancellationToken).GetAwaiter().GetResult();