diff options
author | Adrian C. (anrxc) <anrxc@sysphere.org> | 2014-02-09 19:28:28 +0100 |
---|---|---|
committer | Adrian C. (anrxc) <anrxc@sysphere.org> | 2014-02-09 19:30:26 +0100 |
commit | 178bc65f1b5d3133e34a76b96dac484fe8a07e1e (patch) | |
tree | 661fda59d93d59dc86cc2b0dbccc8258254e89bc /contrib/nvsmi.lua | |
parent | df19dac43eee3f15695e97a6eaec70b2a3ed85dd (diff) | |
download | vicious-legacy-178bc65f1b5d3133e34a76b96dac484fe8a07e1e.tar.xz |
contrib: import nvidia SMI widget type
Right now nvsmi is just interested in temperature information. My
streaming server GPU 'fell of the bus' last night while decoding
video, I suspect overheating.
Diffstat (limited to 'contrib/nvsmi.lua')
-rw-r--r-- | contrib/nvsmi.lua | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/contrib/nvsmi.lua b/contrib/nvsmi.lua new file mode 100644 index 0000000..e68d4a1 --- /dev/null +++ b/contrib/nvsmi.lua @@ -0,0 +1,42 @@ +--------------------------------------------------- +-- Licensed under the GNU General Public License v2 +-- * (c) 2014, Adrian C. <anrxc@sysphere.org> +--------------------------------------------------- + +-- {{{ Grab environment +local tonumber = tonumber +local io = { popen = io.popen } +local setmetatable = setmetatable +local string = { match = string.match } +-- }}} + + +-- nvsmi: provides GPU information from nvidia SMI +-- vicious.contrib.nvsmi +local nvsmi = {} + + +-- {{{ GPU Information widget type +local function worker(format, warg) + -- Fallback to querying first device + if not warg then warg = "0" end + + -- Get data from smi + -- * Todo: support more; MEMORY,UTILIZATION,ECC,POWER,CLOCK,COMPUTE,PIDS,PERFORMANCE + local f = io.popen("nvidia-smi -q -d TEMPERATURE -i " .. warg) + local smi = f:read("*all") + f:close() + + -- Not installed + if smi == nil then return {0} end + + -- Get temperature information + local _thermal = string.match(smi, "Gpu[%s]+:[%s]([%d]+)[%s]C") + -- Handle devices without data + if _thermal == nil then return {0} end + + return {tonumber(_thermal)} +end +-- }}} + +return setmetatable(nvsmi, { __call = function(_, ...) return worker(...) end }) |