- Урок 1. Повторение ООП. Первый микросервис
- Урок 2. REST API и тесты
- Урок 3. Работа с базами данных
- Урок 4. Архитектура современного микросервиса
- Урок 5 Сервис-агент сбора системных метрик
- Урок 6 Запросы между сервисами
- Урок 7 Open API и Swagger
- Урок 8 Создание и подключение веб-интерфейса
Написать свой контроллер и методы в нем, которые бы предоставляли следующую функциональность:
- Возможность сохранить температуру в указанное время
- Возможность отредактировать показатель температуры в указанное время
- Возможность удалить показатель температуры в указанный промежуток времени
- Возможность прочитать список показателей температуры за указанный промежуток времени
- Добавить метод в контроллер агентов проекта менеджера метрик позволяющий получить список зарегистрированных в системе объектов.
- В проект агента сбора метрик добавить контроллеры для сбора метрик, аналогичные менеджеру сбора метрик. Добавить методы для получения метрик с агента, доступные по следующим путям:
- api/metrics/cpu/from/{fromTime}/to/{toTime}/percentiles/{percentile}
- api/metrics/cpu//from/{fromTime}/to/{toTime}/
- api/metrics/dotnet/errors-count/from/{fromTime}/to/{toTime}
- api/metrics/network/from/{fromTime}/to/{toTime}/
- api/metrics/hdd/left (размер оставшегося свободного дискового пространства в мегабайтах)
- api/metrics/ram/available (размер свободной оперативной памяти в мегабайтах)
- Добавить проект с тестами для агента сбора метрик. Написать простые юнит-тесты на каждый метод каждого контроллера в обоих тестовых проектах
- Добавьте логирование всех параметров в каждом из контроллеров в обоих проектах
- Добавьте репозитории для каждого типа метрик в сервис агент сбора метрик
- Добавьте тесты на все контроллеры и все методы с использованием заглушек
- Перепишите все репозитории в приложении агента метрик использование Dapper вместо сырого чтения данных
- Настройте AutoMapper для всех остальных объектов в приложениях (преобразования из Dto в модели базы и обратно)
- Реализуйте задачи для сбора метрик RAM (RamMetricsJob), HDD (HddMetricsJob) и gc-heap-size (DotnetMetricsJob), Network (NetworkMetricJob). Сделайте это с помощью perfomance-counters. Задачи должны собирать метрики раз в 5 секунд и записывать их в созданную базу данных
- Реализуйте контроллеры, которые будут отдавать данные по собираемым метрикам
- Использовать FluentMigrator
- Подключите работу с базой данных к приложению менеджера сбора метрик. Все таблицы Metrics Manager должны повторять таблицы Metrics Agent, но иметь дополнительный столбец agentId (для связи метрики с агентом). Таблица Agents Должна иметь два столбца - AgentId и AgentUrl.
- Реализуйте в Metrics Quarz Job. Сделайте Job на каждый типа метрик (как и для агента). Инъектируйте в Job репозиторий работы с агентами, репозиторий работы с соответствующей метрикой, и IMetricsAgentClient. Читайте из базы всех агентов и для каждого в цикле вызывайте методы получения метрик с агента. ApiRequest будет содержать URL агента (вы возьмете его из свойства AgentUrl в базе) и дату начала выборки и дату конца. В качестве даты конца можно брать DateTime.UtcNow. В качестве даты начала - максимальную из дат, сохраненных в БД метрик на менеджере (сделайте соответствующий запрос к базе метрик к нужной таблице). Прочитанные данные из IMetricsAgentClient сохраните в базе данных менеджера, используя репозиторий метрики.
- Реализуйте методы GET контроллеров MetricsManager так, чтобы они по аналогии с MetricsAgent, ходили в свою базу данных и возвращали метрики.
- Попробуйте подключить и настроить Swagger UI для менеджера метрик
- Попробуйте сгенерить клиент для агента с помощью Swagger, и наследовать MetricsAgentClient из прошлого урока от сгенеренного Client. Эта часть задания факультативная. Можно не делать, но рекомендуется попробовать использовать этот механизм и разобраться в нем самостоятельно.
Практическое задание на данном уроке является творческим. Попробуйте поэкспериментировать со стандартными компонентами WPF и при помощи верстки и data bindings добавить данные, которые бы вам интересно было видеть от нашего агента сбора метрик. Например, попробуйте собрать grid с двумя колонками и двумя строками. В каждую ячейку получившейся сетки попробуйте разместить по графику, в которые можно вывести данные по различным метрикам.