From 5277bfdc240977377ea18f45f3659f837c00ff1d Mon Sep 17 00:00:00 2001 From: uu59 Date: Tue, 11 Nov 2014 10:35:02 +0900 Subject: [PATCH 1/4] Fix to detect td-agent on Mac --- app/helpers/application_helper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 From 703eba007973b4cdfef57302c6451b316f5961d8 Mon Sep 17 00:00:00 2001 From: uu59 Date: Tue, 11 Nov 2014 10:58:57 +0900 Subject: [PATCH 2/4] Swithing MacOSX or UNIX for handling td-agent process --- app/models/fluentd/agent/local_common.rb | 8 ++++++ app/models/fluentd/agent/td_agent.rb | 27 ++++----------------- app/models/fluentd/agent/td_agent/macosx.rb | 26 ++++++++++++++++++++ app/models/fluentd/agent/td_agent/unix.rb | 21 ++++++++++++++++ lib/fluentd-ui.rb | 9 +++++++ 5 files changed, 69 insertions(+), 22 deletions(-) create mode 100644 app/models/fluentd/agent/td_agent/macosx.rb create mode 100644 app/models/fluentd/agent/td_agent/unix.rb 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..27fc785 --- /dev/null +++ b/app/models/fluentd/agent/td_agent/macosx.rb @@ -0,0 +1,26 @@ +class Fluentd + class Agent + class TdAgent + module Macosx + + def start + detached_command("launchctl load #{plist}") + end + + def stop + detached_command("launchctl unload #{plist}") + end + + def restart + stop && start + end + + private + + def plist + '/Library/LaunchDaemons/td-agent.plist' + 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..33b57a8 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 + :unix + end + end end From c7233a565e1a03230cb8dda0005f78d1e4f5684b Mon Sep 17 00:00:00 2001 From: uu59 Date: Tue, 11 Nov 2014 12:46:08 +0900 Subject: [PATCH 3/4] Fix to create pidfile on Mac --- app/models/fluentd/agent/td_agent/macosx.rb | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/app/models/fluentd/agent/td_agent/macosx.rb b/app/models/fluentd/agent/td_agent/macosx.rb index 27fc785..84925d2 100644 --- a/app/models/fluentd/agent/td_agent/macosx.rb +++ b/app/models/fluentd/agent/td_agent/macosx.rb @@ -4,11 +4,11 @@ class Fluentd module Macosx def start - detached_command("launchctl load #{plist}") + detached_command("launchctl load #{plist}") && pid_from_launchctl end def stop - detached_command("launchctl unload #{plist}") + detached_command("launchctl unload #{plist}") && FileUtils.rm(pid_file) end def restart @@ -20,6 +20,13 @@ class Fluentd 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 From fe110ba0ec7aca5493441d7044adf5a8c35a601c Mon Sep 17 00:00:00 2001 From: uu59 Date: Tue, 11 Nov 2014 12:56:57 +0900 Subject: [PATCH 4/4] Note --- lib/fluentd-ui.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/fluentd-ui.rb b/lib/fluentd-ui.rb index 33b57a8..2810851 100644 --- a/lib/fluentd-ui.rb +++ b/lib/fluentd-ui.rb @@ -34,7 +34,7 @@ module FluentdUI case RbConfig::CONFIG['host_os'] when /darwin|mac os/ :macosx - else + else # FIXME: windows is unix? :P :unix end end