diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 6c45662..131f54b 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -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? diff --git a/app/models/plugin.rb b/app/models/plugin.rb index f406d56..95af32f 100644 --- a/app/models/plugin.rb +++ b/app/models/plugin.rb @@ -5,6 +5,8 @@ require "httpclient" class Plugin class GemError < StandardError; end + WORKING = [] + include ActiveModel::Model attr_accessor :gem_name, :version diff --git a/app/views/fluentd/agents/show.html.haml b/app/views/fluentd/agents/show.html.haml index c341180..3cf0c4d 100644 --- a/app/views/fluentd/agents/show.html.haml +++ b/app/views/fluentd/agents/show.html.haml @@ -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 - diff --git a/app/views/fluentd/index.html.haml b/app/views/fluentd/index.html.haml index 45d7517..0094d68 100644 --- a/app/views/fluentd/index.html.haml +++ b/app/views/fluentd/index.html.haml @@ -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 diff --git a/app/workers/gem_installer.rb b/app/workers/gem_installer.rb index 48e8ed7..826d0fa 100644 --- a/app/workers/gem_installer.rb +++ b/app/workers/gem_installer.rb @@ -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}" diff --git a/app/workers/gem_uninstaller.rb b/app/workers/gem_uninstaller.rb index 353a418..d5d4f8d 100644 --- a/app/workers/gem_uninstaller.rb +++ b/app/workers/gem_uninstaller.rb @@ -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}"