Beispiel #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="settings"></param>
        /// <param name="streamListenerManagerActorContext"></param>
        /// <param name="adapterPlugin"></param>
        /// <param name="stateManager"></param>
        /// <param name="suspensionManager"></param>
        /// <param name="streamHealthCheckValidation"></param>
        /// <param name="fixtureValidation"></param>
        public StreamListenerBuilderActor(
            ISettings settings,
            IActorContext streamListenerManagerActorContext,
            IAdapterPlugin adapterPlugin,
            IStateManager stateManager,
            ISuspensionManager suspensionManager,
            IStreamHealthCheckValidation streamHealthCheckValidation,
            IFixtureValidation fixtureValidation)
        {
            _settings = settings ?? throw new ArgumentNullException(nameof(settings));
            _streamListenerManagerActorContext =
                streamListenerManagerActorContext ??
                throw new ArgumentNullException(nameof(streamListenerManagerActorContext));
            _adapterPlugin               = adapterPlugin ?? throw new ArgumentNullException(nameof(adapterPlugin));
            _stateManager                = stateManager ?? throw new ArgumentNullException(nameof(stateManager));
            _suspensionManager           = suspensionManager ?? throw new ArgumentNullException(nameof(suspensionManager));
            _streamHealthCheckValidation = streamHealthCheckValidation ?? throw new ArgumentNullException(nameof(streamHealthCheckValidation));
            _fixtureValidation           = fixtureValidation ?? throw new ArgumentNullException(nameof(fixtureValidation));

            Context.System.Scheduler.ScheduleTellRepeatedly(
                CheckStateIntervalInMilliseconds,
                CheckStateIntervalInMilliseconds,
                Self,
                new CheckStreamListenerBuilderActorStateMsg(),
                Self);

            Active();
        }
Beispiel #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="settings"></param>
        /// <param name="udApiService"></param>
        /// <param name="adapterPlugin"></param>
        /// <param name="stateManager"></param>
        /// <param name="suspensionManager"></param>
        /// <param name="streamHealthCheckValidation"></param>
        /// <param name="fixtureValidation"></param>
        public static void Init(
            ISettings settings,
            IServiceFacade udApiService,
            IAdapterPlugin adapterPlugin,
            IStateManager stateManager,
            ISuspensionManager suspensionManager,
            IStreamHealthCheckValidation streamHealthCheckValidation,
            IFixtureValidation fixtureValidation)
        {
            _actorSystem = ActorSystem.Create("AdapterSystem");

            var fileStoreProvider = new FileStoreProvider(settings.StateProviderPath);

            CreateFixtureStateActor(settings, fileStoreProvider);
            CreateStreamListenerManagerActor(settings, adapterPlugin, stateManager, suspensionManager, streamHealthCheckValidation, fixtureValidation);
            CreateSportProcessorRouterActor(settings, udApiService);
            CreateSportsProcessorActor(settings, udApiService);

            // Setup an actor that will handle deadletter type messages
            var deadletterWatchMonitorProps = Props.Create(() => new AdapterDeadletterMonitorActor());
            var deadletterWatchActorRef     = _actorSystem.ActorOf(deadletterWatchMonitorProps, "AdapterDeadletterMonitorActor");

            // subscribe to the event stream for messages of type "DeadLetter"
            _actorSystem.EventStream.Subscribe(deadletterWatchActorRef, typeof(DeadLetter));
        }
Beispiel #3
0
        public Adapter(
            ISettings settings,
            IServiceFacade udapiServiceFacade,
            IAdapterPlugin platformConnector,
            IStateManager stateManager,
            IStateProvider stateProvider,
            ISuspensionManager suspensionManager,
            IStreamHealthCheckValidation streamHealthCheckValidation,
            IFixtureValidation fixtureValidation)
        {
            _settings                    = settings ?? throw new ArgumentNullException(nameof(settings));
            _udapiServiceFacade          = udapiServiceFacade ?? throw new ArgumentNullException(nameof(udapiServiceFacade));
            _platformConnector           = platformConnector ?? throw new ArgumentNullException(nameof(platformConnector));
            _stateManager                = stateManager ?? throw new ArgumentNullException(nameof(stateManager));
            _suspensionManager           = suspensionManager ?? throw new ArgumentNullException(nameof(suspensionManager));
            _streamHealthCheckValidation = streamHealthCheckValidation ?? throw new ArgumentNullException(nameof(streamHealthCheckValidation));
            _fixtureValidation           = fixtureValidation ?? throw new ArgumentNullException(nameof(fixtureValidation));

            StateProviderProxy.Init(stateProvider);

            if (settings.StatsEnabled)
            {
                StatsManager.Configure();
            }

            platformConnector.Initialise();
            stateManager.AddRules(platformConnector.MarketRules);

            ThreadPool.SetMinThreads(500, 500);

            _stats = StatsManager.Instance["adapter.core"].GetHandle();

            PopuplateAdapterVersionInfo();
        }
