예제 #1
0
 public OneXBetParserHostedService(ILogService logger, INatsConnectionFactory connectionFactory,
                                   IOptions <ParsingSettings> options, ThreadProvider threadProvider)
     : base(logger, connectionFactory, threadProvider, By.Id("games_content"),
            options.Value, options.Value.OneXBet)
 {
     _document = new HtmlDocument();
 }
예제 #2
0
        private List <CSVFile> ReadCSVFiles(GenerationOrLoad generationOrLoad, [NotNull] DirectoryInfo di)
        {
            Info("Reading " + di.FullName);
            string filepattern = "*." + generationOrLoad + ".csv";
            var    csvfiles    = di.GetFiles(filepattern);

            if (csvfiles.Length == 0)
            {
                throw new FlaException("No exported files found in: " + di.FullName + " for file pattern " + filepattern);
            }

            var csvs        = new List <CSVFile>();
            var activeFiles = new List <CSVFile>();

            foreach (var info in csvfiles)
            {
                var cs = new CSVFile(generationOrLoad, info.Name);
                csvs.Add(cs);
                cs.MyThread = ThreadProvider.Get().MakeThreadAndStart(() => { cs.Read(info); }, "CSVProfileVisualizer");
                activeFiles.Add(cs);
                WaitForJoining(activeFiles, 8);
            }

            WaitForJoining(activeFiles, 0);
            if (csvs.Count != csvfiles.Length)
            {
                throw new FlaException("Missing files");
            }

            Info("Read " + csvs.Count + " for " + generationOrLoad);
            return(csvs);
        }
예제 #3
0
            public ThreadClass([NotNull] string name, [NotNull] Action func, [NotNull] ILogger logger) : base(logger, Stage.Plotting, name)
            {
                Func = func;
                var t = ThreadProvider.Get().MakeThreadAndStart(SaveExecute, Name, true);

                Thread = t;
            }
예제 #4
0
 public Logger([CanBeNull] ITestOutputHelper unittestoutput, [NotNull] RunningConfig config)
 {
     config.CheckInitalisation();
     _unittestoutput = unittestoutput;
     _config         = config;
     _myThread       = ThreadProvider.Get().MakeThreadAndStart(SafeRun, "Logger");
     SLogger.Init(this);
 }
예제 #5
0
        protected BetsParserHostedService(ILogService logger, INatsConnectionFactory connectionFactory,
                                          ThreadProvider threadProvider, By waitBy, ParsingSettings parsingSettings,
                                          ParsingBookmakerSettings bkSettings)
        {
            _connectionFactory = connectionFactory;
            _waitBy            = waitBy;
            ParsingSettings    = parsingSettings;
            _settings          = bkSettings;

            LogService     = logger;
            ThreadProvider = threadProvider;
        }
예제 #6
0
        protected override Task <List <BkGame> > FetchGames()
        {
            return(Task.Run(() =>
            {
                try
                {
                    var webDriver = WebDriver.GetPage();
                    var jsResult =
                        webDriver.ExecuteJavaScript <IReadOnlyCollection <object> >(Js, GetSportTypeArg(), _groups);

                    var games = jsResult
                                .OfType <Dictionary <string, object> >()
                                .ToArray();

                    var foundGames = new List <BkGame>();
                    var waiters = GetWaiters(games.Length);

                    if (games.Length <= 0)
                    {
                        return foundGames;
                    }

                    for (var i = 0; i < games.Length; i++)
                    {
                        var node = games[i];
                        var waiter = waiters[i];

                        ThreadProvider.Run(() =>
                        {
                            var parsedGames = ParseGames(node);
                            if (parsedGames.Any())
                            {
                                lock (foundGames)
                                {
                                    foundGames.AddRange(parsedGames);
                                }
                            }
                        }, () => waiter.Set());
                    }

                    WaitHandle.WaitAll(waiters, TimeSpan.FromMinutes(1));
                    return foundGames;
                }
                catch (Exception ex)
                {
                    LogError(ex, "Parsing exception");
                    return new List <BkGame>();
                }
            }));
        }
            public ThreadClass([NotNull] string name, [NotNull] Action func, [NotNull] string dstFullFileName, [NotNull] ILogger logger) : base(
                    logger,
                    Stage.Plotting,
                    name)
            {
                if (File.Exists(dstFullFileName))
                {
                    File.Delete(dstFullFileName);
                }

                Func = func;
                var t = ThreadProvider.Get().MakeThreadAndStart(SaveExecute, name, true);

                Thread          = t;
                DstFullFileName = dstFullFileName;
            }
