Plugin working queue is managed by Plugin model

This commit is contained in:
uu59 2014-05-30 13:31:09 +09:00
parent 3160c7c285
commit c8e565defd
4 changed files with 29 additions and 25 deletions

View File

@ -27,9 +27,7 @@ class ApplicationController < ActionController::Base
end end
def installing_gems def installing_gems
Plugin::WORKING.find_all do |data| Plugin.installing
data[:type] == :install && data[:state] == :running
end.map{|data| data[:plugin]}
end end
def uninstalling_gem? def uninstalling_gem?
@ -37,9 +35,7 @@ class ApplicationController < ActionController::Base
end end
def uninstalling_gems def uninstalling_gems
Plugin::WORKING.find_all do |data| Plugin.uninstalling
data[:type] == :uninstall && data[:state] == :running
end.map{|data| data[:plugin]}
end end
private private

View File

@ -100,6 +100,20 @@ class Plugin
end end
end end
def self.processing
WORKING.find_all do |data|
data[:state] == :running
end
end
def self.installing
processing.find_all{|data| data[:type] == :install }.map{|data| data[:plugin] }
end
def self.uninstalling
processing.find_all{|data| data[:type] == :uninstall }.map{|data| data[:plugin] }
end
def self.gemfile_path def self.gemfile_path
Rails.root + "Gemfile.plugins" Rails.root + "Gemfile.plugins"
end end
@ -129,11 +143,21 @@ class Plugin
end end
def gem_install def gem_install
data = { plugin: self, state: :running, type: :install }
return if WORKING.grep(data).present?
WORKING.push(data)
fluent_gem("install", gem_name, "-v", version) fluent_gem("install", gem_name, "-v", version)
ensure
WORKING.delete(data)
end end
def gem_uninstall def gem_uninstall
data = { plugin: self, state: :running, type: :uninstall }
return if WORKING.grep(data).present?
WORKING.push(data)
fluent_gem("uninstall", gem_name, "-x", "-a") fluent_gem("uninstall", gem_name, "-x", "-a")
ensure
WORKING.delete(data)
end end
def fluent_gem(*commands) def fluent_gem(*commands)

View File

@ -5,16 +5,8 @@ class GemInstaller
def perform(gem_name, version = nil) def perform(gem_name, version = nil)
SuckerPunch.logger.info "install #{gem_name} #{version}" SuckerPunch.logger.info "install #{gem_name} #{version}"
pl = Plugin.new(gem_name: gem_name, version: version) pl = Plugin.new(gem_name: gem_name, version: version)
data = { plugin: pl, type: :install, state: :running } pl.uninstall! if pl.installed?
if Plugin::WORKING.grep(data).blank? pl.install!
Plugin::WORKING.push(data)
begin
pl.uninstall! if pl.installed?
pl.install!
ensure
Plugin::WORKING.delete(data)
end
end
SuckerPunch.logger.info "installed #{gem_name} #{version}" SuckerPunch.logger.info "installed #{gem_name} #{version}"
end end
end end

View File

@ -5,15 +5,7 @@ class GemUninstaller
def perform(gem_name) def perform(gem_name)
SuckerPunch.logger.info "uninstall #{gem_name}" SuckerPunch.logger.info "uninstall #{gem_name}"
pl = Plugin.new(gem_name: gem_name) pl = Plugin.new(gem_name: gem_name)
data = { plugin: pl, type: :uninstall, state: :running } pl.uninstall!
if Plugin::WORKING.grep(data).blank?
Plugin::WORKING.push(data)
begin
pl.uninstall!
ensure
Plugin::WORKING.delete(data)
end
end
SuckerPunch.logger.info "uninstalled #{gem_name}" SuckerPunch.logger.info "uninstalled #{gem_name}"
end end
end end