-
Notifications
You must be signed in to change notification settings - Fork 4
/
Шаблон_КонтрольМестаНаДисках.os
167 lines (132 loc) · 11 KB
/
Шаблон_КонтрольМестаНаДисках.os
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
//*****************************************************************
// Автор: Онянов Виталий (Tavalik.ru)
// Описание:
// Скрипт высчитывает процент свободного места на дисках и отправляет уведомление на электронную почту.
// Порог (в %) задается в теле модуля или указывается в виде аргумента командной строки.
// Аргументы командной строки:
// - КритическийПорог - Число - критический порог свободного места на дисках в процентах
//***************************************************************
// ПОДКЛЮЧАЕМЫЕ БИБЛИОТЕКИ
//Логирование
#Использовать "TLog"
//Электронная почта
#Использовать "TMail"
//Файловые операции
#Использовать "TFile"
//***************************************************************
// АРГУМЕНТЫ КОМАНДНОЙ СТРОКИ
Если АргументыКоманднойСтроки.Количество() > 0 Тогда
КритическийПорог = Число(АргументыКоманднойСтроки[0]);
Иначе
КритическийПорог = 10;
КонецЕсли;
//***************************************************************
// НАСТРАИВАЕМЫЕ ПАРАМЕТРЫ
// Буквы дисков для контроля
БуквыДисков = ""; //Все, для указания конкретных дисков, строка вида "CDE"
// Каталог для хранения логов
ИдентификаторЗадания = "КонтрольМестаНаДисках";
Логирование = Новый ТУправлениеЛогированием(); //TLog
Логирование.ДатаВремяВКаждойСтроке = Истина;
Логирование.ВыводитьСообщенияПриЗаписи = Истина;
КаталогХраненияЛогов = ".\_Logs\";
ХранитьЛогиДней = 365;
// Инициируем параметры для отправки сообщения
УправлениеЭП = Новый ТУправлениеЭлектроннойПочтой(); //TMail
УчетнаяЗаписьЭП = УправлениеЭП.УчетнаяЗаписьЭП;
УчетнаяЗаписьЭП.АдресSMTP = "smtp.mydomen.com";
УчетнаяЗаписьЭП.ПортSMTP = 465;
УчетнаяЗаписьЭП.ПользовательSMTP = "report@mydomen.com";
УчетнаяЗаписьЭП.ПарольSMTP = "pass_mail";
УчетнаяЗаписьЭП.ИспользоватьSSL = Истина;
СтруктураСообщения = УправлениеЭП.СтруктураСообщения;
СтруктураСообщения.АдресЭлектроннойПочтыПолучателя = "admin@mydomen.com;";
СтруктураСообщения.ТипТекстаПочтовогоСообщения = "HTML";
ТемаСообщенияПриУспехе = "[The job succeeded.] " + ИдентификаторЗадания + " - ОК";
ТемаСообщенияПриОшибке = "[The job failed.] " + ИдентификаторЗадания + " - ERROR";
//***************************************************************
// ТЕЛО СКРИПТА
// Сделаем записть о начале выполнения задания
Логирование.СоздатьФайлЛога(ИдентификаторЗадания,КаталогХраненияЛогов);
Логирование.ЗаписатьСтрокуЛога("Начало выполнения задания """ + ИдентификаторЗадания + """");
Логирование.УвеличитьУровень();
// Служебные переменные
БылиОшибки = Ложь;
ЕстьНеПрошедшиеПорог = Ложь;
СИ = Новый СистемнаяИнформация();
// Соберем информацию о дисках
ФайловыеОперации = Новый ТУправлениеФайловымиОперациями(); //TFile
ТаблицаДанных = ФайловыеОперации.ИнформацияОДисках(БуквыДисков);
Если ТаблицаДанных = Неопределено ИЛИ ТаблицаДанных.Количество() = 0 Тогда
// Не удалось собрать данные
БылиОшибки = Истина;
// Запишем в лог
Логирование.ЗаписатьСтрокуЛога("ОШИБКА выполнения задания """ + ИдентификаторЗадания + """");
Логирование.ЗаписатьСтрокуЛога(" Текст ошибки: " + ФайловыеОперации.ТекстОшибки);
// Данные сообщения
УправлениеЭП.НачатьТекстСообщенияHTML();
УправлениеЭП.ДобавитьВТекстСообщенияHTML();
УправлениеЭП.ДобавитьВТекстСообщенияHTML("ОШИБКА выполнения задания """ + ИдентификаторЗадания + """");
УправлениеЭП.ДобавитьВТекстСообщенияHTML(" Текст ошибки: " + ФайловыеОперации.ТекстОшибки);
УправлениеЭП.ДобавитьВТекстСообщенияHTML();
Иначе
// Данные собраны, текст будущего сообщения
УправлениеЭП.НачатьТекстСообщенияHTML();
УправлениеЭП.ДобавитьВТекстСообщенияHTML();
Для Каждого Данные Из ТаблицаДанных Цикл
Если Данные.ДоступноМб = 0 Тогда
Продолжить;
КонецЕсли;
СвободноПроцент = Окр(Данные.СвободноМб / Данные.ОбщийОбъемМб * 100,2);
// Запишем сначала в лог
Логирование.ЗаписатьСтрокуЛога();
Логирование.ЗаписатьСтрокуЛога("Буква диска: " + Данные.Буква);
Логирование.ЗаписатьСтрокуЛога("Всего МБ: " + Данные.ОбщийОбъемМб);
Логирование.ЗаписатьСтрокуЛога("Свободно МБ: " + Данные.СвободноМб);
Логирование.ЗаписатьСтрокуЛога("Свободно %: " + СвободноПроцент);
// Формируем электронное сообщение
УправлениеЭП.ДобавитьВТекстСообщенияHTML("Буква диска: <font size=""5"" color=""green""><b>" + Данные.Буква + "</b></font>");
УправлениеЭП.ДобавитьВТекстСообщенияHTML("Всего: " + Формат(Данные.ОбщийОбъемМб,"ЧРГ=' '") + " МБ");
УправлениеЭП.ДобавитьВТекстСообщенияHTML("Свободно: " + Формат(Данные.СвободноМб,"ЧРГ=' '") + " МБ");
УправлениеЭП.ДобавитьВТекстСообщенияHTML();
Если СвободноПроцент <= КритическийПорог Тогда
ЕстьНеПрошедшиеПорог = Истина;
УправлениеЭП.ДобавитьВТекстСообщенияHTML("Свободно в процентах: <font size=""5"" color=""red"">" + СвободноПроцент + "%</font>");
Иначе
УправлениеЭП.ДобавитьВТекстСообщенияHTML("Свободно в процентах: " + СвободноПроцент + "%</font>");
КонецЕсли;
УправлениеЭП.ДобавитьВТекстСообщенияHTML();
КонецЦикла;
КонецЕсли;
Логирование.ЗаписатьСтрокуЛога();
Логирование.ЗаписатьСтрокуЛога("Результат выполнения задания: " + ?(БылиОшибки,"БЫЛИ ОШИБКИ","УСПЕШНОЕ ВЫПОЛНЕНИЕ"));
Логирование.ЗаписатьСтрокуЛога();
Логирование.УменьшитьУровень();
Логирование.ЗаписатьСтрокуЛога("Завершение задания """ + ИдентификаторЗадания + """");
//Удалим старые логи
ФайловыеОперации.УдалитьФайлыИзмененныеБолееДнейНазад(КаталогХраненияЛогов,ХранитьЛогиДней,,Истина);
// Отправляем эклектронное сообщение с файлом лога во вложении
Если ЗначениеЗаполнено(УчетнаяЗаписьЭП.АдресSMTP) Тогда
Если БылиОшибки ИЛИ ЕстьНеПрошедшиеПорог Тогда
СтруктураСообщения.ТемаСообщения = ТемаСообщенияПриОшибке;
Иначе
// Все диски прошли контроль
СтруктураСообщения.ТемаСообщения = ТемаСообщенияПриУспехе;
КонецЕсли;
// Часть имеющегося лога добавим в письмо
ИмяВременногоФайла = ФайловыеОперации.СкопироватьФайл(Логирование.ИмяФайлаЛога);
СтруктураСообщения.Вложения = ИмяВременногоФайла;
УправлениеЭП.ЗавершитьТекстСообщенияHTML();
// Отправим сообщение
Логирование.ЗаписатьСтрокуЛога();
Логирование.ЗаписатьСтрокуЛога("Попытка отправки электронного сообщения:");
КопироватьФайл(Логирование.ИмяФайлаЛога,ПолучитьИмяВременногоФайла("txt"));
Если УправлениеЭП.ОтправитьСообщение() Тогда
Логирование.ЗаписатьСтрокуЛога("Отправлено электорнное сообщение на адреса: " + СтруктураСообщения.АдресЭлектроннойПочтыПолучателя);
Иначе
Логирование.ЗаписатьСтрокуЛога("ОШИБКА: Не удалось отправить электронное сообщение с smtp-сервера: " + УчетнаяЗаписьЭП.АдресSMTP);
Логирование.ЗаписатьСтрокуЛога(" по причине " + УправлениеЭП.ТекстОшибки);
БылиОшибки = Истина;
КонецЕсли;
УдалитьФайлы(ИмяВременногоФайла);
КонецЕсли;