Exemplo n.º 1
0
        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))
                );
        }
Exemplo n.º 2
0
        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));
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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"])
                );
        }