/
inventory.py
234 lines (213 loc) · 8.83 KB
/
inventory.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
#!/usr/bin/python
# -*- encoding: utf-8; py-indent-offset: 4 -*-
# +------------------------------------------------------------------+
# | ____ _ _ __ __ _ __ |
# | / ___| |__ ___ ___| | __ | \/ | |/ / |
# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / |
# | | |___| | | | __/ (__| < | | | | . \ |
# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ |
# | |
# | Copyright Mathias Kettner 2014 mk@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-
# tails. 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.
import cmk.utils.paths
import cmk.utils.defines as defines
from cmk.gui.valuespec import (
DualListChoice,
Age,
Dictionary,
Transform,
DropdownChoice,
TextAscii,
MonitoringState,
)
from cmk.gui.i18n import _
from cmk.gui.plugins.wato import (
rulespec_group_registry,
RulespecGroup,
rulespec_registry,
HostRulespec,
)
@rulespec_group_registry.register
class RulespecGroupInventory(RulespecGroup):
@property
def name(self):
return "inventory"
@property
def title(self):
return _("Hardware / Software Inventory")
@property
def help(self):
return _("Configuration of the Check_MK Hardware and Software Inventory System")
@rulespec_registry.register
class RulespecActiveChecksCmkInv(HostRulespec):
@property
def group(self):
return RulespecGroupInventory
@property
def name(self):
return "active_checks:cmk_inv"
@property
def match_type(self):
return "all"
@property
def valuespec(self):
return Transform(
Dictionary(elements=[
("sw_changes",
MonitoringState(
title=_("State when software changes are detected"),
default_value=0,
)),
("sw_missing",
MonitoringState(
title=_("State when software packages info is missing"),
default_value=0,
)),
("hw_changes",
MonitoringState(
title=_("State when hardware changes are detected"),
default_value=0,
)),
("fail_status",
MonitoringState(
title=_("State when inventory fails"),
help=_("The check takes this state in case the inventory cannot be "
"updated because of any possible reason. A common use is "
"setting this to OK for workstations that can be switched "
"off - so you will get no notifications in that case."),
default_value=1,
)),
("status_data_inventory",
DropdownChoice(
title=_("Status data inventory"),
help=_("All hosts configured via this ruleset will do a hardware and "
"software inventory after every check cycle if there's at least "
"one inventory plugin which processes status data. "
"<b>Note:</b> in order to get any useful "
"result for agent based hosts make sure that you have installed "
"the agent plugin <tt>mk_inventory</tt> on these hosts."),
choices=[
(True, _("Do status data inventory")),
(False, _("Do not status data inventory")),
],
default_value=True,
)),
]),
title=_("Do hardware/software Inventory"),
help=_("All hosts configured via this ruleset will do a hardware and "
"software inventory. For each configured host a new active check "
"will be created. You should also create a rule for changing the "
"normal interval for that check to something between a couple of "
"hours and one day. "
"<b>Note:</b> in order to get any useful "
"result for agent based hosts make sure that you have installed "
"the agent plugin <tt>mk_inventory</tt> on these hosts."),
forth=lambda x: x is not None and x or {}, # convert from legacy None
)
@rulespec_registry.register
class RulespecInvExportsSoftwareCsv(HostRulespec):
@property
def group(self):
return RulespecGroupInventory
@property
def name(self):
return "inv_exports:software_csv"
@property
def valuespec(self):
return Dictionary(
title=_("Export List of Software packages as CSV file"),
elements=[
("filename",
TextAscii(
title=_(
"Export file to create, containing <tt>&ly;HOST></tt> for the hostname"
),
help=
_("Please specify the path to the export file. The text <tt><HOST></tt> "
"will be replaced with the host name the inventory has been done for. "
"If you use a relative path then that will be relative to Check_MK's directory "
"for variable data, which is <tt>%s</tt>.") % cmk.utils.paths.var_dir,
allow_empty=False,
size=64,
default_value="csv-export/<HOST>.csv",
)),
("separator",
TextAscii(
title=_("Separator"),
allow_empty=False,
size=1,
default_value=";",
)),
("quotes",
DropdownChoice(
title=_("Quoting"),
choices=[
(None, _("Don't use quotes")),
("single", _("Use single quotes, escape contained quotes with backslash")),
("double", _("Use double quotes, escape contained quotes with backslash")),
],
default_value=None,
)),
("headers",
DropdownChoice(
title=_("Column headers"),
choices=[
(False, _("Do not add column headers")),
(True, _("Add a first row with column titles")),
],
default_value=False,
)),
],
required_keys=["filename"],
)
@rulespec_registry.register
class RulespecInvParametersInvIf(HostRulespec):
@property
def group(self):
return RulespecGroupInventory
@property
def name(self):
return "inv_parameters:inv_if"
@property
def match_type(self):
return "dict"
@property
def valuespec(self):
return Dictionary(
title=_("Parameters for switch port inventory"),
elements=[
("unused_duration",
Age(
title=_("Port down time until considered unused"),
help=_(
"After this time in the state <i>down</i> a port is considered unused."),
default_value=30 * 86400,
)),
("usage_port_types",
DualListChoice(
title=_("Port types to include in usage statistics"),
choices=defines.interface_port_types(),
autoheight=False,
rows=40,
enlarge_active=False,
custom_order=True,
default_value=[
'6', '32', '62', '117', '127', '128', '129', '180', '181', '182', '205',
'229'
],
)),
])