예제 #1
0
        static async Task OutputWorker(UsageDatabase database,
                                       IdMap <Guid> apiMap,
                                       IdMap <PackageIdentity> packageMap,
                                       BlockingCollection <PackageResults> queue)
        {
            try
            {
                using var usageWriter = database.CreateUsageWriter();

                foreach (var(packageIdentity, logLines, apis) in queue.GetConsumingEnumerable())
                {
                    foreach (var line in logLines)
                    {
                        Console.WriteLine($"[Crawler] {line}");
                    }

                    foreach (var api in apis)
                    {
                        if (!apiMap.Contains(api))
                        {
                            continue;
                        }

                        var packageId = packageMap.GetId(packageIdentity);
                        var apiId     = apiMap.GetId(api);
                        await usageWriter.WriteAsync(packageId, apiId);
                    }
                }

                await usageWriter.SaveAsync();

                Console.WriteLine("Output Worker has finished.");
            }
            catch (Exception ex)
            {
                Console.WriteLine("[Fatal] Output Worker crashed: " + ex);
                Environment.Exit(1);
            }
        }
 internal uint GetTranslationId(string textId)
 => TranslationIds.GetId(textId);
 public ILanguage GetLanguage(string textId)
 => Languages[LanguageIds.GetId(textId)];