public IMarketRuleResultIntent Apply(Fixture fixture, IMarketStateCollection oldState, IMarketStateCollection newState) { var result = new MarketRuleResultIntent(); if (oldState == null) { return(result); } var deletedMarkets = newState.Markets.Select(marketId => newState[marketId]) .Where(marketState => marketState.IsDeleted && oldState.HasMarket(marketState.Id) && !oldState[marketState.Id].IsDeleted) .ToList(); var newDeletedMarketState = deletedMarkets.Select(CreateSuspendedMarket).ToList(); if (deletedMarkets.Any()) { newDeletedMarketState.ForEach(m => { _logger.DebugFormat("market rule={0} => {1} of fixtureId={2} was deleted from UDAPI - it will be suspended", Name, m, fixture.Id); result.AddMarket(m, new MarketRuleAddIntent(MarketRuleAddIntent.OperationType.CHANGE_SELECTIONS)); }); } return(result); }
/// <summary> /// /// Remove markets from snapshot/update when: /// current market state is inactive AND the previous state was inactive too (with no change in status or name) /// /// NB: If there is a change in market's name or status then will not be removed /// /// </summary> public IMarketRuleResultIntent Apply(Fixture fixture, IMarketStateCollection oldState, IMarketStateCollection newState) { var result = new MarketRuleResultIntent(); var inactiveMarkets = fixture.Markets.Where( m => (oldState != null && oldState.HasMarket(m.Id) && oldState[m.Id].IsEqualTo(newState[m.Id])) && (!m.IsActive && !oldState[m.Id].IsActive)); var start = DateTime.UtcNow; var inactiveList = inactiveMarkets.ToList(); foreach (var market in inactiveList) { result.MarkAsRemovable(market); if (logDetailedMarketRules) { _Logger.DebugFormat("market rule={0} => {1} of fixtureId={2} is marked as removable", Name, market, fixture.Id); } } _Logger.Info($"Marking markets as removable took marketRulesTime={(DateTime.UtcNow - start).TotalSeconds.ToString("N")} marketsCount={fixture.Markets.Count} removableCount={inactiveList.Count} {fixture}"); return(result); }
public IMarketRuleResultIntent Apply(Fixture fixture, IMarketStateCollection oldState, IMarketStateCollection newState) { var result = new MarketRuleResultIntent(); if (oldState == null) return result; var deletedMarkets = newState.Markets.Select(marketId => newState[marketId]) .Where(marketState => marketState.IsDeleted && oldState.HasMarket(marketState.Id) && !oldState[marketState.Id].IsDeleted) .ToList(); var newDeletedMarketState = deletedMarkets.Select(CreateSuspendedMarket).ToList(); if (deletedMarkets.Any()) { newDeletedMarketState.ForEach(m => { _logger.DebugFormat("market rule={0} => {1} of fixtureId={2} was deleted from UDAPI - it will be suspended", Name, m, fixture.Id); result.AddMarket(m, new MarketRuleAddIntent(MarketRuleAddIntent.OperationType.CHANGE_SELECTIONS)); }); } return result; }
public IMarketRuleResultIntent Apply(Fixture fixture, IMarketStateCollection oldState, IMarketStateCollection newState) { MarketRuleResultIntent intent = new MarketRuleResultIntent(); // only apply delta rule on a full snapshot if (fixture.Tags == null || !fixture.Tags.Any() || oldState == null) return intent; foreach (var mkt in fixture.Markets) { if (oldState.HasMarket(mkt.Id)) { IMarketState state = oldState[mkt.Id]; // do not apply the delta rule on markets which have // been put in a forced suspended state if (state.IsForcedSuspended) continue; if (Severity == DeltaRuleSeverity.REMOVE_SELECTIONS) { ApplyDeltaRule_RemovingSelections(fixture, mkt, state, intent); } else if (Severity == DeltaRuleSeverity.REMOVE_MARKETS) { ApplyDeltaRule_RemovingMarkets(fixture, mkt, state, intent); } } } return intent; }
/// <summary> /// /// Remove markets from snapshot/update when: /// current market state is inactive AND the previous state was inactive too (with no change in status or name) /// /// NB: If there is a change in market's name or status then will not be removed /// /// </summary> public IMarketRuleResultIntent Apply(Fixture fixture, IMarketStateCollection oldState, IMarketStateCollection newState) { var result = new MarketRuleResultIntent(); var inactiveMarkets = fixture.Markets.Where( m => (oldState != null && oldState.HasMarket(m.Id) && oldState[m.Id].IsEqualTo(newState[m.Id])) && (!m.IsActive && !oldState[m.Id].IsActive)); foreach (var market in inactiveMarkets.ToList()) { result.MarkAsRemovable(market); _Logger.DebugFormat("market rule={0} => {1} of fixtureId={2} is marked as removable", Name, market, fixture.Id); } return result; }
/// <summary> /// /// Remove markets from snapshot/update when: /// current market state is inactive AND the previous state was inactive too (with no change in status or name) /// /// NB: If there is a change in market's name or status then will not be removed /// /// </summary> public IMarketRuleResultIntent Apply(Fixture fixture, IMarketStateCollection oldState, IMarketStateCollection newState) { var result = new MarketRuleResultIntent(); var inactiveMarkets = fixture.Markets.Where( m => (oldState != null && oldState.HasMarket(m.Id) && oldState[m.Id].IsEqualTo(newState[m.Id])) && (!m.IsActive && !oldState[m.Id].IsActive)); foreach (var market in inactiveMarkets.ToList()) { result.MarkAsRemovable(market); _Logger.DebugFormat("market rule={0} => {1} of fixtureId={2} is marked as removable", Name, market, fixture.Id); } return(result); }
public IMarketRuleResultIntent Apply(Fixture fixture, IMarketStateCollection oldState, IMarketStateCollection newState) { MarketRuleResultIntent intent = new MarketRuleResultIntent(); // only apply delta rule on a full snapshot if (fixture.Tags == null || !fixture.Tags.Any() || oldState == null) { return(intent); } foreach (var mkt in fixture.Markets) { if (oldState.HasMarket(mkt.Id)) { IMarketState state = oldState[mkt.Id]; // do not apply the delta rule on markets which have // been put in a forced suspended state if (state.IsForcedSuspended) { continue; } if (Severity == DeltaRuleSeverity.REMOVE_SELECTIONS) { ApplyDeltaRule_RemovingSelections(fixture, mkt, state, intent); } else if (Severity == DeltaRuleSeverity.REMOVE_MARKETS) { ApplyDeltaRule_RemovingMarkets(fixture, mkt, state, intent); } } } return(intent); }