Beispiel #1
0
        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();
 }