Пример #1
0
        private async Task <Speedtest> RunSpeedtest(DateTimeOffset timestamp)
        {
            await _semaphore.WaitAsync();

            IsRunning = true;
            RunStarted?.Invoke();

            var test = new Speedtest {
                Timestamp = timestamp
            };

            try
            {
                var settings = await _client.GetSettingsAsync();

                var server = settings.Servers
                             .OrderBy(s => s.Distance)
                             .FirstOrDefault();

                test.ServerLatency = await _client.TestServerLatencyAsync(server);

                test.DownloadSpeed = await _client.TestDownloadSpeedAsync(server);

                test.UploadSpeed = await _client.TestUploadSpeedAsync(server);

                _logger.LogInformation($"Test ran successfully - Time: {timestamp}, Latency: {test.ServerLatency} ms, " +
                                       $"Download: {test.DownloadSpeed / 1000} Mbps, Upload: {test.UploadSpeed / 1000} Mbps");

                using var scope = _services.CreateScope();
                var context = scope.ServiceProvider.GetRequiredService <AppDbContext>();
                context.Speedtests.Add(test);
                await context.SaveChangesAsync();
            }
            finally
            {
                IsRunning = false;
                RunCompleted?.Invoke(test);

                _semaphore.Release();
            }

            return(test);
        }
Пример #2
0
        static async Task Main(string[] args)
        {
            var builder = new ConfigurationBuilder()
                          .SetBasePath(Directory.GetCurrentDirectory())
                          .AddJsonFile("appsettings.json")
                          .AddCommandLine(args);

            var configuration = builder.Build();
            var results       = await Speedtest.Run(configuration);

            using (var ctx = new SpeedtestDbContext(configuration))
            {
                await ctx.Database.EnsureCreatedAsync();

                await ctx.Results.AddRangeAsync(results);

                await ctx.SaveChangesAsync();
            }
        }