diff options
Diffstat (limited to 'acf2/model/service.lua')
-rw-r--r-- | acf2/model/service.lua | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/acf2/model/service.lua b/acf2/model/service.lua index 2ed84e8..4db634e 100644 --- a/acf2/model/service.lua +++ b/acf2/model/service.lua @@ -3,26 +3,34 @@ Copyright (c) 2012-2013 Kaarle Ritvanen See LICENSE file for license details --]] -local model = require('acf2.model.model') +local fld = require('acf2.model.field') +local new = require('acf2.model.model').new local super = require('acf2.object').super +local pth = require('acf2.path') local DataStore = require('acf2.persistence') return function(name) - local res = model.new() + local res = new() - local function afunc(action) - return function() os.execute('rc-service '..name..' '..action) end + local addr = pth.join('/service', name) + local eaddr = pth.join(addr, 'enabled') + res.enabled = fld.Boolean{addr=eaddr, required=true} + res.status = fld.String{addr=pth.join(addr, 'status')} + + local function is_enabled() return DataStore:get(eaddr) end + local enabled + local function pre() enabled = is_enabled() end + local function post() + if enabled and is_enabled() then + os.execute('rc-service '..name..' reload') + end end - local reload = afunc('reload') function res:init(context) - DataStore:trigger(context.addr, reload) + DataStore:trigger('pre', context.addr, pre) + DataStore:trigger('post', context.addr, post) super(self, res):init(context) end - for _, action in ipairs{'start', 'stop', 'restart'} do - res[action] = model.Action{func=afunc(action)} - end - return res end |