public StructureBuilder(string instanceTag, IBlobSaver blobSaver) { _instanceTag = instanceTag; _blobSaver = blobSaver; _columnData = OutOrderbookEntry.GetStructure() .Select(p => new ColumnInfo { ColumnName = p.Item1, ColumnType = p.Item2 }) .ToList(); }
public async Task ProcessAsync(InConnectorOrderbook book) { var directory = _dynamicStructure.GetDirectoryName(book.Asset); if (!_assetPairsDict.ContainsKey(directory)) { _assetPairsDict.Add(directory, new Dictionary <int, List <string> >()); await _dynamicStructure.UpdateStructureIfRequiredAsync(book.Asset); } var bookId = Guid.NewGuid().ToString(); var items = new List <string>(); if (book.Asks != null) { foreach (var ask in book.Asks) { var askEntry = new OutOrderbookEntry { BookId = bookId, Source = book.Source, Asset = book.Asset, Timestamp = DateTimeConverter.Convert(book.Timestamp), IsAsk = true, Price = (decimal)ask.Price, Volume = (decimal)ask.Volume, }; items.Add(askEntry.GetValuesString()); } } if (book.Bids != null) { foreach (var bid in book.Bids) { var bidEntry = new OutOrderbookEntry { BookId = bookId, Source = book.Source, Asset = book.Asset, Timestamp = DateTimeConverter.Convert(book.Timestamp), IsAsk = false, Price = (decimal)bid.Price, Volume = (decimal)bid.Volume, }; items.Add(bidEntry.GetValuesString()); } } var minutesDict = _assetPairsDict[directory]; int minuteKey = GetMinuteKey(book.Timestamp); int pairItemsCount = minutesDict.Sum(i => i.Value.Count); if (pairItemsCount >= _maxBatchCount) { var allItemsFromOtherMinutes = minutesDict.Keys.Where(k => k != minuteKey).SelectMany(i => minutesDict[i]).ToList(); await _messagesHandler(directory, allItemsFromOtherMinutes); minutesDict.Clear(); } minutesDict[minuteKey] = items; }