From 8385776d0e7998168f3f0b23a37aececcd5fd3c5 Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Tue, 12 Jan 2010 13:59:22 +0000 Subject: moved from mode-leds to mode-watch mode-watch sends email on change diff --git a/luaclient.c b/luaclient.c index 3861977..c721138 100644 --- a/luaclient.c +++ b/luaclient.c @@ -49,6 +49,7 @@ static const luaL_Reg anylike_lualibs[] = { {LUA_TABLIBNAME, luaopen_table}, {LUA_STRLIBNAME, luaopen_string}, {LUA_MATHLIBNAME, luaopen_math}, + {LUA_IOLIBNAME, luaopen_io}, {LUA_OSLIBNAME, luaopen_os}, {LUA_LOGLIBNAME, luaopen_log}, {LUA_SIGNALLIBNAME, luaopen_signal}, diff --git a/mode-leds.lua b/mode-leds.lua deleted file mode 100644 index 2c7e61c..0000000 --- a/mode-leds.lua +++ /dev/null @@ -1,114 +0,0 @@ --- --- rhctl --- --- Copyright (C) 2009 Christian Pointner --- --- This file is part of rhctl. --- --- rhctl 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 3 of the License, or --- any later version. --- --- rhctl 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 rhctl. If not, see . --- - -socket = require("socket") - -function set_master_led() - os.execute("/sbin/led.sh set master") - os.execute("/sbin/led.sh clear standby") -end - -function set_standby_led() - os.execute("/sbin/led.sh clear master") - os.execute("/sbin/led.sh set standby") -end - -function clear_leds() - os.execute("/sbin/led.sh clear master") - os.execute("/sbin/led.sh clear standby") -end - -function process_cmd(message) - log.printf(log.DEBUG, "received message: '%s'", message) - - local capture = string.match(message, "Current Mode: (%a+)") - if(capture) then - if(capture == "Master") then - set_master_led() - return 0 - else - if(capture == "Standby") then - set_standby_led() - return 0 - end - end - end - - local capture = string.match(message, "new Mode: (%a+)") - if(capture) then - if(capture == "master") then - set_master_led() - return 0 - else - if(capture == "standby") then - set_standby_led() - return 0 - end - end - end - - return 0 -end - -function main_loop(opt) - log.printf(log.NOTICE, "main_loop started") - local sig = signal.init() - local cmdfd = cmd.init() - - cmd.send_string("listen mode"); - cmd.send_string("status"); - - clear_leds() - - local return_value = 0 - while return_value == 0 do - local readable, _, err = socket.select({ sig , cmdfd }, nil) - if(err) then - log.printf(log.ERROR, "select returned with error: %s", err) - return_value = -1 - else - for _, input in ipairs(readable) do - if(input == sig) then - return_value = signal.handle() - if(return_value == 1) then break end - else - if(input == cmdfd) then - return_value = cmd.recv_data(process_cmd) - if(return_value == 2) then - log.printf(log.ERROR, "connection to server lost, exitting") - return_value = -1 - end - if(return_value ~= 0) then break end - else - log.printf(log.ERROR, "select returned invalid handle??") - return_value = -1 - break; - end - end - end - end - end - - clear_leds() - - signal.stop() - return return_value -end diff --git a/mode-watch.lua b/mode-watch.lua new file mode 100644 index 0000000..26ef870 --- /dev/null +++ b/mode-watch.lua @@ -0,0 +1,126 @@ +-- +-- rhctl +-- +-- Copyright (C) 2009 Christian Pointner +-- +-- This file is part of rhctl. +-- +-- rhctl 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 3 of the License, or +-- any later version. +-- +-- rhctl 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 rhctl. If not, see . +-- + +socket = require("socket") + +function set_master_led() + os.execute("/sbin/led.sh set master") + os.execute("/sbin/led.sh clear standby") +end + +function set_standby_led() + os.execute("/sbin/led.sh clear master") + os.execute("/sbin/led.sh set standby") +end + +function clear_leds() + os.execute("/sbin/led.sh clear master") + os.execute("/sbin/led.sh clear standby") +end + +function send_mail(address, subject, bodytext) + local fp = assert(io.popen("/usr/sbin/mini_sendmail -smailrelay -fnoreply@helsinki.at " .. address, "w")) + + fp:write("Subject: " .. subject .. "\n") + fp:write("To: " .. address .. "\n") + fp:write("\n") + fp:write(bodytext) + fp:write("\n") + fp:close() +end + +current_mode = "master" + +function process_cmd(message) + log.printf(log.DEBUG, "received message: '%s'", message) + + local new_mode = nil + local exps = { "Current Mode: (%a+)", "new Mode: (%a+)" } + for _, exp in ipairs(exps) do + new_mode = string.match(message, exp) + if(new_mode) then + new_mode = string.lower(new_mode) + if(new_mode == "master") then + set_master_led() + break + else + if(new_mode == "standby") then + set_standby_led() + break + end + end + end + end + + if(new_mode and new_mode ~= current_mode) then + log.printf(log.NOTICE, "mode is now " .. new_mode) + send_mail("logs@helsinki.at", "RHCTL mode changed to " .. new_mode, + "RHCTL just switched from " .. current_mode .. " to " .. new_mode) + current_mode = new_mode + end + + return 0 +end + +function main_loop(opt) + log.printf(log.NOTICE, "main_loop started") + local sig = signal.init() + local cmdfd = cmd.init() + + cmd.send_string("listen mode"); + cmd.send_string("status"); + + clear_leds() + + local return_value = 0 + while return_value == 0 do + local readable, _, err = socket.select({ sig , cmdfd }, nil) + if(err) then + log.printf(log.ERROR, "select returned with error: %s", err) + return_value = -1 + else + for _, input in ipairs(readable) do + if(input == sig) then + return_value = signal.handle() + if(return_value == 1) then break end + else + if(input == cmdfd) then + return_value = cmd.recv_data(process_cmd) + if(return_value == 2) then + log.printf(log.ERROR, "connection to server lost, exitting") + return_value = -1 + end + if(return_value ~= 0) then break end + else + log.printf(log.ERROR, "select returned invalid handle??") + return_value = -1 + break; + end + end + end + end + end + + clear_leds() + + signal.stop() + return return_value +end diff --git a/openwrt/rhctl/Makefile b/openwrt/rhctl/Makefile index 22bbbd6..1dce71d 100644 --- a/openwrt/rhctl/Makefile +++ b/openwrt/rhctl/Makefile @@ -18,7 +18,7 @@ PKG_RELEASE:=1 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION) PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=http://localhost/ -PKG_MD5SUM:=b746704c89869f23537d0d8e7d976357 +PKG_MD5SUM:=9a964f0045f4604056def35d6f1b5beb PKG_INSTALL_DIR:=$(PKG_BUILD_DIR)/ipkg-install @@ -31,7 +31,7 @@ define Package/rhctl TITLE:=Radio Helsinki control tools URL:=http://www.helsinki.at MAINTAINER:=Christian Pointner - DEPENDS:=+liblua +libuci-lua +udev +udevtrigger + DEPENDS:=+liblua +luasocket +udev +udevtrigger endef define Package/rhctl/conffiles diff --git a/openwrt/rhctl/files/rhctl.config b/openwrt/rhctl/files/rhctl.config index 7d3f06f..1ca5a58 100644 --- a/openwrt/rhctl/files/rhctl.config +++ b/openwrt/rhctl/files/rhctl.config @@ -35,7 +35,7 @@ config 'heartbeatclient' config 'luaclient' # option disabled 1 - option name 'mode-leds' - option log 'syslog:3,luaclient-mode-leds,daemon' + option name 'mode-watch' + option log 'syslog:3,luaclient-mode-watch,daemon' option command_sock '/var/run/rhctl/switchctl.sock' - option lua_file '/usr/share/rhctl/mode-leds.lua' + option lua_file '/usr/share/rhctl/mode-watch.lua' -- cgit v0.10.2