예제 #8
0
        protected override Task <List <BkGame> > FetchGames()
        {
            return(Task.Run(() =>
            {
                var webDriver = WebDriver.GetPage();
                var html = webDriver.ExecuteJavaScript <string>(
                    "return document.getElementById('games_content').innerHTML");

                _document.LoadHtml(html);
                var htmlNodes = _document.DocumentNode
                                .SelectNodes("//div[@data-name='dashboard-champ-content']")
                                .Where(node => _groups.Contains(node.SelectSingleNode("div/div[@class='c-events__name']").InnerText))
                                .ToArray();

                var foundGames = new List <BkGame>();
                var waiters = GetWaiters(htmlNodes.Length);

                if (htmlNodes.Length <= 0)
                {
                    return foundGames;
                }

                for (var i = 0; i < htmlNodes.Length; i++)
                {
                    var node = htmlNodes[i];
                    var waiter = waiters[i];

                    ThreadProvider.Run(() =>
                    {
                        var games = ParseGames(node);

                        if (games.Any())
                        {
                            lock (foundGames)
                            {
                                foundGames.AddRange(games);
                            }
                        }
                    }, () => waiter.Set());
                }

                WaitHandle.WaitAll(waiters, 60000);
                return foundGames;
            }));
        }
예제 #9
0
        internal ThreadProviderFactory(IConfigService configService)
        {
            ThreadProvider threadProvider = configService.Get <ThreadProvider>("Threading", "Provider", ThreadProvider.ThreadPool);

            switch (threadProvider)
            {
            case ThreadProvider.ThreadPool:
                this.provider = ThreadPoolThreadProvider.Instance;
                break;

            case ThreadProvider.UserThread:
                this.provider = UserThreadProvider.Instance;
                break;

            default:
            case ThreadProvider.None:
                throw new ArgumentOutOfRangeException("Threading.Provider", "Invalid Threading Provider configured");
            }
        }
        // ReSharper disable once NotNullMemberIsNotInitialized
        public ProsumerComponentResultArchiver(Stage myStage, [NotNull] ScenarioSliceParameters parameters,
                                               HouseProcessor.ProcessingMode processingMode,
                                               [NotNull] ServiceRepository services)
        {
            _myStage  = myStage;
            _services = services;
            if (processingMode == HouseProcessor.ProcessingMode.Collecting)
            {
                _generationSa = SaveableEntry <Prosumer> .GetSaveableEntry(_services.SqlConnectionPreparer.GetDatabaseConnection(myStage, parameters, DatabaseCode.HouseProfiles),
                                                                           SaveableEntryTableType.HouseGeneration,
                                                                           _services.Logger);

                _generationSa.MakeCleanTableForListOfFields(false);
                _loadSa = SaveableEntry <Prosumer> .GetSaveableEntry(_services.SqlConnectionPreparer.GetDatabaseConnection(myStage, parameters, DatabaseCode.HouseProfiles),
                                                                     SaveableEntryTableType.HouseLoad,
                                                                     _services.Logger);

                _loadSa.MakeCleanTableForListOfFields(false);
            }
            _myThread = ThreadProvider.Get().MakeThreadAndStart(SafeRun, "Archiver");
        }
