diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 8dbc8e7..5dcd2e0 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -2,7 +2,7 @@ module ApplicationHelper def has_td_agent_system? - File.exist?("/etc/init.d/td-agent") + File.exist?("/etc/init.d/td-agent") || File.exist?("/opt/td-agent/embedded/bin/fluentd") end def fluentd_ui_logo diff --git a/app/models/fluentd/agent/local_common.rb b/app/models/fluentd/agent/local_common.rb index a611067..5421556 100644 --- a/app/models/fluentd/agent/local_common.rb +++ b/app/models/fluentd/agent/local_common.rb @@ -96,6 +96,14 @@ class Fluentd ensure io && io.close end + + def detached_command(cmd) + Bundler.with_clean_env do + pid = spawn(cmd) + Process.detach(pid) + end + sleep 1 # NOTE/FIXME: too early return will be caused incorrect status report, "sleep 1" is a adhoc hack + end end end end diff --git a/app/models/fluentd/agent/td_agent.rb b/app/models/fluentd/agent/td_agent.rb index f279925..88977a2 100644 --- a/app/models/fluentd/agent/td_agent.rb +++ b/app/models/fluentd/agent/td_agent.rb @@ -12,32 +12,15 @@ class Fluentd } end - def start - detached_command('/etc/init.d/td-agent start') - end - - def stop - detached_command('/etc/init.d/td-agent stop') - end - - def restart - # NOTE: td-agent has no reload command - # https://github.com/treasure-data/td-agent/blob/master/debian/td-agent.init#L156 - detached_command('/etc/init.d/td-agent restart') - end - def version `/usr/sbin/td-agent --version`.strip end - private - - def detached_command(cmd) - Bundler.with_clean_env do - pid = spawn(cmd) - Process.detach(pid) - end - sleep 1 # NOTE/FIXME: too early return will be caused incorrect status report, "sleep 1" is a adhoc hack + case FluentdUI.platform + when :macosx + include Macosx + when :unix + include Unix end end end diff --git a/app/models/fluentd/agent/td_agent/macosx.rb b/app/models/fluentd/agent/td_agent/macosx.rb new file mode 100644 index 0000000..84925d2 --- /dev/null +++ b/app/models/fluentd/agent/td_agent/macosx.rb @@ -0,0 +1,33 @@ +class Fluentd + class Agent + class TdAgent + module Macosx + + def start + detached_command("launchctl load #{plist}") && pid_from_launchctl + end + + def stop + detached_command("launchctl unload #{plist}") && FileUtils.rm(pid_file) + end + + def restart + stop && start + end + + private + + def plist + '/Library/LaunchDaemons/td-agent.plist' + end + + def pid_from_launchctl + # NOTE: launchctl doesn't make pidfile, so detect pid and store it to pidfile manually + pid = `launchctl list | grep td-agent | cut -f1`.strip + return if pid == "" + File.open(pid_file, "w"){|f| f.write pid } + end + end + end + end +end diff --git a/app/models/fluentd/agent/td_agent/unix.rb b/app/models/fluentd/agent/td_agent/unix.rb new file mode 100644 index 0000000..e0f77d4 --- /dev/null +++ b/app/models/fluentd/agent/td_agent/unix.rb @@ -0,0 +1,21 @@ +class Fluentd + class Agent + class TdAgent + module Unix + def start + detached_command('/etc/init.d/td-agent start') + end + + def stop + detached_command('/etc/init.d/td-agent stop') + end + + def restart + # NOTE: td-agent has no reload command + # https://github.com/treasure-data/td-agent/blob/master/debian/td-agent.init#L156 + detached_command('/etc/init.d/td-agent restart') + end + end + end + end +end diff --git a/lib/fluentd-ui.rb b/lib/fluentd-ui.rb index 629daae..2810851 100644 --- a/lib/fluentd-ui.rb +++ b/lib/fluentd-ui.rb @@ -29,4 +29,13 @@ module FluentdUI def self.td_agent_ui? ENV["FLUENTD_UI_TD_AGENT"].present? end + + def self.platform + case RbConfig::CONFIG['host_os'] + when /darwin|mac os/ + :macosx + else # FIXME: windows is unix? :P + :unix + end + end end