public void CanBeChangedByChannelToTunePerformance()
            {
                var buffer = new TelemetryBuffer(new StubTelemetrySerializer(), new StubApplicationLifecycle());

                var expectedValue = TimeSpan.FromSeconds(42);
                buffer.MaxTransmissionDelay = expectedValue;

                Assert.Equal(expectedValue, buffer.MaxTransmissionDelay);
            }
Esempio n. 2
0
        internal ServerTelemetryChannel(INetwork network, IApplicationLifecycle applicationLifecycle)
        {
            var policies = new TransmissionPolicy[]
            {
                new ApplicationLifecycleTransmissionPolicy(applicationLifecycle),
                new ErrorHandlingTransmissionPolicy(),
                new NetworkAvailabilityTransmissionPolicy(network),
                new ThrottlingTransmissionPolicy()
            };

            this.Transmitter = new Transmitter(policies: policies);

            this.TelemetrySerializer     = new TelemetrySerializer(this.Transmitter);
            this.TelemetryBuffer         = new TelemetryBuffer(this.TelemetrySerializer, applicationLifecycle);
            this.telemetryBufferCapacity = this.TelemetryBuffer.Capacity;

            this.TelemetryProcessor = this.TelemetryBuffer;
            this.isInitialized      = false;
        }
            public void DoesNotContinueOnCapturedSynchronizationContextToImprovePerformance()
            {
                var buffer = new TelemetryBuffer(new StubTelemetrySerializer(), new StubApplicationLifecycle());
                buffer.Process(new StubTelemetry());

                bool postedBack = false;
                using (var context = new StubSynchronizationContext())
                {
                    context.OnPost = (callback, state) =>
                    {
                        postedBack = true;
                        callback(state);
                    };

                    buffer.FlushAsync().GetAwaiter().GetResult();

                    Assert.False(postedBack);
                }
            }
            public void CancelsPreviouslyStartedAutomaticFlushToPreventPreventPrematureTransmission()
            {
                var serializer = new StubTelemetrySerializer();
                var buffer = new TelemetryBuffer(serializer, new StubApplicationLifecycle());

                buffer.MaxTransmissionDelay = TimeSpan.FromMilliseconds(1);
                buffer.Process(new StubTelemetry());

                buffer.MaxTransmissionDelay = TimeSpan.FromMilliseconds(100);
                buffer.FlushAsync().Wait();

                var autoFlushed = new ManualResetEventSlim();
                serializer.OnSerialize = telemetry =>
                {
                    autoFlushed.Set();
                };
                buffer.Process(new StubTelemetry());

                Assert.False(autoFlushed.Wait(30));
            }
Esempio n. 5
0
        internal ServerTelemetryChannel(INetwork network, IApplicationLifecycle applicationLifecycle)
        {
            var policies = new TransmissionPolicy[]
            {
#if !NETSTANDARD
                // We don't have implementation for IApplicationLifecycle for .NET Core
                new ApplicationLifecycleTransmissionPolicy(applicationLifecycle),
#endif
                new ThrottlingTransmissionPolicy(),
                new ErrorHandlingTransmissionPolicy(),
                new PartialSuccessTransmissionPolicy(),
                new NetworkAvailabilityTransmissionPolicy(network),
            };

            this.Transmitter = new Transmitter(policies: policies);

            this.TelemetrySerializer     = new TelemetrySerializer(this.Transmitter);
            this.TelemetryBuffer         = new TelemetryBuffer(this.TelemetrySerializer, applicationLifecycle);
            this.telemetryBufferCapacity = this.TelemetryBuffer.Capacity;

            this.TelemetryProcessor = this.TelemetryBuffer;
            this.isInitialized      = false;
        }
