Now and then the question comes up if it is possible to associate an existing alarm generated by a probe or the infrastructure components. This post shows how this is done by the use of generating a "raw" alarm message onto the bus. The NAS will use elements like the domain, robotname, source and
suppression key to tie messages. The nimbus.alarm sent from the NAS has a different "footprint" than the ones generated by the probes. The following code contains one function to generate a unique key (the nimid) and the actual 'rawalarm' function.
Please use this knowledge with care :-)
Carstein
----8<------8<------8<------8<------8<------8<------8<------8<------8<--
-- Generates a nimid
function unique_id()
key = ""
base="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
math.random();math.random()
key = mid(base,math.random(1,26),1) .. mid(base,math.random(1,26),1) ..
sprintf("%07d", math.random(1,100000000)) .. "-" ..
sprintf("%05d",math.random(1,100000))
return key
end
-----------------------------------------------------------------------------------------
-- rawalarm (source,severity,subsystem,message ]]]])
-- returns 0 - ok, rest error
---
function rawalarm (source,severity,subsystem,message,suppkey,domain,origin,robot,probe)
-- expect following parameters
if type(severity) ~= "number" then return 1 end
if type(message) ~= "string" then return 1 end
if type(subsystem) ~= "string" then return 1 end
if type(source) ~= "string" then return 1 end
-- set default values for optional parameters.
if type(domain) ~= "string" then domain="lua-domain" end
if type(origin) ~= "string" then origin="lua-origin" end
if type(robot) ~= "string" then robot="lua-robot" end
if type(probe) ~= "string" then probe="lua-probe" end
if type(suppkey) ~= "string" then suppkey="lua-suppkey" end
msg = pds.create ()
nimid = unique_id()
-- Create message header
pds.putString (msg,"nimid",nimid)
pds.putInt (msg,"nimts",timestamp.now() )
pds.putString (msg,"subject","alarm")
pds.putInt (msg,"pri",1)
pds.putString (msg,"source",source)
pds.putString (msg,"origin",origin)
pds.putString (msg,"domain",domain)
pds.putString (msg,"robot",robot)
pds.putString (msg,"prid",probe)
pds.putString (msg,"suppression","y+000000000#" .. suppkey)
pds.putString (msg,"supp_key",suppkey)
-- Add raw alarm data
udata = pds.create()
pds.putInt (udata,"level",severity)
pds.putString (udata,"subsys",subsystem)
pds.putString (udata,"message",message)
pds.putPDS (msg,"udata",udata)
-- Post the message to the hub-spooler
t,rc = nimbus.request ("spooler","hubpost",msg)
pds.delete (udata)
pds.delete (msg)
return rc,nimid
end
-- initialize the random generator
math.randomseed(os.time())
rc,id = rawalarm ("193.71.55.210",3,"1.2.3","This is a simple test...")
printf ("rawalarm: %s, %d",id,rc)
rc,id = rawalarm ("193.71.55.207",NIML_CRITICAL,"1.2.3","This is an advanced test...","mykey","mydomain","myorigin","myrobot","myprobe")
printf ("rawalarm: %s, %d",id,rc)