public void Harvest_SendsTracesFromCollectors() { var sentTraces = Enumerable.Empty <TransactionTraceWireModel>(); Mock.Arrange(() => _dataTransportService.Send(Arg.IsAny <IEnumerable <TransactionTraceWireModel> >())) .DoInstead <IEnumerable <TransactionTraceWireModel> >(traces => sentTraces = traces); var trace1 = Mock.Create <TransactionTraceWireModel>(); var trace2 = Mock.Create <TransactionTraceWireModel>(); Mock.Arrange(() => _transactionCollector1.GetCollectedSamples()).Returns(new[] { new TransactionTraceWireModelComponents(new TransactionMetricName(), new TimeSpan(), false, () => trace1) }); Mock.Arrange(() => _transactionCollector2.GetCollectedSamples()).Returns(new[] { new TransactionTraceWireModelComponents(new TransactionMetricName(), new TimeSpan(), false, () => trace2) }); _harvestAction(); NrAssert.Multiple( () => Assert.AreEqual(2, sentTraces.Count()), () => Assert.IsTrue(sentTraces.Contains(trace1)), () => Assert.IsTrue(sentTraces.Contains(trace2)) ); }
public void EventsSendOnHarvest() { // Arrange const int EventCount = 3; const int ExpectedReservoirSize = 1000; const int ExpectedEventsSeen = EventCount; var actualReservoirSize = int.MaxValue; var actualEventsSeen = int.MaxValue; var sentEvents = null as IEnumerable <ISpanEventWireModel>; Mock.Arrange(() => _dataTransportService.Send(Arg.IsAny <EventHarvestData>(), Arg.IsAny <IEnumerable <ISpanEventWireModel> >())) .DoInstead <EventHarvestData, IEnumerable <ISpanEventWireModel> >((eventHarvestData, events) => { sentEvents = events; actualReservoirSize = eventHarvestData.ReservoirSize; actualEventsSeen = eventHarvestData.EventsSeen; }); CollectSpanEvents(EventCount); // Act _harvestAction(); // Assert var SpanAttributeValueCollections = sentEvents as SpanAttributeValueCollection[] ?? sentEvents.ToArray(); Assert.That(SpanAttributeValueCollections, Has.Exactly(EventCount).Items); Assert.That(SpanAttributeValueCollections, Is.EqualTo(SpanEvents)); Assert.That(actualReservoirSize, Is.EqualTo(ExpectedReservoirSize)); Assert.That(actualEventsSeen, Is.EqualTo(ExpectedEventsSeen)); }
public void Collections_are_reset_on_configuration_update_event() { // Arrange var configuration = GetDefaultConfiguration(int.MaxValue); var sentEvents = null as IEnumerable <CustomEventWireModel>; Mock.Arrange(() => _dataTransportService.Send(Arg.IsAny <IEnumerable <CustomEventWireModel> >())) .DoInstead <IEnumerable <CustomEventWireModel> >(events => sentEvents = events); _customEventAggregator.Collect(Mock.Create <CustomEventWireModel>()); // Act EventBus <ConfigurationUpdatedEvent> .Publish(new ConfigurationUpdatedEvent(configuration, ConfigurationUpdateSource.Local)); _harvestAction(); // Assert Assert.Null(sentEvents); }
public void Collections_are_reset_on_configuration_update_event() { // Arrange var configuration = GetDefaultConfiguration(int.MaxValue); var sentEvents = null as IEnumerable <TransactionEventWireModel>; Mock.Arrange(() => _dataTransportService.Send(Arg.IsAny <EventHarvestData>(), Arg.IsAny <IEnumerable <TransactionEventWireModel> >())) .DoInstead <IEnumerable <TransactionEventWireModel> >(events => sentEvents = events); var transactionEventWireModel = new TransactionEventWireModel(_attribValues, false, 0.3f); _transactionEventAggregator.Collect(transactionEventWireModel); // Act EventBus <ConfigurationUpdatedEvent> .Publish(new ConfigurationUpdatedEvent(configuration, ConfigurationUpdateSource.Local)); _harvestAction(); // Assert Assert.Null(sentEvents); }
public void Harvest_SendsApmRequiredMetricEvenIfNoOtherMetricsExist() { var sentMetrics = Enumerable.Empty <MetricWireModel>(); Mock.Arrange(() => _dataTransportService.Send(Arg.IsAny <IEnumerable <MetricWireModel> >())) .DoInstead <IEnumerable <MetricWireModel> >(metrics => sentMetrics = metrics); _harvestAction(); Assert.NotNull(sentMetrics); Assert.AreEqual(1, sentMetrics.Count()); var sentMetric = sentMetrics.ElementAt(0); NrAssert.Multiple( () => Assert.AreEqual(MetricNames.SupportabilityMetricHarvestTransmit, sentMetric.MetricName.Name), () => Assert.AreEqual(null, sentMetric.MetricName.Scope), () => Assert.AreEqual(1, sentMetric.Data.Value0), () => Assert.AreEqual(0, sentMetric.Data.Value1), () => Assert.AreEqual(0, sentMetric.Data.Value2), () => Assert.AreEqual(0, sentMetric.Data.Value3), () => Assert.AreEqual(0, sentMetric.Data.Value4), () => Assert.AreEqual(0, sentMetric.Data.Value5) ); }
public void traces_are_aggregated_if_same_sql_id() { // Arrange var sentSqlTraces = null as IEnumerable <SqlTraceWireModel>; Mock.Arrange(() => _dataTransportService.Send(Arg.IsAny <IEnumerable <SqlTraceWireModel> >())) .DoInstead <IEnumerable <SqlTraceWireModel> >(sqlTraces => sentSqlTraces = sqlTraces); var sqlTracesToSend = new SqlTraceStatsCollection(); sqlTracesToSend.Insert(GetSqlTrace( 1, transactionName: "transactionName1", sql: "sql1", uri: "uri1", datastoreMetricName: "datastoreMetricName1", callCount: 1, minCallTime: TimeSpan.FromSeconds(5), maxCallTime: TimeSpan.FromSeconds(5), totalCallTime: TimeSpan.FromSeconds(5), parameterData: new Dictionary <string, object> { { "foo", "bar" } } )); sqlTracesToSend.Insert(GetSqlTrace( 1, transactionName: "transactionName2", sql: "sql2", uri: "uri2", datastoreMetricName: "datastoreMetricName2", callCount: 1, minCallTime: TimeSpan.FromSeconds(3), maxCallTime: TimeSpan.FromSeconds(3), totalCallTime: TimeSpan.FromSeconds(3), parameterData: new Dictionary <string, object> { { "zip", "zap" } } )); _sqlTraceAggregator.Collect(sqlTracesToSend); // Act _harvestAction(); // Assert Assert.AreEqual(1, sentSqlTraces.Count()); var trace = sentSqlTraces.First(); NrAssert.Multiple( () => Assert.AreEqual(1, sentSqlTraces.Count()), () => Assert.AreEqual(1, trace.SqlId), () => Assert.AreEqual("transactionName1", trace.TransactionName), () => Assert.AreEqual("sql1", trace.Sql), () => Assert.AreEqual("uri1", trace.Uri), () => Assert.AreEqual("datastoreMetricName1", trace.DatastoreMetricName), () => Assert.AreEqual(2, trace.CallCount), () => Assert.AreEqual(TimeSpan.FromSeconds(3), trace.MinCallTime), () => Assert.AreEqual(TimeSpan.FromSeconds(5), trace.MaxCallTime), () => Assert.AreEqual(TimeSpan.FromSeconds(8), trace.TotalCallTime), () => Assert.AreEqual(1, trace.ParameterData.Count), () => Assert.AreEqual("bar", trace.ParameterData["foo"]) ); }