Esempio n. 6
0
        public void Initialize()
        {
            this.TelemetryBuffer  = new TelemetryBuffer();
            this.TelemetryChannel = new InMemoryChannel(this.TelemetryBuffer, new InMemoryTransmitter(this.TelemetryBuffer));
            this.TelemetryClient  = new TelemetryClient(new Extensibility.TelemetryConfiguration(instrumentationKey: TestInstrumentationKey, channel: this.TelemetryChannel));

            this.TelemetryClient.Context.Component.Version = TestComponentVersion;

            this.TelemetryClient.Context.Device.Type            = TestDeviceType;
            this.TelemetryClient.Context.Device.Id              = TestDeviceId;
            this.TelemetryClient.Context.Device.OperatingSystem = TestDeviceOperatingSystem;
            this.TelemetryClient.Context.Device.OemName         = TestDeviceOemName;
            this.TelemetryClient.Context.Device.Model           = TestDeviceModel;

            this.TelemetryClient.Context.Cloud.RoleName     = TestCloudRoleName;
            this.TelemetryClient.Context.Cloud.RoleInstance = TestCloudRoleInstance;

            this.TelemetryClient.Context.Session.Id      = TestSessionId;
            this.TelemetryClient.Context.Session.IsFirst = TestSessionIsFirst;

            this.TelemetryClient.Context.User.Id                  = TestUserId;
            this.TelemetryClient.Context.User.AccountId           = TestUserAccountId;
            this.TelemetryClient.Context.User.UserAgent           = TestUserUserAgent;
            this.TelemetryClient.Context.User.AuthenticatedUserId = TestUserAuthenticatedUserId;

            this.TelemetryClient.Context.Operation.Id                = TestOperationId;
            this.TelemetryClient.Context.Operation.ParentId          = TestOperationParentId;
            this.TelemetryClient.Context.Operation.CorrelationVector = TestOperationCorrelationVector;
            this.TelemetryClient.Context.Operation.SyntheticSource   = TestOperationSyntheticSource;
            this.TelemetryClient.Context.Operation.Name              = TestOperationName;

            this.TelemetryClient.Context.Location.Ip = TestLocationIp;

            this.TelemetryClient.Context.Internal.SdkVersion   = TestInternalSdkVersion;
            this.TelemetryClient.Context.Internal.AgentVersion = TestInternalAgentVersion;
            this.TelemetryClient.Context.Internal.NodeName     = TestInternalNodeName;
        }
Esempio n. 7
0
 public void FromBuffer_lower_ushort()
 {
     Assert.Equal(Int16.MaxValue + 1,
                  TelemetryBuffer.FromBuffer(new byte[] { 0x2, 0x0, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }));
 }
Esempio n. 8
0
 public void FromBuffer_upper_int()
 {
     Assert.Equal(Int32.MaxValue,
                  TelemetryBuffer.FromBuffer(new byte[] { 0xfc, 0xff, 0xff, 0xff, 0x7f, 0x0, 0x0, 0x0, 0x0 }));
 }
Esempio n. 9
0
 public void FromBuffer_lower_long()
 {
     Assert.Equal((long)UInt32.MaxValue + 1,
                  TelemetryBuffer.FromBuffer(new byte[] { 0xf8, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0 }));
 }
Esempio n. 10
0
 public void FromBuffer_Invalid()
 {
     Assert.Equal(0,
                  TelemetryBuffer.FromBuffer(new byte[] { 22, 0xff, 0xff, 0xff, 0x7f, 0, 0, 0, 0 }));
 }
            public void DoesntSerializeTelemetryIfBufferIsEmpty()
            {
                bool telemetrySerialized = false;
                var serializer = new StubTelemetrySerializer();
                serializer.OnSerialize = telemetry =>
                {
                    telemetrySerialized = true;
                };
                var telemetryBuffer = new TelemetryBuffer(serializer, new StubApplicationLifecycle());

                telemetryBuffer.FlushAsync().GetAwaiter().GetResult();

                Assert.False(telemetrySerialized);
            }
Esempio n. 12
0
        public void ToBuffer_lower_int()
        {
            var bytes = TelemetryBuffer.ToBuffer((long)UInt16.MaxValue + 1);

            Assert.Equal(new byte[] { 0xfc, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0 }, bytes);
        }
