aboutsummaryrefslogtreecommitdiff
path: root/contrib/nvsmi.lua
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/nvsmi.lua')
-rw-r--r--contrib/nvsmi.lua42
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 })