Я работаю над чем-то очень конкретным, поэтому я надеюсь, что у других есть представление о том, какой подход может сработать.
Я пытаюсь сделать так, чтобы скрипт мониторинга, который запускался раз в 5 минут, невзорвать всех с избыточными уведомлениями.Я пытаюсь использовать SQL для балансировки нагрузки, но я пытаюсь определить, какие запросы мне нужны.
Я настроил эту таблицу:
Create Table MonitorDetails (
MonitorID int IDENTITY(1,1) PRIMARY KEY,
IssueType nvarchar(255) Not Null,
IssueDetails Nvarchar(max) not null,
Hostname nvarchar(255),
Criticality int not null,
ReportedTime Datetime not null,
ResolvedTime Datetime,
NotificationSent bit Default 0
)
И все сбоивыкидываете в эту таблицу.
Вот пример:
- Выдается ошибка
- Ошибка записывается в таблицу
- Через 5 минут ошибка снова записывается, потому что она не была устранена
Запускаемый мной скрипт будет смотреть на записи в таблице, и я хочу, чтобы в первый раз была зарегистрирована ошибкаотправить уведомление и установить флаг уведомления, но если ошибка появляется снова и уведомление уже отправлено, оно не будет отправлять другое уведомление.
Поиск дубликатов - это простая часть, но как мне исключить дубликаты (или дубликаты массового обновления), когда ОДНА из записей имеет установленный флаг уведомления?
SELECT
IssueType, IssueDetails, Hostname, Criticality, ReportedTime, COUNT(*)
FROM
MonitorDetails
Where ResolvedTime is null
GROUP BY
IssueType, IssueDetails, Hostname, Criticality, ReportedTime
HAVING
COUNT(*) > 1
Возможно, я закончилЯ думаю об этом, но я стараюсь облегчить запросы, чтобы они не были обременительными для самого SQL-сервера.У кого-нибудь есть предложения?