예제 #11
0
        public void ThreadDemo(ICLIFlags toolFlags)
        {
            string basePath;

            if (toolFlags is ExtractFlags flags)
            {
                basePath = flags.OutputPath;
            }
            else
            {
                throw new Exception("no output path");
            }

            const string container = "DebugThreadDemo";

            string path = Path.Combine(basePath, container);

            /*ThreadProvider provider = new ThreadProvider();
             *
             * for (int i = 0; i < 8; i++) {
             *  provider.AddTask(new FakeTaskA());
             * }
             *
             * for (int i = 0; i < 8; i++) {
             *  provider.AddTask(new FakeTaskB());
             * }
             *
             * provider.Run(4);
             * provider.Wait();*/

            ThreadProvider provider = new ThreadProvider();

            const int max = 2000;

            int i = 0;

            HashSet <WorkTask> tasks = new HashSet <WorkTask>();

            foreach (ulong key in TrackedFiles[0x4])
            {
                ulong dataKey = (key & 0xFFFFFFFFUL) | 0x100000000UL | 0x0320000000000000UL;
                if (Files.ContainsKey(dataKey))
                {
                    tasks.Add(new ConvertTextureTaskWithData(path, key, dataKey));
                    tasks.Add(new WriteOWMatTaskFake(path, i));
                }
                else
                {
                    tasks.Add(new ConvertTextureTask(path, key));
                    tasks.Add(new WriteOWMatTaskFake(path, i));
                }

                if (i == max)
                {
                    break;
                }

                i++;
            }

            foreach (WorkTask workTask in tasks)
            {
                provider.AddTask(workTask);
            }

            // without threads
            // {
            //     foreach (WorkTask workTask in tasks) {
            //         workTask.DynamicallyAssigned = true;
            //         workTask.CASCStreams = new ConcurrentDictionary<ulong, Stream>();
            //         foreach (ulong requiredCASCFile in workTask.RequiredCASCFiles) {
            //             Stream stream = provider.GetStream(requiredCASCFile);
            //             workTask.CASCStreams[requiredCASCFile] = stream;
            //         }
            //         workTask.Run(null);
            //     }
            // }
            // return;

            provider.Run(5);
            provider.Wait();
        }
#pragma warning disable xUnit1013 // Public method should be marked as test
        public void RunBasedOnSettings([NotNull] RunningConfig settings, [NotNull] Logger logger)
