Migrate ZPagesExporter to BatchExportActivityProcessor (#1108)

* Changing Zpages processor

* updating changelog

* updating to ZPagesProcessor

* updating after merge

* adding internal reset method
This commit is contained in:
Eddy Nakamura 2020-08-20 22:08:18 -03:00 committed by GitHub
parent 595c3bd0c3
commit 83adf75f01
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 39 additions and 44 deletions

View File

@ -32,6 +32,7 @@ namespace Examples.Console
/// dotnet run -p Examples.Console.csproj jaeger -h localhost -p 6831
/// dotnet run -p Examples.Console.csproj prometheus -i 15 -p 9184 -d 2
/// dotnet run -p Examples.Console.csproj otlp -e "localhost:55680"
/// dotnet run -p Examples.Console.csproj zpages
///
/// The above must be run from the project root folder
/// (eg: C:\repos\opentelemetry-dotnet\src\examples\Console\).

View File

@ -28,7 +28,6 @@ namespace Examples.Console
{
var zpagesOptions = new ZPagesExporterOptions() { Url = "http://localhost:7284/rpcz/", RetentionTime = 3600000 };
var zpagesExporter = new ZPagesExporter(zpagesOptions);
var zpagesProcessor = new ZPagesProcessor(zpagesExporter);
var httpServer = new ZPagesExporterStatsHttpServer(zpagesExporter);
// Start the server
@ -36,8 +35,11 @@ namespace Examples.Console
using var openTelemetry = Sdk.CreateTracerProviderBuilder()
.AddSource("zpages-test")
.AddProcessor(zpagesProcessor)
.AddZPagesExporter()
.AddZPagesExporter(o =>
{
o.Url = zpagesOptions.Url;
o.RetentionTime = zpagesOptions.RetentionTime;
})
.Build();
ActivitySource activitySource = new ActivitySource("zpages-test");

View File

@ -2,7 +2,10 @@
## Unreleased
Renamed extension method from `UseZPagesExporter` to `AddZPagesExporter`.
* Renamed extension method from `UseZPagesExporter` to `AddZPagesExporter`
([#1066](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1066))
* Changed `ZPagesExporter` to use `ZPagesProcessor` by default
([#1108](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1108))
## 0.4.0-beta.2

View File

@ -122,5 +122,17 @@ namespace OpenTelemetry.Exporter.ZPages.Implementation
// Clear the last hour's activity information list
CurrentHourList.Clear();
}
internal static void Reset()
{
TotalCount.Clear();
TotalLatency.Clear();
CurrentHourList.Clear();
CurrentMinuteList.Clear();
ZQueue.Clear();
ProcessingList.Clear();
TotalEndedCount.Clear();
TotalErrorCount.Clear();
}
}
}

View File

@ -14,10 +14,7 @@
// limitations under the License.
// </copyright>
using System.Collections.Generic;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;
using System.Timers;
using OpenTelemetry.Exporter.ZPages.Implementation;
using OpenTelemetry.Trace;
@ -28,7 +25,7 @@ namespace OpenTelemetry.Exporter.ZPages
/// <summary>
/// Implements ZPages exporter.
/// </summary>
public class ZPagesExporter : ActivityExporter
public class ZPagesExporter : ActivityExporterSync
{
internal readonly ZPagesExporterOptions Options;
private readonly Timer minuteTimer;
@ -56,16 +53,10 @@ namespace OpenTelemetry.Exporter.ZPages
}
/// <inheritdoc />
public override Task<ExportResult> ExportAsync(IEnumerable<Activity> batch, CancellationToken cancellationToken)
public override ExportResultSync Export(in Batch<Activity> batch)
{
// var spanDatas = batch as SpanData[] ?? batch.ToArray();
return Task.FromResult(ExportResult.Success);
}
/// <inheritdoc />
public override Task ShutdownAsync(CancellationToken cancellationToken)
{
return Task.FromResult(ExportResult.Success);
return ExportResultSync.Success;
}
}
}

View File

@ -45,7 +45,7 @@ namespace OpenTelemetry.Trace
var zpagesExporter = new ZPagesExporter(exporterOptions);
// TODO: Pick Simple vs Batching based on ZipkinExporterOptions
return builder.AddProcessor(new SimpleActivityProcessor(zpagesExporter));
return builder.AddProcessor(new ZPagesProcessor(zpagesExporter));
}
}
}

View File

