diff options
author | Jay Mundrawala <jdmundrawala@gmail.com> | 2014-07-21 10:46:34 -0700 |
---|---|---|
committer | Jay Mundrawala <jdmundrawala@gmail.com> | 2014-10-22 13:03:14 -0700 |
commit | f83e13f6aae353533cfff74a0adc71a5f91673a6 (patch) | |
tree | a6d861d114d6c1824769208e0fad697704ee0c8d | |
parent | 3847cc6cf1516d5e75b51d65d66872e7d15a3706 (diff) | |
download | chef-f83e13f6aae353533cfff74a0adc71a5f91673a6.tar.gz |
Added windows event logging
-rw-r--r-- | chef-x86-mingw32.gemspec | 1 | ||||
-rw-r--r-- | lib/chef/client.rb | 2 | ||||
-rw-r--r-- | lib/chef/logging/windows_eventlog.rb | 71 |
3 files changed, 74 insertions, 0 deletions
diff --git a/chef-x86-mingw32.gemspec b/chef-x86-mingw32.gemspec index 6d69c4e7e6..43aaffa632 100644 --- a/chef-x86-mingw32.gemspec +++ b/chef-x86-mingw32.gemspec @@ -14,5 +14,6 @@ gemspec.add_dependency "win32-process", "0.7.3" gemspec.add_dependency "win32-service", "0.8.2" gemspec.add_dependency "win32-mmap", "0.4.0" gemspec.add_dependency "wmi-lite", "~> 1.0" +gemspec.add_dependency "win32-eventlog", "0.6.1" gemspec diff --git a/lib/chef/client.rb b/lib/chef/client.rb index e8ff352116..269be6acbc 100644 --- a/lib/chef/client.rb +++ b/lib/chef/client.rb @@ -39,6 +39,7 @@ require 'chef/event_dispatch/dispatcher' require 'chef/formatters/base' require 'chef/formatters/doc' require 'chef/formatters/minimal' +require 'chef/logging/windows_eventlog' require 'chef/version' require 'chef/resource_reporter' require 'chef/run_lock' @@ -155,6 +156,7 @@ class Chef event_handlers += Array(Chef::Config[:event_handlers]) @events = EventDispatch::Dispatcher.new(*event_handlers) + @events.register(Logging::WindowsEventLogger.new) @override_runlist = args.delete(:override_runlist) @specific_recipes = args.delete(:specific_recipes) diff --git a/lib/chef/logging/windows_eventlog.rb b/lib/chef/logging/windows_eventlog.rb new file mode 100644 index 0000000000..8f657449a2 --- /dev/null +++ b/lib/chef/logging/windows_eventlog.rb @@ -0,0 +1,71 @@ +require 'chef/logging/event_log' +require 'win32/eventlog' +include Win32 + +class Chef + module Logging + class WindowsEventLogger < Logging::EventLogger + # These must match those that are defined in the manifest file + RUN_START_EVENT_ID = 10000 + RUN_STARTED_EVENT_ID = 10001 + RUN_COMPLETED_EVENT_ID = 10002 + RUN_FAILED_EVENT_ID = 10003 + + EVENT_CATEGORY_ID = 11000 + LOG_CATEGORY_ID = 11001 + + # Since we must install the event logger, this is not really configurable + SOURCE = 'RubyMsg' + + def initialize + @eventlog = EventLog::open('EventWriter') + end + + def run_start(version) + @eventlog.report_event( + :event_type => EventLog::INFO_TYPE, + :source => SOURCE, + :event_id => RUN_START_EVENT_ID, + :data => [version] + ) + end + + def run_started(run_status) + @run_status = run_status + @eventlog.report_event( + :event_type => EventLog::INFO_TYPE, + :source => SOURCE, + :event_id => RUN_STARTED_EVENT_ID, + :data => [run_status.run_id] + ) + end + + def run_completed(node) + @eventlog.report_event( + :event_type => EventLog::INFO_TYPE, + :source => SOURCE, + :event_id => RUN_COMPLETED_EVENT_ID, + :data => [@run_status.run_id, @run_status.elapsed_time.to_s] + ) + end + + #Failed chef-client run %1 in %2 seconds. + #Exception type: %3 + #Exception message: %4 + #Exception backtrace: %5 + def run_failed(e) + @eventlog.report_event( + :event_type => EventLog::ERROR_TYPE, + :source => SOURCE, + :event_id => RUN_FAILED_EVENT_ID, + :data => [@run_status.run_id, + @run_status.elapsed_time.to_s, + e.class.name, + e.message, + e.backtrace.join("\n")] + ) + end + + end + end +end |