#pragma warning restore xUnit1013 // Public method should be marked as test
        {
            Stopwatch sw = new Stopwatch();

            sw.Start();
            var container = CreateBuilderContainer(_output, logger, settings);
            Dictionary <string, double> secondsPerStep = new Dictionary <string, double>();

            using (var scope = container.BeginLifetimeScope()) {
                var allItems = container.Resolve <IEnumerable <IBasicRunner> >().ToList();
                logger.Info("#The following scenarios are going to be processed.", Stage.Preparation, nameof(MainBurgdorfStatisticsCreator));
                if (settings.Slices == null)
                {
                    throw new FlaException("slices was not initalized");
                }

                foreach (ScenarioSliceParameters scenarioSliceParameters in settings.Slices)
                {
                    logger.Info("\t" + scenarioSliceParameters, Stage.Preparation, nameof(MainBurgdorfStatisticsCreator));
                }

                logger.Info("#The following stages are going to be processed.", Stage.Preparation, nameof(MainBurgdorfStatisticsCreator));
                foreach (Stage stage in settings.StagesToExecute)
                {
                    logger.Info("\t" + stage, Stage.Preparation, nameof(MainBurgdorfStatisticsCreator));
                }

                for (int stageIdx = 0; stageIdx < settings.StagesToExecute.Count; stageIdx++)
                {
                    Stage currentStage = settings.StagesToExecute[stageIdx];
                    logger.Info("## Starting Stage " + currentStage, Stage.Preparation, nameof(MainBurgdorfStatisticsCreator));
                    var steps = allItems.Where(x => x.MyStage == currentStage).ToList();
                    steps.Sort((x, y) => x.SequenceNumber.CompareTo(y.SequenceNumber));
                    logger.Info("### The following steps in this stage are going to be processed.",
                                Stage.Preparation,
                                nameof(MainBurgdorfStatisticsCreator));
                    foreach (var step in steps)
                    {
                        logger.Info("\t" + step.SequenceNumber + " - " + step.Name, Stage.Preparation, nameof(MainBurgdorfStatisticsCreator));
                    }

                    CheckAndValidateSteps(steps, logger, currentStage, out var stepType);

                    switch (stepType)
                    {
                    case Steptype.Global: {
                        ProcessGlobalSteps(steps, secondsPerStep);
                        logger.SaveToDatabase(Constants.PresentSlice);
                        break;
                    }

                    case Steptype.SliceProcessors: {
                        ProcessSliceSteps(steps, logger, settings, secondsPerStep, currentStage);
                        break;
                    }

                    case Steptype.Scenario: {
                        List <RunnableForScenarioWithBenchmark> scenarioSteps = steps.Select(x => (RunnableForScenarioWithBenchmark)x).ToList();
                        var scenariosToProcess = settings.Slices.Select(x => x.DstScenario).Distinct().ToList();

                        if (scenariosToProcess.Contains(Scenario.Present()) && currentStage == Stage.ScenarioCreation)
                        {
                            scenariosToProcess.Remove(Scenario.Present());
                        }

                        foreach (var scenario in scenariosToProcess)
                        {
                            logger.Info("Processing " + scenario, Stage.Preparation, nameof(MainBurgdorfStatisticsCreator));
                            var slicesWithScenario = settings.Slices.Where(x => x.DstScenario == scenario).ToList();
                            foreach (var step in scenarioSteps)
                            {
                                Stopwatch stopwatch = Stopwatch.StartNew();
                                step.Run(settings.Slices.ToList());
                                logger.SaveToDatabase(slicesWithScenario.Last());
                                var stepname = currentStage + "-" + step.Name;
                                stopwatch.Stop();
                                if (!secondsPerStep.ContainsKey(stepname))
                                {
                                    secondsPerStep.Add(stepname, 0);
                                }

                                secondsPerStep[stepname] += stopwatch.ElapsedMilliseconds / 1000.0;
                            }

                            logger.Info("Finished processing " + scenario, Stage.Preparation, nameof(MainBurgdorfStatisticsCreator));
                        }
                    }

                    break;

                    case Steptype.AllScenarios: {
                        List <RunnableForAllScenarioWithBenchmark> crossScenarioSteps =
                            steps.Select(x => (RunnableForAllScenarioWithBenchmark)x).ToList();
                        AnalysisRepository analysisRepository = new AnalysisRepository(settings);
                        foreach (var step in crossScenarioSteps)
                        {
                            Stopwatch stopwatch = Stopwatch.StartNew();
                            step.Run(settings.Slices.ToList(), analysisRepository);
                            logger.SaveToDatabase(Constants.PresentSlice);
                            var stepname = currentStage + "-" + step.Name;
                            stopwatch.Stop();
                            if (!secondsPerStep.ContainsKey(stepname))
                            {
                                secondsPerStep.Add(stepname, 0);
                            }

                            secondsPerStep[stepname] += stopwatch.ElapsedMilliseconds / 1000.0;
                        }
                    }

                    break;

                    default:
                        throw new Exception("unknown steptype");
                    }

                    logger.Info("Finished Stage " + currentStage + ", waiting for the charts to finish.",
                                Stage.Preparation,
                                nameof(MainBurgdorfStatisticsCreator));
                    var plotMaker = scope.Resolve <PlotMaker>();
                    plotMaker.Finish();
                    logger.Info("Finished Stage " + currentStage, Stage.Preparation, nameof(MainBurgdorfStatisticsCreator));
                }

                logger.SaveToDatabase(Constants.PresentSlice);
                if (settings.MakeStageEntries)
                {
                    PngSvgConverter psc = new PngSvgConverter(logger, Stage.Preparation);
                    psc.ConvertAllSVG(settings);
                }

                sw.Stop();
                logger.Info("Finished everything after " + sw.Elapsed.TotalMinutes + " minutes",
                            Stage.Preparation,
                            nameof(MainBurgdorfStatisticsCreator));
                foreach (var pair in secondsPerStep)
                {
                    logger.Info(pair.Key + "\t" + pair.Value.ToString("F2"), Stage.Preparation, "Main");
                }

                logger.Info("Listing open threads before closing the logger", Stage.Preparation, nameof(MainBurgdorfStatisticsCreator));
                ThreadProvider.Get().DisplayRunningThreads();
                logger.Info("Listing open threads after closing the logger", Stage.Preparation, nameof(MainBurgdorfStatisticsCreator));
                logger.FinishSavingEverything();
                ThreadProvider.Get().DisplayRunningThreads();
            }

            container.Dispose();
        }
