コード例 #1
0
        public void ExportIntervalAndDurationsAreUpdatedInCircularManner()
        {
            var  storageTransmissionEvaluator = new StorageTransmissionEvaluator(SampleSize);
            long timeInMilliseconds           = 2000;
            long exportInterval = 0;

            // Add data points equal to sample size
            for (int i = 0; i < SampleSize; i++)
            {
                exportInterval += 2000;
                storageTransmissionEvaluator.AddExportIntervalToDataSample(exportInterval);
                storageTransmissionEvaluator.AddExportDurationToDataSample(timeInMilliseconds);
            }

            var exportIntervalsInSecondsBefore = typeof(StorageTransmissionEvaluator)
                                                 .GetField("_exportIntervalsInMilliseconds", BindingFlags.Instance | BindingFlags.NonPublic)
                                                 .GetValue(storageTransmissionEvaluator) as long[];

            var exportDurationInSecondsBefore = typeof(StorageTransmissionEvaluator)
                                                .GetField("_exportDurationsInMilliseconds", BindingFlags.Instance | BindingFlags.NonPublic)
                                                .GetValue(storageTransmissionEvaluator) as long[];

            // Add data points equal to sample size
            for (int i = 0; i < SampleSize; i++)
            {
                Assert.Equal(2000, exportIntervalsInSecondsBefore[i]);
                Assert.Equal(2000, exportDurationInSecondsBefore[i]);
            }

            // Add 3 more data points with different time values
            for (int i = 0; i < 3; i++)
            {
                exportInterval += 1000;
                storageTransmissionEvaluator.AddExportIntervalToDataSample(exportInterval);
                storageTransmissionEvaluator.AddExportDurationToDataSample(1000);
            }

            // First 3 elements should be updated
            for (int i = 0; i < 3; i++)
            {
                Assert.Equal(1000, exportIntervalsInSecondsBefore[i]);
                Assert.Equal(1000, exportDurationInSecondsBefore[i]);
            }

            // Last two should remain the same
            for (int i = 3; i < SampleSize; i++)
            {
                Assert.Equal(2000, exportIntervalsInSecondsBefore[i]);
                Assert.Equal(2000, exportDurationInSecondsBefore[i]);
            }

            // Adding samples more than sample szie should not throw any exception
            for (int i = 3; i < 2 * SampleSize; i++)
            {
                storageTransmissionEvaluator.AddExportIntervalToDataSample((i + 1) * timeInMilliseconds);
                storageTransmissionEvaluator.AddExportDurationToDataSample(timeInMilliseconds);
            }
        }
コード例 #2
0
        public void MaxFilesToBeTransmittedIsZeroWhenExportDurationIsGreaterThanExportInterval()
        {
            var storageTransmissionEvaluator = new StorageTransmissionEvaluator(SampleSize);

            for (int i = 0; i < SampleSize; i++)
            {
                storageTransmissionEvaluator.AddExportIntervalToDataSample((i + 1) * 1000);
                storageTransmissionEvaluator.AddExportDurationToDataSample(2000);
            }
            var maxFiles = storageTransmissionEvaluator.GetMaxFilesToTransmitFromStorage();

            Assert.Equal(0, maxFiles);
        }
コード例 #3
0
        public void MaxFilesToBeTransmittedIsNonZeroWhenExportDurationIsLessThanExportInterval()
        {
            var storageTransmissionEvaluator = new StorageTransmissionEvaluator(SampleSize);

            for (int i = 0; i < SampleSize; i++)
            {
                storageTransmissionEvaluator.AddExportIntervalToDataSample((i + 1) * 3000);
                storageTransmissionEvaluator.AddExportDurationToDataSample(1000);
            }
            var maxFiles = storageTransmissionEvaluator.GetMaxFilesToTransmitFromStorage();

            Assert.True(maxFiles > 0);
        }
コード例 #4
0
        public void MaxFilesToBeTransmittedIsZeroWhenDataSamplesAreLessThanSampleSize()
        {
            var storageTransmissionEvaluator = new StorageTransmissionEvaluator(SampleSize);

            //For Sample Size 5, 5th export will have enough samples to make the decision
            for (int i = 0; i < 4; i++)
            {
                storageTransmissionEvaluator.AddExportDurationToDataSample((i + 1) * 3000);
                storageTransmissionEvaluator.AddExportDurationToDataSample(1000);
            }
            var maxFiles = storageTransmissionEvaluator.GetMaxFilesToTransmitFromStorage();

            Assert.Equal(0, maxFiles);
        }
コード例 #5
0
        public void MaxFilesToBeTransmittedIsZeroWhenCurrentBatchExportDurationIsGreaterThanExportInterval()
        {
            var storageTransmissionEvaluator = new StorageTransmissionEvaluator(SampleSize);

            for (int i = 0; i < SampleSize; i++)
            {
                storageTransmissionEvaluator.AddExportIntervalToDataSample((i + 1) * 3000);
                storageTransmissionEvaluator.AddExportDurationToDataSample(1000);
            }

            // Update the currentBatchExportDuration to a greater value
            // than avg export interval.
            typeof(StorageTransmissionEvaluator)
            .GetField("_currentBatchExportDurationInMilliseconds", BindingFlags.Instance | BindingFlags.NonPublic)
            .SetValue(storageTransmissionEvaluator, 10000);
            var maxFiles = storageTransmissionEvaluator.GetMaxFilesToTransmitFromStorage();

            Assert.Equal(0, maxFiles);
        }
コード例 #6
0
        public void ConstructorInitializesInstanceVariablesForEvaluation()
        {
            var storageTransmissionEvaluator = new StorageTransmissionEvaluator(SampleSize);
            var sampleSize = typeof(StorageTransmissionEvaluator)
                             .GetField("_sampleSize", BindingFlags.Instance | BindingFlags.NonPublic)
                             .GetValue(storageTransmissionEvaluator);
            var previousExportStartTimeInMilliseconds = typeof(StorageTransmissionEvaluator)
                                                        .GetField("_previousExportStartTimeInMilliseconds", BindingFlags.Instance | BindingFlags.NonPublic)
                                                        .GetValue(storageTransmissionEvaluator);
            var exportDurationInSeconds = typeof(StorageTransmissionEvaluator)
                                          .GetField("_exportDurationsInMilliseconds", BindingFlags.Instance | BindingFlags.NonPublic)
                                          .GetValue(storageTransmissionEvaluator) as long[];
            var exportIntervalsInSeconds = typeof(StorageTransmissionEvaluator)
                                           .GetField("_exportIntervalsInMilliseconds", BindingFlags.Instance | BindingFlags.NonPublic)
                                           .GetValue(storageTransmissionEvaluator) as long[];

            Assert.Equal(SampleSize, (int)sampleSize);
            Assert.NotNull(exportIntervalsInSeconds);
            Assert.NotNull(exportDurationInSeconds);
            Assert.Equal(SampleSize, exportIntervalsInSeconds.Length);
            Assert.Equal(SampleSize, exportDurationInSeconds.Length);
            Assert.Equal(0, (long)previousExportStartTimeInMilliseconds);
        }
コード例 #7
0
 public AzureMonitorPersistentStorage(ITransmitter transmitter)
 {
     _transmitter = transmitter;
     _stopwatch   = Stopwatch.StartNew();
     _storageTransmissionEvaluator = new StorageTransmissionEvaluator(StorageTransmissionEvaluatorSampleSize);
 }