Module: check_mk
Branch: master
Commit: 16a0ed00c8b7601dd59b0b11c1ec60dc7694271b
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=16a0ed00c8b760…
Author: Florian Heigl <fh(a)mathias-kettner.de>
Date: Wed Oct 10 13:39:52 2012 +0200
Add new bug entry
---
.bugs/808 | 12 ++++++++++++
1 files changed, 12 insertions(+), 0 deletions(-)
diff --git a/.bugs/808 b/.bugs/808
new file mode 100644
index 0000000..3a12f92
--- /dev/null
+++ b/.bugs/808
@@ -0,0 +1,12 @@
+Title: Handle ctrl-c for inventory
+Component: core
+State: open
+Date: 2012-10-10 13:37:24
+Targetversion: 1.2.0
+Class: cleanup
+
+Currently, trying to abort an inventory only kills the current inventory. If you
+have simply specified cmk -I you'll need to abort as many times as there are h
+hosts
+It would be nice to be able to press ctrl-c once and have that handled by
+cmk so that it aborts the whole process, ideally in a consistent state.
Module: check_mk
Branch: master
Commit: 08941efbd39e84548cef0304e3b6ccf3b5170fae
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=08941efbd39e84…
Author: Florian Heigl <fh(a)mathias-kettner.de>
Date: Wed Oct 10 12:56:58 2012 +0200
Add new bug entry
---
.bugs/806 | 11 +++++++++++
1 files changed, 11 insertions(+), 0 deletions(-)
diff --git a/.bugs/806 b/.bugs/806
new file mode 100644
index 0000000..9859993
--- /dev/null
+++ b/.bugs/806
@@ -0,0 +1,11 @@
+Title: IOPS calculation in diskstat gets wrong numbers
+Component: checks
+State: open
+Date: 2012-10-10 12:54:15
+Targetversion: 1.2.0
+Class: bug
+
+Manually tracking the numbers reported by diskstat does not match the numbers
+reported by the OS. 2K IOPS show up as >4k sometimes. possible cause from looking
+at the check is the timedif handling.
+Needs more debugging.
Module: check_mk
Branch: master
Commit: 5e059eddd6b8b6cf12157ed3060a7b4bb971ed11
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=5e059eddd6b8b6…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Wed Oct 10 08:43:13 2012 +0200
windows_updates agent plugin: Fetching data in background mode, caching update information for 30 minutes
---
ChangeLog | 2 +
agents/plugins/apache_status | 2 +-
agents/windows/plugins/windows_updates.vbs | 157 ++++++++++++++++++++++------
3 files changed, 129 insertions(+), 32 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index ad33a7b..32d70dd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -37,6 +37,8 @@
Checks & Agents:
* New check mssql_counters.locks: Monitors locking related information of
MSSQL tablespaces
+ * windows_updates agent plugin: Fetching data in background mode, caching
+ update information for 30 minutes
1.2.0p3:
Mulitisite
diff --git a/agents/plugins/apache_status b/agents/plugins/apache_status
index d8a1bbc..871c428 100755
--- a/agents/plugins/apache_status
+++ b/agents/plugins/apache_status
@@ -86,4 +86,4 @@ for proto, address, port in servers:
continue
print address, port, line
except Exception, e:
- sys.stderr.write('Exception (%s:%d): %s' % (address, port, e))
+ sys.stderr.write('Exception (%s:%d): %s\n' % (address, port, e))
diff --git a/agents/windows/plugins/windows_updates.vbs b/agents/windows/plugins/windows_updates.vbs
index 972c5dd..451395d 100644
--- a/agents/windows/plugins/windows_updates.vbs
+++ b/agents/windows/plugins/windows_updates.vbs
@@ -11,46 +11,141 @@
Option Explicit
Dim result, reboot, numImp, numOpt, important, opti
-Dim updtSearcher, colDownloads, objEntry
+Dim windows_update_maxage, temp_file, new_file
+Dim updtSearcher, colDownloads, objEntry, objFS, objShell, objFile
If CreateObject("Microsoft.Update.AutoUpdate").DetectNow <> 0 Then
WScript.Echo "<<<windows_updates>>>"
WScript.Quit(0)
End If
-Set updtSearcher = CreateObject("Microsoft.Update.Session").CreateUpdateSearcher
+' Gathering the installed updates might take a lot of time, thus this
+' check makes use of a cache. The cache saves and uses the current update
+' information for windows_updates_maxage seconds. After the file is too old
+' the information are refreshed. The check is executed in "refresh" mode to
+' update the data in background while the regular check still uses the current
+' information. Once the update finished in the background job, the new data
+' is used.
-reboot = 0
-numImp = 0
-numOpt = 0
-
-If CreateObject("Microsoft.Update.SystemInfo").RebootRequired Then
- reboot = 1
+' Gather mode of the current script run
+Dim mode
+mode = "check"
+If Wscript.Arguments.Count = 1 Then
+ If Wscript.Arguments.Item(0) = "update" Then
+ mode = "update"
+ End If
End If
-Set result = updtSearcher.Search("IsInstalled = 0 and IsHidden = 0")
-Set colDownloads = result.Updates
+' Keep temporary file for 30 minutes
+windows_update_maxage = 1800
+
+Set objShell = CreateObject("WScript.Shell")
+Set objFS = CreateObject("Scripting.FileSystemObject")
+
+temp_file = objShell.ExpandEnvironmentStrings("%Temp%") & "\cmk_windows_updates_cache.txt"
+new_file = objShell.ExpandEnvironmentStrings("%Temp%") & "\cmk_windows_updates_cache_new.txt"
+
+Sub print_file(path)
+ Set objFile = objFS.OpenTextFile(path, 1)
+ Do Until objFile.AtEndOfStream
+ wscript.echo objFile.ReadLine
+ Loop
+ objFile.Close
+ Set objFile = nothing
+End Sub
+
+Sub start_update()
+ ' First create the new temp file (locks!)
+ Set objFile = objFS.CreateTextFile(new_file, True)
+ objFile.Close
+ Set objFile = nothing
+
+ ' Now start the update in background (0: hide window, False: dont wait)
+ objShell.Run Wscript.ScriptFullName + " update", 0, False
+End Sub
+
+Sub update()
+ Set objFile = objFS.CreateTextFile(new_file, True)
+ Set updtSearcher = CreateObject("Microsoft.Update.Session").CreateUpdateSearcher
+
+ reboot = 0
+ numImp = 0
+ numOpt = 0
+
+ If CreateObject("Microsoft.Update.SystemInfo").RebootRequired Then
+ reboot = 1
+ End If
+
+ Set result = updtSearcher.Search("IsInstalled = 0 and IsHidden = 0")
+ Set colDownloads = result.Updates
-For Each objEntry in colDownloads
- if objEntry.AutoSelectOnWebSites Then
- if numImp = 0 Then
- important = objEntry.Title
- else
- important = important & "; " & objEntry.Title
+ For Each objEntry in colDownloads
+ if objEntry.AutoSelectOnWebSites Then
+ if numImp = 0 Then
+ important = objEntry.Title
+ else
+ important = important & "; " & objEntry.Title
+ End If
+ numImp = numImp + 1
+ Else
+ If numOpt = 0 Then
+ opti = objEntry.Title
+ Else
+ opti = opti & "; " & objEntry.Title
+ End If
+ numOpt = numOpt + 1
+ End If
+ Next
+
+ objFile.write("<<<windows_updates>>>" & vbCrLf)
+ objFile.write(reboot & " " & numImp & " " & numOpt & vbCrLf)
+ objFile.write(important & vbCrLf)
+ objFile.write(opti)
+
+ objFile.Close()
+ Set objFile = nothing
+
+ ' After completion, move the file
+ If objFS.FileExists(temp_file) Then
+ objFS.DeleteFile(temp_file)
+ End If
+ objFS.MoveFile new_file, temp_file
+End Sub
+
+' Handle the update mode of this script. In this mode the new information
+' are fetched via WMI. This should only be called in async mode because
+' this might take a lot of time dependent on how many software is installed.
+If mode = "update" Then
+ update()
+ WScript.Quit(0)
+End If
+
+If objFS.FileExists(temp_file) Then
+ If DateDiff("s", objFS.GetFile(temp_file).DateLastModified, Now()) > windows_update_maxage Then
+ ' Too old!
+ If Not objFS.FileExists(new_file) Then
+ ' Start fetching new data in the bakground
+ start_update()
+ End If
End If
- numImp = numImp + 1
- Else
- If numOpt = 0 Then
- opti = objEntry.Title
- Else
- opti = opti & "; " & objEntry.Title
+
+ ' Output current data if
+ ' a) The temp_file is new enough
+ ' b) The temp_file is too old but new data is being fetched now
+ print_file temp_file
+ WScript.Quit(0)
+Else
+ ' No data fetched yet,
+ If Not objFS.FileExists(new_file) Then
+ ' Start fetching new data in background
+ start_update()
End If
- numOpt = numOpt + 1
- End If
-Next
-
-WScript.Echo "<<<windows_updates>>>"
-WScript.Echo reboot & " " & numImp & " " & numOpt
-WScript.Echo important
-WScript.Echo opti
-WScript.Quit()
+
+ ' Return empty
+ WScript.Echo "<<<windows_updates>>>"
+ WScript.Quit(0)
+End If
+
+Set objFS = nothing
+Set objShell = nothing
+WScript.Quit()
\ No newline at end of file