public async Task <(bool, string)> PostNewTradeGenericMetric2Serie(BacktestTradeGenericMetric2Serie tradeGenericMetric2Serie, CancellationToken ct = default(CancellationToken)) { try { ct.ThrowIfCancellationRequested(); if (tradeGenericMetric2Serie == null) { throw new ArgumentNullException(nameof(tradeGenericMetric2Serie)); } logger.Info($"About to send POST request to {controllerEndpoint}/api/tradegenericmetric2s"); return(await controllerEndpoint.AppendPathSegment("/api/tradegenericmetric2s").PostJsonAsync(tradeGenericMetric2Serie, ct).ReceiveJson <(bool, string)>()); } catch (OperationCanceledException) { string err = "Not posting new trade generic metric2 serie: operation cancelled"; logger.Error(err); return(false, err); } catch (ArgumentNullException ex) { string err = $"Not posting new trade generic metric2 serie: missing or invalid parameter {ex.ParamName}"; logger.Error(err); return(false, err); } catch (Exception ex) { string err = "Failed to post new trade generic metric2 serie"; logger.Error(err, ex); return(false, $"{err}: {ex.Message}"); } }
public async Task TestPostNewTradeGenericMetric2Serie() { string controllerEndpoint = "https://localhost:44379/"; TradeGenericMetric2SeriesConnector connector = TradeGenericMetric2SeriesConnector.GetConnector(controllerEndpoint); try { string jobGroupId = Guid.NewGuid().ToString(); string tradeDescription = "Trade 1"; var serie = new BacktestTradeGenericMetric2Serie() { JobGroupId = jobGroupId, Points = new List <BacktestTradeGenericMetric2Point>() { new BacktestTradeGenericMetric2Point() { TimeInSeconds = 0, GenericMetric2Value = 1.5 }, new BacktestTradeGenericMetric2Point() { TimeInSeconds = 1, GenericMetric2Value = 2.5 }, new BacktestTradeGenericMetric2Point() { TimeInSeconds = 2, GenericMetric2Value = 3.5 }, new BacktestTradeGenericMetric2Point() { TimeInSeconds = 3, GenericMetric2Value = 4.5 }, new BacktestTradeGenericMetric2Point() { TimeInSeconds = 4, GenericMetric2Value = 5.5 }, }, TradeDescription = tradeDescription }; var result = await connector.PostNewTradeGenericMetric2Serie(serie); Assert.IsTrue(result.Item1, result.Item2); } catch (Exception ex) { Assert.Fail(ex.Message); } }
internal async Task <(bool, string)> HandleNewTradeGenericMetric2Serie(BacktestTradeGenericMetric2Serie tradeGenericMetric2Serie) { try { if (tradeGenericMetric2Serie == null) { throw new ArgumentNullException(nameof(tradeGenericMetric2Serie)); } if (tradeGenericMetric2Serie.Points.IsNullOrEmpty()) { return(false, "Unrealized PnL serie is empty"); } logger.Info($"Received new unrealized PnL serie of {tradeGenericMetric2Serie.Points.Count} points for job group {tradeGenericMetric2Serie.JobGroupId} (trade {tradeGenericMetric2Serie.TradeDescription})"); // 1. Save in database var result = await actioner.Insert(tradeGenericMetric2Serie); if (!result.Item1) { return(result); } else { return(true, $"Successfully added new unrealized PnL serie for job group {tradeGenericMetric2Serie.JobGroupId}"); } } catch (ArgumentNullException ex) { string err = $"Not processing unrealized PnL serie: missing or invalid parameter {ex.ParamName}"; logger.Error(err); return(false, $"{err}: {ex.Message}"); } catch (Exception ex) { string err = "Failed to process unrealized PnL serie"; logger.Error(err); return(false, $"{err}: {ex.Message}"); } }
public async Task <(bool, string)> Post([FromBody] BacktestTradeGenericMetric2Serie tradeGenericMetric2Serie) { return(await utils.HandleNewTradeGenericMetric2Serie(tradeGenericMetric2Serie)); }