예제 #13
0
        private void InitializeProviders()
        {
            listThreads.BeginUpdate();
            _threadP = new ThreadProvider(_pid);
            Program.SecondaryProviderThread.Add(_threadP);
            _threadP.Updated += this._threadP_Updated;
            listThreads.Provider = _threadP;

            listModules.BeginUpdate();
            _moduleP = new ModuleProvider(_pid);
            Program.SecondaryProviderThread.Add(_moduleP);
            _moduleP.Updated += this._moduleP_Updated;
            listModules.Provider = _moduleP;

            listMemory.BeginUpdate();
            _memoryP = new MemoryProvider(_pid);
            Program.SecondaryProviderThread.Add(_memoryP);
            _memoryP.IgnoreFreeRegions = true;
            _memoryP.Updated += this._memoryP_Updated;
            listMemory.Provider = _memoryP;

            listHandles.BeginUpdate();
            _handleP = new HandleProvider(_pid);
            Program.SecondaryProviderThread.Add(_handleP);
            _handleP.HideHandlesWithNoName = Settings.Instance.HideHandlesWithNoName;
            _handleP.Updated += this._handleP_Updated;
            listHandles.Provider = _handleP;

            this.InitializeShortcuts();
        }
예제 #14
0
        private void InitializeProviders()
        {
            listThreads.BeginUpdate();
            _threadP = new ThreadProvider(_pid);
            Program.SecondarySharedThreadProvider.Add(_threadP);
            _threadP.Interval = Properties.Settings.Default.RefreshInterval;
            _threadP.Updated += new ThreadProvider.ProviderUpdateOnce(_threadP_Updated);
            listThreads.Provider = _threadP;

            listModules.BeginUpdate();
            _moduleP = new ModuleProvider(_pid);
            Program.SecondarySharedThreadProvider.Add(_moduleP);
            _moduleP.Interval = Properties.Settings.Default.RefreshInterval;
            _moduleP.Updated += new ModuleProvider.ProviderUpdateOnce(_moduleP_Updated);
            listModules.Provider = _moduleP;

            listMemory.BeginUpdate();
            _memoryP = new MemoryProvider(_pid);
            Program.SecondarySharedThreadProvider.Add(_memoryP);
            _memoryP.IgnoreFreeRegions = true;
            _memoryP.Interval = Properties.Settings.Default.RefreshInterval;
            _memoryP.Updated += new MemoryProvider.ProviderUpdateOnce(_memoryP_Updated);
            listMemory.Provider = _memoryP;

            listHandles.BeginUpdate();
            _handleP = new HandleProvider(_pid);
            Program.SecondarySharedThreadProvider.Add(_handleP);
            _handleP.HideHandlesWithNoName = Properties.Settings.Default.HideHandlesWithNoName;
            _handleP.Interval = Properties.Settings.Default.RefreshInterval;
            _handleP.Updated += new HandleProvider.ProviderUpdateOnce(_handleP_Updated);
            listHandles.Provider = _handleP;

            listThreads.List.SetTheme("explorer");
            listModules.List.SetTheme("explorer");
            listMemory.List.SetTheme("explorer");
            listHandles.List.SetTheme("explorer");

            this.InitializeShortcuts();
        }
예제 #15
0
 public WinlineParserHostedService(ILogService logger, INatsConnectionFactory connectionFactory,
                                   IOptions <ParsingSettings> options, ThreadProvider threadProvider)
     : base(logger, connectionFactory, threadProvider, By.Id("sticky-header-bottom-sticky-wrapper"),
            options.Value, options.Value.Winline)
 {
 }
예제 #16
0
 public ThreadProviderTests()
 {
     target = new ThreadProvider();
 }