private async Task <IImmutableList <Block> > WriteIteratorToBlocksAsync(
            StreamIterator iterator,
            string eventName)
        {
            _logger.Display($"{eventName}...");
            _logger.WriteEvent($"{eventName}-Start");
            using (var buffer = BufferPool.Rent(_logConstants.MaxBlockSize))
            {
                var    blocks          = ImmutableList <Block> .Empty;
                double ru              = 0;
                var    cosmosPageCount = 0;
                int    index           = 0;
                int    totalWrites     = 0;

                while (iterator.HasMoreResults)
                {
                    var result = await iterator.ReadNextAsync();

                    if (result.Stream.Length > buffer.Buffer.Length)
                    {
                        throw new NotSupportedException(
                                  $"Query return bigger than buffer:  {result.Stream.Length}");
                    }
                    if (result.Stream.Length > buffer.Buffer.Length - index)
                    {
                        var block = await _logFile.WriteBlockAsync(buffer.Buffer, index);

                        totalWrites += index;
                        blocks       = blocks.Add(block);
                        index        = 0;
                    }

                    var memory = new Memory <byte>(buffer.Buffer, index, (int)result.Stream.Length);

                    await result.Stream.ReadAsync(memory);

                    index += memory.Length;
                    ++cosmosPageCount;
                    ru += result.RequestCharge;
                }
                if (index > 0)
                {
                    var block = await _logFile.WriteBlockAsync(buffer.Buffer, index);

                    totalWrites += index;
                    blocks       = blocks.Add(block);
                }
                _logger
                .AddContext("ru", ru)
                .AddContext("cosmosPageCount", cosmosPageCount)
                .AddContext("totalWrites", totalWrites)
                .AddContext("blockCount", blocks.Count)
                .WriteEvent(eventName);
                _logger.Display($"Wrote {totalWrites} bytes in {blocks.Count} blocks");
                _logger.Display($"Used {ru} RUs on {cosmosPageCount} Cosmos pages");
                _logger.WriteEvent($"{eventName}-End");

                return(blocks);
            }
        }
Exemplo n.º 2
0
        public void TestTradeReports()
        {
            Assert.AreEqual(0, FdkHelper.ConnectToFdk("ttdemo.fxopen.com", "100106", "123qwe123", ""));

            var _trader = FdkTradeReports.Trade;
            StreamIterator <TradeTransactionReport> tradeTransactions = _trader.Server.GetTradeTransactionReports(TimeDirection.Forward, true, null, null, 5000);

            for (; !tradeTransactions.EndOfStream; tradeTransactions.Next())
            {
                TradeTransactionReport ttr = tradeTransactions.Item;
            }
        }
Exemplo n.º 3
0
        public void TestTradeReports2()
        {
            Library.Path = "<FRE>";
            Assert.AreEqual(0, FdkHelper.ConnectToFdk("ttdemo.fxopen.com", "50001933", "123123", ""));

            var _trader   = FdkTradeReports.Trade;
            var startTime = new DateTime(2015, 05, 1, 0, 0, 0);
            var endTime   = new DateTime(2015, 07, 30, 0, 0, 0);
            StreamIterator <TradeTransactionReport> tradeTransactions = _trader.Server.GetTradeTransactionReports(TimeDirection.Forward, true,
                                                                                                                  startTime, endTime, 50);

            for (; !tradeTransactions.EndOfStream; tradeTransactions.Next())
            {
                TradeTransactionReport ttr = tradeTransactions.Item;
            }
        }