ref: refs/heads/master
commit dafceb54eeb420c44db3f0b370b4eee811cca8cc
Author: Jiri Suchomel
Date: Wed Aug 19 16:07:45 2009 +0200
use scr for custom services, YaPI for standard ones
---
.../app/controllers/services_controller.rb | 18 +----
plugins/services/app/models/service.rb | 77 ++++++++++++++------
plugins/services/app/views/services/show.html.erb | 1 -
plugins/services/app/views/services/show.json.erb | 1 -
plugins/services/app/views/services/show.xml.erb | 1 -
.../test/functional/services_controller_test.rb | 5 --
6 files changed, 58 insertions(+), 45 deletions(-)
diff --git a/plugins/services/app/controllers/services_controller.rb b/plugins/services/app/controllers/services_controller.rb
index 05a6493..5b1b79e 100644
--- a/plugins/services/app/controllers/services_controller.rb
+++ b/plugins/services/app/controllers/services_controller.rb
@@ -7,26 +7,12 @@ class ServicesController < ApplicationController
unless permission_check("org.opensuse.yast.modules.yapi.services.read")
render ErrorResult.error(403, 1, "no permission") and return
end
- @services = Service.find_all
- end
-
- # Shows service status. Requires read permission for services YaPI.
- def show
- unless permission_check("org.opensuse.yast.modules.yapi.services.get")
- render ErrorResult.error( 403, 1, "no permission" ) and return
- end
- id = params[:id]
- begin
- @service = Service.find id
- rescue Exception => e # Don't fail on non-existing service. Should be more specific.
- logger.debug e
- render ErrorResult.error(404, 106, "no such service") and return
- end
- logger.debug "show@service #{@service.inspect}"
+ @services = Service.find_all params
end
# PUT /services/1.xml
+ # Shows service status. Requires execute permission for services YaPI.
def update
unless permission_check( "org.opensuse.yast.modules.yapi.services.execute")
diff --git a/plugins/services/app/models/service.rb b/plugins/services/app/models/service.rb
index 510e543..7ce21c9 100644
--- a/plugins/services/app/models/service.rb
+++ b/plugins/services/app/models/service.rb
@@ -1,28 +1,54 @@
+require "scr"
require 'yast_service'
+# FIXME move to helper? fill class variable on initialize?
+# -> use some generic library for accessing vendor specific data
+def get_custom_services
+
+ file = '/etc/YaST2/custom_services.yml';
+ custom = {}
+ if File.exists?(file)
+ custom = YAML::load (File.open('/etc/YaST2/custom_services.yml'));
+ custom = {} unless custom.is_a? Hash
+ end
+ custom
+end
+
+
class Service
attr_accessor :name
- attr_accessor :status
+ attr_accessor_with_default :status, 0
def initialize
end
-
+
+
# services = Service.find_all
- def self.find_all
+ def self.find_all(params)
services = []
- yapi_ret = YastService.Call("YaPI::SERVICES::Read")
-
- if yapi_ret.nil?
- raise "Can't get services list"
+ if params.has_key?("custom")
+ get_custom_services().each do |name, s|
+ service = Service.new
+ service.name = name
+ # TODO read the service status?
+ Rails.logger.debug "custom service: #{service.inspect}"
+ services << service
+ end
else
- yapi_ret.each do |s|
- service = Service.new
- service.name = s["name"]
- service.status = s["status"]
- Rails.logger.debug "service: #{service.inspect}"
- services << service
+ yapi_ret = YastService.Call("YaPI::SERVICES::Read")
+
+ if yapi_ret.nil?
+ raise "Can't get services list"
+ else
+ yapi_ret.each do |s|
+ service = Service.new
+ service.name = s["name"]
+# service.status= s["status"] read on demand, this takes much time
+ Rails.logger.debug "service: #{service.inspect}"
+ services << service
+ end
end
end
services
@@ -30,25 +56,34 @@ class Service
# load the status of the service
def self.find(id)
- yapi_ret = YastService.Call("YaPI::SERVICES::Get", id)
-
- raise "Got no data while loading service" if yapi_ret.empty?
+ # actually we do not need to read the real status now
service = Service.new
- service.name = yapi_ret["name"]
- service.status = yapi_ret["status"]
-
- Rails.logger.debug service.inspect
+ service.name = id
service
end
+ # execute a service command (start, stop, ...)
def save(cmd)
- ret = YastService.Call("YaPI::SERVICES::Execute", self.name, cmd)
+
+ custom_service = get_custom_services[self.name]
+
+ command = ""
+ command = custom_service[cmd] unless custom_service.nil?
+
+ if command.nil? or command.empty?
+ Rails.logger.debug "no custom command found, calling YaPI..."
+ ret = YastService.Call("YaPI::SERVICES::Execute", self.name, cmd)
+ else
+ Rails.logger.debug "Service commmand #{command}"
+ ret = Scr.instance.execute([command])
+ end
Rails.logger.debug "Command returns: #{ret.inspect}"
ret
end
+
def to_xml( options = {} )
xml = options[:builder] ||= Builder::XmlMarkup.new(options)
diff --git a/plugins/services/app/views/services/show.html.erb b/plugins/services/app/views/services/show.html.erb
deleted file mode 100644
index d26d152..0000000
--- a/plugins/services/app/views/services/show.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= @service.to_xml -%>
\ No newline at end of file
diff --git a/plugins/services/app/views/services/show.json.erb b/plugins/services/app/views/services/show.json.erb
deleted file mode 100644
index d26d152..0000000
--- a/plugins/services/app/views/services/show.json.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= @service.to_xml -%>
\ No newline at end of file
diff --git a/plugins/services/app/views/services/show.xml.erb b/plugins/services/app/views/services/show.xml.erb
deleted file mode 100644
index d26d152..0000000
--- a/plugins/services/app/views/services/show.xml.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= @service.to_xml -%>
\ No newline at end of file
diff --git a/plugins/services/test/functional/services_controller_test.rb b/plugins/services/test/functional/services_controller_test.rb
index b9bb834..4d430ab 100644
--- a/plugins/services/test/functional/services_controller_test.rb
+++ b/plugins/services/test/functional/services_controller_test.rb
@@ -44,9 +44,4 @@ class ServicesControllerTest < ActionController::TestCase
assert_equal mime.to_s, @response.content_type
end
- test "access show" do
- get :show, :id =>"cron"
- assert_response :success
- end
-
end
--
To unsubscribe, e-mail: yast-commit+unsubscribe@opensuse.org
For additional commands, e-mail: yast-commit+help@opensuse.org