Esempio n. 13
0
 public void FromBuffer_lower_neg_int()
 {
     Assert.Equal(Int32.MinValue,
                  TelemetryBuffer.FromBuffer(new byte[] { 0xfc, 0x0, 0x0, 0x0, 0x80, 0x0, 0x0, 0x0, 0x0 }));
 }
 public void CanBeSetByChannelToTunePerformance()
 {
     var buffer = new TelemetryBuffer(new StubTelemetrySerializer(), new StubApplicationLifecycle());
     buffer.Capacity = 42;
     Assert.Equal(42, buffer.Capacity);
 }
            public void PreventsOperatingSystemFromSuspendingAsynchronousOperations()
            {
                var applicationLifecycle = new StubApplicationLifecycle();
                var buffer = new TelemetryBuffer(new StubTelemetrySerializer(), applicationLifecycle);
                buffer.Process(new StubTelemetry());

                bool deferralAcquired = false;
                Func<Func<Task>, Task> asyncTaskRunner = asyncMethod =>
                {
                    deferralAcquired = true;
                    return asyncMethod();
                };
                applicationLifecycle.OnStopping(new ApplicationStoppingEventArgs(asyncTaskRunner));

                Assert.True(deferralAcquired);
            }
            public void FlushesBufferToPreventLossOfTelemetry()
            {
                var applicationLifecycle = new StubApplicationLifecycle();
                var telemetrySerialized = new ManualResetEventSlim();
                var serializer = new StubTelemetrySerializer();
                serializer.OnSerialize = telemetry =>
                {
                    telemetrySerialized.Set();
                };
                var buffer = new TelemetryBuffer(serializer, applicationLifecycle);
                buffer.Process(new StubTelemetry());

                applicationLifecycle.OnStopping(ApplicationStoppingEventArgs.Empty);

                Assert.True(telemetrySerialized.Wait(50));
            }
            public void SerializesTelemetryIfBufferIsNotEmpty()
            {
                List<ITelemetry> serializedTelemetry = null;
                var serializer = new StubTelemetrySerializer();
                serializer.OnSerialize = telemetry =>
                {
                    serializedTelemetry = new List<ITelemetry>(telemetry);
                };

                var telemetryBuffer = new TelemetryBuffer(serializer, new StubApplicationLifecycle());

                var expectedTelemetry = new StubTelemetry();
                telemetryBuffer.Process(expectedTelemetry);

                telemetryBuffer.FlushAsync().GetAwaiter().GetResult();

                Assert.Same(expectedTelemetry, serializedTelemetry.Single());
            }
            public void SerializesBufferOnThreadPoolToFreeUpCustomersThread()
            {
                int serializerThreadId = -1;
                var serializerInvoked = new ManualResetEventSlim();
                var serializer = new StubTelemetrySerializer();
                serializer.OnSerialize = telemetry =>
                {
                    serializerThreadId = Thread.CurrentThread.ManagedThreadId;
                    serializerInvoked.Set();
                };

                var telemetryBuffer = new TelemetryBuffer(serializer, new StubApplicationLifecycle());
                telemetryBuffer.Process(new StubTelemetry());

                Task dontWait = telemetryBuffer.FlushAsync();

                Assert.True(serializerInvoked.Wait(100));
                Assert.NotEqual(serializerThreadId, Thread.CurrentThread.ManagedThreadId);
            }
            public void EmptiesBufferAfterSerialization()
            {
                var buffer = new TelemetryBuffer(new StubTelemetrySerializer(), new StubApplicationLifecycle());
                buffer.Capacity = 10;
                buffer.Process(new StubTelemetry());

                buffer.FlushAsync().GetAwaiter().GetResult();

                Assert.Equal(0, buffer.Count());
            }
Esempio n. 20
0
 public void FromBuffer_Zero()
 {
     Assert.Equal(0,
                  TelemetryBuffer.FromBuffer(new byte[] { 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }));
 }
Esempio n. 21
0
 public void FromBuffer_lower_neg_short()
 {
     Assert.Equal(Int16.MinValue,
                  TelemetryBuffer.FromBuffer(new byte[] { 0xfe, 0x0, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }));
 }
 public void DefaultValueIsAppropriateForProductionEnvironmentAndUnitTests()
 {
     var buffer = new TelemetryBuffer(new StubTelemetrySerializer(), new StubApplicationLifecycle());
     Assert.Equal(500, buffer.Capacity);
 }
Esempio n. 23
0
 public void FromBuffer_upper_neg_long()
 {
     Assert.Equal((long)Int32.MinValue - 1,
                  TelemetryBuffer.FromBuffer(new byte[] { 0xf8, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff }));
 }
 public void ThrowsArgumentOutOfRangeExceptionWhenNewValueIsLessThanOne()
 {
     var buffer = new TelemetryBuffer(new StubTelemetrySerializer(), new StubApplicationLifecycle());
     Assert.Throws<ArgumentOutOfRangeException>(() => buffer.Capacity = 0);
 }
