private int ExecuteTrades() { var rebalanceEvent = new RebalanceEvent(); var coinCount = _settings.Currencies.Length; var balances = GetInitialBalances(_settings.Currencies); rebalanceEvent.Balances = balances; rebalanceEvent.StartTime = DateTime.UtcNow; foreach (var currency in _settings.Currencies) { var price = SellToBase(currency); var thisBalance = rebalanceEvent.Balances.Where(b => b.Currency.Symbol.Equals(currency.Symbol)).FirstOrDefault(); thisBalance.Price = price; } var baseBalance = GetBaseBalance(); rebalanceEvent.BaseQuantity = baseBalance; var baseBuyLimit = GetBaseBuyLimit(baseBalance, coinCount); foreach (var currency in _settings.Currencies) { var quantity = Rebuy(currency, baseBuyLimit); var thisBalance = rebalanceEvent.Balances.Where(b => b.Currency.Symbol.Equals(currency.Symbol)).FirstOrDefault(); thisBalance.FinalQuantity = quantity; } rebalanceEvent.EndTime = DateTime.UtcNow; CaptureRebalanceTrip(rebalanceEvent); return(0); }
private void OnRebalance(IConsumer <Null, string> sender, RebalanceEvent evnt) { if (evnt.IsAssignment) { _logger?.LogInformation($"Assigned partitions: [{string.Join(", ", evnt.Partitions)}]"); // possibly override the default partition assignment behavior: // consumer.Assign(...) } else { _logger?.LogInformation($"Revoked partitions: [{string.Join(", ", evnt.Partitions)}]"); // consumer.Unassign() } }
private void CaptureRebalanceTrip(RebalanceEvent rebalanceEvent) { // save rebalance trip }
public static void RebalanceHandler <T1, T2>(ILogger logger, IConsumer <T1, T2> consumer, RebalanceEvent rebalanceEvent) { var partitiongByTopic = rebalanceEvent.Partitions.GroupBy(p => p.Topic) .Select(g => new { Topic = g.Key, Partitions = g.Select(p => p.Partition.Value).ToArray() }); if (rebalanceEvent.IsAssignment) { logger.Information("Assignment: {@partitions}", partitiongByTopic); } else if (rebalanceEvent.IsRevocation) { logger.Information("Revocation: {@partitions}", partitiongByTopic); } }
private void ProcessMessages() { var name = _settings.Settings.InstanceName; const int maxUpdates = 100; var updates = new StatisticEvent[maxUpdates]; foreach (var typeChannels in _channels) { foreach (var channel in typeChannels.Value) { StatChannel.Mesg msg; for (var i = 0; i < maxUpdates & channel.TryDequeue(out msg); i++) { switch (msg.Action) { case Actions.Posted: if (msg.ids == null) { updates[i] = new PostEvent(name, msg.id, typeChannels.Key, msg.Length, msg.Time); } else { updates[i] = new SerialPostEvent(name, msg.Time, msg.Length); } break; case Actions.ExternalGet: if (msg.ids == null) { updates[i] = new ExternalGetEvent(name, msg.id, typeChannels.Key, msg.Length, msg.Time); } else { updates[i] = new ExternalSerialGetEvent(name, msg.ids, typeChannels.Key, msg.Length, msg.Time); } break; case Actions.CacheGet: updates[i] = new CachedGetEvent(name, msg.id, typeChannels.Key, msg.Length, msg.Time); break; case Actions.BecameUnactual: updates[i] = new UnactualGetEvent(name, msg.id, typeChannels.Key, msg.Time); break; case Actions.RebalanceStarted: updates[i] = new RebalanceEvent(name, msg.Time, typeChannels.Key, "Started"); break; case Actions.RebalanceQueued: updates[i] = new RebalanceEvent(name, msg.Time, typeChannels.Key, "Queued"); break; case Actions.RebalanceEnded: updates[i] = new RebalanceEvent(name, msg.Time, typeChannels.Key, "Ended", msg.Length); break; case Actions.BranchChanged: updates[i] = new BranchChangedEvent(name, msg.Time, msg.Length, typeChannels.Key); break; } } } } _statQueue.PutEvent(updates); }
private void ConsumerOnRebalance(IConsumer <Ignore, TransportMessage> sender, RebalanceEvent evnt) { if (evnt.IsAssignment) { _log.Info($"Assigned partitions: [{string.Join(", ", evnt.Partitions)}]"); // possibly override the default partition assignment behavior: // consumer.Assign(...) } else { _log.Info($"Revoked partitions: [{string.Join(", ", evnt.Partitions)}]"); // consumer.Unassign() } }