From 87c1939033b4dc07a3a0fd943b8523531e3409a3 Mon Sep 17 00:00:00 2001
From: "Th.L" <thl-cmk@outlook.com>
Date: Thu, 18 Mar 2021 16:29:11 +0100
Subject: [PATCH] update project

---
 agent_based/cisco_asa_sensors.py |   6 +-
 cisco_asa_sensors.mkp            | Bin 3935 -> 2304 bytes
 packages/cisco_asa_sensors       |   6 +-
 web/plugins/metrics/fan_speed.py |  36 --------
 web/plugins/wato/fan_speed.py    | 153 -------------------------------
 5 files changed, 5 insertions(+), 196 deletions(-)
 delete mode 100644 web/plugins/metrics/fan_speed.py
 delete mode 100644 web/plugins/wato/fan_speed.py

diff --git a/agent_based/cisco_asa_sensors.py b/agent_based/cisco_asa_sensors.py
index 240f9e3..5941c7c 100644
--- a/agent_based/cisco_asa_sensors.py
+++ b/agent_based/cisco_asa_sensors.py
@@ -202,10 +202,10 @@ def check_cisco_asa_fan(item, params: TempParamType, section) -> CheckResult:
 
         yield from check_levels(
             sensor.value,
-            label='Fan speed',
+            label='Speed',
             levels_lower=params.get('levels_lower', None),
             levels_upper=params.get('levels_upper', None),
-            metric_name='fan_speed',
+            metric_name='fan' if params.get('output_metrics') else None,
             render_func=lambda v: render_rpm(v),
         )
 
@@ -220,7 +220,7 @@ register.check_plugin(
     discovery_function=discovery_cisco_asa_fan,
     check_function=check_cisco_asa_fan,
     check_default_parameters={},
-    check_ruleset_name='fan_speed'
+    check_ruleset_name='hw_fans'
 )
 
 
diff --git a/cisco_asa_sensors.mkp b/cisco_asa_sensors.mkp
index d8eafac38fe111963df4503988fe0344c3373ea1..be322d4201e6b0e74a74ea4dfc82a3d2d3506904 100644
GIT binary patch
delta 2287
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
Jhg<+q008dMYQz8l

