Move installing/uninstalling plugins to Plugin model

This commit is contained in:
uu59 2014-05-26 17:59:39 +09:00
parent 371989a642
commit 6d29dbc873
6 changed files with 38 additions and 33 deletions

View File

@ -8,7 +8,9 @@ module ApplicationHelper
end
def installing_gems
GemInstaller::WORKING || []
Plugin::WORKING.find_all do |data|
data[:type] == :install && data[:state] == :running
end.map{|data| data[:plugin]} || []
end
def uninstalling_gem?
@ -16,7 +18,9 @@ module ApplicationHelper
end
def uninstalling_gems
GemUninstaller::WORKING || []
Plugin::WORKING.find_all do |data|
data[:type] == :uninstall && data[:state] == :running
end.map{|data| data[:plugin]} || []
end
def has_alert?

View File

@ -5,6 +5,8 @@ require "httpclient"
class Plugin
class GemError < StandardError; end
WORKING = []
include ActiveModel::Model
attr_accessor :gem_name, :version

View File

@ -1,25 +1,26 @@
- page_title t('.page_title', label: @fluentd.label)
%h4
- if @fluentd.agent.running?
%span.text.text-success= icon("fa-check")
= t("fluentd.common.running")
- else
%span.text.text-info= icon("fa-circle-o")
= t("fluentd.common.stopped")
- if flash[:error]
%div.alert.alert-danger= flash[:error]
%p.operations
= link_to icon("fa-play") << t("fluentd.common.start"), start_fluentd_agent_path(@fluentd), method: :put, class: "btn #{@fluentd.agent.running? ? "disabled btn-default" : "btn-primary"}"
= link_to icon("fa-pause") << t("fluentd.common.stop"), stop_fluentd_agent_path(@fluentd), method: :put, class: "btn #{@fluentd.agent.running? ? "btn-danger" : "disabled btn-default"}"
= link_to icon("fa-refresh") << t("fluentd.common.restart"), restart_fluentd_agent_path(@fluentd), method: :put, class: "btn #{@fluentd.agent.running? ? "btn-warning" : "disabled btn-default"}"
%p
= link_to t("fluentd.common.log"), log_fluentd_agent_path(@fluentd)
= link_to t("fluentd.common.config_file"), fluentd_setting_path(@fluentd)
%div.row
%div.col-lg-3
%div{class: "panel panel-#{@fluentd.agent.running? ? "success":"default"}"}
%div.panel-heading
%h4
- if @fluentd.agent.running?
= icon("fa-play")
= t("fluentd.common.running")
- else
= icon("fa-pause")
= t("fluentd.common.stopped")
%div.panel-body
- if flash[:error]
%div.alert.alert-danger= flash[:error]
= link_to icon("fa-play") << t("fluentd.common.start"), start_fluentd_agent_path(@fluentd), method: :put, class: "btn #{@fluentd.agent.running? ? "disabled btn-default" : "btn-primary"}"
= link_to icon("fa-pause") << t("fluentd.common.stop"), stop_fluentd_agent_path(@fluentd), method: :put, class: "btn #{@fluentd.agent.running? ? "btn-danger" : "disabled btn-default"}"
= link_to icon("fa-refresh") << t("fluentd.common.restart"), restart_fluentd_agent_path(@fluentd), method: :put, class: "btn #{@fluentd.agent.running? ? "btn-warning" : "disabled btn-default"}"
- if @errors.present?
@ -35,4 +36,3 @@
%ul
- errors.each do |stack|
%li= stack

View File

@ -3,12 +3,13 @@
%p= link_to icon('fa-plus') << " " << t(".new"), new_fluentd_path
- @fluentds.each do |d|
%div.col-lg-6
%div.panel.panel-default
%div.col-lg-3
%div{class: "panel panel-#{d.agent.running? ? "success":"default"}"}
%div.panel-heading
%h4
= "fluentd ##{d.id}"
= link_to t(".edit"), edit_fluentd_path(d)
= link_to t(".destroy"), fluentd_path(d), method: :delete
- unless d.agent.running?
= link_to t(".edit"), edit_fluentd_path(d)
= link_to t(".destroy"), fluentd_path(d), method: :delete
%div.panel-body
= link_to t(".operation"), fluentd_agent_path(d) # TODO

View File

@ -2,18 +2,17 @@ class GemInstaller
include SuckerPunch::Job
workers 16
WORKING = []
def perform(gem_name, version = nil)
SuckerPunch.logger.info "install #{gem_name} #{version}"
pl = Plugin.new(gem_name: gem_name, version: version)
unless WORKING.find{|p| p.gem_name == pl.gem_name}
WORKING.push(pl)
data = { plugin: pl, type: :install, state: :running }
if Plugin::WORKING.grep(data).blank?
Plugin::WORKING.push(data)
begin
pl.uninstall! if pl.installed?
pl.install!
ensure
WORKING.delete(pl)
Plugin::WORKING.delete(data)
end
end
SuckerPunch.logger.info "installed #{gem_name} #{version}"

View File

@ -2,17 +2,16 @@ class GemUninstaller
include SuckerPunch::Job
workers 16
WORKING = []
def perform(gem_name)
SuckerPunch.logger.info "uninstall #{gem_name}"
pl = Plugin.new(gem_name: gem_name)
unless WORKING.find{|p| p.gem_name == pl.gem_name}
WORKING.push(pl)
data = { plugin: pl, type: :uninstall, state: :running }
if Plugin::WORKING.grep(data).blank?
Plugin::WORKING.push(data)
begin
pl.uninstall!
ensure
WORKING.delete(pl)
Plugin::WORKING.delete(data)
end
end
SuckerPunch.logger.info "uninstalled #{gem_name}"