Esempio n. 25
0
        public void ToBuffer_upper_short()
        {
            var bytes = TelemetryBuffer.ToBuffer(Int16.MaxValue);

            Assert.Equal(new byte[] { 0xfe, 0xff, 0x7f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }, bytes);
        }
 public void DefaultValueIsAppropriateForProductionEnvironmentAndUnitTests()
 {
     var buffer = new TelemetryBuffer(new StubTelemetrySerializer(), new StubApplicationLifecycle());
     Assert.Equal(TimeSpan.FromSeconds(30), buffer.MaxTransmissionDelay);
 }
Esempio n. 27
0
        public void ToBuffer_lower_neg_long()
        {
            var bytes = TelemetryBuffer.ToBuffer(Int64.MinValue);

            Assert.Equal(new byte[] { 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80 }, bytes);
        }
            public void AddsTelemetryToBufferUntilItReachesMax()
            {
                var buffer = new TelemetryBuffer(new StubTelemetrySerializer(), new StubApplicationLifecycle());
                buffer.Capacity = 42;

                buffer.Process(new StubTelemetry());

                Assert.Equal(1, buffer.Count());
            }
Esempio n. 29
0
 public void FromBuffer_upper_long()
 {
     Assert.Equal(Int64.MaxValue,
                  TelemetryBuffer.FromBuffer(new byte[] { 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f }));
 }
            public void DoesNotCancelPreviousFlush()
            {
                var telemetrySerialized = new ManualResetEventSlim();
                var serializer = new StubTelemetrySerializer();
                serializer.OnSerialize = telemetry =>
                {
                    telemetrySerialized.Set();
                };
                var buffer = new TelemetryBuffer(serializer, new StubApplicationLifecycle());

                buffer.MaxTransmissionDelay = TimeSpan.FromMilliseconds(1);
                buffer.Process(new StubTelemetry());

                buffer.MaxTransmissionDelay = TimeSpan.FromSeconds(42);
                buffer.Process(new StubTelemetry());

                Assert.True(telemetrySerialized.Wait(TimeSpan.FromMilliseconds(100)));
            }
Esempio n. 31
0
 public void FromBuffer_lower_uint()
 {
     Assert.Equal((long)Int32.MaxValue + 1,
                  TelemetryBuffer.FromBuffer(new byte[] { 0x4, 0x0, 0x0, 0x0, 0x80, 0x0, 0x0, 0x0, 0x0 }));
 }
            public void FlushesBufferWhenNumberOfTelemetryItemsReachesMax()
            {
                var bufferFlushed = new ManualResetEventSlim();
                IEnumerable<ITelemetry> flushedTelemetry = null;
                var serializer = new StubTelemetrySerializer
                {
                    OnSerialize = telemetry =>
                    {
                        flushedTelemetry = telemetry.ToList();
                        bufferFlushed.Set();
                    },
                };

                var telemetryBuffer = new TelemetryBuffer(serializer, new StubApplicationLifecycle());

                var sentTelemetry = new List<ITelemetry> { new StubTelemetry(), new StubTelemetry() };
                telemetryBuffer.Capacity = sentTelemetry.Count;
                foreach (ITelemetry item in sentTelemetry)
                {
                    telemetryBuffer.Process(item);
                }

                Assert.True(bufferFlushed.Wait(30));
                Assert.Equal(sentTelemetry, flushedTelemetry);
            }
Esempio n. 33
0
 public void FromBuffer_lower_int()
 {
     Assert.Equal(UInt16.MaxValue + 1,
                  TelemetryBuffer.FromBuffer(new byte[] { 0xfc, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0 }));
 }
            public void StartsTimerThatFlushesBufferAfterMaxTransmissionDelay()
            {
                var telemetrySerialized = new ManualResetEventSlim();
                var serializer = new StubTelemetrySerializer();
                serializer.OnSerialize = telemetry =>
                {
                    telemetrySerialized.Set();
                };

                var buffer = new TelemetryBuffer(serializer, new StubApplicationLifecycle());

                buffer.MaxTransmissionDelay = TimeSpan.FromMilliseconds(1);
                buffer.Process(new StubTelemetry());

                Assert.True(telemetrySerialized.Wait(50));
            }
Esempio n. 35
0
 public void FromBuffer_upper_short()
 {
     Assert.Equal(Int16.MaxValue,
                  TelemetryBuffer.FromBuffer(new byte[] { 0xfe, 0xff, 0x7f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }));
 }
 public void ThrowsArgumentNullExceptionWhenTelemetryIsNull()
 {
     var buffer = new TelemetryBuffer(new StubTelemetrySerializer(), new StubApplicationLifecycle());
     Assert.Throws<ArgumentNullException>(() => buffer.Process((ITelemetry)null));
 }
