コード例 #1
0
        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);
        }
コード例 #2
0
ファイル: KafkaConsumer.cs プロジェクト: erenes/Rebus.Kafka
 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()
     }
 }
コード例 #3
0
 private void CaptureRebalanceTrip(RebalanceEvent rebalanceEvent)
 {
     // save rebalance trip
 }
コード例 #4
0
        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);
            }
        }
コード例 #5
0
        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);
        }
コード例 #6
0
 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()
     }
 }