-
Notifications
You must be signed in to change notification settings - Fork 1
/
SitePackage.lua
66 lines (50 loc) · 2.11 KB
/
SitePackage.lua
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
require("strict")
require("lmod_system_execute")
local hook = require("Hook")
local uname = require("posix").uname
local cosmic = require("Cosmic"):singleton()
local FrameStk = require("FrameStk")
local syshost = cosmic:value("LMOD_SYSHOST")
-- By using the hook.register function, this function "load_hook" is called
-- ever time a module is loaded with the file name and the module name.
local s_msgA = {}
function load_hook(t)
-- the arg t is a table:
-- t.modFullName: the module full name: (i.e: gcc/4.7.2)
-- t.fn: The file name: (i.e /apps/modulefiles/Core/gcc/4.7.2.lua)
if (mode() ~= "load") then return end
local user = os.getenv("USER")
local grps = capture("groups")
local defaultGroup = ''
for g in grps:split("[ \n]") do
defaultGroup = g
break
end
if ((defaultGroup == 'lsprog') or (defaultGroup == 'hpcprog') or (defaultGroup == 'support')) then return end
local group = os.getenv("SLURM_JOB_ACCOUNT") or defaultGroup
local jobid = os.getenv("SLURM_ARRAY_JOB_ID") or os.getenv("SLURM_JOB_ID") or "na"
local host = syshost or uname("%n")
local currentTime = epoch()
local frameStk = FrameStk:singleton()
-- did the user load it or was it a dependency?
local userload = (frameStk:atTop()) and "yes" or "no"
-- the name the user used in their module load command
local requestedas = frameStk:userName()
local msg = string.format("user=%s group=%s module=%s path=%s host=%s jobid=%s userload=%s requestedas=%s time=%f",
user, group, t.modFullName, t.fn, host, jobid,
userload, requestedas, currentTime)
local a = s_msgA
a[#a+1] = msg
end
hook.register("load",load_hook)
function report_loads()
local sys = os.getenv("LMOD_sys") or "Linux"
if (sys == "Linux") then
local a = s_msgA
for i = 1,#a do
local msg = a[i]
lmod_system_execute("logger -t ModuleUsageTracking -p local0.info " .. msg)
end
end
end
ExitHookA.register(report_loads)