summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJay Mundrawala <jdmundrawala@gmail.com>2014-07-21 10:46:34 -0700
committerJay Mundrawala <jdmundrawala@gmail.com>2014-10-22 13:03:14 -0700
commitf83e13f6aae353533cfff74a0adc71a5f91673a6 (patch)
treea6d861d114d6c1824769208e0fad697704ee0c8d
parent3847cc6cf1516d5e75b51d65d66872e7d15a3706 (diff)
downloadchef-f83e13f6aae353533cfff74a0adc71a5f91673a6.tar.gz
Added windows event logging
-rw-r--r--chef-x86-mingw32.gemspec1
-rw-r--r--lib/chef/client.rb2
-rw-r--r--lib/chef/logging/windows_eventlog.rb71
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