Beispiel #4
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="resource"></param>
 /// <param name="settings"></param>
 /// <param name="streamHealthCheckValidation"></param>
 public StreamHealthCheckActor(
     IResourceFacade resource,
     ISettings settings,
     IStreamHealthCheckValidation streamHealthCheckValidation)
 {
     _resource = resource ?? throw new ArgumentNullException(nameof(resource));
     _settings = settings ?? throw new ArgumentNullException(nameof(settings));
     _streamHealthCheckValidation = streamHealthCheckValidation ?? throw new ArgumentNullException(nameof(streamHealthCheckValidation));
     Receive <ConnectToStreamServerMsg>(a => ConnectToStreamServerMsgHandler(a));
     Receive <StreamConnectedMsg>(a => StreamConnectedMsgHandler(a));
     Receive <StartStreamingNotRespondingMsg>(a => StartStreamingNotRespondingMsgHandler(a));
     Receive <StreamHealthCheckMsg>(a => StreamHealthCheckMsgHandler(a));
 }
        /// <summary>
        ///
        /// </summary>
        /// <param name="settings"></param>
        /// <param name="adapterPlugin"></param>
        /// <param name="stateManager"></param>
        /// <param name="suspensionManager"></param>
        /// <param name="streamHealthCheckValidation"></param>
        /// <param name="fixtureValidation"></param>
        public StreamListenerManagerActor(
            ISettings settings,
            IAdapterPlugin adapterPlugin,
            IStateManager stateManager,
            ISuspensionManager suspensionManager,
            IStreamHealthCheckValidation streamHealthCheckValidation,
            IFixtureValidation fixtureValidation)
        {
            _settings = settings ?? throw new ArgumentNullException(nameof(settings));
            if (adapterPlugin == null)
            {
                throw new ArgumentNullException(nameof(adapterPlugin));
            }
            if (stateManager == null)
            {
                throw new ArgumentNullException(nameof(stateManager));
            }
            if (suspensionManager == null)
            {
                throw new ArgumentNullException(nameof(suspensionManager));
            }

            _shouldSendProcessSportsMessage = true;

            _streamListenerBuilderActorRef =
                Context.ActorOf(Props.Create(() =>
                                             new StreamListenerBuilderActor(
                                                 settings,
                                                 Context,
                                                 adapterPlugin,
                                                 stateManager,
                                                 suspensionManager,
                                                 streamHealthCheckValidation,
                                                 fixtureValidation)),
                                StreamListenerBuilderActor.ActorName);

            Receive <ProcessResourceMsg>(o => ProcessResourceMsgHandler(o));
            Receive <StreamConnectedMsg>(o => StreamConnectedMsgHandler(o));
            Receive <StreamDisconnectedMsg>(o => StreamDisconnectedMsgHandler(o));
            Receive <StreamListenerStoppedMsg>(o => StreamListenerStoppedMsgHandler(o));
            Receive <StartStreamingNotRespondingMsg>(o => StopStreamListenerChildActor(o.FixtureId));
            Receive <StreamListenerInitializedMsg>(o => StreamListenerInitializedMsgHandler(o));
            Receive <StreamListenerCreationFailedMsg>(o => StreamListenerCreationFailedMsgHandler(o));
            Receive <StreamListenerCreationCancelledMsg>(o => StreamListenerCreationCancelledMsgHandler(o));
            Receive <Terminated>(o => TerminatedHandler(o));
            Receive <ResetSendProcessSportsMsg>(o => ResetSendProcessSportsMsgHandler(o));
            Receive <RetrieveAndProcessSnapshotMsg>(o => RetrieveAndProcessSnapshotMsgHandler(o));
            Receive <RestartStreamListenerMsg>(o => RestartStreamListenerMsgHandler(o));
            Receive <ClearFixtureStateMsg>(o => ClearFixtureStateMsgHandler(o));
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="settings"></param>
        /// <param name="platformConnector"></param>
        /// <param name="resource"></param>
        /// <param name="stateManager"></param>
        /// <param name="suspensionManager"></param>
        /// <param name="streamHealthCheckValidation"></param>
        /// <param name="fixtureValidation"></param>
        public StreamListenerActor(
            ISettings settings,
            IAdapterPlugin platformConnector,
            IResourceFacade resource,
            IStateManager stateManager,
            ISuspensionManager suspensionManager,
            IStreamHealthCheckValidation streamHealthCheckValidation,
            IFixtureValidation fixtureValidation)
        {
            try
            {
                _isInitializing = true;

                _settings                    = settings ?? throw new ArgumentNullException(nameof(settings));
                _platformConnector           = platformConnector ?? throw new ArgumentNullException(nameof(platformConnector));
                _resource                    = resource ?? throw new ArgumentNullException(nameof(resource));
                _stateManager                = stateManager ?? throw new ArgumentNullException(nameof(stateManager));
                _suspensionManager           = suspensionManager ?? throw new ArgumentNullException(nameof(suspensionManager));
                _marketsRuleManager          = _stateManager.CreateNewMarketRuleManager(resource.Id);
                _streamHealthCheckValidation = streamHealthCheckValidation ?? throw new ArgumentNullException(nameof(streamHealthCheckValidation));
                _fixtureValidation           = fixtureValidation ?? throw new ArgumentNullException(nameof(fixtureValidation));
                _fixtureId                   = _resource.Id;
                _resourceActor               = Context.ActorOf(
                    Props.Create(() => new ResourceActor(Self, _resource)),
                    ResourceActor.ActorName);
                _streamHealthCheckActor = Context.ActorOf(
                    Props.Create(() => new StreamHealthCheckActor(_resource, _settings, _streamHealthCheckValidation)),
                    StreamHealthCheckActor.ActorName);
                _streamStatsActor = Context.ActorOf(
                    Props.Create(() => new StreamStatsActor()),
                    StreamStatsActor.ActorName);

                Context.Parent.Tell(new NewStreamListenerActorMsg {
                    FixtureId = _resource.Id, Sport = _resource.Sport
                });

                Initialize();
            }
            catch (Exception ex)
            {
                _logger.Error(
                    $"Stream Listener instantiation failed for {_resource} - exception - {ex}");
                _erroredException = ex;
                Become(Errored);
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="settings"></param>
        /// <param name="udApiService"></param>
        /// <param name="adapterPlugin"></param>
        /// <param name="stateManager"></param>
        /// <param name="suspensionManager"></param>
        /// <param name="streamHealthCheckValidation"></param>
        /// <param name="fixtureValidation"></param>
        public static void Init(
            ISettings settings,
            IServiceFacade udApiService,
            IAdapterPlugin adapterPlugin,
            IStateManager stateManager,
            ISuspensionManager suspensionManager,
            IStreamHealthCheckValidation streamHealthCheckValidation,
            IFixtureValidation fixtureValidation)
        {
            _actorSystem = ActorSystem.Create("AdapterSystem");

            var fileStoreProvider = new FileStoreProvider(settings.StateProviderPath);

            _fixtureStateActor = ActorSystem.ActorOf(
                Props.Create(() =>
                             new FixtureStateActor(
                                 settings,
                                 fileStoreProvider)),
                FixtureStateActor.ActorName);

            _streamListenerManagerActor = ActorSystem.ActorOf(
                Props.Create(() =>
                             new StreamListenerManagerActor(
                                 settings,
                                 adapterPlugin,
                                 stateManager,
                                 suspensionManager,
                                 streamHealthCheckValidation,
                                 fixtureValidation)),
                StreamListenerManagerActor.ActorName);

            _sportProcessorRouterActor = ActorSystem.ActorOf(
                Props.Create(() => new SportProcessorRouterActor(udApiService))
                .WithRouter(new SmallestMailboxPool(settings.FixtureCreationConcurrency)),
                SportProcessorRouterActor.ActorName);

            _sportsProcessorActor = ActorSystem.ActorOf(
                Props.Create(() =>
                             new SportsProcessorActor(
                                 settings,
                                 udApiService,
                                 _sportProcessorRouterActor)),
                SportsProcessorActor.ActorName);
        }
Beispiel #8
0
 private static void CreateStreamListenerManagerActor(ISettings settings, IAdapterPlugin adapterPlugin,
                                                      IStateManager stateManager, ISuspensionManager suspensionManager,
                                                      IStreamHealthCheckValidation streamHealthCheckValidation, IFixtureValidation fixtureValidation)
 {
     try
     {
         _streamListenerManagerActor = ActorSystem.ActorOf(
             Props.Create(() =>
                          new StreamListenerManagerActor(
                              settings,
                              adapterPlugin,
                              stateManager,
                              suspensionManager,
                              streamHealthCheckValidation,
                              fixtureValidation)),
             StreamListenerManagerActor.ActorName);
     }
     catch (Exception e)
     {
         _logger.Fatal($"Error creating StreamListenerManagerActor {e}");
         throw;
     }
 }
        /// <summary>
        ///
        /// </summary>
        /// <param name="settings"></param>
        /// <param name="adapterPlugin"></param>
        /// <param name="stateManager"></param>
        /// <param name="suspensionManager"></param>
        /// <param name="streamHealthCheckValidation"></param>
        /// <param name="fixtureValidation"></param>
        public StreamListenerManagerActor(
            ISettings settings,
            IAdapterPlugin adapterPlugin,
            IStateManager stateManager,
            ISuspensionManager suspensionManager,
            IStreamHealthCheckValidation streamHealthCheckValidation,
            IFixtureValidation fixtureValidation)
        {
            _settings = settings ?? throw new ArgumentNullException(nameof(settings));
            if (adapterPlugin == null)
            {
                throw new ArgumentNullException(nameof(adapterPlugin));
            }
            if (stateManager == null)
            {
                throw new ArgumentNullException(nameof(stateManager));
            }
            if (suspensionManager == null)
            {
                throw new ArgumentNullException(nameof(suspensionManager));
            }

            _shouldSendProcessSportsMessage = true;

            _streamListenerBuilderActorRef =
                Context.ActorOf(Props.Create(() =>
                                             new StreamListenerBuilderActor(
                                                 settings,
                                                 Context,
                                                 adapterPlugin,
                                                 stateManager,
                                                 suspensionManager,
                                                 streamHealthCheckValidation,
                                                 fixtureValidation)),
                                StreamListenerBuilderActor.ActorName);

            _streamListeners = new Dictionary <string, Dictionary <string, StreamListenerState> >();

            _logPublishedFixturesCountsMsgSchedule = Context.System.Scheduler.ScheduleTellRepeatedlyCancelable(
                TimeSpan.FromSeconds(30),
                TimeSpan.FromSeconds(30),
                Self,
                new LogPublishedFixturesCountsMsg(),
                Self);

            Receive <RegisterDelayMsg>(o => RegisterDelayMsgHandler(o));
            Receive <ProcessResourceMsg>(o => ProcessResourceMsgHandler(o));
            Receive <StreamConnectedMsg>(o => StreamConnectedMsgHandler(o));
            Receive <StreamDisconnectedMsg>(o => StreamDisconnectedMsgHandler(o));
            Receive <StreamListenerStoppedMsg>(o => StreamListenerStoppedMsgHandler(o));
            Receive <StartStreamingNotRespondingMsg>(o => StopStreamListenerChildActor(o.FixtureId));
            Receive <StreamListenerInitializedMsg>(o => StreamListenerInitializedMsgHandler(o));
            Receive <StreamListenerCreationFailedMsg>(o => StreamListenerCreationFailedMsgHandler(o));
            Receive <StreamListenerCreationCancelledMsg>(o => StreamListenerCreationCancelledMsgHandler(o));
            Receive <Terminated>(o => TerminatedHandler(o));
            Receive <ResetSendProcessSportsMsg>(o => ResetSendProcessSportsMsgHandler(o));
            Receive <RetrieveAndProcessSnapshotMsg>(o => RetrieveAndProcessSnapshotMsgHandler(o));
            Receive <RestartStreamListenerMsg>(o => RestartStreamListenerMsgHandler(o));
            Receive <ClearFixtureStateMsg>(o => ClearFixtureStateMsgHandler(o));
            Receive <NewStreamListenerActorMsg>(o => NewStreamListenerActorMsgHandler(o));
            Receive <StreamListenerActorStateChangedMsg>(o => StreamListenerActorStateChangedMsgHandler(o));
            Receive <LogPublishedFixturesCountsMsg>(o => LogPublishedFixturesCountsMsgHandler(o));
            Receive <RegisterSdkErrorActorMessage>(a => RegisterSdkErrorActor());
            Receive <SdkErrorMessage>(a => FaultControllerActorOnErrorOcured(a));
            Receive <PathMessage>(a => { _logger.Info("PathMessage delivered"); });


            Context.System.Scheduler.ScheduleTellRepeatedly(new TimeSpan(0, 1, 0), new TimeSpan(0, 1, 0),
                                                            Self, new RegisterSdkErrorActorMessage(), Self);
        }