public static IServiceCollection RegisterMonitoring <Monitoring>(this IServiceCollection services, IConfiguration configuration, IEnumerable <IDestination> newDestinations, string environmentName) where Monitoring : class { var section = configuration.GetSection("MonitoringOptions"); var monitoringOptions = new MonitoringOptions(); section.Bind(monitoringOptions); var monitoringIOptions = Options.Create(monitoringOptions); services.Configure <MonitoringOptions>(section); var commonSet = new CommonMonitoringSet(environmentName); services.AddSingleton(commonSet); services.AddSingleton <Monitoring>(); services.AddSingleton <IMonitoringSender, MonitoringSender>(); var destinations = new List <IDestination>(newDestinations); var jsonNLogDestination = new JsonNLogDestination(commonSet, monitoringIOptions); destinations.Add(jsonNLogDestination); services.AddSingleton <IEnumerable <IDestination> >(destinations); var groups = new ConcurrentDictionary <(string, string), IStatisticsMonitoringItem>(); services.AddSingleton <IDictionary <(string, string), IStatisticsMonitoringItem> >(groups); var statItems = typeof(Monitoring).GetProperties() .Where(p => typeof(IStatisticsMonitoringItem).IsAssignableFrom(p.PropertyType)) .Select(x => { var item = (IStatisticsMonitoringItem)Activator.CreateInstance(x.PropertyType); item.Name = x.PropertyType.Name; item.SetProperties(); return(item); } ) .Select(x => new KeyValuePair <string, IStatisticsMonitoringItem>(x.Name, x)); var itemsDictionary = new ConcurrentDictionary <string, IStatisticsMonitoringItem>(statItems); foreach (var item in itemsDictionary) { services.AddSingleton(item.Value.GetType(), item.Value); } services.AddSingleton <IDictionary <string, IStatisticsMonitoringItem> >(itemsDictionary); var set = new StatisticsItemsFullSet(itemsDictionary, groups); services.AddSingleton(set); var statisticsSender = new StatisticsSender(monitoringIOptions, destinations, set); services.AddSingleton <IStatisticsSender>(statisticsSender); return(services); }
// Отправить статистику private void buttonSend_Click(object sender, EventArgs e) { // Запрашиваем у студента его имя/группу FormStudentInformation studentInfoForm = new FormStudentInformation(); studentInfoForm.ShowDialog(); // Если студент отменил ввод - отправка отменена if (studentInfoForm.DialogResult != DialogResult.OK) { return; } // Если ввод принят - получаем конфиг с информацией о сервере var serverConfig = ServerConfig.GetServerConfig(out string errorMessage); if (serverConfig == null) { MessageBox.Show($"Ошибка при получении информации о сервере из конфигурационного файла.{Environment.NewLine}{errorMessage}", "Отправка результатов", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } var statSender = new StatisticsSender(serverConfig); // Отправляем bool isSuccess = statSender.Send(problemDescriptor, problemExample, problemStatistics, studentInfoForm.StudentName, studentInfoForm.StudentGroup, out errorMessage); if (!isSuccess) { MessageBox.Show($"Ошибка при отправке результатов на сервер.{Environment.NewLine}{errorMessage}", "Отправка результатов", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } // Если всё прошло хорошо - говорим об этом MessageBox.Show($"Результаты успешно отправлены", "Отправка результатов", MessageBoxButtons.OK, MessageBoxIcon.Information); // Запрещаем повторную отправку результата buttonSend.Enabled = false; }
private void PerformNetworkActivity() { StatisticsSender.Send(); }