An open API service indexing awesome lists of open source software.

https://github.com/downstize/security-events-suite

Система генерации и обработки событий с формированием инцидентов по заданным шаблонам. Построена на ASP.NET Core и включает два микросервиса: генератор событий и процессор инцидентов.
https://github.com/downstize/security-events-suite

aspnet-core docker dotnet6 entity-framework-core microservices rest-api

Last synced: 28 days ago
JSON representation

Система генерации и обработки событий с формированием инцидентов по заданным шаблонам. Построена на ASP.NET Core и включает два микросервиса: генератор событий и процессор инцидентов.

Awesome Lists containing this project

README

          

# Security Events Suite

## 📌 Описание проекта

Security Events Suite — это система для генерации и обработки событий, которая используется для создания и хранения инцидентов на основе поступающих данных (например, событий системы безопасности от камер или датчиков).

В системе реализованы два сервиса:

- **Generator Service**
Генерирует события автоматически в случайные интервалы (примерно в диапазоне [время предыдущего события; время предыдущего события + 2 секунды]). Также имеет REST API (Swagger) для ручного создания событий. Каждый раз при генерации события сервис отправляет его через HTTP в Processor Service.

- **Processor Service**
Принимает события через REST API (Swagger), проверяет их согласно заранее заданным шаблонам и создает на их основе инциденты. Инциденты сохраняются в базе данных. Логика обработки реализована с использованием двух шаблонов:

- **Шаблон №1 (простой):** Если получено событие с `Event.Type = 1`, то сразу создаётся инцидент типа 1.
- **Шаблон №2 (составной):** Если получено событие с `Event.Type = 2` и затем в течение 20 секунд (не позже) поступает событие с `Event.Type = 1`, то создаётся инцидент типа 2; если подтверждение не поступает — создаётся инцидент типа 1 на основе события типа 2.
- **Шаблон №3 (составной):** Если получено событие с `Event.Type = 3` и затем в течение 60 секунд (не позже) появляется подтверждение (через создание инцидента типа 2 или поступление события типа 1), то создаётся инцидент типа 3; если подтверждения нет — на основе события типа 3 создаётся инцидент типа 1.

## Технологии

- **Backend:** ASP.NET Core (.NET 6), Entity Framework Core
- **База данных:** PostgreSQL
- **Сервисы:** Generator и Processor (реализованы как отдельные ASP.NET Core API приложения с BackgroundService)
- **Контейнеризация:** Docker, Docker Compose

## Доступ к сервисам

| Сервис | URL Swagger |
|-------------------|----------------------------------------------|
| **Processor** | [http://localhost:5129/swagger/index.html](http://localhost:5129/swagger/index.html) |
| **Generator** | [http://localhost:7018/swagger/index.html](http://localhost:7018/swagger/index.html) |

---

## 🛠️ Запуск проекта

### 1️⃣ **Клонирование репозитория**
```sh
git clone https://github.com/Downstize/security-events-suite.git
cd SecurityEventsSuite
```

### 2️⃣ **Запуск через Docker**
```sh
docker-compose up --build
```
---

Docker Compose поднимет контейнеры для PostgreSQL, Generator Service и Processor Service.

### 3. Тестирование

- Для ручного создания события откройте Swagger UI по адресу [http://localhost:7018/swagger/index.html](http://localhost:7018/swagger/index.html) (Generator Service) и отправьте запрос на создание события (например, с типом 2 или 3).

- Для просмотра полученных инцидентов зайдите в Processor Service через Swagger [http://localhost:5129/swagger/index.html](http://localhost:5129/swagger/index.html).

## Архитектура и рабочий процесс

1. **Генерация событий (Generator Service):**
- Сервис запускает фоновую задачу, которая генерирует события автоматически с случайными интервалами (до 2 секунд).
- Через REST API (Swagger) можно вручную создать событие с нужным типом.
- При генерации событие отсылается HTTP-запросом в Processor Service.

2. **Обработка событий (Processor Service):**
- При получении события сервис анализирует его тип.
- При событии типа 1 сразу создаётся инцидент типа 1.
- При событии типа 2 запускается ожидание подтверждения в течение 20 секунд. Если в течение этого времени поступает событие типа 1, то создаётся инцидент типа 2, иначе — по таймауту создаётся инцидент типа 1.
- При событии типа 3 запускается ожидание подтверждения в течение 60 секунд. Если подтверждение поступает (через появление события типа 1 или создание инцидента типа 2) в течение 60 секунд, то создаётся инцидент типа 3, иначе — инцидент типа 1.
- Инциденты сохраняются в базе данных вместе со списком событий, на основе которых они были созданы.

## 📂 Структура проекта

```
SecurityEventsSuite/
├── Processor/ # Processor Service (ASP.NET Core API)
│ ├── Controllers/ # API контроллеры Processor
│ ├── Data/ # EF Core контекст базы и миграции
│ ├── Models/ # Модели (Event, Incident, Enums)
│ ├── Services/ # Логика обработки событий и создания инцидентов
│ ├── Program.cs # Входная точка Processor
│ └── appsettings.json # Конфигурация Processor

├── Generator/ # Generator Service (ASP.NET Core API)
│ ├── Controllers/ # API контроллеры Generator
│ ├── Models/ # Модель Event и перечисления
│ ├── Services/ # Генерация событий (фоновые задачи, REST API)
│ ├── Program.cs # Входная точка Generator
│ └── appsettings.json # Конфигурация Generator

├── docker-compose.yml # Конфигурация Docker Compose
└── README.md # Документация проекта
```

## 🛠 Разработчик
- **Вячеслав** - Backend/Архитектура

---

## 📝 Лицензия
Этот проект распространяется под лицензией MIT.