@ -16,7 +16,6 @@
using System;
using System.Diagnostics;
using System.Threading;
using OpenTelemetry.Exporter.ZPages.Implementation;
#if NET452
using OpenTelemetry.Internal;
@ -68,10 +67,6 @@ namespace OpenTelemetry.Exporter.ZPages
{
try
{
// do not await, just start export
// it can still throw in synchronous part
_ = this.exporter.ExportAsync(new[] { activity }, CancellationToken.None);
// If the span name is not in the current minute list, add it to the span list.
if (!ZPagesActivityTracker.CurrentMinuteList.ContainsKey(activity.DisplayName))
{

View File

@ -34,6 +34,8 @@ namespace OpenTelemetry.Exporter.ZPages.Tests
Assert.NotEmpty(ZPagesActivityTracker.CurrentMinuteList);
ZPagesActivityTracker.PurgeCurrentMinuteData(null, null);
Assert.Empty(ZPagesActivityTracker.CurrentMinuteList);
ZPagesActivityTracker.ProcessingList.Clear();
}
}
}

View File

@ -19,7 +19,6 @@ using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using OpenTelemetry.Exporter.ZPages.Implementation;
using OpenTelemetry.Resources;
@ -54,19 +53,6 @@ namespace OpenTelemetry.Exporter.ZPages.Tests
Assert.Throws<ArgumentNullException>(() => builder.AddZPagesExporter());
}
[Fact]
public async Task CheckingIntegration()
{
var batchActivity = new List<Activity> { CreateTestActivity() };
ZPagesExporter exporter = new ZPagesExporter(new ZPagesExporterOptions());
var exportResult = await exporter.ExportAsync(batchActivity, CancellationToken.None).ConfigureAwait(false);
Assert.Equal(ExportResult.Success, exportResult);
await exporter.ShutdownAsync(CancellationToken.None).ConfigureAwait(false);
}
[Fact]
public void CheckingCustomActivityProcessor()
{
@ -89,18 +75,20 @@ namespace OpenTelemetry.Exporter.ZPages.Tests
endCalled = true;
};
var openTelemetrySdk = Sdk.CreateTracerProviderBuilder()
using var openTelemetrySdk = Sdk.CreateTracerProviderBuilder()
.AddSource(ActivitySourceName)
.AddProcessor(testActivityProcessor)
.AddZPagesExporter()
.Build();
var source = new ActivitySource(ActivitySourceName);
var activity = source.StartActivity("Test Zipkin Activity");
using var source = new ActivitySource(ActivitySourceName);
using var activity = source.StartActivity("Test Zipkin Activity");
activity?.Stop();
Assert.True(startCalled);
Assert.True(endCalled);
ZPagesActivityTracker.Reset();
}
[Fact]
@ -129,11 +117,9 @@ namespace OpenTelemetry.Exporter.ZPages.Tests
};
ZPagesExporter exporter = new ZPagesExporter(options);
var zpagesProcessor = new ZPagesProcessor(exporter);
var zpagesServer = new ZPagesExporterStatsHttpServer(exporter);
zpagesServer.Start();
var source = new ActivitySource(ActivitySourceName);
var activity0 = source.StartActivity("Test Zipkin Activity");
var activity0 = source.StartActivity("Test Zipkin Activity 1");
zpagesProcessor.OnStart(activity0);
// checking size of dictionaries from ZPagesActivityTracker
@ -143,7 +129,7 @@ namespace OpenTelemetry.Exporter.ZPages.Tests
Assert.Single(ZPagesActivityTracker.TotalErrorCount);
Assert.Single(ZPagesActivityTracker.TotalLatency);
var activity1 = source.StartActivity("Test Zipkin Activity");
var activity1 = source.StartActivity("Test Zipkin Activity 1");
zpagesProcessor.OnStart(activity1);
// checking size of dictionaries from ZPagesActivityTracker
@ -175,11 +161,14 @@ namespace OpenTelemetry.Exporter.ZPages.Tests
Assert.Equal(0, ZPagesActivityTracker.ProcessingList.Last().Value);
Assert.Empty(ZPagesActivityTracker.ZQueue);
var zpagesServer = new ZPagesExporterStatsHttpServer(exporter);
zpagesServer.Start();
using var httpResponseMessage = await HttpClient.GetAsync("http://localhost:7284/rpcz/");
Assert.True(httpResponseMessage.IsSuccessStatusCode);
var content = await httpResponseMessage.Content.ReadAsStringAsync();
Assert.Contains($"<td>Test Zipkin Activity</td>", content);
Assert.Contains($"<td>Test Zipkin Activity 1</td>", content);
Assert.Contains($"<td>Test Zipkin Activity 2</td>", content);
zpagesProcessor.Dispose();