static void Main2(string[] args) { //MyClass.NotMain();return; //new App().Go(new AppEnviroment()).ConfigureAwait(false).GetAwaiter().GetResult(); //init services var metricsCollector = new MetricsCollector(); var dataFetcher = new DataFetcher(); var dataSetPreparer = new DataSetPreparer(); var processor = new Processor(); var resultPrinter = new ResultPrinter <GameInfo>(); //query var jsonResult = metricsCollector.LogAndInvoke(dataFetcher.Fetch, "query"); //preparing var games = metricsCollector.LogAndInvoke(() => dataSetPreparer.Prepare(jsonResult), "preparing"); //processing var resultSet = metricsCollector.LogAndInvoke(() => processor.Process(games), "process"); Console.WriteLine(processor.EntityTotalCount(games)); Console.WriteLine(processor.GroupedEntityTotalCount(games)); //output metricsCollector.LogAndInvoke(() => resultPrinter.Print(resultSet), "printer"); WriteLine("\nTiming"); WriteLine(string.Join(", ", metricsCollector.Select(x => $"[{x}]"))); ReadKey(); }
static void Main(string[] args) { //init services var metricsCollector = new MetricsCollector(); var dataFetcher = new DataFetcher2(); var dataSetPreparer = new DataSetPreparer2 <GameInfo2>(new WdtResponseParser()); //var processor = new Processor(); var resultPrinter = new ResultPrinter <GameInfo2>(); //query var query = new SparqlQuery("SELECT ?game ?gameLabel ?platform ?platformLabel ?developer ?developerLabel ?creator ?creatorLabel ?publisher ?publisherLabel ?genre ?genreLabel ?game_mode ?game_modeLabel ?distribution ?distributionLabel ?official_website ?official_websiteLabel ?publication_date ?publication_dateLabel ?part_of_the_series ?part_of_the_seriesLabel ?distributor ?distributorLabel ?software_engine ?software_engineLabel ?esrb_rating ?esrb_ratingLabel ?pegi_rating ?pegi_ratingLabel ?review_score ?review_scoreLabel ?title ?titleLabel ?country_of_origin ?country_of_originLabel ?narrative_location ?narrative_locationLabel ?characters ?charactersLabel WHERE { SERVICE wikibase:label { bd:serviceParam wikibase:language \"en\". } ?game wdt:P31 wd:Q7889. OPTIONAL { ?game wdt:P400 ?platform. } OPTIONAL { ?game wdt:P178 ?developer. } OPTIONAL { ?game wdt:P170 ?creator. } OPTIONAL { ?game wdt:P123 ?publisher. } OPTIONAL { ?game wdt:P136 ?genre. } OPTIONAL { ?game wdt:P404 ?game_mode. } OPTIONAL { ?game wdt:P437 ?distribution. } OPTIONAL { ?game wdt:P856 ?official_website. } OPTIONAL { ?game wdt:P577 ?publication_date. } OPTIONAL { ?game wdt:P179 ?part_of_the_series. } OPTIONAL { ?game wdt:P750 ?distributor. } OPTIONAL { ?game wdt:P408 ?software_engine. } OPTIONAL { ?game wdt:P852 ?esrb_rating. } OPTIONAL { ?game wdt:P908 ?pegi_rating. } OPTIONAL { ?game wdt:P444 ?review_score. } OPTIONAL { ?game wdt:P1476 ?title. } OPTIONAL { ?game wdt:P495 ?country_of_origin. } OPTIONAL { ?game wdt:P840 ?narrative_location. } OPTIONAL { ?game wdt:P674 ?characters. } } LIMIT 20"); var jsonResult = metricsCollector.LogAndInvoke(() => dataFetcher.Fetch(query), "query"); //preparing var games = metricsCollector.LogAndInvoke(() => dataSetPreparer.Prepare(jsonResult), "preparing"); //processing Func <IEnumerable <GameInfo2>, IEnumerable <GameInfo2> > FindSinglePlayerGames = gs => gs.Where(g => g.GameMode.Contains("single")); var resultSet = metricsCollector.LogAndInvoke(() => FindSinglePlayerGames(games), "FindSinglePlayerGames"); Func <IEnumerable <GameInfo2>, int> FindTotalCount = gs => gs.Count(); var resultCount = metricsCollector.LogAndInvoke(() => FindTotalCount(resultSet), "FindTotalCount"); //output metricsCollector.LogAndInvoke(() => ResultPrinter2.Print <GameInfo2>(resultSet), "ResultPrinter2.Print<GameInfo2>"); WriteLine("\nTiming"); WriteLine(string.Join(", ", metricsCollector.Select(x => $"[{x}]"))); ReadKey(); }
string TryGetFromCache(string query, Func <string> retrieveRemoteContent) { var contentByteArray = System.Text.Encoding.Unicode.GetBytes(query); using (var sha256 = System.Security.Cryptography.SHA256.Create()) { var cacheKey = sha256.ComputeHash(contentByteArray); var cacheKeyBase64 = new string(cacheKey.Select(@byte => @byte.ToString("X")[0]).ToArray()); if (File.Exists(cacheKeyBase64)) { return(File.ReadAllText(cacheKeyBase64)); } var metrics = new MetricsCollector(); var newContent = metrics.LogAndInvoke(() => retrieveRemoteContent(), "retrieveRemoteContent"); var contentWithMeta = $"{{\"query\":{query},\"retrieveDuration\":{(metrics as IEnumerable<Metrics>).Single().Duration.TotalMilliseconds}," + newContent.Substring(1); File.WriteAllText(cacheKeyBase64, contentWithMeta); return(newContent); } }