91 lines
3.0 KiB
Lua
91 lines
3.0 KiB
Lua
|
#!/usr/bin/env lua
|
||
|
|
||
|
--
|
||
|
-- Lua 5.1 heartbeat script running on openwrt
|
||
|
-- Copyright (c) 2008-2009 jokamajo.org
|
||
|
--
|
||
|
-- This program is free software; you can redistribute it and/or
|
||
|
-- modify it under the terms of the GNU General Public License
|
||
|
-- as published by the Free Software Foundation; either version 2
|
||
|
-- of the License, or (at your option) any later version.
|
||
|
--
|
||
|
-- This program is distributed in the hope that it will be useful,
|
||
|
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
-- GNU General Public License for more details.
|
||
|
--
|
||
|
-- You should have received a copy of the GNU General Public License
|
||
|
-- along with this program; if not, write to the Free Software
|
||
|
-- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||
|
--
|
||
|
-- $Id: heartbeat.lua 6 2008-03-17 21:17:00Z icarus75 $
|
||
|
--
|
||
|
|
||
|
if not arg[1] then
|
||
|
print ('Please pass the reset argument as a boolean to the script.')
|
||
|
else
|
||
|
-- load libraries
|
||
|
require 'posix'
|
||
|
require 'xmlrpc.http'
|
||
|
require 'luci.sys'
|
||
|
|
||
|
auth = require 'flukso.auth'
|
||
|
dbg = require 'flukso.dbg'
|
||
|
|
||
|
-- config parameters
|
||
|
local param = {server = 'logger.flukso.net',
|
||
|
xmlrpcaddress = 'http://logger.flukso.net/xmlrpc',
|
||
|
xmlrpcversion = '1',
|
||
|
xmlrpcmethod = 'logger.heartbeat'}
|
||
|
|
||
|
local monitor = {reset = tonumber(arg[1])}
|
||
|
|
||
|
-- open the connection to the syslog deamon, specifying our identity
|
||
|
posix.openlog('heartbeat')
|
||
|
|
||
|
-- calculate hmac and collect relevant monitoring points
|
||
|
local auth = auth.new()
|
||
|
auth:load()
|
||
|
monitor.version = tonumber(auth.version)
|
||
|
|
||
|
monitor.uptime = math.floor(luci.sys.uptime())
|
||
|
monitor.uart_oe = string.match(luci.sys.exec('cat /proc/tty/driver/serial'), 'oe:(%d+)') or 0
|
||
|
system, model, monitor.memtotal, monitor.memcached, monitor.membuffers, monitor.memfree = luci.sys.sysinfo()
|
||
|
|
||
|
auth:hmac(monitor)
|
||
|
|
||
|
dbg.vardump(auth)
|
||
|
dbg.vardump(monitor)
|
||
|
|
||
|
-- send a heartbeat method call
|
||
|
local pcall_ok, return_or_err, pong = pcall(xmlrpc.http.call,
|
||
|
param.xmlrpcaddress..'/'..param.xmlrpcversion,
|
||
|
param.xmlrpcmethod,
|
||
|
auth,
|
||
|
monitor)
|
||
|
|
||
|
dbg.vardump(pong)
|
||
|
|
||
|
if pcall_ok and return_or_err then
|
||
|
auth:load()
|
||
|
auth:hmac(pong.upgrade, pong.timestamp)
|
||
|
|
||
|
if auth.signature == pong.signature and pong.timestamp > os.time() - 300 then
|
||
|
posix.syslog(31, 'successful heartbeat authentication')
|
||
|
|
||
|
if tonumber(pong.upgrade) == monitor.version then --reset device
|
||
|
os.execute('reboot')
|
||
|
elseif tonumber(pong.upgrade) > monitor.version then -- upgrade device to specified version
|
||
|
os.execute('wget -P /tmp http://'..param.server..'/files/upgrade/upgrade.'..pong.upgrade)
|
||
|
os.execute('chmod a+x /tmp/upgrade.'..pong.upgrade)
|
||
|
os.execute('/tmp/upgrade.'..pong.upgrade)
|
||
|
os.execute('rm /tmp/upgrade.'..pong.upgrade)
|
||
|
end
|
||
|
end
|
||
|
else
|
||
|
posix.syslog(11, tostring(return_or_err))
|
||
|
end
|
||
|
-- close the connection to the syslog deamon
|
||
|
posix.closelog()
|
||
|
end
|