===== Functions to work with alerts =====
==== GetCurrentAlerts() ====
The **GetCurrentAlerts** function returns a list of current alerts. Type of returned value is table. Its key is the alarm number, the value is the another table with the alert properties.
Alert properties are:
^Key ^Description ^Data type^
|alertId|Alert id key in the project |Number |
|title |Alert name |String |
|startTime |Alert trigger time |Number, UnixTime |
|alertLevel |The flag indicates the alert can be confirmed. |[1,2,3] Info, Warn, Alert |
|acknowledgedBy| User name, who confirmed the alert. If the alert is not confirmed - empty string.|String |
|acknowledgedTime |Time, when the alert was confiremed. If the alert is not confirmed - 0.|Number, UnixTime |
|canBeAcknowledged |The flag indicates the alert can be confirmed. |Boolean |
|groupId|The id key of the group the alert belongs to|Number |
Using this structure, it is possible to implement, for example, various notification scenarios about unconfirmed accidents.
An example of such program:
function main (userId)
local ACK_DELAY_TOLERANCE = 30
local now = os.time()
local alerts = GetCurrentAlerts()
for a_num, a in ipairs(alerts) do
INFO("Processing alert #" .. a_num)
-- tprint(a)
INFO(tostring(a.canBeAcknowledged) .. ' ' .. a.startTime)
local time_diff = (now - a.startTime)
if (a.canBeAcknowledged and (time_diff > ACK_DELAY_TOLERANCE)) then
ERROR("The alert " .. a.title .. " exceeded ack time!")
end
end
end
function tprint(t, indent)
if not indent then indent = 0 end
for k, v in pairs(t) do
local formatting = string.rep(' ', indent) .. k .. ': '
if type(v) == "table" then
ERROR(formatting)
tprint(v, indent + 1) -- recursive call
else
if type(v) == "boolean" then
v = v and "TRUE" or "FALSE"
end
ERROR(formatting .. v)
end
end -- for
end -- tprint
=== Example of sending Telegram messages upon new alerts ===
Below is the example of how to send Telegram messages when the alert count has increased:
--[[
Checks if number of alerts has increased and then sends message via
Telegram
--]]
TELEGRAM_BOT_ID = "229345xxxxx" -- your telegram chat bot id
active_alerts = 0 -- global counter for current alerts
function main (userId)
local alerts = GetCurrentAlerts()
if (#alerts > active_alerts) then -- number has increased, # - means count table elements
local a_names = {} DEBUG("Alert count has increased!")
for a_num, a in ipairs(alerts) do
INFO("Processing alert #" .. a_num)
table.insert(a_names, a.title)
end
SendTelegramMessage(TELEGRAM_BOT_ID,
"Current alerts are: " .. table.concat(a_names, ', '))
end
active_alerts = #alerts
end