示例#1
0
        private void WriteToDisk(Recorder recorder)
        {
            //Sample every second until flagged as completed.
            var accumulatingHistogram = new LongHistogram(TimeStamp.Hours(1), 3);

            while (_isCompleted == 0)
            {
                Thread.Sleep(1000);

                var histogram = recorder.GetIntervalHistogram();
                accumulatingHistogram.Add(histogram);
                _logWriter.Append(histogram);
                Console.WriteLine($"{DateTime.Now:o} Interval.TotalCount = {histogram.TotalCount,10:G}. Accumulated.TotalCount = {accumulatingHistogram.TotalCount,10:G}.");
            }
            _logWriter.Dispose();
            _outputStream.Dispose();


            Console.WriteLine("Log contents");
            Console.WriteLine(File.ReadAllText(LogPath));
            Console.WriteLine();
            Console.WriteLine("Percentile distribution (values reported in milliseconds)");
            accumulatingHistogram.OutputPercentileDistribution(Console.Out, outputValueUnitScalingRatio: OutputScalingFactor.TimeStampToMilliseconds);

            Console.WriteLine("Output thread finishing.");
        }
        public async void AmazonIotStreamer([FromQuery] int messageToSend = 10, [FromQuery] int delayBtwMessageInMs = 50)
        {
            var rd = new Random(100);

            var histogram = new LongHistogram(TimeStamp.Hours(1), 3);

            var writer = new StringWriter();

            var messages = messageToSend;

            string[] currencyPairs = new string[] { "EUR/USD", "EUR/JPY", "EUR/GBP", "USD/JPY", "USD/GBP" };
            for (int currIndex = 0; currIndex < currencyPairs.Length; currIndex++)
            {
                var pair = currencyPairs[currIndex];

                Task.Run(async() =>
                {
                    var publisher = new AmazonIotDataClient(IotEndpoint, new BasicAWSCredentials(IotAccessKey, IotSecret));
                    for (var i = 1; i <= messages; i++)
                    {
                        long startTimestamp = Stopwatch.GetTimestamp();
                        long timestamp      = DateTimeOffset.Now.ToUnixTimeMilliseconds();

                        var currency = new Currency()
                        {
                            Id           = i,
                            CurrencyType = pair,
                            Price        = rd.NextDouble(),
                            Timestamp    = DateTimeOffset.Now.ToUnixTimeMilliseconds().ToString(),
                            Ladders      = new LadderFactory().Build(10)
                        };

                        var cur = JsonConvert.SerializeObject(currency);

                        publisher.PublishAsync(new Amazon.IotData.Model.PublishRequest()
                        {
                            Topic   = pair,
                            Payload = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(cur)),
                            Qos     = 0
                        });

                        long elapsed = Stopwatch.GetTimestamp() - startTimestamp;
                        histogram.RecordValue(elapsed);
                        await Task.Delay(delayBtwMessageInMs).ConfigureAwait(false);
                    }

                    var scalingRatio = OutputScalingFactor.TimeStampToMilliseconds;
                    histogram.OutputPercentileDistribution(
                        writer,
                        outputValueUnitScalingRatio: scalingRatio);
                    System.IO.File.WriteAllText(@"d:\cloud\appsync.txt", writer.ToString());
                });
            }
        }
        public void TimeStamp_values_are_accurate()
        {
            var delay    = TimeSpan.FromSeconds(1);
            var expected = TimeStamp.Seconds(delay.Seconds);

            var start = Stopwatch.GetTimestamp();

            Thread.Sleep(delay);
            var end    = Stopwatch.GetTimestamp();
            var actual = end - start;

            Assert.AreEqual(expected, actual, expected * 0.05);
            Assert.AreEqual(TimeStamp.Seconds(60), TimeStamp.Minutes(1));
            Assert.AreEqual(TimeStamp.Minutes(60), TimeStamp.Hours(1));
        }
        public static void Stream(Func <string, string, Random, string> createQuery, int messageToSend, int delayBtwMessageInMs, string apiKey, string endpointUrl)
        {
            var client = new HttpClient();

            System.Net.ServicePointManager.SecurityProtocol =
                SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;

            var rd = new Random(100);

            var histogram = new LongHistogram(TimeStamp.Hours(1), 3);

            var writer = new StringWriter();

            var messages = messageToSend;

            Task.Run(async() =>
            {
                for (var i = 1; i <= messages; i++)
                {
                    var req = new HttpRequestMessage();
                    req.Headers.TryAddWithoutValidation("x-api-key", apiKey);

                    req.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                    req.Headers.TryAddWithoutValidation("Content-Type", "application/json");

                    req.Method     = HttpMethod.Post;
                    req.RequestUri = new Uri(endpointUrl);

                    long startTimestamp = Stopwatch.GetTimestamp();
                    long timestamp      = DateTimeOffset.Now.ToUnixTimeMilliseconds();

                    req.Content = new StringContent(createQuery(i.ToString(), timestamp.ToString(), rd), Encoding.UTF8, "application/json");

                    await client.SendAsync((req)).ConfigureAwait(false);

                    long elapsed = Stopwatch.GetTimestamp() - startTimestamp;
                    histogram.RecordValue(elapsed);
                    await Task.Delay(delayBtwMessageInMs).ConfigureAwait(false);
                }

                var scalingRatio = OutputScalingFactor.TimeStampToMilliseconds;
                histogram.OutputPercentileDistribution(
                    writer,
                    outputValueUnitScalingRatio: scalingRatio);
                System.IO.File.WriteAllText(@"d:\cloud\appsync.txt", writer.ToString());
            });
        }
        public void TimeStamp_values_are_accurate()
        {
            var  delay       = TimeSpan.FromSeconds(1);
            var  expected    = TimeStamp.Seconds(delay.Seconds);
            long minAccepted = (long)(expected * 0.95);
            long maxAccepted = (long)(expected * 1.05);

            var start = Stopwatch.GetTimestamp();

            Spin.Wait(delay);
            var end    = Stopwatch.GetTimestamp();
            var actual = end - start;

            actual.Should().BeInRange(minAccepted, maxAccepted);
            Assert.Equal(TimeStamp.Seconds(60), TimeStamp.Minutes(1));
            Assert.Equal(TimeStamp.Minutes(60), TimeStamp.Hours(1));
        }
