Контроль целостности

> [HTML Version](exintcontrol.html)

Начиная с версии Simple-Scada 2.6.9.2 имеется возможность настройки [контроля целостности системы](https://simple-scada.com/help/manual/syst-integr-mon.html), а также [контроля целостности проекта](https://simple-scada.com/help/manual/safetyset.html?anchor=intcont). В результате контроля, в журнал сервера Simple-Scada и в лог-файл будет выдано аварийное сообщение, если целостность файлов нарушена (либо контроль целостности не удалось выполнить). Сообщение будет содержать список файлов и причину неудачного контроля целостности.

Дополнительно, через скрипты можно реализовать выдачу аварийных сообщений, отправку уведомлений о нарушении целостности или выполнить другие требуемые действия. Для этого нужно [создать новый скрипт](via-script-editor.md) с типом события "[Контроль целостности](evintcontrol.md)", в котором можно выполнять необходимые действия при нарушении целостности. 

**(./images/tog_code_1.png) 1. Отправка сообщений о нарушении целостности системы и проекта в Telegram. [(./images/link.png)](https://simple-scada.com/help/script/exintcontrol.html?anchor=ex1)**

````
begin  
  // если это результат контроля целостности  
  if IntegrityEventData.IsResult then  
    // если контроль целостности удалось выполнить  
    if IntegrityEventData.ErrorCode = 0 then  
    begin  
      // если обнаружены изменения в файлах, то отправляем  
      // уведомление со списком изменений  
      if IntegrityEventData.Count > 0 then  
        SendTelegram(IntegrityEventData.Description, '');  
    end else  
      // если не удалось выполнить контроль целостности, то  
      // отправляем уведомление с текстом ошибки  
      SendTelegram(IntegrityEventData.Description, '');  
end.
````

````
**(./images/tog_code_1.png) 2. Проход по списку файлов, целостность которых была нарушена. [(./images/link.png)](https://simple-scada.com/help/script/exintcontrol.html?anchor=ex2)**

````
var  
  I: Integer;  
  aItem: TM\_IntegrityItem;   
begin  
  // если это результат контроля целостности  
  if IntegrityEventData.IsResult then  
    // если контроль целостности удалось выполнить  
    if IntegrityEventData.ErrorCode = 0 then  
    begin  
      // если обнаружены изменения в файлах, то   
      // проходим по каждому файлу в цикле  
      for I := 0 to IntegrityEventData.Count -1 do  
      begin  
        aItem := IntegrityEventData\[I\];  
        // здесь aItem содержит данные о файле,   
        // целостность которого была нарушена  
      end;  
    end;  
end.
````

````
**(./images/tog_code_1.png) 3. Выдача сообщений о запуске и результате контроля целостности. [(./images/link.png)](https://simple-scada.com/help/script/exintcontrol.html?anchor=ex3)**

````
var  
  aObject: string;  
begin  
  with IntegrityEventData do  
  begin  
    if IsSystem then aObject := 'системы' else aObject := 'проекта';  
  
    if IsResult then  
    begin  
      // выдаём сообщение с результатом контроля целострости  
      if ErrorCode <> 0 then  
        AddMessage(Timestamp, mkAlarm, Description, True, False)  
      else  
        if Count > 0 then  
          AddMessage(Timestamp, mkAlarm, 'Нарушена целостность ' + aObject + '\! Изменено файлов: ' + IntToStr(Count), True, False)  
        else  
          AddMessage(Timestamp, mkMessage, 'Выполнен контроль целостности ' + aObject + '.', True, False);  
    end else  
      // выдаём сообщение о старте контроля целостности  
      AddMessage(Timestamp, mkMessage, 'Запущен контроль целостности ' + aObject + '.', True, False);  
  end;  
end.
````

````
**(./images/tog_code_1.png) 4. Выдача сообщений только о нарушении целостности. [(./images/link.png)](https://simple-scada.com/help/script/exintcontrol.html?anchor=ex4)**

Данный код выдает только сообщения о нарушении целостности. Сообщения об успешном контроле и сообщения о запуске контроля не выдаются. 

````
begin  
  with IntegrityEventData do  
    if IsResult then  
      if ErrorCode <> 0 then  
        AddMessage(Timestamp, mkAlarm, Description, True, False)  
      else  
        if Count > 0 then  
          if IsSystem then  
            AddMessage(Timestamp, mkAlarm, 'Нарушена целостность системы\! Изменено файлов: ' + IntToStr(Count), True, False)  
          else  
            AddMessage(Timestamp, mkAlarm, 'Нарушена целостность проекта Изменено файлов: ' + IntToStr(Count), True, False);  
end.
````

````
