From 178bc65f1b5d3133e34a76b96dac484fe8a07e1e Mon Sep 17 00:00:00 2001 From: "Adrian C. (anrxc)" Date: Sun, 9 Feb 2014 19:28:28 +0100 Subject: 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. --- contrib/nvsmi.lua | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 contrib/nvsmi.lua (limited to 'contrib/nvsmi.lua') 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. +--------------------------------------------------- + +-- {{{ 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 }) -- cgit v1.2.3