Служебные методы и классы Lua
Класс Scheduler
Предоставляет набор методов для запуска скриптов по расписанию.
Экземпляр создается автоматически при вызове скрипта и доступен через переменную scheduler
.
curl Метод
Принимает таблицу (коллекцию «ключ-значение») аргументов.
Параметры
Параметр | Пример | Значение по умолчанию | Описание |
---|---|---|---|
uri | "http://smon.monq.ru" | Отсутствует | Допустимый (согласно RFC 2396) URI ресурса. |
method | "POST" | "GET" | Допустимый (согласно 4.3 RFC 7231) HTTP 1.1-метод, используемый для вызова. |
body | "[{ "key": "value" }]" | Отсутствует | Тело запроса. Произвольная строка. |
mediaType | "application/json" | "text/plain" | MIME-типы – типы данных, которые могут быть переданы посредством сети Интернет с применением стандарта MIME. |
headers | { ["accept-encoding"] = "gzip, deflate" } | Отсутствует | Таблица (коллекция «ключ-значение») ключей заголовков и их значений. |
proxy | { address = "http://1.1.1.1:8080", bypassList = { "http://url1", "http://url2" }, credentials = { username = "guest", password = "guest" } } | Отсутствует | Настройки проксирования запроса.address – допустимый (согласно RFC 2396) URI ресурса.bypassList – массив адресов или регулярных выражений, описывающих адресы, при запросах к которымне будет использоваться прокси.credentials – учётные данные для аутентификации на прокси-сервере.username – имя пользователя.password – пароль. |
basicAuth | { login = "guest", password = "guest" } | Отсутствует | Настройки базовой авторизации для запроса.login – имя пользователя.password – пароль. |
insecure | true / false | false | Выполнить запрос без проверки подлинности сертификатов. |
Модель ответа
Если возникла ошибка, то
data = nil
,err ~= nil
. Если ответ нормальный, тоdata ~= nil
,err = nil
.
{
data = {
statusCode = 200,
headers = {
["Server"] = "nginx/1.10.3",
["Date"] = "Wed, 16 Oct 2019 07:00:09 GMT"
},
content = "content string",
isSuccessStatusCode = true
},
err = {
message = "Ошибка"
}
}
Пример
Basic-авторизация через открытый прокси:
local args =
{
uri = "https://jigsaw.w3.org/HTTP/Basic/",
proxy = {
address = "http://212.220.216.70:8080"
},
basicAuth = {
login = "guest",
password = "guest"
}
}
local response = curl(args)
if (response.err ~= nil) then
print(response.err)
return -- Ранний выход из скрипта, если возникла ошибка.
end
if (response.data.isSuccessStatusCode) == true then
print(response.data.content)
else
print(":( status code " .. response.data.statusCode)
end
ssh Метод
Принимает таблицу (коллекцию «ключ-значение») аргументов.
Параметры
Параметр | Тип | Пример | Значение по умолчанию |
---|---|---|---|
host | string | "http://sample.ssh.com/" | Отсутствует |
port | number | 23 | 22 |
username | string | "demo-user" | Отсутствует |
password | string | "demo-password" | Отсутствует |
privateKey | string | "0KHQtdC60YDQtdGC0L3QvtC1INC/0L7RgdC70LDQvdC40LUgO15Q" | Отсутствует |
command | string | echo "I have a bad feeling about this." | Отсутствует |
Пример
local args =
{
host = "sample.ssh.com",
command = "ls /tmp/doc"
}
local response = ssh(args)
if response.data.exitStatus == 0 then
print(response.data.result)
else
print(":( error " .. response.data.error)
end
snmp Метод
Управление сетевыми устройствами
Параметры
Параметр | Пример | Значение по умолчанию |
---|---|---|
ip | "64.233.163.94" | Отсутствует |
community | "public" | "public" |
version | "2c" | "1" |
level | "authnopriv" | "noauthnopriv" |
method | "walk" | "get" |
timeout | 10000 | 1000 |
maxrepetitions | 1 | 10 |
mode | "subtree" | "all" |
data | "s Shanghai" | Отсутствует |
oid | "1.3.6.1.2.1.1.6.0" | Отсутствует |
user | "privacy" | "" |
contextname | "" | "" |
authentication | "md5" | "" |
authphrase | "authentication" | "" |
privphrase | "privacyphrase" | "" |
Пример
Сложный snmpget 3 версии:
local args =
{
ip = "192.168.10.1",
oid = "1.3.6.1.2.1.1.1.0",
version = 3,
level = "authPriv",
authentication = "authentication",
privphrace = "privacyphrase",
user = "privacy"
}
local response = snmp(args)
print(response.data)
Простой snmpwalk 1 версии:
local args =
{
ip = "192.168.10.1",
community = "public",
oid = "1.3.6.1.2.1.1.1.0",
method = "walk",
mode = "subtree",
maxrepetitions = 5
}
local response = snmp(args)
print(response.data)
smtp Метод
Отправляет сообщения на сервер электронной почты.
Параметры
Параметр | Пример | Описание |
---|---|---|
host | Адрес сервера-отправителя (IP-адрес, либо DNS-имя) | |
port | 25 | Номер порта на сервере |
secureMode | "None" / "Auto" / "SslOnConnect" / "StartTls" / "StartTlsWhenAvailable" | Принудительно задает режим шифрования. |
username | Логин пользователя-отправителя (опционально, при наличии проводится аутентификация на сервере). | |
password | Пароль пользователя-отправителя (опционально) | |
subject | Тема письма | |
body | Текст письма | |
mailType | Тип отображения сообщения (plain , html ) | |
from | { title = "Отдел оповещения", address = "sender@server.net" } | Адрес отправителя (должен соответствовать формату адреса электронной почты, при несоответствии скрипт будет завершен с ошибкой) |
recipients | { "overwatchers@gmail.com", "overwatchers@ya.ru", "tester@gmail.com" } | Список адресов получателей (адреса, которые не соответствуют формату адреса электронной почты, будут исключены из рассылки) |
Модель ответа
При успешном завершении data = true
При возникновении ошибки data = false
, err
– объект-исключение с сообщением об ошибке error.Message
Пример
Отправка сообщения одному получателю:
local = smtp({
host = "server.mail.ru",
port = 25,
useSsl = true,
username = "user",
password = "pass",
subject = "Оповещение о событии",
body = "Уважаемые участники, ...",
mailType = "plain",
from = "sender@server.net",
recipients = "overwatchers@server.com"
})
if (response.data) == false then print(response.err) end
regexIsMatch(string input, string pattern) Метод
Проверяет, обнаружено ли в указанной входной строке соответствие заданному регулярному выражению.
Параметры
input
– входная строкаpattern
– регулярное выражение (PCRE-диалект)
Модель ответа
true
– если соответствуетfalse
– если не соответствует
Пример
regexIsMatch("user@mailbox.net", "(\\w+@[a-zA-Z_]+?\\.[a-zA-Z]{2,6})")
regexMatch(string input, string pattern) Метод
Ищет в указанной входной строке первое вхождение заданного регулярного выражения.
Параметры
input
– входная строкаpattern
– регулярное выражение (PCRE-диалект)
Модель ответа
Match
– см. документацию
Пример
Выводит все электронные адреса, содержащиеся в строке, в консоль:
local result = regexMatch([[test1@test.com test2 test3@test.com test4@test4com]], [[(\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,6})]])
while result.Success == true do
print (result.Value)
result=result:NextMatch()
end
regexReplace(string input, string pattern, string replacement) Метод
Заменяет во входной строке все подстроки, соответствующие указанному регулярному выражению, на указанное значение.
Параметры
input
– входная строкаpattern
– регулярное выражение (PCRE-диалект)replacement
– строка замены
Модель ответа
string
– строка с замененной подстрокой
Пример
Заменяет все найденные электронные адреса на строку email
:
local result = regexReplace([[test1@test.com test2 test3@test.com test4@test4com]], [[(\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,6})]], [[email]])
print (result)
regexSplit(string input, string pattern) Метод
Разделяет входную строку в массив подстрок в позициях, определенных шаблоном регулярного выражения.
Параметры
input
– входная строкаpattern
– регулярное выражение (PCRE-диалект)replacement
– строка замены
Модель ответа
string[]
– массив подстрок
Пример
Разделяет входную строку в массив подстрок по строке email
:
local result = regexSplit([[test1@test.com test2 test3@test.com test4@test4com]], [[(\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,6})]])
for i = 0, result.Length-1 do
print (result:GetValue(i))
end
scheduleAfter Метод
Запланировать вызов скрипта через <seconds>
секунд, начиная с момента вызова метода.
Параметры
seconds
– количество секунд, через которое будет запущен скрипт, начиная с момента вызова метода
Модель ответа
LuaResult<boolean>
– результат выполнения методаTrue
– скрипт запланированFalse
– возникли проблемы с постановкой скрипта в планировщикresult.err
– детали ошибки
Пример
GET-запрос на получение JSON-ресурса по заданному пути:
if (isScheduled == true) then
print("Скрипт был запущен планировщиком.")
else
scheduler:executeAfter(60) -- Запланировать выполнение скрипта через 60 сек после вызова данного метода
print("Скрипт был запланирован.")
end