summaryrefslogtreecommitdiffstats
path: root/acf2/model/service.lua
diff options
context:
space:
mode:
Diffstat (limited to 'acf2/model/service.lua')
-rw-r--r--acf2/model/service.lua28
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