Esempio n. 37
0
 public void FromBuffer_upper_neg_short()
 {
     Assert.Equal(-1,
                  TelemetryBuffer.FromBuffer(new byte[] { 0xfe, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }));
 }
            public void WaitsUntilTelemetryBufferIsSafeToModify()
            {
                var buffer = new TelemetryBuffer(new StubTelemetrySerializer(), new StubApplicationLifecycle());
                buffer.Capacity = 1;

                Task anotherThread;
                lock (buffer)
                {
                    anotherThread = TaskEx.Run(() => buffer.Process(new StubTelemetry()));
                    Assert.False(anotherThread.Wait(10));
                }

                Assert.True(anotherThread.Wait(50));
            }
Esempio n. 39
0
 public void FromBuffer_upper_neg_int()
 {
     Assert.Equal(Int16.MinValue - 1,
                  TelemetryBuffer.FromBuffer(new byte[] { 0xfc, 0xff, 0x7f, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0 }));
 }
 public void ImplementsIEnumerableToAllowInspectingBufferContentsInTests()
 {
     TelemetryBuffer instance = new TelemetryBuffer(new StubTelemetrySerializer(), new StubApplicationLifecycle());
     Assert.True(instance is IEnumerable<ITelemetry>);
 }
Esempio n. 41
0
        public void ToBuffer_upper_uint()
        {
            var bytes = TelemetryBuffer.ToBuffer(UInt32.MaxValue);

            Assert.Equal(new byte[] { 0x4, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0 }, bytes);
        }
 public void CanBeSetByChannelToTunePerformance()
 {
     var buffer = new TelemetryBuffer();
     buffer.Capacity = 42;
     Assert.Equal(42, buffer.Capacity);
 }
Esempio n. 43
0
 public void FromBuffer_lower_neg_long()
 {
     Assert.Equal(Int64.MinValue,
                  TelemetryBuffer.FromBuffer(new byte[] { 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80 }));
 }
Esempio n. 44
0
        public void ToBuffer_Zero()
        {
            var bytes = TelemetryBuffer.ToBuffer(0);

            Assert.Equal(new byte[] { 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }, bytes);
        }
Esempio n. 45
0
        public void ToBuffer_lower_ushort()
        {
            var bytes = TelemetryBuffer.ToBuffer((long)Int16.MaxValue + 1);

            Assert.Equal(new byte[] { 0x2, 0x0, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }, bytes);
        }
Esempio n. 46
0
        public void ToBuffer_lower_neg_short()
        {
            var bytes = TelemetryBuffer.ToBuffer(Int16.MinValue);

            Assert.Equal(new byte[] { 0xfe, 0x0, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }, bytes);
        }
Esempio n. 47
0
        public void ToBuffer_upper_long()
        {
            var bytes = TelemetryBuffer.ToBuffer(Int64.MaxValue);

            Assert.Equal(new byte[] { 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f }, bytes);
        }
 public void DefaultValueIsAppropriateForProductionEnvironmentAndUnitTests()
 {
     var buffer = new TelemetryBuffer();
     Assert.Equal(500, buffer.Capacity);
 }
Esempio n. 49
0
        public void ToBuffer_upper_neg_short()
        {
            var bytes = TelemetryBuffer.ToBuffer(-1);

            Assert.Equal(new byte[] { 0xfe, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }, bytes);
        }
Esempio n. 50
0
        public void ToBuffer_upper_neg_long()
        {
            var bytes = TelemetryBuffer.ToBuffer((long)Int32.MinValue - 1);

            Assert.Equal(new byte[] { 0xf8, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff }, bytes);
        }
 internal TelimenaInMemoryTransmitter(TelemetryBuffer buffer, DeliverySettings deliverySettings) : base(buffer)
 {
     this.DeliverySettings = deliverySettings;
     this.SendingInterval  = deliverySettings.DeliveryInterval;
 }
Esempio n. 52
0
 public TelimenaInMemoryChannel(TelemetryBuffer buffer, TelimenaInMemoryTransmitter transmitter) : base(buffer
                                                                                                        , transmitter)
 {
 }