User Tools

Site Tools


Differences

This shows you the differences between two versions of the page.

Link to this comparison view

current_alerts [2019/01/09 10:38] (current)
akuzmuk created
Line 1: Line 1:
 +
 +===== 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^                                          ​
 +|startTime |Alert trigger time | Number, UnixTime|
 +|regId |The number of the register in which the flag of the alert led to this alert   ​|Number ​  |
 +|regAlias |Variable name for programs |String|
 +|bit |Number of the bit with the alarm flag |Number|
 +|title |Alert name |String|
 +|connectionTitle |Connection name |String|
 +|connectionId |Connection ID |Number|
 +|connectionAlias |The name of the connection variable for programs|String|
 +|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|
 +
 +Using this structure, it is possible to implement, for example, various notification scenarios about unconfirmed accidents.
 +
 +An example of such program:
 +<code lua>
 +local notificationsSent = {};
 +function main (userId)
 +    local alerts = GetCurrentAlerts();​
 +    if (#alerts > 0) then
 +        for num,alert in pairs(alerts) do 
 +            local now = os.time();
 +            local canBeAcknowledged = alert['​canBeAcknowledged'​];​
 +            local acknowledgedTime = alert['​acknowledgedTime'​];​
 +            local startTime = alert['​startTime'​];​
 +            local waitSecondsBeforeEscalate = 300; -- notify about alerts that are not confirmed for more than 5 minutes
 +            local regId = alert['​regId'​];​
 +            local bit = alert['​bit'​];​
 +            if (canBeAcknowledged and acknowledgedTime == 0) then
 +                if (now - startTime > waitSecondsBeforeEscalate) then
 +                    if (notificationsSent[regId] == nil or notificationsSent[regId][bit] ~= startTime) then
 +                        --ERROR("​Alert"​ .. alert['​title'​] .. " was not acknowledged!"​);​
 +                        SendSMS("​380501234567",​ "The alert is not confirmed: " .. alert['​title'​]);​
 +                        if (notificationsSent[regId] == nil) then
 +                            notificationsSent[regId] = {};
 +                        end
 +                        notificationsSent[regId][bit] = startTime;
 +                    end
 +                end
 +            end
 +        end
 +    end
 +end
 +</​code>​
 +
  

Page Tools