public void GrpcInputTests_CantStopWhileStopped() { // ARRANGE int port = Common.GetPort(); var input = new GrpcInput("localhost", port, null); // ACT input.Stop(); // ASSERT }
public async Task GrpcInputTests_StopsAndRestarts() { // ARRANGE int instancesReceived = 0; InstanceMsg receivedInstance = null; int port = Common.GetPort(); var input = new GrpcInput("localhost", port, instance => { instancesReceived++; receivedInstance = instance; }); input.Start(); Assert.IsTrue(SpinWait.SpinUntil(() => input.IsRunning, GrpcInputTests.DefaultTimeout)); var grpcWriter = new GrpcWriter(port); var request = new HandleTraceSpanRequest(); request.Instances.Add(new InstanceMsg() { SourceName = "SourceName1" }); await grpcWriter.Write(request).ConfigureAwait(false); Common.AssertIsTrueEventually( () => input.GetStats().InstancesReceived == 1 && instancesReceived == 1 && receivedInstance.SourceName == "SourceName1", GrpcInputTests.DefaultTimeout); // ACT input.Stop(); Common.AssertIsTrueEventually( () => !input.IsRunning && input.GetStats().InstancesReceived == 1 && instancesReceived == 1 && receivedInstance.SourceName == "SourceName1", GrpcInputTests.DefaultTimeout); input.Start(); Assert.IsTrue(SpinWait.SpinUntil(() => input.IsRunning, GrpcInputTests.DefaultTimeout)); grpcWriter = new GrpcWriter(port); request.Instances.Single().SourceName = "SourceName2"; await grpcWriter.Write(request).ConfigureAwait(false); // ASSERT Common.AssertIsTrueEventually( () => input.IsRunning && input.GetStats().InstancesReceived == 1 && instancesReceived == 2 && receivedInstance.SourceName == "SourceName2", GrpcInputTests.DefaultTimeout); }
public void GrpcInputTests_CantStartWhileRunning() { // ARRANGE int port = Common.GetPort(); var input = new GrpcInput("localhost", port, null); input.Start(); Assert.IsTrue(SpinWait.SpinUntil(() => input.IsRunning, GrpcInputTests.DefaultTimeout)); // ACT input.Start(); // ASSERT }
public void GrpcInputTests_ReceivesDataFromMultipleClients() { // ARRANGE int instancesReceived = 0; InstanceMsg receivedInstance = null; int port = Common.GetPort(); var input = new GrpcInput("localhost", port, instance => { Interlocked.Increment(ref instancesReceived); receivedInstance = instance; }); input.Start(); Assert.IsTrue(SpinWait.SpinUntil(() => input.IsRunning, GrpcInputTests.DefaultTimeout)); // ACT var request = new HandleTraceSpanRequest(); request.Instances.Add(new InstanceMsg() { SourceName = "SourceName1" }); Parallel.For(0, 1000, new ParallelOptions() { MaxDegreeOfParallelism = 1000 }, async i => { var grpcWriter = new GrpcWriter(port); await grpcWriter.Write(request).ConfigureAwait(false); }); // ASSERT Common.AssertIsTrueEventually( () => input.GetStats().InstancesReceived == 1000 && instancesReceived == 1000, GrpcInputTests.DefaultTimeout); input.Stop(); Assert.IsTrue(SpinWait.SpinUntil(() => !input.IsRunning, GrpcInputTests.DefaultTimeout)); }
public Library(string configuration) { this.config = new Configuration(configuration); Diagnostics.LogInfo( FormattableString.Invariant($"Loaded configuration. {Environment.NewLine}{configuration}")); this.telemetryGenerator = new TelemetryGenerator(this.config.Watchlist_Namespaces, this.config.Watchlist_IgnoredNamespaces); try { var activeConfiguration = TelemetryConfiguration.Active; activeConfiguration.InstrumentationKey = this.config.InstrumentationKey; var channel = new ServerTelemetryChannel(); string telemetryChannelEndpoint = this.config.Endpoints_TelemetryChannelEndpoint; if (!string.IsNullOrWhiteSpace(telemetryChannelEndpoint)) { channel.EndpointAddress = telemetryChannelEndpoint; } channel.Initialize(activeConfiguration); activeConfiguration.TelemetryChannel = channel; var builder = activeConfiguration.DefaultTelemetrySink.TelemetryProcessorChainBuilder; QuickPulseTelemetryProcessor processor = null; builder.Use((next) => { processor = new QuickPulseTelemetryProcessor(next); return(processor); }); if (this.config.AdaptiveSampling_Enabled == true) { builder.UseAdaptiveSampling(this.config.AdaptiveSampling_MaxOtherItemsPerSecond ?? 5, excludedTypes: "Event"); builder.UseAdaptiveSampling(this.config.AdaptiveSampling_MaxEventsPerSecond ?? 5, includedTypes: "Event"); } builder.Build(); var quickPulseModule = new QuickPulseTelemetryModule() { AuthenticationApiKey = this.config.LiveMetricsStreamAuthenticationApiKey }; string quickPulseServiceEndpoint = this.config.Endpoints_QuickPulseServiceEndpoint; if (!string.IsNullOrWhiteSpace(quickPulseServiceEndpoint)) { quickPulseModule.QuickPulseServiceEndpoint = quickPulseServiceEndpoint; } quickPulseModule.Initialize(activeConfiguration); quickPulseModule.RegisterTelemetryProcessor(processor); this.telemetryClient = this.telemetryClient ?? new TelemetryClient(activeConfiguration); } catch (Exception e) { Diagnostics.LogError( FormattableString.Invariant($"Could not initialize AI SDK. {e.ToString()}")); throw new InvalidOperationException( FormattableString.Invariant($"Could not initialize AI SDK. {e.ToString()}"), e); } try { if (this.config.Port.HasValue) { this.istioMixerInput = new GrpcInput(this.config.Host, this.config.Port.Value, this.OnDataReceived); Diagnostics.LogInfo( FormattableString.Invariant($"We will listen for Istio's Mixer data on {this.config.Host}:{this.config.Port}")); } else { Diagnostics.LogInfo( FormattableString.Invariant($"We will not listen for Istio's Mixer data, configuration is insufficient.")); } } catch (Exception e) { Diagnostics.LogError( FormattableString.Invariant($"Could not create the gRPC Istio Mixer channel. {e.ToString()}")); throw new InvalidOperationException( FormattableString.Invariant($"Could not create the gRPC Istio Mixer channel. {e.ToString()}"), e); } }