示例#6
0
        public void SignalRStreamer([FromQuery] int messageToSend = 10, [FromQuery] int delayBtwMessageInMs = 50)
        {
            var histogram = new LongHistogram(TimeStamp.Hours(1), 3);


            var writer = new StringWriter();

            string[] currencyPairs = new string[] { "EUR/USD", "EUR/JPY", "EUR/GBP", "USD/JPY", "USD/GBP" };
            for (int currIndex = 0; currIndex < currencyPairs.Length; currIndex++)
            {
                var pair = currencyPairs[currIndex];
                Task.Run(async() =>
                {
                    var rd = new Random(100);
                    for (var i = 1; i <= messageToSend; i++)
                    {
                        long startTimestamp = Stopwatch.GetTimestamp();

                        var currency = new Currency()
                        {
                            Id           = i,
                            CurrencyType = pair,
                            Price        = rd.NextDouble(),
                            Timestamp    = DateTimeOffset.Now.ToUnixTimeMilliseconds().ToString(),
                            Ladders      = new LadderFactory().Build(10)
                        };

                        var cur = JsonConvert.SerializeObject(currency);
                        await context.Clients.Group(pair).SendAsync("broadcastMessage", "currency", cur).ConfigureAwait(false);

                        long elapsed = Stopwatch.GetTimestamp() - startTimestamp;
                        histogram.RecordValue(elapsed);

                        await Task.Delay(delayBtwMessageInMs).ConfigureAwait(false);
                    }
                    var scalingRatio = OutputScalingFactor.TimeStampToMilliseconds;
                    histogram.OutputPercentileDistribution(
                        writer,
                        outputValueUnitScalingRatio: scalingRatio);
                    System.IO.File.WriteAllText(@"d:\cloud\signalr.txt", writer.ToString());
                });
            }
        }
 static LongHistogram CreateTimeHistogram()
 {
     return(new LongHistogram(TimeStamp.Hours(1), 3));
 }
示例#8
0
        public async void AmazonMQStreamer([FromQuery] int messageToSend = 10, [FromQuery] int delayBtwMessageInMs = 50)
        {
            NMSConnectionFactory factory = new NMSConnectionFactory(ActiveMqEndpoint);

            var rd = new Random(100);

            var histogram = new LongHistogram(TimeStamp.Hours(1), 3);

            var writer = new StringWriter();

            string[] currencyPairs = new string[] { "EUR/USD", "EUR/JPY", "EUR/GBP", "USD/JPY", "USD/GBP" };
            for (int currIndex = 0; currIndex < currencyPairs.Length; currIndex++)
            {
                var pair = currencyPairs[currIndex];
                Task.Run(async() =>
                {
                    using (var connection = factory.CreateConnection(ActiveMqLogin, ActiveMqMdp))
                    {
                        connection.Start();

                        var session = connection.CreateSession(AcknowledgementMode.AutoAcknowledge);

                        var topic = new ActiveMQTopic("VirtualTopic." + pair);

                        var producer = session.CreateProducer(topic);

                        producer.DeliveryMode = MsgDeliveryMode.NonPersistent;


                        for (var i = 0; i <= messageToSend; i++)
                        {
                            var currency = new Currency()
                            {
                                Id           = i,
                                CurrencyType = pair,
                                Price        = rd.NextDouble(),
                                Timestamp    = DateTimeOffset.Now.ToUnixTimeMilliseconds().ToString(),
                                Ladders      = new LadderFactory().Build(10)
                            };

                            var cur             = JsonConvert.SerializeObject(currency);
                            long startTimestamp = Stopwatch.GetTimestamp();

                            producer.Send(session.CreateTextMessage(cur));

                            long elapsed = Stopwatch.GetTimestamp() - startTimestamp;
                            histogram.RecordValue(elapsed);
                            await Task.Delay(delayBtwMessageInMs).ConfigureAwait(false);
                        }
                        session.Close();
                        connection.Close();

                        var scalingRatio = OutputScalingFactor.TimeStampToMilliseconds;
                        histogram.OutputPercentileDistribution(
                            writer,
                            outputValueUnitScalingRatio: scalingRatio);
                        System.IO.File.WriteAllText(@"d:\cloud\amq.txt", writer.ToString());
                    }
                });
            }
        }