delta 3931
zcmV-h52Wyb65k#MABzYGk7JPrD}P*jZ`(K$@89_pyaa{pJx8&eS8KorWYcUf*ft6B
zxMGnr1X`wTZDdI+QcjH`-~DDtJt$dr+-;J!2Tg%m5{E-_IP>H171tjHub!FOKnHt!
z@)xN5Yqj?eUs-$Y&fdX+bzmL7f-lzY-Ye36^#T-gK_jTjQ#4X<+)qMZ41XGnNe~%b
zVu*>i?M&}(spto>@Pgp(b{L4h6HJZP1~G<=JCPd-H}H}Bdg5{tdhyuxi4*vOx;`h)
zggJMdjDm<9yW9!L(bW+dQNKk5n}#f+B90g_Hb{vK>JLd6+_Q-AI1Ih{e|=SEaPNBo
z9oli^VWATtLf+lkNvdj2f`3p1W)O`f_sI1a2R3NbnEApUP|k+%erq^b8JluybLR6P
z;$}EE`YpX4#yuNIUezYPGi4%j9litAw|U6e5c9Mas*YLHEca9dMgIN+R?MeUhSguF
zhOD+9PwlkoyZAx4!jt^D4zD!+8H;$*37vMwYVTTa>{;7vo0gtzPJdnBj@VzZ8%ZS?
z9pGpeI6~^&fu@$E#+(j3X2-s8QTJzo&mLaY^#4UJ;J^7N5B%?k|Lwzry%PQdwQKx;
z5&Yj&_`lgDo6GTkvqd&F_($e%fd56Tm-02J#{!l@Ju*wU1TLt4j`Z+;yIF<wn|;Uv
z@Gcov!8?jxishSt<$q)op&YBXP!8smz>TR3z>TR1uwr@%x3$y)Y)e)IW}P8L?aD+Q
zw1L5oJr66Ljxg|Pw*car`b>0$m-qk99zJLO-+}K|r_<iA{r@GX%3YqZ|E<HlL-o7A
zpQy^(KeReo|99HE(Eoc@=kO)_pO9CB*!6}h_#R9DNongJJAW~cb_TA$!~7Wu=P(%f
zyBk|%`<HFN^`YyJyCfE)?Kk*kV+&F~xDJ>K>yr0pH{?C@0oFZo5f41qNz=%zBUz8+
z*wQ7-M;2hZx%>bzbeAjzeBgOU1w$Uh&F%K?w)IBJ{}}kLC=53GIFnek<P<nu$>E8>
zgTy-$`0$w#D1VCpj;ho!Z~+fdih7rsRjHlr&VH9f>^^d#GIEUj_&enMEO|Jch8~pZ
zPs4la-4(tu2S-i#0ADvoQ7|Q99)f0xI}L+KkdHLP*A{u_I-&(i<naG>40&7R491(G
zd`_~O8f4ovbj_J%f;eUm*@&kS8*-ZR4%Gr9!~Bx**nbmh?sAOH(m!0mIOvbBaolKa
zG?$lBlpV1#RFg%C3>M9x>(vVkUex32SuaQ`)b`knrKwi}`Zakx`*?93vE&V%Qt*3M
zOw>E|JUbXA&;DFKLsdbgThC6)lEJpFPd;9pTpnHDT%M3$kFHK+!V8qYvEg`>b7kd6
zoT`wbk$+o8vnv%dqh1VdIf5ukq*@d)?-DTS?43byL5JAcU3ib=_ZYlLy=`oO6_Joe
zoY@OQLxW38v4zTwW_qg`PrpgF|0PXWRR<-FnXrqcf)H7hWQN~vHldb$ob<?-!W`SM
zaC&-vSDJbo9sC^obVgkd1((xzG2IXRK;i-TAAj{UmWS*qVgMF?Qo0EhZlL#Z0p?X`
zh17wqR9a|+G~)G|Az97y-z%D;l0F?>o>jC%B_3a%Ua#GNJWJA$q!SAjGa$aj^^%9Y
zOarm6{7pvd+Q$ba5;0JT#i+QIJR=yT&(b8*7p1%O4UG=)3M-yl)or_<YtkJRGMX+Q
zx_@I=G@9LlhKlwD?W;06O-{3zTT4mv7Q4ETb+K~TT+-_i;|(Z?Y?14H1ga<q6$QoQ
zFJ{C-k2<VjT<a@jEn*m2X<AKhRS)&eI2=M78((r+-7-WhELO?>=!w8~0E1m<odk=9
z)>+L$|1=lZyYPEYV_D=-y6P1=y^<;KpnqQRwaDIlSgCibtrY(o^}kNxkYTl=(L26H
z&w#r{)&2y^>?mbkX!G;0)2hn3Qm+b5{+?!^O&=+YCPCxIMjGLm7}MEF5T`1HRqa);
z<^rkVa}@hBM{mh!s(43CIFsIOR;4ryDmEO$u%2OB=B{}F|95bu7ka6{6SzaJ34hA4
zd+!i(sDFnt7dbh*KE3{9`{U`a-7W-q7n3=69qM5`v6%hs+cbM2^VP}O)%m3^Lv`3S
z7}5$Mdus{#4|>ZADf??lIR`Yok_NIu)WKS!ZqPR&ng$audP6^ZOPo8|Qy4M<_R`D4
z*hZoE<i9rhh%^fVh8YTXCZ`H9On)!t1ZD)DOMQod6E$Br&Q)5t(&OD13w71xBNnd5
zO?@s`n0u&+gqEz7jsxfgjp!7OP<_frIyGOwXl|I!iZq`@S&hWSyE2ANg4x0Zs+&bU
zcWf?07nLI&lJmG^?lNzf&Wai^U!3+JOA}44h4=uj2FSvDUku8}XH1-qu77Zq5wJHE
ziFx{FA@w0`fogxL_Lw1&4IzI~7pYX)C~X3$DlDS87QRY@m)Krto2t-8sf9{RLjr7q
z$z~Sj#nUN`<~`#onTEXP26;_1t{jt_Wx>)87W%nSF`k$z#w?@^+0534Rui8WISNCG
zSv8jAT(*S#%DNY`s1E3<pMPQ!)Z(w0*~#Eh(TAqeknG7ESk#>Qv%^9`erNNOC<?S$
zQwTFdeXvq;)gpHFU?uxAnPw{kO{$~^ps#txBFzAXmWuH%MZ3(SvO#Z|lj$n~8FQ5`
zbVjgw3T9^Oj`N^1M6t&>MDD5`n!y+^ze<pz=Wj=6FNT^33K8>%EPt}2aN1DOW?_Pz
zL^sB3PA)G#N<S1)!ngt#Ap-suSd;<u_d-Ri`?G<fY}xn2M74;vE*yGvz`UNE@5s%p
z(o%^MW_uWwC%`3_5ez*6f)zXg(5%b~(}e1*GNC%F+J8%2Hrr<_RV^`UM2enAr-LCS
zvu?rEn>tcHHB@3RSAQWTYVtV{61Pg%0mu^HSK?!??C*z;7w4Z&F3Hu+#l?p|UKA#)
z)Gp_v--2_=g!X$OovQz{VO`R?7eTuxbY4~MD)&`O6wl$nvdpzyc!6_;6K_?zv6Nt|
zB^vPL`YcmTHPuv8O*Pe2Q%#T4JsUjRxzE3U{<FQ`IjGNnzJCO*It~3Y=Rez)b+DiG
z|9-o@e*pczzu(@i&wu`q=RegB9iGn|$FAvGZ~Sy`&Mu`Tre!9kRouc$R{!w&iJIe%
zBN|S$_mD-SK+c2ZM_j4W^4xA_hPv6$jx=TG@9oBBw%ECutPpPECJ>&PkHYC@^2rH2
zb@jnI*rD+8VSi&Iug9&nP?ndGUCy!_+Jb6QhLN-t?~!FI7Y%)NlNdB&)F|#28{DBD
zjh1HXI*}_NFBFMSYSq<fYD=Fw^F57x#f(oSW+)L`S<<da!;tyIM%u)AD6gM+!I(mM
zld0<%g$80`dCAt8P;X?*)n`aP1XniONecTM20rrze1GqNlIx|49}oW*Zo53s_+NGY
zfA65Zfd6f)Q{(@Si2vj`2<MSIo&b;^H%X^$y(NGM1J-#<-cJYrCfjS@4<Pai8D2}m
zBl#hPu^||##p&rCX{6Ty9QDC;f@#wvrvjOIJouA2f`~w#;0G9+a=casLY=@Lx^g)e
zkM6oY8-L<TJ#xvCj?XXtI6ZscBKH&5ndk+}8v;CtBZpzb8A<M0nJb69LXreOa3H6A
z3|}q*(`c^n@Ld#yc-!rG5@cuQf5UT_>haVUY@DtQU$f8Rh&!&EyhhaLqaaGo2dFy&
zFg8{Wyy(-#nq1-nGSu&V6vUy_^hLJXeB#gCD1Y#$fYaJVfh;}E`U%E^)9ipklzg?-
zx;(Z}Z7H3xd%XCkhDXUJH%_LYSQwKqCAljoCRC6KoiXeqyfdM;ALN0=1~bPdF^(^8
zaNs<iP|jTrk4!jblTa?ZbpR#%KHjE~oygn>q~KPCmYrCd0Ad~PSe60CBn|N1^*oZC
zUVp@U1|$F>D5F??&eUn;QH<vbOmY?oh8J4`u;x*rv8rM6&IvSa7?5B5K>R{tjyE6G
z;SS;>BlOMyZOxytNT_#Yf}xUdXphIThR7<RJYVgknsOT`-zu;(%PX9gX%_bWGuz3x
zjdROvFppu^myZxG9>7etb}MeeR}@f4Mt@_iPLi8Y7+3WmYPrEZV@;nQRC&$T(yUAB
zUMA^djjWtc5FMe}Pyw>lN!-}L!x1Y=st|Jw5fUDs{3<#9>ZBz(K&N7o?tf!rd6y(7
zx8>VyyALJnAFO_}LRRTh>2+yWrw0I@tHVFY?YNig@BxDcJx!l~rKlgJ+Y9eoFn@a(
zGPymP^f%zl&;w1Cx_qlVbT!J!g>J=hED8a9<n5aTorx;R-~^-;Z|liD;<EM<p^hxC
z+}~T8@fr}us9DeH*bkyoK?!CxtEDRekU<GJ_r1A9;!H$xXN|Z@^c<puM}!R+PiAa4
zAjo5s3*w|!1FAp~@*;exjMY-_@qfsBE_NC`iBw=tHlK6RB>{L-0J@T6aG(ardzY`J
z2<Vmt;j)@}w=5B^Tg$RC`jubPt#ow@qfmu1`=Z<`qc#K{IkF)H4P(KKszSA)bcr%D
z$GApeL<y6=VJubP5}?~E_;<qqCvt<K(OSWjhLw#~JcVkW5Af84a$Z${41eKroEGc1
zLpxEccg=45(F{}9SG@a=vPukwibEFYCH_clnk$nVNtag!J6n&AbF1{KhBv%@oU79H
zod__3p`sIIuc6GftmCT<V4=c=Kxy6F`G81vh(Z2|zQ1<Es;y;zt$gcA|J%wahI`*p
z8&-Qgbv(w@e=;wrj1!;USAT}A_LbUKep+7<?i6fsB%aPs9^)$bkz6l>DiEv#k$)$M
z&^(9)H%tAjArEg881kiGH*v8H9M75H!QscW`NKIR#F*)1?W+uN?Ra9j^>y~zKa@9q
zM^#vzr&7gZuDB$1X|^C#e<Q-aV{<$STnzt6<v>TuE?p^op)J~net%1QDa`k0UGO*8
zhgq=?6YW`x2>F*j<m~QCx(3%Jvj=q0nG%9auL~=(W_o10vBs)yZdK~U@fa71SKQH%
z>AkO7R+jh9p(vD<Uh3%P>)iPwi@JJCPTxJYIFr(Zd7+$N0mQjOD9|0b2w-aAArByu
z^XG**<&+9%V&kfF&rBG?R8DJS#VTv>v8C5Mw`xw>%&JY}X1yO;Q%yD1R8vhg)l^eW
pHPuv8O*Pe2Q%yD1R8vhg)l^eWHPuv8O*MTB{SUt7vHSpd001rnk)Qwo

diff --git a/packages/cisco_asa_sensors b/packages/cisco_asa_sensors
index 2a3a13a..e89a24e 100644
--- a/packages/cisco_asa_sensors
+++ b/packages/cisco_asa_sensors
@@ -2,11 +2,9 @@
  'description': 'This plugin contains checks for Cisco ASA fan, temperature '
                 'and power supply\n',
  'download_url': 'https://thl-cmk.hopto.org',
- 'files': {'agent_based': ['cisco_asa_sensors.py'],
-           'web': ['plugins/metrics/fan_speed.py',
-                   'plugins/wato/fan_speed.py']},
+ 'files': {'agent_based': ['cisco_asa_sensors.py']},
  'name': 'cisco_asa_sensors',
- 'num_files': 3,
+ 'num_files': 1,
  'title': 'Cisco ASA Sensors',
  'version': '20210318_v0.0.1',
  'version.min_required': '2.0.0',
diff --git a/web/plugins/metrics/fan_speed.py b/web/plugins/metrics/fan_speed.py
deleted file mode 100644
index 3180bcd..0000000
--- a/web/plugins/metrics/fan_speed.py
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-#
-
-from cmk.gui.i18n import _
-
-from cmk.gui.plugins.metrics import (
-    metric_info,
-    graph_info,
-    perfometer_info
-)
-
-metric_info["fan_speed"] = {
-    "title": _("Fan speed"),
-    "unit": "rpm",
-    "color": "16/a",
-}
-
-graph_info['fan_speed'] = {
-    'title': _('Fan speed'),
-    'metrics': [
-        ('fan_speed', 'area'),
-    ],
-    'scalars': [
-        ('fan_speed:crit', _('crit level')),
-        ('fan_speed:warn', _('warn level')),
-    ],
-
-}
-
-perfometer_info.append({
-    'type': 'logarithmic',
-    'metric': 'fan_speed',
-    'half_value': 7500.0,
-    'exponent': 2,
-})
\ No newline at end of file
diff --git a/web/plugins/wato/fan_speed.py b/web/plugins/wato/fan_speed.py
deleted file mode 100644
index b3ff082..0000000
--- a/web/plugins/wato/fan_speed.py
+++ /dev/null
@@ -1,153 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-# Copyright (C) 2019 tribe29 GmbH - License: GNU General Public License v2
-# This file is part of Checkmk (https://checkmk.com). It is subject to the terms and
-# conditions defined in the file COPYING, which is part of this source code package.
-
-from cmk.gui.i18n import _
-from cmk.gui.valuespec import (
-    Dictionary,
-    DropdownChoice,
-    Float,
-    Integer,
-    TextAscii,
-    Transform,
-    Tuple,
-)
-from cmk.gui.plugins.wato import (
-    RulespecGroupCheckParametersEnvironment,
-    CheckParameterRulespecWithItem,
-    rulespec_registry,
-)
-
-
-# New fan speed rule for modern fan checks that have the
-# sensor type (e.g. 'CPU', 'Chassis', etc.) as the beginning of their
-# item (e.g. 'CPU 1', 'Chassis 17/11'). This will replace all other
-# fan speed rulesets in future. Note: those few fan speed checks
-# that do *not* use an item, need to be converted to use one single
-# item (other than None).
-def _parameter_valuespec_temperature():
-    return Transform(
-        Dictionary(elements=[
-            (
-                'levels',
-                Transform(
-                    Tuple(
-                        title=_('Upper fan speed Levels'),
-                        elements=[
-                            Float(title=_('Warning at'), unit=u'RPM'),
-                            Float(title=_('Critical at'), unit=u'RPM'),
-                        ],
-                    ),
-                    forth=lambda elems: (float(elems[0]), float(elems[1])),
-                ),
-            ),
-            (
-                'levels_lower',
-                Transform(
-                    Tuple(
-                        title=_('Lower fan speed Levels'),
-                        elements=[
-                            Float(title=_('Warning below'), unit=u'RPM'),
-                            Float(title=_('Critical below'), unit=u'RPM'),
-                        ],
-                    ),
-                    forth=lambda elems: (float(elems[0]), float(elems[1])),
-                ),
-            ),
-
-            # ('device_levels_handling',
-            #  DropdownChoice(
-            #      title=_('Interpretation of the device's own temperature status'),
-            #      choices=[
-            #          ('usr', _('Ignore device's own levels')),
-            #          ('dev', _('Only use device's levels, ignore yours')),
-            #          ('best', _('Use least critical of your and device's levels')),
-            #          ('worst', _('Use most critical of your and device's levels')),
-            #          ('devdefault', _('Use device's levels if present, otherwise yours')),
-            #          ('usrdefault', _('Use your own levels if present, otherwise the device's')),
-            #      ],
-            #      default_value='usrdefault',
-            #  )),
-            # (
-            #     'trend_compute',
-            #     Dictionary(
-            #         title=_('Trend computation'),
-            #         elements=[
-            #             ('period',
-            #              Integer(
-            #                  title=_('Observation period for fan speed trend computation'),
-            #                  default_value=30,
-            #                  minvalue=5,
-            #                  unit=_('minutes'),
-            #              )),
-            #             ('trend_levels',
-            #              Tuple(
-            #                  title=_('Levels on fan speed increase per period'),
-            #                  elements=[
-            #                      Integer(
-            #                          title=_('Warning at'),
-            #                          unit=u'RPM / ' + _('period'),
-            #                          default_value=5,
-            #                      ),
-            #                      Integer(
-            #                          title=_('Critical at'),
-            #                          unit=u'RPM / ' + _('period'),
-            #                          default_value=10,
-            #                      )
-            #                  ],
-            #              )),
-            #             ('trend_levels_lower',
-            #              Tuple(
-            #                  title=_('Levels on fan speed decrease per period'),
-            #                  elements=[
-            #                      Integer(
-            #                          title=_('Warning at'),
-            #                          unit=u'RPM / ' + _('period'),
-            #                          default_value=5,
-            #                      ),
-            #                      Integer(
-            #                          title=_('Critical at'),
-            #                          unit=u'RPM / ' + _('period'),
-            #                          default_value=10,
-            #                      )
-            #                  ],
-            #              )),
-            #             ('trend_timeleft',
-            #              Tuple(
-            #                  title=
-            #                  _('Levels on the time left until a critical fann speed (upper or lower) is reached'
-            #                   ),
-            #                  elements=[
-            #                      Integer(
-            #                          title=_('Warning if below'),
-            #                          unit=_('minutes'),
-            #                          default_value=240,
-            #                      ),
-            #                      Integer(
-            #                          title=_('Critical if below'),
-            #                          unit=_('minutes'),
-            #                          default_value=120,
-            #                      ),
-            #                  ],
-            #              ))
-            #         ],
-            #         optional_keys=['trend_levels', 'trend_levels_lower', 'trend_timeleft'],
-            #     ),
-            # ),
-        ],),
-        forth=lambda v: isinstance(v, tuple) and {'levels': v} or v,
-    )
-
-
-rulespec_registry.register(
-    CheckParameterRulespecWithItem(
-        check_group_name='fan_speed',
-        group=RulespecGroupCheckParametersEnvironment,
-        item_spec=lambda: TextAscii(title=_('Sensor ID'),
-                                    help=_('The identifier of the fan speed sensor.')),
-        match_type='dict',
-        parameter_valuespec=_parameter_valuespec_temperature,
-        title=lambda: _('Fan speed'),
-    ))
\ No newline at end of file
-- 
GitLab