コード例 #1
0
        public async Task <Boolean> AddUserInput(Models.UserInput userInput)
        {
            _context.UserInput.Add(userInput);
            await _context.SaveChangesAsync();

            return(true);
        }
コード例 #2
0
        public HttpStatusCode RegisterIcu()
        {
            var restClient  = new RestClient("http://localhost:54384/api/");
            var restRequest = new RestRequest("ICUConfig/register", Method.POST);

            Models.UserInput userInput = new Models.UserInput();
            userInput.numberOfBeds = 3;
            userInput.layout       = 'H';
            restRequest.AddJsonBody(JsonConvert.SerializeObject(userInput));

            IRestResponse restResponse = restClient.Execute(restRequest);

            return(restResponse.StatusCode);
        }
コード例 #3
0
        public override async Task ProcessingLogic(IConsumer <string, string> consumer, ConsumeResult <string, string> message)
        {
            dynamic kafkaMessage = JsonConvert.DeserializeObject(message.Value);

            //_logger.LogInformation($"message {message.Value}");

            if (kafkaMessage.tradeId != null)
            {
                //_logger.LogInformation("==========================================================================TradeOffer");

                Models.UserInput userInput = new Models.UserInput
                {
                    tradeId          = kafkaMessage.tradeId,
                    sourceCurrency   = kafkaMessage.paymentCurrency,
                    PPU              = kafkaMessage.pricePerUnit,
                    purchaseAmount   = kafkaMessage.requestedAmount,
                    purchaseCurrency = kafkaMessage.requestedCurrency,
                    status           = "Received",
                    timestampCreated = DateTime.Now
                };

                String status = await _tradeAlgo.ShouldAcceptTrade(userInput, baselineData);

                userInput.status = status;

                var gg = await _userInput.AddUserInput(userInput);
            }
            else if (kafkaMessage.RecordId != null)
            {
                //_logger.LogInformation("==========================================================================TradeBaseline");

                /*_logger.LogInformation("Hello1 " + baselineData.sgdToUsdBaseline);
                *  _logger.LogInformation("Hello2 " + baselineData.usdToSgdBaseline);
                *  _logger.LogInformation("Hello3 " + baselineData.sgdToGbpBaseline);
                *  _logger.LogInformation("Hello4 " + baselineData.gbpToSgdBaseline);
                *  _logger.LogInformation("Hello5 " + baselineData.usdToGbpBaseline);
                *  _logger.LogInformation("Hello6 " + baselineData.gbpToUsdBaseline);*/

                Models.Baseline baseline = new Models.Baseline
                {
                    recordId       = kafkaMessage.RecordId,
                    originType     = kafkaMessage.OriginType,
                    originModifier = kafkaMessage.OriginModifier,
                    usdModifier    = kafkaMessage.UsdModifier,
                    gdpModifier    = kafkaMessage.GbpModifier,
                    createdTs      = kafkaMessage.CreatedTs,
                    version        = kafkaMessage.Version
                };

                baselineData = _tradeAlgo.ComputeBaselinePPU(baseline);

                /*_logger.LogInformation("Hello11 " + baselineData.sgdToUsdBaseline);
                *  _logger.LogInformation("Hello12 " + baselineData.usdToSgdBaseline);
                *  _logger.LogInformation("Hello13 " + baselineData.sgdToGbpBaseline);
                *  _logger.LogInformation("Hello14 " + baselineData.gbpToSgdBaseline);
                *  _logger.LogInformation("Hello15 " + baselineData.usdToGbpBaseline);
                *  _logger.LogInformation("Hello16 " + baselineData.gbpToUsdBaseline);*/
            }
            else
            {
                _logger.LogInformation("==========================================================================ERROR, wrong format");
                _logger.LogInformation($"message {message.Value}");
            }

            consumer.Commit(message);
        }
コード例 #4
0
        public async Task <String> ShouldAcceptTrade(Models.UserInput userInput, BaselineData data)
        {
            if (--skipCounter > 0)
            {
                return("Skipped");
            }
            //BaselineData data = _cache.Get<BaselineData>(cacheKey);

            if (!data.hasValues)//(data == null)
            {
                //_logger.LogInformation("==========================================================================Baseline doesnt exist yet");
                data = ComputeBaselinePPU(await GetBaseline());
                //return "No Trade Baseline";
            }

            //if (userInput.purchaseAmount <= baselineAmount)
            //    return "Too small purchase amounts";

            /*_logger.LogInformation("Hello1 " + data.sgdToUsdBaseline);
            *  _logger.LogInformation("Hello2 " + data.usdToSgdBaseline);
            *  _logger.LogInformation("Hello3 " + data.sgdToGbpBaseline);
            *  _logger.LogInformation("Hello4 " + data.gbpToSgdBaseline);
            *  _logger.LogInformation("Hello5 " + data.usdToGbpBaseline);
            *  _logger.LogInformation("Hello6 " + data.gbpToUsdBaseline);*/


            double applicableConversion = -1.0;

            if (userInput.sourceCurrency == "SGD")
            {
                if (userInput.purchaseCurrency == "USD")
                {
                    applicableConversion = data.sgdToUsdBaseline;
                }
                else if (userInput.purchaseCurrency == "GBP")
                {
                    applicableConversion = data.sgdToGbpBaseline;
                }
                else
                {
                    _logger.LogInformation("==========================================================================Error Invalid Conversion");
                }
            }
            else if (userInput.sourceCurrency == "USD")
            {
                if (userInput.purchaseCurrency == "SGD")
                {
                    applicableConversion = data.usdToSgdBaseline;
                }
                else if (userInput.purchaseCurrency == "GBP")
                {
                    applicableConversion = data.usdToGbpBaseline;
                }
                else
                {
                    _logger.LogInformation("==========================================================================Error Invalid Conversion");
                }
            }
            else if (userInput.sourceCurrency == "GBP")
            {
                if (userInput.purchaseCurrency == "SGD")
                {
                    applicableConversion = data.gbpToSgdBaseline;
                }
                else if (userInput.purchaseCurrency == "USD")
                {
                    applicableConversion = data.gbpToUsdBaseline;
                }
                else
                {
                    _logger.LogInformation("==========================================================================Error Invalid Conversion");
                }
            }
            else
            {
                _logger.LogInformation("==========================================================================Error Invalid Conversion");
            }

            if (((double)userInput.PPU > applicableConversion))
            {
                try
                {
                    var request = new HttpRequestMessage(HttpMethod.Post, "/api/v1/trade/" + userInput.tradeId);
                    var client  = _clientFactory.CreateClient("TradeBankProject");
                    //var json = JsonConvert.SerializeObject(userInput);
                    //request.Content = new StringContent(json, Encoding.UTF8, "application/json");
                    var response = await client.SendAsync(request);

                    if (response.IsSuccessStatusCode)
                    {
                        response.EnsureSuccessStatusCode();
                        //_logger.LogInformation("==========================================================================Trade success");
                        return("Trade Success");
                    }
                    else
                    {
                        if (++failCounter > maxFails)
                        {
                            skipCounter = skipAmount;
                        }
                        //_logger.LogInformation("==========================================================================Trade not ours");
                        //throw new HttpRequestException();
                        return("Trade already taken");
                    }
                }
                catch (Exception e)
                {
                    _logger.LogInformation($"message {e.Message}");
                    return("Trade API Exception");
                }
            }
            //_logger.LogInformation("==========================================================================Trade offer baseline is low");
            return("Trade offer baseline is low");
        }