Module: check_mk
Branch: master
Commit: ed742dc2e8710ee65f6bc45cc6fbba735f045f04
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=ed742dc2e8710e…
Author: Mathias Kettner <mk(a)mathias-kettner.de>
Date: Wed Mar 19 10:14:00 2014 +0100
Also custom views now have permissions
In that past only builtin views had permissions that you could disable in a
role and that way remove those views for certain users. Now this also works
for custom views - i.e. views that a user has created with a new unique name
and and that is published for other users.
Please note that regardless of a view's permission the owner of the view can
always see it. If you do not like this you can remove the permission for
creating custom views.
---
.werks/748 | 15 +++++++++++++++
ChangeLog | 1 +
web/htdocs/config.py | 22 +++++++++++++++++++---
web/htdocs/views.py | 42 +++++++++++++++++++++++++++++++-----------
web/htdocs/wato.py | 4 ++++
5 files changed, 70 insertions(+), 14 deletions(-)
diff --git a/.werks/748 b/.werks/748
new file mode 100644
index 0000000..e880521
--- /dev/null
+++ b/.werks/748
@@ -0,0 +1,15 @@
+Title: Also custom views now have permissions
+Level: 2
+Component: multisite
+Version: 1.2.5i1
+Date: 1395220282
+Class: feature
+
+In that past only builtin views had permissions that you could disable in a
+role and that way remove those views for certain users. Now this also works
+for custom views - i.e. views that a user has created with a new unique name
+and and that is published for other users.
+
+Please note that regardless of a view's permission the owner of the view can
+always see it. If you do not like this you can remove the permission for
+creating custom views.
diff --git a/ChangeLog b/ChangeLog
index 1d0cf29..f9e9ae0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -227,6 +227,7 @@
* 0123 New time range filter for Downtimes and Comments...
* 0683 New column painter for the last time a service was OK...
* 0561 quicksearch: now able to search with multiple filters...
+ * 0748 Also custom views now have permissions...
* 0302 FIX: Fixed highlight of choosen elements in foldertee/views snapin in Chrome/IE
* 0239 FIX: Fixed incorrect html formatting when displaying host or service comments...
* 0307 FIX: Increased performance of multisite GUI with a large userbase...
diff --git a/web/htdocs/config.py b/web/htdocs/config.py
index 8ff45dd..f748d98 100644
--- a/web/htdocs/config.py
+++ b/web/htdocs/config.py
@@ -72,9 +72,10 @@ except:
# Global table of available permissions. Plugins may add their own
# permissions by calling declare_permission()
-permissions_by_name = {}
-permissions_by_order = []
-permission_sections = {}
+permissions_by_name = {}
+permissions_by_order = []
+permission_sections = {}
+permission_declaration_functions = []
# Constants for BI
ALL_HOSTS = '(.*)'
@@ -184,6 +185,21 @@ def declare_permission_section(name, title, prio = 0, do_sort = False):
# be listed first, e.g. in the edit dialogs
permission_sections[name] = (prio, title, do_sort)
+# Some module have a non-fixed list of permissions. For example for
+# each user defined view there is also a permission. This list is
+# not known at the time of the loading of the module - though. For
+# that purpose module can register functions. These functions should
+# just call declare_permission(). They are being called in the correct
+# situations.
+def declare_dynamic_permissions(func):
+ permission_declaration_functions.append(func)
+
+# This function needs to be called by all code that needs access
+# to possible dynamic permissions
+def load_dynamic_permissions():
+ for func in permission_declaration_functions:
+ func()
+
# Compute permissions for HTTP user and set in
# global variables. Also store user.
def login(u):
diff --git a/web/htdocs/views.py b/web/htdocs/views.py
index 053798f..95d9f34 100644
--- a/web/htdocs/views.py
+++ b/web/htdocs/views.py
@@ -72,20 +72,21 @@ def load_plugins():
loaded_with_language = current_language
# Declare permissions for builtin views
- config.declare_permission_section("view", _("Builtin views"), do_sort = True)
+ config.declare_permission_section("view", _("Multisite Views"), do_sort = True)
for name, view in multisite_builtin_views.items():
config.declare_permission("view.%s" % name,
view["title"],
view["description"],
config.builtin_role_ids)
+ # Make sure that custom views also have permissions
+ config.declare_dynamic_permissions(declare_custom_view_permissions)
+
# Add painter names to painter objects (e.g. for JSON web service)
for n, p in multisite_painters.items():
p["name"] = n
-
-
##################################################################################
# Layouts
##################################################################################
@@ -237,6 +238,7 @@ class Filter:
# Load all views - users or builtins
def load_views():
+ declare_custom_view_permissions()
html.multisite_views = {}
# first load builtins. Set username to ''
@@ -273,7 +275,6 @@ def load_views():
if view['datasource'] not in multisite_datasources:
continue
-
# Maybe resolve inherited attributes
builtin_view = html.multisite_views.get(('', name))
if builtin_view:
@@ -293,6 +294,26 @@ def load_views():
html.available_views = available_views()
+# Load all users views just in order to declare permissions of custom views
+def declare_custom_view_permissions():
+ # Now scan users subdirs for files "views.mk"
+ subdirs = os.listdir(config.config_dir)
+ for user in subdirs:
+ try:
+ dirpath = config.config_dir + "/" + user
+ if os.path.isdir(dirpath):
+ path = dirpath + "/views.mk"
+ if not os.path.exists(path):
+ continue
+ views = eval(file(path).read())
+ for name, view in views.items():
+ if view["public"] and not config.permission_exists("view." + name):
+ config.declare_permission("view." + name, view["title"],
+ view["description"], ['admin','user','guest'])
+ except:
+ if opt_debug:
+ raise
+
# Get the list of views which are available to the user
# (which could be retrieved with get_view)
def available_views():
@@ -308,12 +329,12 @@ def available_views():
# 2. views of special users allowed to globally override builtin views
for (u, n), view in html.multisite_views.items():
if n not in views and view["public"] and config.user_may(u, "general.force_views"):
- # Honor original permissions for the current user
- permname = "view.%s" % n
- if config.permission_exists(permname) \
- and not config.may(permname):
- continue
- views[n] = view
+ # Honor original permissions for the current user
+ permname = "view.%s" % n
+ if config.permission_exists(permname) \
+ and not config.may(permname):
+ continue
+ views[n] = view
# 3. Builtin views, if allowed.
for (u, n), view in html.multisite_views.items():
@@ -2764,7 +2785,6 @@ def ajax_inv_render_tree():
node = inventory.get(tree, invpath)
if not node:
html.show_error(_("Invalid path %s in inventory tree") % invpath)
- html.debug(tree)
else:
render_inv_subtree_container(hostname, invpath, node)
diff --git a/web/htdocs/wato.py b/web/htdocs/wato.py
index 4de2be2..ca18501 100644
--- a/web/htdocs/wato.py
+++ b/web/htdocs/wato.py
@@ -11213,6 +11213,10 @@ def mode_edit_role(phase):
html.context_button(_("All Roles"), make_link([("mode", "roles")]), "back")
return
+ # Make sure that all dynamic permissions are available (e.g. those for custom
+ # views)
+ config.load_dynamic_permissions()
+
roles = userdb.load_roles()
role = roles[id]
Module: check_mk
Branch: master
Commit: db91e60235f2762054c7e8e992594e7180bd819e
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=db91e60235f276…
Author: Götz Golla <gg(a)mathias-kettner.de>
Date: Tue Mar 18 17:32:05 2014 +0100
dell_poweredge_netdev: new check to monitor the status of network devices on Dells Poweredge Servers
---
.werks/594 | 8 ++++
ChangeLog | 1 +
checkman/dell_poweredge_netdev | 31 +++++++++++++
checks/dell_poweredge_netdev | 98 ++++++++++++++++++++++++++++++++++++++++
4 files changed, 138 insertions(+)
diff --git a/.werks/594 b/.werks/594
new file mode 100644
index 0000000..28d1216
--- /dev/null
+++ b/.werks/594
@@ -0,0 +1,8 @@
+Title: dell_poweredge_netdev: new check to monitor the status of network devices on Dells Poweredge Servers
+Level: 1
+Component: checks
+Version: 1.2.5i1
+Date: 1395160279
+Class: feature
+
+
diff --git a/ChangeLog b/ChangeLog
index fb51ebc..fea0e57 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -113,6 +113,7 @@
* 0143 ups_socomec_in_voltage, ups_socomec_out_voltage: Socomec UPS Devices, Input and Output Voltages...
* 0732 df: now able to monitor inodes...
* 0716 Add Linux caching agent also to normal agent RPM...
+ * 0594 dell_poweredge_netdev: new check to monitor the status of network devices on Dells Poweredge Servers
* 0103 FIX: services: Fixed bug with service inventory defined in main.mk...
* 0299 FIX: borcade_mlx_fan: Prettified output, handling "other" state now
* 0300 FIX: cisco_fru_power: Trying not to inventorize not plugged in FRUs...
diff --git a/checkman/dell_poweredge_netdev b/checkman/dell_poweredge_netdev
new file mode 100644
index 0000000..46ef447
--- /dev/null
+++ b/checkman/dell_poweredge_netdev
@@ -0,0 +1,31 @@
+title: Dell PowerEdge Server: State of Network Devices
+agents: snmp
+catalog: hw/server/dell
+license: GPL
+distribution: check_mk
+description:
+ This check monitors the state of the network devices of Dell PowerEdge Servers.
+ The state is extracted from the device via SNMP from the parameters
+ {networkDeviceStatus} and {networkDeviceConnectionStatus}.
+
+ The state of the check is {OK} when the device returns a state of {OK}.
+ The state of the cehck is {WARN} when the device returns a state of {other},
+ {unknown} or {nonCritical}. The state of the check is {CRIT} otherwise.
+
+ The state also returns {OK} when the connections status is {CONNECTED}.
+ It returns {CRIT} otherwise und {WARN} if the connection status is {UNKNOWN}
+
+ No limits are set in the check.
+
+ In addition to the state the following information is retrieved and displayed in
+ the check output: name of the product, current MAC address
+ ,
+ description of the device and manufacturer,
+
+item:
+ The name of the fqdd variable for the device
+
+inventory:
+ All network devices of the device are detected
+
+
diff --git a/checks/dell_poweredge_netdev b/checks/dell_poweredge_netdev
new file mode 100644
index 0000000..a8f874a
--- /dev/null
+++ b/checks/dell_poweredge_netdev
@@ -0,0 +1,98 @@
+#!/usr/bin/python
+# -*- encoding: utf-8; py-indent-offset: 4 -*-
+# +------------------------------------------------------------------+
+# | ____ _ _ __ __ _ __ |
+# | / ___| |__ ___ ___| | __ | \/ | |/ / |
+# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / |
+# | | |___| | | | __/ (__| < | | | | . \ |
+# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ |
+# | |
+# | Copyright Mathias Kettner 2013 mk(a)mathias-kettner.de |
+# +------------------------------------------------------------------+
+#
+# This file is part of Check_MK.
+# The official homepage is at http://mathias-kettner.de/check_mk.
+#
+# check_mk is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation in version 2. check_mk is distributed
+# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with-
+# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE. See the GNU General Public License for more de-
+# ails. You should have received a copy of the GNU General Public
+# License along with GNU Make; see the file COPYING. If not, write
+# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+# Boston, MA 02110-1301 USA.
+
+dell_poweredge_netdev_info = ( ".1.3.6.1.4.1.674.10892.5.4.1100.90.1", [
+ #"1", # networkDeviceChassisIndex
+ #"2", # networkDeviceIndex
+ "3", # networkDeviceStatus 0
+ "4", # networkDeviceConnectionStatus 1
+ "6", # networkDeviceProductName 2
+ "15", # networkDeviceCurrentMACAddress 3
+ #"16", # networkDevicePermanentMACAddress
+ #"17", # networkDevicePCIBisNumber
+ #"18", # networkDevicePCIDeviceNumber
+ #"19", # networkDevicePCIFunctionNumber
+ #"23", # networkDeviceTOECapabilityFlag
+ #"27", # networkDeviceSCSICapabilityFlag
+ #"28", # networkDeviceSCSIEnabled
+ #"29", # networkDeviceCapabilities
+ "30", # networkDeviceFQDD 4
+ ])
+
+dell_poweredge_netdev_scan = lambda oid: oid('.1.3.6.1.2.1.1.2.0') == ".1.3.6.1.4.1.674.10892.5"
+
+def inventory_dell_poweredge_netdev(info):
+ inventory = []
+ for line in info:
+ if line[4] != "":
+ inventory.append( ( line[4], None ) )
+ return inventory
+
+def check_dell_poweredge_netdev(item, _no_params, info):
+ di = dict()
+ for status, connection_status, di['Product'], cur_mac, fqdd in info:
+ if item == fqdd:
+ print connection_status
+ di['MAC'] = '-'.join( [ "%02X" % ord( c ) for c in cur_mac ] ).strip()
+ state_table = {
+ "1" : ( "other,", 1 ),
+ "2" : ( "unknown,", 1 ),
+ "3" : ( "", 0 ),
+ "4" : ( "nonCritical,", 1 ),
+ "5" : ( "Critical,", 2 ),
+ "6" : ( "NonRecoverable,", 2 ),
+ }
+ connection_table = {
+ "1" : ( "connected", 0 ),
+ "2" : ( "disconnected", 2 ),
+ "3" : ( "driverBad", 2 ),
+ "4" : ( "driverDisabled", 2 ),
+ "10" : ( "hardwareInitializing", 2 ),
+ "11" : ( "hardwareResetting", 2 ),
+ "12" : ( "hardwareClosing", 2 ),
+ "13" : ( "hardwareNotReady", 2 ),
+ }
+ dev_state_txt, dev_state = state_table.get(status, ( "unknown device status,", 2 ))
+ conn_state_txt, conn_state = connection_table.get(connection_status, ( "unknown connection status", 1 ))
+ state = max(dev_state, conn_state)
+ infotext = "%s %s" % (dev_state_txt, conn_state_txt)
+ for parameter, value in di.items():
+ infotext += ", %s: %s" % ( parameter, value )
+ infotext = re.sub("^, ","", infotext)
+
+ return state, infotext
+
+ return 3, "network device not found"
+
+check_info["dell_poweredge_netdev"] = {
+ "check_function" : check_dell_poweredge_netdev,
+ "inventory_function" : inventory_dell_poweredge_netdev,
+ "service_description" : "%s",
+ "has_perfdata" : False,
+ "snmp_info" : dell_poweredge_netdev_info,
+ "snmp_scan" : dell_poweredge_netdev_scan,
+}
+
Module: check_mk
Branch: master
Commit: cb7e659258f5740bfdb9faa8dac71bba5b27f13a
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=cb7e659258f574…
Author: Mathias Kettner <mk(a)mathias-kettner.de>
Date: Tue Mar 18 16:02:53 2014 +0100
Add Linux caching agent also to normal agent RPM
In the RPM package for the Linux agent we now always ship
the "Caching" agent <tt>/usr/bin/check_mk_caching_agent</tt>. In order
to use it instead of the normal agent, simply edit <tt>/etc/xinetd.d/check_mk</tt>.
---
.werks/716 | 10 ++++++++++
ChangeLog | 1 +
check_mk.spec | 2 ++
3 files changed, 13 insertions(+)
diff --git a/.werks/716 b/.werks/716
new file mode 100644
index 0000000..81c801d
--- /dev/null
+++ b/.werks/716
@@ -0,0 +1,10 @@
+Title: Add Linux caching agent also to normal agent RPM
+Level: 1
+Component: checks
+Version: 1.2.5i1
+Date: 1395153584
+Class: feature
+
+In the RPM package for the Linux agent we now always ship
+the "Caching" agent <tt>/usr/bin/check_mk_caching_agent</tt>. In order
+to use it instead of the normal agent, simply edit <tt>/etc/xinetd.d/check_mk</tt>.
diff --git a/ChangeLog b/ChangeLog
index 0037d89..fb51ebc 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -112,6 +112,7 @@
* 0705 arcserve_backup: improved documentation (check manpage and comments in the agent plugin)
* 0143 ups_socomec_in_voltage, ups_socomec_out_voltage: Socomec UPS Devices, Input and Output Voltages...
* 0732 df: now able to monitor inodes...
+ * 0716 Add Linux caching agent also to normal agent RPM...
* 0103 FIX: services: Fixed bug with service inventory defined in main.mk...
* 0299 FIX: borcade_mlx_fan: Prettified output, handling "other" state now
* 0300 FIX: cisco_fru_power: Trying not to inventorize not plugged in FRUs...
diff --git a/check_mk.spec b/check_mk.spec
index 667321a..3d7a93f 100644
--- a/check_mk.spec
+++ b/check_mk.spec
@@ -190,6 +190,7 @@ rm -rf $RPM_BUILD_ROOT
%files agent
%config(noreplace) /etc/xinetd.d/check_mk
/usr/bin/check_mk_agent
+/usr/bin/check_mk_caching_agent
/usr/bin/waitmax
/usr/bin/mk-job
/usr/share/doc/check_mk_agent
@@ -202,6 +203,7 @@ rm -rf $RPM_BUILD_ROOT
%config(noreplace) /etc/xinetd.d/check_mk
/usr/bin/check_mk_agent
/usr/bin/waitmax
+/usr/bin/check_mk_caching_agent
/usr/bin/mk-job
/usr/share/doc/check_mk_agent
%dir /usr/lib/check_mk_agent/local
Module: check_mk
Branch: master
Commit: 401b83ed11124698959f5ef0ee42adb4a322ec0a
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=401b83ed111246…
Author: Mathias Kettner <mk(a)mathias-kettner.de>
Date: Tue Mar 18 15:31:46 2014 +0100
INV: add scanners for various windows SW sources
---
inventory/win_exefiles | 48 +++++++++++++++++++++++++++++++++++++
inventory/win_reg_uninstall | 48 +++++++++++++++++++++++++++++++++++++
inventory/win_wmi_software | 51 ++++++++++++++++++++++++++++++++++++++++
web/plugins/views/inventory.py | 12 ++++++----
4 files changed, 155 insertions(+), 4 deletions(-)
diff --git a/inventory/win_exefiles b/inventory/win_exefiles
new file mode 100644
index 0000000..dcc0826
--- /dev/null
+++ b/inventory/win_exefiles
@@ -0,0 +1,48 @@
+#!/usr/bin/python
+# -*- encoding: utf-8; py-indent-offset: 4 -*-
+# +------------------------------------------------------------------+
+# | ____ _ _ __ __ _ __ |
+# | / ___| |__ ___ ___| | __ | \/ | |/ / |
+# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / |
+# | | |___| | | | __/ (__| < | | | | . \ |
+# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ |
+# | |
+# | Copyright Mathias Kettner 2013 mk(a)mathias-kettner.de |
+# +------------------------------------------------------------------+
+#
+# This file is part of Check_MK.
+# The official homepage is at http://mathias-kettner.de/check_mk.
+#
+# check_mk is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation in version 2. check_mk is distributed
+# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with-
+# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE. See the GNU General Public License for more de-
+# ails. You should have received a copy of the GNU General Public
+# License along with GNU Make; see the file COPYING. If not, write
+# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+# Boston, MA 02110-1301 USA.
+
+# Example output
+# <<<win_exefiles:sep(124)>>>
+# C:\Program Files\Common Files\Microsoft Shared\MSInfo\msinfo32.exe|378880
+# C:\Program Files\Common Files\Microsoft Shared\OFFICE15\CMigrate.exe|6847704
+# C:\Program Files\Common Files\Microsoft Shared\OFFICE15\MSOXMLED.EXE|217200
+# C:\Program Files\Common Files\Microsoft Shared\OfficeSoftwareProtectionPlatform\OSPPSVC.EXE|5132888
+
+def inv_win_exefiles(info):
+ paclist = inv_tree("software.packages:")
+ for path, size in info:
+ parts = path.split('\\')
+ entry = {
+ "name" : path,
+ "package_type" : "exe",
+ "size" : int(size),
+ }
+ paclist.append(entry)
+
+
+inv_info['win_exefiles'] = {
+ "inv_function" : inv_win_exefiles,
+}
diff --git a/inventory/win_reg_uninstall b/inventory/win_reg_uninstall
new file mode 100644
index 0000000..c437a5e
--- /dev/null
+++ b/inventory/win_reg_uninstall
@@ -0,0 +1,48 @@
+#!/usr/bin/python
+# -*- encoding: utf-8; py-indent-offset: 4 -*-
+# +------------------------------------------------------------------+
+# | ____ _ _ __ __ _ __ |
+# | / ___| |__ ___ ___| | __ | \/ | |/ / |
+# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / |
+# | | |___| | | | __/ (__| < | | | | . \ |
+# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ |
+# | |
+# | Copyright Mathias Kettner 2013 mk(a)mathias-kettner.de |
+# +------------------------------------------------------------------+
+#
+# This file is part of Check_MK.
+# The official homepage is at http://mathias-kettner.de/check_mk.
+#
+# check_mk is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation in version 2. check_mk is distributed
+# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with-
+# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE. See the GNU General Public License for more de-
+# ails. You should have received a copy of the GNU General Public
+# License along with GNU Make; see the file COPYING. If not, write
+# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+# Boston, MA 02110-1301 USA.
+
+# Example output
+# <<<win_reg_uninstall:sep(124)>>>
+# AddressBook
+# AFPL Ghostscript 8.54
+# AFPL Ghostscript Fonts
+# Connection Manager
+# DirectDrawEx
+# F-Secure Anti-Spyware
+
+def inv_win_reg_uninstall(info):
+ paclist = inv_tree("software.packages:")
+ for line in info:
+ entry = {
+ "name" : line[0],
+ "package_type" : "reg_uninstall",
+ }
+ paclist.append(entry)
+
+
+inv_info['win_reg_uninstall'] = {
+ "inv_function" : inv_win_reg_uninstall,
+}
diff --git a/inventory/win_wmi_software b/inventory/win_wmi_software
new file mode 100644
index 0000000..01eb091
--- /dev/null
+++ b/inventory/win_wmi_software
@@ -0,0 +1,51 @@
+#!/usr/bin/python
+# -*- encoding: utf-8; py-indent-offset: 4 -*-
+# +------------------------------------------------------------------+
+# | ____ _ _ __ __ _ __ |
+# | / ___| |__ ___ ___| | __ | \/ | |/ / |
+# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / |
+# | | |___| | | | __/ (__| < | | | | . \ |
+# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ |
+# | |
+# | Copyright Mathias Kettner 2013 mk(a)mathias-kettner.de |
+# +------------------------------------------------------------------+
+#
+# This file is part of Check_MK.
+# The official homepage is at http://mathias-kettner.de/check_mk.
+#
+# check_mk is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation in version 2. check_mk is distributed
+# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with-
+# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE. See the GNU General Public License for more de-
+# ails. You should have received a copy of the GNU General Public
+# License along with GNU Make; see the file COPYING. If not, write
+# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+# Boston, MA 02110-1301 USA.
+
+# Example output
+# <<<win_wmi_software:sep(124)>>>
+# 64 Bit HP CIO Components Installer|Hewlett-Packard|15.2.1
+# Adobe Flash Player 12 ActiveX|Adobe Systems Incorporated|12.0.0.70
+# Microsoft Visio 2010 Interactive Guide DEU|Microsoft|1.2.1
+# Microsoft Outlook 2010 Interactive Guide DEU|Microsoft|1.2.1
+# VMware vSphere Client 4.1|VMware, Inc.|4.1.0.17435
+# Microsoft Office Professional Plus 2010|Microsoft Corporation|14.0.7015.1000
+
+
+def inv_win_wmi_software(info):
+ paclist = inv_tree("software.packages:")
+ for pacname, vendor, version in info:
+ entry = {
+ "name" : pacname,
+ "version" : version,
+ "vendor" : vendor,
+ "package_type" : "wmi",
+ }
+ paclist.append(entry)
+
+
+inv_info['win_wmi_software'] = {
+ "inv_function" : inv_win_wmi_software,
+}
diff --git a/web/plugins/views/inventory.py b/web/plugins/views/inventory.py
index 8343c4c..50531e8 100644
--- a/web/plugins/views/inventory.py
+++ b/web/plugins/views/inventory.py
@@ -503,11 +503,14 @@ def inv_paint_bytes(b):
return "number", "%d %s" % (b, units[i])
def inv_paint_count(b):
- return "number", str(b)
+ if b == None:
+ return "", ""
+ else:
+ return "number", str(b)
def inv_paint_bytes_rounded(b):
if b == None:
- return "", _("unknown")
+ return "", ""
elif b == 0:
return "number", "0"
@@ -519,9 +522,9 @@ def inv_paint_bytes_rounded(b):
fac = fac / 1024.0
if i:
- return "number", "%.2f %s" % (b / fac, units[i])
+ return "number", "%.2f %s" % (b / fac, units[i])
else:
- return "number", "%d %s" % (b, units[0])
+ return "number", "%d %s" % (b, units[0])
def inv_paint_volt(volt):
return "number", "%.1f V" % volt
@@ -568,6 +571,7 @@ inventory_displayhints.update({
".software.packages:*.summary" : { "title" : _("Description"), },
".software.packages:*.version" : { "title" : _("Version"), },
".software.packages:*.package_version" : { "title" : _("Package Version"), },
+ ".software.packages:*.size" : { "title" : _("Size"), "paint" : "count" },
})
# TEST: create painters for node with a display hint