diff options
author | Alexander Shubin <aleksandrs.subins@zabbix.com> | 2022-07-12 08:43:22 +0300 |
---|---|---|
committer | Alexander Shubin <aleksandrs.subins@zabbix.com> | 2022-07-12 08:43:22 +0300 |
commit | f5d9f3f7f582f547d0e703a35c91ec88e5b02ff6 (patch) | |
tree | 6f370c048cfd4ae7cbe2a313718e19537f533a8a | |
parent | bf2ee5b9cc17afa80f960e2931f3cc4251bbd98a (diff) | |
parent | b3b292fb126dd85d451db9d1555b524c767b25d8 (diff) |
.......... [ZBX-20908] updated to latest release/6.0; no conflicts
74 files changed, 9927 insertions, 547 deletions
diff --git a/.github/workflows/sonarcloud.yml b/.github/workflows/sonarcloud.yml index 477445f0e25..15987f99473 100644 --- a/.github/workflows/sonarcloud.yml +++ b/.github/workflows/sonarcloud.yml @@ -38,6 +38,7 @@ jobs: - name: Download and compile Zabbix run: | + sudo apt-get update sudo apt-get install libsnmp-dev snmp libopenipmi-dev libevent-dev libcurl4-openssl-dev cd $GITHUB_WORKSPACE sh bootstrap.sh diff --git a/ChangeLog b/ChangeLog index 5e1b0aa7a0a..78e18be661a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,9 +1,30 @@ Changes for 6.0.7rc1 New features: +.........T [ZBXNEXT-7802] added namespaces in templates HashiCorp Consul by HTTP (ychukina) .........T [ZBXNEXT-6300] added checksum failure triggers to PostgreSQL by Zabbix agent 2 template (drasihov) Bug fixes: +..F....... [ZBX-21125] fixed incorrect filter results with empty multiselect fields in Monitoring Problems (dpetra) +..F....... [ZBX-18957] fixed not displaying years on X axis of classic graphs (averza) +..F....... [ZBX-20978] fixed trigger popover layout error in high-contrast themes (dpetra) +..F....... [ZBX-20682] fixed unexpected tab being opened in item configuration after saving the host in popup (agriscenko) +..F....... [ZBX-20196] fixed 'undefined' error in case of broken widget configuration (epulke) +..F....... [ZBX-20854] fixed missing headers in Columns field in Top hosts widget configuration form (dpetra) +.........T [ZBX-21172] fixed host group names and added IPv6 support in Templates Kubernetes by HTTP (ychukina) +..F....... [ZBX-20965] fixed positioning of change indicator in Item value widget (dpetra) +..F....... [ZBX-21259] fixed API token expiration date field is always visible in User Settings->API tokens (esekace) +..F....... [ZBX-20629] fixed auto refreshing for graphs on Monitoring -> Hosts page (rdetlavs) +.........T [ZBX-19955] fixed script item in cloudflare template (vkhaliev) +..F....... [ZBX-18534] fixed name autocomplete when select element has been selected in map navigation tree (dpetra) +..F....... [ZBX-20584] fixed possibility to open graph in a full screen from graph widget (Sasha) +.......PS. [ZBX-20888] improved out of memory error message readability (vso) +.D........ [ZBX-21020] improved "ServerActive" configuration option description (vso) +.......PS. [ZBX-20855] fixed preprocessing not to discard event log specific data (vso) +..F....... [ZBX-20496] fixed delete missing import option for templated dashboards (rlataria) +..F....... [ZBX-20591] fixed draggable block position in preprocessing (rlataria) +...G...PS. [ZBX-21086] fixed regexp matching not to check for UTF-8 validity (vso) +..F....... [ZBX-20781] fixed overlapping of subfilter options (miks) .........T [ZBX-20473] fixed evaluation period macro in disk space triggers for NetApp FAS3220 template (drasihov) .........T [ZBX-19205] fixed item preprocessing in PostgreSQL by Zabbix agent 2 template (drasihov) A.F.....S. [ZBX-20743] fixed error handling in compression with Apache licensed TimescaleDB 2.x (agriscenko, mprihodko) @@ -1975,6 +1996,8 @@ New features: .........T [ZBXNEXT-6300] added checksum failure triggers to PostgreSQL by Zabbix agent 2 template (drasihov) Bug fixes: +..F....... [ZBX-18957] fixed not displaying years on X axis of classic graphs (averza) +.D........ [ZBX-21020] improved "ServerActive" configuration option description (vso) .........T [ZBX-20473] fixed evaluation period macro in disk space triggers for NetApp FAS3220 template (drasihov) ....I....T [ZBX-19205] fixed item preprocessing in PostgreSQL by Zabbix agent 2 template, removed duplicate PostgreSQL templates from templates.tmpl (drasihov) ........S. [ZBX-20743] fixed error handling in compression with Apache licensed TimescaleDB 2.x (mprihodko) diff --git a/ChangeLog.d/bugfix/ZBX-20203 b/ChangeLog.d/bugfix/ZBX-20203 new file mode 100644 index 00000000000..74d2bb55499 --- /dev/null +++ b/ChangeLog.d/bugfix/ZBX-20203 @@ -0,0 +1 @@ +...G...... [ZBX-20203] fixed agent2 log* item large file support on windows (wiper) diff --git a/ChangeLog.d/bugfix/ZBX-20467 b/ChangeLog.d/bugfix/ZBX-20467 new file mode 100644 index 00000000000..38d271c9e18 --- /dev/null +++ b/ChangeLog.d/bugfix/ZBX-20467 @@ -0,0 +1 @@ +..F....... [ZBX-20467] fixed z-select options with long labels (rlataria) diff --git a/ChangeLog.d/bugfix/ZBX-20667 b/ChangeLog.d/bugfix/ZBX-20667 new file mode 100644 index 00000000000..dd4c74b4086 --- /dev/null +++ b/ChangeLog.d/bugfix/ZBX-20667 @@ -0,0 +1 @@ +...G...... [ZBX-20667] fixed timeout issue for Agent 2 checks in test run mode (ssimonenko) diff --git a/ChangeLog.d/bugfix/ZBX-20781 b/ChangeLog.d/bugfix/ZBX-20781 deleted file mode 100644 index 6d36dc41d78..00000000000 --- a/ChangeLog.d/bugfix/ZBX-20781 +++ /dev/null @@ -1 +0,0 @@ -..F....... [ZBX-20781] fixed overlapping of subfilter options (miks) diff --git a/ChangeLog.d/bugfix/ZBX-20880 b/ChangeLog.d/bugfix/ZBX-20880 new file mode 100644 index 00000000000..db37413de32 --- /dev/null +++ b/ChangeLog.d/bugfix/ZBX-20880 @@ -0,0 +1 @@ +........S. [ZBX-20880] changed HA cluster node discovery to return empty array in standalone mode (wiper) diff --git a/ChangeLog.d/bugfix/ZBX-20962 b/ChangeLog.d/bugfix/ZBX-20962 new file mode 100644 index 00000000000..afb63b232cd --- /dev/null +++ b/ChangeLog.d/bugfix/ZBX-20962 @@ -0,0 +1 @@ +........S. [ZBX-20962] improved error message when trying to use foreach function with single item query (wiper) diff --git a/ChangeLog.d/bugfix/ZBX-21157 b/ChangeLog.d/bugfix/ZBX-21157 new file mode 100644 index 00000000000..004cefafe9f --- /dev/null +++ b/ChangeLog.d/bugfix/ZBX-21157 @@ -0,0 +1 @@ +..F....... [ZBX-21157] fixed warning message overlaying error message when cloning a host (agriscenko) diff --git a/ChangeLog.d/bugfix/ZBX-21159 b/ChangeLog.d/bugfix/ZBX-21159 new file mode 100644 index 00000000000..942178ab940 --- /dev/null +++ b/ChangeLog.d/bugfix/ZBX-21159 @@ -0,0 +1 @@ +........S. [ZBX-21159] improved logging in the case of permission errors during HA startup (wiper) diff --git a/ChangeLog.d/feature/ZBXNEXT-7633 b/ChangeLog.d/feature/ZBXNEXT-7633 new file mode 100644 index 00000000000..8479fb2edd6 --- /dev/null +++ b/ChangeLog.d/feature/ZBXNEXT-7633 @@ -0,0 +1 @@ +.........T [ZBXNEXT-7633] added HPE Synergy template (vkhaliev) diff --git a/conf/zabbix_agentd.conf b/conf/zabbix_agentd.conf index 0f065f7c715..0196f46d488 100644 --- a/conf/zabbix_agentd.conf +++ b/conf/zabbix_agentd.conf @@ -140,12 +140,18 @@ Server=127.0.0.1 ##### Active checks related ### Option: ServerActive -# List of comma delimited IP addresses or DNS names (address:port) pairs or clusters (address:port;address2:port) of Zabbix servers and Zabbix proxies for active checks. +# Zabbix server/proxy address or cluster configuration to get active checks from. +# Server/proxy address is IP address or DNS name and optional port separated by colon. +# Cluster configuration is one or more server addresses separated by semicolon. +# Multiple Zabbix servers/clusters and Zabbix proxies can be specified, separated by comma. +# More than one Zabbix proxy should not be specified from each Zabbix server/cluster. +# If Zabbix proxy is specified then Zabbix server/cluster for that proxy should not be specified # If port is not specified, default port is used. -# Cluster nodes need be separated by semicolon. # IPv6 addresses must be enclosed in square brackets if port for that host is specified. # If port is not specified, square brackets for IPv6 addresses are optional. # If this parameter is not specified, active checks are disabled. +# Example for Zabbix proxy: +# ServerActive=127.0.0.1:10051 # Example for multiple servers: # ServerActive=127.0.0.1:20051,zabbix.domain,[::1]:30051,::1,[12fc::1] # Example for HA: diff --git a/conf/zabbix_agentd.win.conf b/conf/zabbix_agentd.win.conf index 1079fca87dd..11b5079a7d5 100644 --- a/conf/zabbix_agentd.win.conf +++ b/conf/zabbix_agentd.win.conf @@ -132,12 +132,18 @@ Server=127.0.0.1 ##### Active checks related ### Option: ServerActive -# List of comma delimited IP addresses or DNS names (address:port) pairs or clusters (address:port;address2:port) of Zabbix servers and Zabbix proxies for active checks. +# Zabbix server/proxy address or cluster configuration to get active checks from. +# Server/proxy address is IP address or DNS name and optional port separated by colon. +# Cluster configuration is one or more server addresses separated by semicolon. +# Multiple Zabbix servers/clusters and Zabbix proxies can be specified, separated by comma. +# More than one Zabbix proxy should not be specified from each Zabbix server/cluster. +# If Zabbix proxy is specified then Zabbix server/cluster for that proxy should not be specified # If port is not specified, default port is used. -# Cluster nodes need be separated by semicolon. # IPv6 addresses must be enclosed in square brackets if port for that host is specified. # If port is not specified, square brackets for IPv6 addresses are optional. # If this parameter is not specified, active checks are disabled. +# Example for Zabbix proxy: +# ServerActive=127.0.0.1:10051 # Example for multiple servers: # ServerActive=127.0.0.1:20051,zabbix.domain,[::1]:30051,::1,[12fc::1] # Example for HA: diff --git a/include/common.h b/include/common.h index 5173482c53d..8210a43410e 100644 --- a/include/common.h +++ b/include/common.h @@ -1367,6 +1367,8 @@ zbx_uint64_t suffix2factor(char c); typedef struct __stat64 zbx_stat_t; int __zbx_stat(const char *path, zbx_stat_t *buf); int __zbx_open(const char *pathname, int flags); +#elif defined(__MINGW32__) +typedef struct _stat64 zbx_stat_t; #else typedef struct stat zbx_stat_t; #endif /* _WINDOWS */ diff --git a/include/db.h b/include/db.h index 1279b832589..8760e4a632a 100644 --- a/include/db.h +++ b/include/db.h @@ -898,8 +898,6 @@ ZBX_PTR_VECTOR_DECL(db_tag_ptr, zbx_db_tag_t *) zbx_db_tag_t *zbx_db_tag_create(const char *tag_tag, const char *tag_value); void zbx_db_tag_free(zbx_db_tag_t *tag); -int zbx_db_tag_compare_func(const void *d1, const void *d2); -int zbx_db_tag_compare_func_template(const void *d1, const void *d2); int zbx_merge_tags(zbx_vector_db_tag_ptr_t *dst, zbx_vector_db_tag_ptr_t *src, const char *owner, char **error); diff --git a/include/zbxtypes.h b/include/zbxtypes.h index e39f7602f9d..ba799ab27c0 100644 --- a/include/zbxtypes.h +++ b/include/zbxtypes.h @@ -52,9 +52,6 @@ #if defined(_WINDOWS) # include <strsafe.h> -# define zbx_stat(path, buf) __zbx_stat(path, buf) -# define zbx_fstat(fd, buf) _fstat64(fd, buf) - # ifndef __UINT64_C # define __UINT64_C(x) x # endif @@ -85,9 +82,6 @@ typedef uint32_t zbx_uint32_t; # define strcasecmp lstrcmpiA -typedef __int64 zbx_offset_t; -# define zbx_lseek(fd, offset, whence) _lseeki64(fd, (zbx_offset_t)(offset), whence) - # if defined(__INT_MAX__) && __INT_MAX__ == 2147483647 typedef int ssize_t; # else @@ -95,9 +89,6 @@ typedef long ssize_t; # endif #else /* _WINDOWS */ -# define zbx_stat(path, buf) stat(path, buf) -# define zbx_fstat(fd, buf) fstat(fd, buf) - # ifndef __UINT64_C # ifdef UINT64_C # define __UINT64_C(c) (UINT64_C(c)) @@ -162,10 +153,30 @@ typedef long ssize_t; typedef uint32_t zbx_uint32_t; +#endif /* _WINDOWS */ + +#if defined(_WINDOWS) +# define zbx_stat(path, buf) __zbx_stat(path, buf) +# define zbx_fstat(fd, buf) _fstat64(fd, buf) + +typedef __int64 zbx_offset_t; +# define zbx_lseek(fd, offset, whence) _lseeki64(fd, (zbx_offset_t)(offset), whence) + +#elif defined(__MINGW32__) +# define zbx_stat(path, buf) _stat64(path, buf) +# define zbx_fstat(fd, buf) _fstat64(fd, buf) + +typedef off64_t zbx_offset_t; +# define zbx_lseek(fd, offset, whence) lseek64(fd, (zbx_offset_t)(offset), whence) + +#else +# define zbx_stat(path, buf) stat(path, buf) +# define zbx_fstat(fd, buf) fstat(fd, buf) + typedef off_t zbx_offset_t; # define zbx_lseek(fd, offset, whence) lseek(fd, (zbx_offset_t)(offset), whence) -#endif /* _WINDOWS */ +#endif #define ZBX_FS_DBL "%lf" #define ZBX_FS_DBL_EXT(p) "%." #p "lf" diff --git a/sass/stylesheets/sass/base/_colors.scss b/sass/stylesheets/sass/base/_colors.scss index c45d4c92677..634f9d85c21 100644 --- a/sass/stylesheets/sass/base/_colors.scss +++ b/sass/stylesheets/sass/base/_colors.scss @@ -51,6 +51,7 @@ $font-selected-color: #ffffff !default; $font-alt-color: #768d99 !default; $body-bg-color: #ebeef0 !default; $overlay-bg-color: #ffffff !default; +$overlay-border-color: #ccd5d9 !default; // Main menu $menu-main-color: #ebeef0 !default; diff --git a/sass/stylesheets/sass/components/_z-select.scss b/sass/stylesheets/sass/components/_z-select.scss index 9989a55e908..f88eebf0fb1 100644 --- a/sass/stylesheets/sass/components/_z-select.scss +++ b/sass/stylesheets/sass/components/_z-select.scss @@ -67,8 +67,9 @@ z-select, color: $font-color; text-overflow: ellipsis; word-break: break-word; - white-space: pre-wrap; user-select: none; + white-space: nowrap; + overflow: hidden; &.hover { background-color: $action-hover-color; diff --git a/sass/stylesheets/sass/dark-theme.scss b/sass/stylesheets/sass/dark-theme.scss index f8170f785ba..e55b7500123 100644 --- a/sass/stylesheets/sass/dark-theme.scss +++ b/sass/stylesheets/sass/dark-theme.scss @@ -39,6 +39,7 @@ $font-selected-color: #f2f2f2; $font-alt-color: #737373; $body-bg-color: #0e1012; $overlay-bg-color: #000000; +$overlay-border-color: #383838; // Main menu $menu-main-color: #f2f2f2; diff --git a/sass/stylesheets/sass/hc-dark.scss b/sass/stylesheets/sass/hc-dark.scss index 82c555b63f0..1fe9ce57236 100644 --- a/sass/stylesheets/sass/hc-dark.scss +++ b/sass/stylesheets/sass/hc-dark.scss @@ -42,6 +42,7 @@ $font-selected-color: #ffffff; $font-alt-color: #cacaca; $body-bg-color: #111111; $overlay-bg-color: #222222; +$overlay-border-color: #666666; // Main menu @@ -947,6 +948,18 @@ a.link-action { } } +.overlay-dialogue { + .list-table { + th:first-child { + padding-left: 0px; + } + + td:first-child { + padding-left: 42px; + } + } +} + // Filter checkboxes. .filter-highlight-row-cb { display: none; diff --git a/sass/stylesheets/sass/hc-light.scss b/sass/stylesheets/sass/hc-light.scss index afc3c6a1a82..4f582a93d8d 100644 --- a/sass/stylesheets/sass/hc-light.scss +++ b/sass/stylesheets/sass/hc-light.scss @@ -40,6 +40,7 @@ $font-selected-color: #ffffff; $font-alt-color: #333333; $body-bg-color: #ffffff; $overlay-bg-color: #000000; +$overlay-border-color: #383838; // Main menu $menu-main-color: #ffffff; @@ -836,6 +837,18 @@ a.link-action { } } +.overlay-dialogue { + .list-table { + th:first-child { + padding-left: 0px; + } + + td:first-child { + padding-left: 42px; + } + } +} + // Checkbox disabling. .filter-highlight-row-cb { display: none; diff --git a/sass/stylesheets/sass/screen.scss b/sass/stylesheets/sass/screen.scss index ddf4697a0f5..f0cb3d715da 100644 --- a/sass/stylesheets/sass/screen.scss +++ b/sass/stylesheets/sass/screen.scss @@ -447,7 +447,6 @@ form { box-shadow: inset 0 -1px 0 0 rgba($font-color, .1); color: $font-color; height: 22px; - line-height: 1; vertical-align: middle; white-space: nowrap; @@ -1600,10 +1599,6 @@ input { @extend %form-input-style; } - &[type="checkbox"] { - @extend %form-check-radio-style; - } - &[type="radio"] { @extend %form-check-radio-style; } @@ -1696,6 +1691,35 @@ select { } .checkbox-radio { + position: absolute !important; + top: auto !important; + z-index: 1; + width: 16px !important; + height: 16px !important; + opacity: 0; + + & + label { + span { + position: relative; + display: inline-block; + width: 14px; + height: 14px; + margin-right: 4px; + vertical-align: text-bottom; + background-color: $form-bg-color; + border: 1px solid $form-border-color; + + &:active { + border-color: $form-border-color; + } + } + + &.label-pos-left span { + margin-left: 4px; + margin-right: 0; + } + } + &:checked[readonly] + label span { transition: none; @@ -1706,7 +1730,7 @@ select { &[readonly] { &, - + label { + & + label { pointer-events: none; span { @@ -1717,7 +1741,7 @@ select { } &[type="checkbox"] { - + label span { + & + label span { border-radius: 2px; } @@ -1744,7 +1768,7 @@ select { } &[type="radio"] { - + label span { + & + label span { border-radius: 50%; } @@ -1769,33 +1793,6 @@ select { } } - position: absolute !important; - top: auto !important; - width: 16px !important; - height: 16px !important; - opacity: 0; - z-index: 1; - - + label span { - position: relative; - display: inline-block; - width: 14px; - height: 14px; - margin: -4px 4px 0 0; - bottom: -3px; - border: 1px solid $form-border-color; - background-color: $form-bg-color; - - &:active { - border-color: $form-border-color; - } - } - - + label.label-pos-left span { - margin-left: 6px; - margin-right: 1px; - } - &:focus + label span { border-color: $form-border-focus-color; } @@ -2942,8 +2939,8 @@ $form-icon-btn: ( min-width: 166px; max-width: 250px; background-color: $ui-bg-color; - border: 1px solid $action-border-color; - border-bottom-color: darken($action-border-color, 1%); + border: 1px solid $overlay-border-color; + border-bottom-color: darken($overlay-border-color, 1%); box-shadow: 0 4px 20px 0 $action-shadow-color; &:focus { @@ -3037,8 +3034,8 @@ $form-icon-btn: ( width: 12px; height: 12px; background-color: $ui-bg-color; - border-top: 1px solid $action-border-color; - border-left: 1px solid $action-border-color; + border-top: 1px solid $overlay-border-color; + border-left: 1px solid $overlay-border-color; transform: rotate(45deg); } } @@ -3049,8 +3046,8 @@ $form-icon-btn: ( z-index: 1000; padding: 15px 10px 10px; background-color: $ui-bg-color; - border: 1px solid $action-border-color; - border-bottom-color: darken($action-border-color, 1%); + border: 1px solid $overlay-border-color; + border-bottom-color: darken($overlay-border-color, 1%); box-shadow: 0 4px 20px 0 $action-shadow-color; &.modal { @@ -4455,7 +4452,7 @@ span { .menu-popup-preloader, .hintbox-preloader { background: $preloader-bg-color; - border: 1px solid $action-border-color; + border: 1px solid $overlay-border-color; box-shadow: 0 4px 20px 0 $action-shadow-color; height: 128px; width: 128px; @@ -4880,12 +4877,7 @@ svg { li { overflow: hidden; text-overflow: ellipsis; - line-height: 20px; - - label { - line-height: 16px; - vertical-align: bottom; - } + line-height: 24px; } } @@ -4966,6 +4958,7 @@ svg { display: block; max-width: 930px; min-width: 800px; + position: relative; > li { display: block; @@ -5617,19 +5610,18 @@ $range-input-width: 31px; .range-control { position: relative; - display: inline-block; - vertical-align: middle; + display: inline-flex; input[type=range] { + width: calc(100% + 10px); + height: 20px; + margin: 2px -5px; + padding: 0; + vertical-align: top; + opacity: 0; cursor: pointer; -webkit-appearance: none; /* Hides the slider so that custom slider can be made */ -moz-appearance: none; /* Hides the slider so that custom slider can be made */ - width: calc(100% + 10px); - opacity: 0; - vertical-align: middle; - margin: 0 -5px; - padding: 0; - height: 20px; &:focus { outline: none; @@ -5638,9 +5630,9 @@ $range-input-width: 31px; /* Special styling for WebKit/Blink */ &::-webkit-slider-thumb, &::-moz-range-thumb { - margin-top: 1px; /* You need to specify a margin in Chrome, but in Firefox and IE it is automatic */ height: $range-thumb-size; width: $range-thumb-size; + margin-top: 1px; /* You need to specify a margin in Chrome, but in Firefox and IE it is automatic */ opacity: 0; } @@ -5652,23 +5644,21 @@ $range-input-width: 31px; input[type=text] { width: $range-input-width; - float: right; } > div { position: relative; width: calc(100% - 10px - #{$range-input-width}); - margin: 2px $range-thumb-size 0 0; - float: left; + margin-right: $range-thumb-size; } .range-control-track, .range-control-progress { position: absolute; top: 50%; - margin-top: -$range-track-height / 2; left: 0; height: $range-track-height; + margin-top: -$range-track-height / 2; cursor: pointer; } @@ -5684,12 +5674,12 @@ $range-input-width: 31px; .range-control-thumb { position: absolute; top: 50%; - margin-top: -$range-thumb-size / 2; - margin-left: -$range-thumb-size / 2; width: $range-thumb-size; height: $range-thumb-size; - border-radius: 50%; + margin-top: -$range-thumb-size / 2; + margin-left: -$range-thumb-size / 2; background: $range-thumb-color; + border-radius: 50%; } &.range-control-focus { @@ -5719,16 +5709,16 @@ $range-input-width: 31px; datalist { position: absolute; + top: 50%; display: flex; width: 100%; - top: 50%; margin-top: -$range-track-height / 2; option { - padding: 0; - font-size: 0; flex: 1 0 0; height: $range-track-height; + padding: 0; + font-size: 0; border-left: 1px solid $body-bg-color; } } @@ -6563,9 +6553,9 @@ z-select, background-position: -117px -506px !important; } .geomap-filter { - border: 2px solid rgba($ui-border-color, .4); + border: 1px solid $overlay-border-color; background-color: $ui-bg-color; - padding: 10px 30px 5px 10px; + padding: 5px 20px 5px 10px; position: absolute; margin-right: -2px; margin-top: 5px; @@ -6573,7 +6563,7 @@ z-select, right: 0; } .geomap-filter.collapsed { - display: table; + display: block; } .geomap-filter li { width: calc(100% + 20px); diff --git a/sonar-project.properties b/sonar-project.properties index 17471eec32b..c410bab39ee 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -2,5 +2,5 @@ sonar.projectKey=zabbix_zabbix sonar.organization=zabbix sonar.java.binaries=target sonar.java.binaries=**/*.java -sonar.exclusions=**/*.java, **/*.sql, src/zabbix_agent/zabbix_agentd.c, src/zabbix_server/server.c, src/zabbix_proxy/proxy.c, ui/tests/**/*, ui/tests/* +sonar.exclusions=**/*.java, **/*.sql, src/zabbix_agent/zabbix_agentd.c, src/zabbix_server/server.c, src/zabbix_proxy/proxy.c, ui/tests/**/*, ui/tests/*, **/test*, **/*test, **/*test* sonar.cfamily.cache.enabled=false diff --git a/src/go/cmd/zabbix_agent2/testrun.go b/src/go/cmd/zabbix_agent2/testrun.go index 19d8396479d..6db52bb29e1 100644 --- a/src/go/cmd/zabbix_agent2/testrun.go +++ b/src/go/cmd/zabbix_agent2/testrun.go @@ -28,7 +28,9 @@ import ( ) func checkMetric(s scheduler.Scheduler, metric string) { - value, err := s.PerformTask(metric, time.Duration(agent.Options.Timeout)*time.Second, agent.TestrunClientID) + const timeoutForTestrunChecks = time.Minute + + value, err := s.PerformTask(metric, timeoutForTestrunChecks, agent.TestrunClientID) if err != nil { fmt.Printf("%-46s[m|ZBX_NOTSUPPORTED] [%s]\n", metric, err.Error()) } else { diff --git a/src/go/conf/zabbix_agent2.conf b/src/go/conf/zabbix_agent2.conf index 9ec7faf1e3c..09ff0a7fe0e 100644 --- a/src/go/conf/zabbix_agent2.conf +++ b/src/go/conf/zabbix_agent2.conf @@ -100,12 +100,18 @@ Server=127.0.0.1 ##### Active checks related ### Option: ServerActive -# List of comma delimited IP addresses or DNS names (address:port) pairs or clusters (address:port;address2:port) of Zabbix servers and Zabbix proxies for active checks. +# Zabbix server/proxy address or cluster configuration to get active checks from. +# Server/proxy address is IP address or DNS name and optional port separated by colon. +# Cluster configuration is one or more server addresses separated by semicolon. +# Multiple Zabbix servers/clusters and Zabbix proxies can be specified, separated by comma. +# More than one Zabbix proxy should not be specified from each Zabbix server/cluster. +# If Zabbix proxy is specified then Zabbix server/cluster for that proxy should not be specified # If port is not specified, default port is used. -# Cluster nodes need be separated by semicolon. # IPv6 addresses must be enclosed in square brackets if port for that host is specified. # If port is not specified, square brackets for IPv6 addresses are optional. # If this parameter is not specified, active checks are disabled. +# Example for Zabbix proxy: +# ServerActive=127.0.0.1:10051 # Example for multiple servers: # ServerActive=127.0.0.1:20051,zabbix.domain,[::1]:30051,::1,[12fc::1] # Example for HA: diff --git a/src/go/conf/zabbix_agent2.win.conf b/src/go/conf/zabbix_agent2.win.conf index d00f7c99248..70d32360119 100644 --- a/src/go/conf/zabbix_agent2.win.conf +++ b/src/go/conf/zabbix_agent2.win.conf @@ -93,12 +93,18 @@ Server=127.0.0.1 ##### Active checks related ### Option: ServerActive -# List of comma delimited IP addresses or DNS names (address:port) pairs or clusters (address:port;address2:port) of Zabbix servers and Zabbix proxies for active checks. +# Zabbix server/proxy address or cluster configuration to get active checks from. +# Server/proxy address is IP address or DNS name and optional port separated by colon. +# Cluster configuration is one or more server addresses separated by semicolon. +# Multiple Zabbix servers/clusters and Zabbix proxies can be specified, separated by comma. +# More than one Zabbix proxy should not be specified from each Zabbix server/cluster. +# If Zabbix proxy is specified then Zabbix server/cluster for that proxy should not be specified # If port is not specified, default port is used. -# Cluster nodes need be separated by semicolon. # IPv6 addresses must be enclosed in square brackets if port for that host is specified. # If port is not specified, square brackets for IPv6 addresses are optional. # If this parameter is not specified, active checks are disabled. +# Example for Zabbix proxy: +# ServerActive=127.0.0.1:10051 # Example for multiple servers: # ServerActive=127.0.0.1:20051,zabbix.domain,[::1]:30051,::1,[12fc::1] # Example for HA: diff --git a/src/libs/zbxaudit/audit_trigger.h b/src/libs/zbxaudit/audit_trigger.h index aadb3ceee84..6f8669a34bb 100644 --- a/src/libs/zbxaudit/audit_trigger.h +++ b/src/libs/zbxaudit/audit_trigger.h @@ -62,8 +62,8 @@ void zbx_audit_trigger_update_json_remove_dependency(int flags, zbx_uint64_t tri void zbx_audit_trigger_update_json_add_tags_and_values(zbx_uint64_t triggerid, int flags, zbx_uint64_t triggertagid, const char *tag, const char *value); void zbx_audit_trigger_update_json_delete_tags(zbx_uint64_t triggerid, int flags, zbx_uint64_t triggertagid); -void zbx_audit_trigger_update_json_update_trigger_tag_create_entry(zbx_uint64_t trigger, int trigger_flags, - zbx_uint64_t tagid); +void zbx_audit_trigger_update_json_update_trigger_tag_create_entry(zbx_uint64_t triggerid, int trigger_flags, + zbx_uint64_t triggertagid); #define PREPARE_AUDIT_TRIGGER_UPDATE_TAG_H(resource, type1) \ void zbx_audit_trigger_update_json_update_tag_##resource(zbx_uint64_t triggerid, int trigger_flags, \ diff --git a/src/libs/zbxdbhigh/tag.c b/src/libs/zbxdbhigh/tag.c index 2f948b34c43..e30775c3a58 100644 --- a/src/libs/zbxdbhigh/tag.c +++ b/src/libs/zbxdbhigh/tag.c @@ -52,28 +52,6 @@ void zbx_db_tag_free(zbx_db_tag_t *tag) zbx_free(tag); } -int zbx_db_tag_compare_func(const void *d1, const void *d2) -{ - const zbx_db_tag_t * const tag1 = *(const zbx_db_tag_t * const *)d1; - const zbx_db_tag_t * const tag2 = *(const zbx_db_tag_t * const *)d2; - int ret; - - if (0 != (ret = strcmp(tag1->tag, tag2->tag))) - return ret; - - return strcmp(tag1->value, tag2->value); -} - -int zbx_db_tag_compare_func_template(const void *d1, const void *d2) -{ - const zbx_db_tag_t * const it1 = *(const zbx_db_tag_t * const *)d1; - const zbx_db_tag_t * const it2 = *(const zbx_db_tag_t * const *)d2; - - ZBX_RETURN_IF_NOT_EQUAL(it1->tag, it2->tag); - - return 0; -} - /****************************************************************************** * * * Purpose: roll back tag updates done during merge process * diff --git a/src/libs/zbxmemory/memalloc.c b/src/libs/zbxmemory/memalloc.c index 080be17efd6..03a22b2762d 100644 --- a/src/libs/zbxmemory/memalloc.c +++ b/src/libs/zbxmemory/memalloc.c @@ -654,12 +654,14 @@ void *__zbx_mem_malloc(const char *file, int line, zbx_mem_info_t *info, const v if (1 == info->allow_oom) return NULL; + zbx_mem_dump_stats(LOG_LEVEL_CRIT, info); + zbx_backtrace(); + zabbix_log(LOG_LEVEL_CRIT, "[file:%s,line:%d] %s(): out of memory (requested " ZBX_FS_SIZE_T " bytes)", file, line, __func__, (zbx_fs_size_t)size); zabbix_log(LOG_LEVEL_CRIT, "[file:%s,line:%d] %s(): please increase %s configuration parameter", file, line, __func__, info->mem_param); - zbx_mem_dump_stats(LOG_LEVEL_CRIT, info); - zbx_backtrace(); + exit(EXIT_FAILURE); } @@ -687,12 +689,14 @@ void *__zbx_mem_realloc(const char *file, int line, zbx_mem_info_t *info, void * if (1 == info->allow_oom) return NULL; + zbx_mem_dump_stats(LOG_LEVEL_CRIT, info); + zbx_backtrace(); + zabbix_log(LOG_LEVEL_CRIT, "[file:%s,line:%d] %s(): out of memory (requested " ZBX_FS_SIZE_T " bytes)", file, line, __func__, (zbx_fs_size_t)size); zabbix_log(LOG_LEVEL_CRIT, "[file:%s,line:%d] %s(): please increase %s configuration parameter", file, line, __func__, info->mem_param); - zbx_mem_dump_stats(LOG_LEVEL_CRIT, info); - zbx_backtrace(); + exit(EXIT_FAILURE); } diff --git a/src/libs/zbxregexp/zbxregexp.c b/src/libs/zbxregexp/zbxregexp.c index 84dcfcdf545..1ecd3374b00 100644 --- a/src/libs/zbxregexp/zbxregexp.c +++ b/src/libs/zbxregexp/zbxregexp.c @@ -348,6 +348,8 @@ static int regexp_exec(const char *string, const zbx_regexp_t *regexp, int flags } else { + flags |= PCRE2_NO_UTF_CHECK; + if (0 <= (r = pcre2_match(regexp->pcre2_regexp, (PCRE2_SPTR)string, PCRE2_ZERO_TERMINATED, 0, flags, match_data, regexp->match_ctx))) { diff --git a/src/libs/zbxserver/evalfunc.c b/src/libs/zbxserver/evalfunc.c index 290bad8d960..87bc03d1f6e 100644 --- a/src/libs/zbxserver/evalfunc.c +++ b/src/libs/zbxserver/evalfunc.c @@ -3719,7 +3719,8 @@ out: int evaluate_function2(zbx_variant_t *value, DC_ITEM *item, const char *function, const char *parameter, const zbx_timespec_t *ts, char **error) { - int ret; + int ret; + const char *ptr; zabbix_log(LOG_LEVEL_DEBUG, "In %s() function:'%s(/%s/%s,%s)' ts:'%s\'", __func__, function, item->host.host, item->key_orig, parameter, zbx_timespec_str(ts)); @@ -3856,6 +3857,11 @@ int evaluate_function2(zbx_variant_t *value, DC_ITEM *item, const char *function { ret = evaluate_BASELINE(value, item, function + 8, parameter, ts, error); } + else if (NULL != (ptr = strstr(function, "_foreach")) && ZBX_CONST_STRLEN("_foreach") == strlen(ptr)) + { + *error = zbx_dsprintf(*error, "single item query is not supported by \"%s\" function", function); + ret = FAIL; + } else { *error = zbx_strdup(*error, "function is not supported"); diff --git a/src/zabbix_server/ha/ha_manager.c b/src/zabbix_server/ha/ha_manager.c index 9a48f063735..4af8b460bac 100644 --- a/src/zabbix_server/ha/ha_manager.c +++ b/src/zabbix_server/ha/ha_manager.c @@ -1125,6 +1125,14 @@ static int ha_db_get_nodes_json(zbx_ha_info_t *info, char **nodes_json, char **e if (ZBX_DB_OK > info->db_status) goto out; + if (0 == ZBX_HA_IS_CLUSTER()) + { + /* return empty json array in standalone mode */ + *nodes_json = zbx_strdup(NULL, "[]"); + ret = SUCCEED; + goto out; + } + if (SUCCEED != ha_db_get_time(info, &db_time)) goto out; @@ -1570,7 +1578,7 @@ out: ******************************************************************************/ int zbx_ha_start(zbx_rtc_t *rtc, int ha_status, char **error) { - int ret = FAIL; + int ret = FAIL, status; zbx_uint32_t code = 0; zbx_thread_args_t args; zbx_ipc_client_t *client; @@ -1591,7 +1599,9 @@ int zbx_ha_start(zbx_rtc_t *rtc, int ha_status, char **error) start = now = time(NULL); - while (start + ZBX_HA_SERVICE_TIMEOUT > now) + /* Add few seconds to allow HA manager to terminate by its own in the case of RTC timeout. */ + /* Otherwise it will get killed before logging timeout error. */ + while (start + ZBX_HA_SERVICE_TIMEOUT + 5 > now) { (void)zbx_ipc_service_recv(&rtc->service, &rtc_timeout, &client, &message); @@ -1607,6 +1617,13 @@ int zbx_ha_start(zbx_rtc_t *rtc, int ha_status, char **error) break; } + if (0 < waitpid(ha_pid, &status, WNOHANG)) + { + ha_pid = ZBX_THREAD_ERROR; + *error = zbx_strdup(NULL, "HA manager has stopped during startup registration"); + goto out; + } + now = time(NULL); } @@ -1618,7 +1635,7 @@ int zbx_ha_start(zbx_rtc_t *rtc, int ha_status, char **error) ret = SUCCEED; out: - if (SUCCEED != ret && ZBX_THREAD_ERROR != ha_pid) + if (SUCCEED != ret) { #ifdef HAVE_PTHREAD_PROCESS_SHARED zbx_locks_disable(); diff --git a/src/zabbix_server/lld/lld_host.c b/src/zabbix_server/lld/lld_host.c index fbec72bd1d3..88b3b9f1c72 100644 --- a/src/zabbix_server/lld/lld_host.c +++ b/src/zabbix_server/lld/lld_host.c @@ -385,12 +385,6 @@ static void lld_hosts_get_tags(zbx_vector_ptr_t *hosts) zbx_vector_db_tag_ptr_append(&host->tags, tag); } out: - for (i = 0; i < hosts->values_num; i++) - { - host = (zbx_lld_host_t *)hosts->values[i]; - zbx_vector_db_tag_ptr_sort(&host->tags, zbx_db_tag_compare_func); - } - DBfree_result(result); zbx_free(sql); zbx_vector_uint64_destroy(&hostids); diff --git a/src/zabbix_server/preprocessor/preproc_manager.c b/src/zabbix_server/preprocessor/preproc_manager.c index 02bfa7831f2..b26cf21dc5b 100644 --- a/src/zabbix_server/preprocessor/preproc_manager.c +++ b/src/zabbix_server/preprocessor/preproc_manager.c @@ -1203,7 +1203,11 @@ static int preprocessor_set_variant_result(zbx_preprocessing_request_t *request, init_result(request->value.result); } else - free_result(request->value.result); + { + /* preserve eventlog related information */ + if (ITEM_VALUE_TYPE_LOG != request->value_type) + free_result(request->value.result); + } if (ITEM_STATE_NOTSUPPORTED == request->value.state) request->value.state = ITEM_STATE_NORMAL; diff --git a/templates/app/cloudflare_http/template_app_cloudflare_http.yaml b/templates/app/cloudflare_http/template_app_cloudflare_http.yaml index d90a405bd00..fce5374644c 100644 --- a/templates/app/cloudflare_http/template_app_cloudflare_http.yaml +++ b/templates/app/cloudflare_http/template_app_cloudflare_http.yaml @@ -1,6 +1,6 @@ zabbix_export: version: '6.0' - date: '2022-04-06T19:27:14Z' + date: '2022-07-01T06:27:29Z' groups: - uuid: a571c0d144b14fd4a87a9d9b2aa9fcd6 @@ -325,7 +325,7 @@ zabbix_export: datetime_end_str = datetime_end.toISOString(); var data = { - "query": "{viewer {zones(filter: {zoneTag: " + Cloudflare.params.zone + "}) {\ + "query": "{viewer {zones(filter: {zoneTag: \"" + Cloudflare.params.zone + "\"}) {\ httpRequests1hGroups(limit: 100 filter: {\ datetime_geq: \"" + datetime_start_str + "\", datetime_leq: \"" + datetime_end_str + "\"\ }) {\ diff --git a/templates/app/consul_http/consul/README.md b/templates/app/consul_http/consul/README.md index 9f0c0ba7543..23cb19cd3b7 100644 --- a/templates/app/consul_http/consul/README.md +++ b/templates/app/consul_http/consul/README.md @@ -28,7 +28,12 @@ Template need to use Authorization via API token. Don't forget to change macros {$CONSUL.NODE.API.URL}, {$CONSUL.TOKEN}. Also, see the Macros section for a list of macros used to set trigger values. + +This template support [Consul namespaces](https://www.consul.io/docs/enterprise/namespaces). You can set macros {$CONSUL.LLD.FILTER.SERVICE_NAMESPACE.MATCHES}, {$CONSUL.LLD.FILTER.SERVICE_NAMESPACE.NOT_MATCHES} if you want to filter discovered services by namespace. +In case of Open Source version service namespace will be set to 'None'. + *NOTE.* Some metrics may not be collected depending on your HashiCorp Consul instance version and configuration. +*NOTE.* You maybe are interested in Envoy Proxy by HTTP [template](../../envoy_proxy_http). ## Zabbix configuration @@ -41,8 +46,8 @@ No specific Zabbix configuration is required. |----|-----------|-------| |{$CONSUL.LLD.FILTER.LOCAL_SERVICE_NAME.MATCHES} |<p>Filter of discoverable discovered services on local node.</p> |`.*` | |{$CONSUL.LLD.FILTER.LOCAL_SERVICE_NAME.NOT_MATCHES} |<p>Filter to exclude discovered services on local node.</p> |`CHANGE IF NEEDED` | -|{$CONSUL.LLD.FILTER.SERVICE_CHECK_NAME.MATCHES} |<p>Filter of discoverable discovered service checks on local node.</p> |`.*` | -|{$CONSUL.LLD.FILTER.SERVICE_CHECK_NAME.NOT_MATCHES} |<p>Filter to exclude discovered service checks on local node.</p> |`CHANGE IF NEEDED` | +|{$CONSUL.LLD.FILTER.SERVICE_NAMESPACE.MATCHES} |<p>Filter of discoverable discovered service by namespace on local node. Enterprise only, in case of Open Source version Namespace will be set to 'None'.</p> |`.*` | +|{$CONSUL.LLD.FILTER.SERVICE_NAMESPACE.NOT_MATCHES} |<p>Filter to exclude discovered service by namespace on local node. Enterprise only, in case of Open Source version Namespace will be set to 'None'.</p> |`CHANGE IF NEEDED` | |{$CONSUL.NODE.API.URL} |<p>Consul instance URL.</p> |`http://localhost:8500` | |{$CONSUL.NODE.HEALTH_SCORE.MAX.HIGH} |<p>Maximum acceptable value of node's health score for AVERAGE trigger expression.</p> |`4` | |{$CONSUL.NODE.HEALTH_SCORE.MAX.WARN} |<p>Maximum acceptable value of node's health score for WARNING trigger expression.</p> |`2` | @@ -58,7 +63,7 @@ There are no template links in this template. |Name|Description|Type|Key and additional info| |----|-----------|----|----| |HTTP API methods discovery |<p>Discovery HTTP API methods specific metrics.</p> |DEPENDENT |consul.http_api_discovery<p>**Preprocessing**:</p><p>- PROMETHEUS_TO_JSON: `consul_api_http{method =~ ".*"}`</p><p>- JAVASCRIPT: `The text is too long. Please see the template.`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `3h`</p> | -|Local node services discovery |<p>Discover metrics for services that are registered with the local agent.</p> |DEPENDENT |consul.node_services_lld<p>**Preprocessing**:</p><p>- JAVASCRIPT: `The text is too long. Please see the template.`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `3h`</p><p>**Filter**:</p> <p>- {#SERVICE_NAME} MATCHES_REGEX `{$CONSUL.LLD.FILTER.LOCAL_SERVICE_NAME.MATCHES}`</p><p>- {#SERVICE_NAME} NOT_MATCHES_REGEX `{$CONSUL.LLD.FILTER.LOCAL_SERVICE_NAME.NOT_MATCHES}`</p><p>**Overrides:**</p><p>aggregated status<br> - {#TYPE} MATCHES_REGEX `aggregated_status`<br> - ITEM_PROTOTYPE LIKE `Aggregated status` - DISCOVER</p><br> - ITEM_PROTOTYPE LIKE `State` - DISCOVER</p><p>checks<br> - {#TYPE} MATCHES_REGEX `service_check`<br> - ITEM_PROTOTYPE LIKE `Check` - DISCOVER</p> | +|Local node services discovery |<p>Discover metrics for services that are registered with the local agent.</p> |DEPENDENT |consul.node_services_lld<p>**Preprocessing**:</p><p>- JAVASCRIPT: `The text is too long. Please see the template.`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `3h`</p><p>**Filter**:</p> <p>- {#SERVICE_NAME} MATCHES_REGEX `{$CONSUL.LLD.FILTER.LOCAL_SERVICE_NAME.MATCHES}`</p><p>- {#SERVICE_NAME} NOT_MATCHES_REGEX `{$CONSUL.LLD.FILTER.LOCAL_SERVICE_NAME.NOT_MATCHES}`</p><p>- {#SERVICE_NAMESPACE} MATCHES_REGEX `{$CONSUL.LLD.FILTER.SERVICE_NAMESPACE.MATCHES}`</p><p>- {#SERVICE_NAMESPACE} NOT_MATCHES_REGEX `{$CONSUL.LLD.FILTER.SERVICE_NAMESPACE.NOT_MATCHES}`</p><p>**Overrides:**</p><p>aggregated status<br> - {#TYPE} MATCHES_REGEX `aggregated_status`<br> - ITEM_PROTOTYPE LIKE `Aggregated status` - DISCOVER</p><br> - ITEM_PROTOTYPE LIKE `State` - DISCOVER</p><p>checks<br> - {#TYPE} MATCHES_REGEX `service_check`<br> - ITEM_PROTOTYPE LIKE `Check` - DISCOVER</p> | |Raft leader metrics discovery |<p>Discover raft metrics for leader nodes.</p> |DEPENDENT |consul.raft.leader.discovery<p>**Preprocessing**:</p><p>- JAVASCRIPT: `The text is too long. Please see the template.`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `3h`</p> | |Raft server metrics discovery |<p>Discover raft metrics for server nodes.</p> |DEPENDENT |consul.raft.server.discovery<p>**Preprocessing**:</p><p>- JAVASCRIPT: `The text is too long. Please see the template.`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `3h`</p> | diff --git a/templates/app/consul_http/consul/template_consul_node_http.yaml b/templates/app/consul_http/consul/template_consul_node_http.yaml index 0dedf84416c..366f1c2d968 100644 --- a/templates/app/consul_http/consul/template_consul_node_http.yaml +++ b/templates/app/consul_http/consul/template_consul_node_http.yaml @@ -1,6 +1,6 @@ zabbix_export: version: '6.0' - date: '2022-05-17T15:36:35Z' + date: '2022-07-07T21:30:50Z' groups: - uuid: a571c0d144b14fd4a87a9d9b2aa9fcd6 @@ -19,7 +19,7 @@ zabbix_export: You can discuss this template or leave feedback on our forum https://www.zabbix.com/forum/zabbix-suggestions-and-feedback - Template tooling version used: 0.41 + Template tooling version used: 0.42 groups: - name: Templates/Applications @@ -392,7 +392,8 @@ zabbix_export: 'id': service, 'name': service_stats['Service']['Service'], 'status': service_stats['AggregatedStatus'], - 'checks': service_stats["Checks"] + 'checks': service_stats['Checks'], + 'namespace': typeof service_stats['Service']['Namespace'] === 'undefined' ? 'None' : service_stats['Service']['Namespace'] }); }); @@ -473,7 +474,7 @@ zabbix_export: headers: - name: X-Consul-Token - value: '{$CONSUL.API.TOKEN}' + value: '{$CONSUL.TOKEN}' tags: - tag: component @@ -500,7 +501,7 @@ zabbix_export: headers: - name: X-Consul-Token - value: '{$CONSUL.API.TOKEN}' + value: '{$CONSUL.TOKEN}' tags: - tag: component @@ -1525,6 +1526,7 @@ zabbix_export: uuid: fa78d269c01548a083085a3a98e5a59b expression: 'last(/HashiCorp Consul Node by HTTP/consul.version,#1)<>last(/HashiCorp Consul Node by HTTP/consul.version,#2) and length(last(/HashiCorp Consul Node by HTTP/consul.version))>0' name: 'Consul: Version has been changed' + event_name: 'Consul: Version has changed (new version: {ITEM.VALUE})' priority: INFO description: 'Consul version has changed. Ack to close.' manual_close: 'YES' @@ -1694,6 +1696,15 @@ zabbix_export: value: '{$CONSUL.LLD.FILTER.LOCAL_SERVICE_NAME.NOT_MATCHES}' operator: NOT_MATCHES_REGEX formulaid: B + - + macro: '{#SERVICE_NAMESPACE}' + value: '{$CONSUL.LLD.FILTER.SERVICE_NAMESPACE.MATCHES}' + formulaid: C + - + macro: '{#SERVICE_NAMESPACE}' + value: '{$CONSUL.LLD.FILTER.SERVICE_NAMESPACE.NOT_MATCHES}' + operator: NOT_MATCHES_REGEX + formulaid: D description: 'Discover metrics for services that are registered with the local agent.' item_prototypes: - @@ -1730,6 +1741,9 @@ zabbix_export: tag: component value: service - + tag: namespace + value: '{#SERVICE_NAMESPACE}' + - tag: service value: '{#SERVICE_NAME}' trigger_prototypes: @@ -1786,6 +1800,9 @@ zabbix_export: tag: component value: service - + tag: namespace + value: '{#SERVICE_NAMESPACE}' + - tag: service value: '{#SERVICE_NAME}' - @@ -1825,6 +1842,9 @@ zabbix_export: tag: component value: service - + tag: namespace + value: '{#SERVICE_NAMESPACE}' + - tag: service value: '{#SERVICE_NAME}' master_item: @@ -1846,6 +1866,7 @@ zabbix_export: '{#TYPE}': 'aggregated_status', '{#SERVICE_NAME}': service.name, '{#SERVICE_ID}': service.id, + '{#SERVICE_NAMESPACE}': service.namespace }); if (service['checks'] !== 0) { @@ -1854,6 +1875,7 @@ zabbix_export: '{#TYPE}': 'service_check', '{#SERVICE_NAME}': service.name, '{#SERVICE_ID}': service.id, + '{#SERVICE_NAMESPACE}': service.namespace, '{#SERVICE_CHECK_ID}': check["CheckID"], '{#SERVICE_CHECK_NAME}': check["Name"] }); @@ -2312,13 +2334,13 @@ zabbix_export: value: 'CHANGE IF NEEDED' description: 'Filter to exclude discovered services on local node.' - - macro: '{$CONSUL.LLD.FILTER.SERVICE_CHECK_NAME.MATCHES}' + macro: '{$CONSUL.LLD.FILTER.SERVICE_NAMESPACE.MATCHES}' value: '.*' - description: 'Filter of discoverable discovered service checks on local node.' + description: 'Filter of discoverable discovered service by namespace on local node. Enterprise only, in case of Open Source version Namespace will be set to ''None''.' - - macro: '{$CONSUL.LLD.FILTER.SERVICE_CHECK_NAME.NOT_MATCHES}' + macro: '{$CONSUL.LLD.FILTER.SERVICE_NAMESPACE.NOT_MATCHES}' value: 'CHANGE IF NEEDED' - description: 'Filter to exclude discovered service checks on local node.' + description: 'Filter to exclude discovered service by namespace on local node. Enterprise only, in case of Open Source version Namespace will be set to ''None''.' - macro: '{$CONSUL.NODE.API.URL}' value: 'http://localhost:8500' diff --git a/templates/app/consul_http/consul_cluster/README.md b/templates/app/consul_http/consul_cluster/README.md index b9815517706..e086394e600 100644 --- a/templates/app/consul_http/consul_cluster/README.md +++ b/templates/app/consul_http/consul_cluster/README.md @@ -24,7 +24,12 @@ Template need to use Authorization via API token. Don't forget to change macros {$CONSUL.CLUSTER.URL}, {$CONSUL.TOKEN}. Also, see the Macros section for a list of macros used to set trigger values. + +This template support [Consul namespaces](https://www.consul.io/docs/enterprise/namespaces). You can set macro {$CONSUL.NAMESPACE}, if you are interested in only one service namespace. Do not specify this macro to get all of services. +In case of Open Source version leave this macro empty. + *NOTE.* Some metrics may not be collected depending on your HashiCorp Consul instance version and configuration. +*NOTE.* You maybe are interested in Envoy Proxy by HTTP [template](../../envoy_proxy_http). ## Zabbix configuration @@ -42,6 +47,7 @@ No specific Zabbix configuration is required. |{$CONSUL.LLD.FILTER.NODE_NAME.NOT_MATCHES} |<p>Filter to exclude discovered nodes.</p> |`CHANGE IF NEEDED` | |{$CONSUL.LLD.FILTER.SERVICE_NAME.MATCHES} |<p>Filter of discoverable discovered services.</p> |`.*` | |{$CONSUL.LLD.FILTER.SERVICE_NAME.NOT_MATCHES} |<p>Filter to exclude discovered services.</p> |`CHANGE IF NEEDED` | +|{$CONSUL.NAMESPACE} |<p>Consul service namespace. Enterprise only, in case of Open Source version leave this macro empty. Do not specify this macro to get all of services.</p> |`` | |{$CONSUL.SERVICE_NODES.CRITICAL.MAX.AVG} |<p>Maximum number of service nodes in status 'critical' for trigger expression. Can be used with context.</p> |`0` | |{$CONSUL.TOKEN} |<p>Consul auth token.</p> |`<PUT YOUR AUTH TOKEN>` | @@ -66,7 +72,7 @@ There are no template links in this template. |Consul |Consul: Nodes: warning |<p>Number of agents on current dc with serf health status 'warning'.</p> |DEPENDENT |consul.nodes_warning<p>**Preprocessing**:</p><p>- JSONPATH: `$[?(@.Status == "warning")].length()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `3h`</p> | |Consul |Consul: Services: total |<p>Number of services on current dc.</p> |DEPENDENT |consul.services_total<p>**Preprocessing**:</p><p>- JAVASCRIPT: `return Object.keys(JSON.parse(value)).length; `</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `3h`</p> | |Consul |Consul: Node ["{#NODE_NAME}"]: Serf Health |<p>Node Serf Health Status.</p> |DEPENDENT |consul.serf.health["{#NODE_NAME}"]<p>**Preprocessing**:</p><p>- JSONPATH: `$[?(@.Node == "{#NODE_NAME}" && @.CheckID == "serfHealth")].Status.first()`</p><p>- JAVASCRIPT: `The text is too long. Please see the template.`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `3h`</p> | -|Consul |Consul: Service ["{#SERVICE_NAME}"]: Nodes passing |<p>-</p> |DEPENDENT |consul.service.nodes_passing["{#SERVICE_NAME}"]<p>**Preprocessing**:</p><p>- JSONPATH: `$[?(@.Node == "{#SERVICE_NAME}")].Checks[?(@.CheckID == "serfHealth" && @.Status == 'passing')].length()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `3h`</p> | +|Consul |Consul: Service ["{#SERVICE_NAME}"]: Nodes passing |<p>-</p> |DEPENDENT |consul.service.nodes_passing["{#SERVICE_NAME}"]<p>**Preprocessing**:</p><p>- JSONPATH: `$[?(@.Service.Service == "{#SERVICE_NAME}")].Checks[?(@.CheckID == "serfHealth" && @.Status == 'passing')].length()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `3h`</p> | |Consul |Consul: Service ["{#SERVICE_NAME}"]: Nodes warning |<p>-</p> |DEPENDENT |consul.service.nodes_warning["{#SERVICE_NAME}"]<p>**Preprocessing**:</p><p>- JSONPATH: `$[?(@.Service.Service == "{#SERVICE_NAME}")].Checks[?(@.CheckID == "serfHealth" && @.Status == 'warning')].length()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `3h`</p> | |Consul |Consul: Service ["{#SERVICE_NAME}"]: Nodes critical |<p>-</p> |DEPENDENT |consul.service.nodes_critical["{#SERVICE_NAME}"]<p>**Preprocessing**:</p><p>- JSONPATH: `$[?(@.Service.Service == "{#SERVICE_NAME}")].Checks[?(@.CheckID == "serfHealth" && @.Status == 'critical')].length()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `3h`</p> | |Consul cluster |Consul cluster: Cluster leader |<p>Current leader address.</p> |HTTP_AGENT |consul.get_leader<p>**Preprocessing**:</p><p>- CHECK_NOT_SUPPORTED</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p><p>- TRIM: `"`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> | diff --git a/templates/app/consul_http/consul_cluster/template_consul_cluster_http.yaml b/templates/app/consul_http/consul_cluster/template_consul_cluster_http.yaml index 5256bff93e2..c326bf881ae 100644 --- a/templates/app/consul_http/consul_cluster/template_consul_cluster_http.yaml +++ b/templates/app/consul_http/consul_cluster/template_consul_cluster_http.yaml @@ -1,6 +1,6 @@ zabbix_export: version: '6.0' - date: '2022-05-17T15:36:33Z' + date: '2022-07-07T21:30:47Z' groups: - uuid: a571c0d144b14fd4a87a9d9b2aa9fcd6 @@ -19,7 +19,7 @@ zabbix_export: You can discuss this template or leave feedback on our forum https://www.zabbix.com/forum/zabbix-suggestions-and-feedback - Template tooling version used: 0.41 + Template tooling version used: 0.42 groups: - name: Templates/Applications @@ -43,7 +43,10 @@ zabbix_export: headers: - name: X-Consul-Token - value: '{$CONSUL.API.TOKEN}' + value: '{$CONSUL.TOKEN}' + - + name: X-Consul-Namespace + value: '{$CONSUL.NAMESPACE}' tags: - tag: component @@ -67,7 +70,10 @@ zabbix_export: headers: - name: X-Consul-Token - value: '{$CONSUL.API.TOKEN}' + value: '{$CONSUL.TOKEN}' + - + name: X-Consul-Namespace + value: '{$CONSUL.NAMESPACE}' tags: - tag: component @@ -102,7 +108,7 @@ zabbix_export: headers: - name: X-Consul-Token - value: '{$CONSUL.API.TOKEN}' + value: '{$CONSUL.TOKEN}' tags: - tag: component @@ -142,7 +148,7 @@ zabbix_export: headers: - name: X-Consul-Token - value: '{$CONSUL.API.TOKEN}' + value: '{$CONSUL.TOKEN}' tags: - tag: component @@ -172,7 +178,7 @@ zabbix_export: headers: - name: X-Consul-Token - value: '{$CONSUL.API.TOKEN}' + value: '{$CONSUL.TOKEN}' tags: - tag: component @@ -462,7 +468,10 @@ zabbix_export: headers: - name: X-Consul-Token - value: '{$CONSUL.API.TOKEN}' + value: '{$CONSUL.TOKEN}' + - + name: X-Consul-Namespace + value: '{$CONSUL.NAMESPACE}' tags: - tag: component @@ -518,7 +527,7 @@ zabbix_export: - type: JSONPATH parameters: - - '$[?(@.Node == "{#SERVICE_NAME}")].Checks[?(@.CheckID == "serfHealth" && @.Status == ''passing'')].length()' + - '$[?(@.Service.Service == "{#SERVICE_NAME}")].Checks[?(@.CheckID == "serfHealth" && @.Status == ''passing'')].length()' - type: DISCARD_UNCHANGED_HEARTBEAT parameters: @@ -612,6 +621,9 @@ zabbix_export: value: 'CHANGE IF NEEDED' description: 'Filter to exclude discovered services.' - + macro: '{$CONSUL.NAMESPACE}' + description: 'Consul service namespace. Enterprise only, in case of Open Source version leave this macro empty. Do not specify this macro to get all of services.' + - macro: '{$CONSUL.SERVICE_NODES.CRITICAL.MAX.AVG}' value: '0' description: 'Maximum number of service nodes in status ''critical'' for trigger expression. Can be used with context.' diff --git a/templates/app/kubernetes_http/README.md b/templates/app/kubernetes_http/README.md index 7a4c5f7617c..d2a1678e834 100644 --- a/templates/app/kubernetes_http/README.md +++ b/templates/app/kubernetes_http/README.md @@ -11,12 +11,12 @@ Templates for Kubernetes monitoring | Name | Readme | Template | |---------------------------------------|--------------------------------------------------------|-----------------------------------------------------------------------------------| -| Kubernetes nodes by HTTP | [Readme](kubernetes_nodes_http/README.md) | [Template](kubernetes_nodes_http/template_kube_nodes.yaml) | -| Kubernetes cluster state by HTTP | [Readme](kubernetes_state_http/README.md) | [Template](kubernetes_state_http/template_kube_state.yaml) | -| Kubernetes API server by HTTP | [Readme](kubernetes_api_server_http/README.md) | [Template](kubernetes_api_server_http/kubernetes_api_servers.yaml) | -| Kubernetes Controller manager by HTTP | [Readme](kubernetes_controller_manager_http/README.md) | [Template](kubernetes_controller_manager_http/kubernetes_controller_manager.yaml) | -| Kubernetes Scheduler by HTTP | [Readme](kubernetes_scheduler_http/README.md) | [Template](kubernetes_scheduler_http/kubernetes_scheduler.yaml) | -| Kubernetes kubelet by HTTP | [Readme](kubernetes_kubelet_http/README.md) | [Template](kubernetes_kubelet_http/template_kube_kubelet.yaml) | +| Kubernetes nodes by HTTP | [Readme](kubernetes_nodes_http/README.md) | [Template](kubernetes_nodes_http/template_kubernetes_nodes.yaml) | +| Kubernetes cluster state by HTTP | [Readme](kubernetes_state_http/README.md) | [Template](kubernetes_state_http/template_kubernetes_state.yaml) | +| Kubernetes API server by HTTP | [Readme](kubernetes_api_server_http/README.md) | [Template](kubernetes_api_server_http/template_kubernetes_api_servers.yaml) | +| Kubernetes Controller manager by HTTP | [Readme](kubernetes_controller_manager_http/README.md) | [Template](kubernetes_controller_manager_http/template_kubernetes_controller_manager.yaml) | +| Kubernetes Scheduler by HTTP | [Readme](kubernetes_scheduler_http/README.md) | [Template](kubernetes_scheduler_http/template_kubernetes_scheduler.yaml) | +| Kubernetes kubelet by HTTP | [Readme](kubernetes_kubelet_http/README.md) | [Template](kubernetes_kubelet_http/template_kubernetes_kubelet.yaml) | Templates are of two types: diff --git a/templates/app/kubernetes_http/kubernetes_nodes_http/README.md b/templates/app/kubernetes_http/kubernetes_nodes_http/README.md index 223d39b15c1..88e4598805e 100644 --- a/templates/app/kubernetes_http/kubernetes_nodes_http/README.md +++ b/templates/app/kubernetes_http/kubernetes_nodes_http/README.md @@ -35,7 +35,8 @@ Get the generated service account token using the command `kubectl get secret zabbix-service-account -n monitoring -o jsonpath={.data.token} | base64 -d` -Then set it to the macro `{$KUBE.API.TOKEN}`. +Then set it to the macro `{$KUBE.API.TOKEN}`. +Set `{$KUBE.NODES.ENDPOINT.NAME}` with Zabbix agent's endpoint name. See `kubectl -n monitoring get ep`. Default: `zabbix-zabbix-helm-chrt-agent`. Set up the macros to filter the metrics of discovered nodes: @@ -116,7 +117,7 @@ There are no template links in this template. |-----|----|-----------|----|---------------------| |Kubernetes |Kubernetes: Get nodes |<p>Collecting and processing cluster nodes data via Kubernetes API.</p> |SCRIPT |kube.nodes<p>**Expression**:</p>`The text is too long. Please see the template.` | |Kubernetes |Get nodes check |<p>Data collection check.</p> |DEPENDENT |kube.nodes.check<p>**Preprocessing**:</p><p>- JSONPATH: `$.error`</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> `</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `3h`</p> | -|Kubernetes |Node LLD |<p>Generation of data for node discovery rules.</p> |DEPENDENT |kube.nodes.lld<p>**Preprocessing**:</p><p>- JAVASCRIPT: `function parseFilters(filter) { var pairs = {}; filter.split(/\s*,\s*/).forEach(function (kv) { if (/([\w\.-]+\/[\w\.-]+):\s*.+/.test(kv)) { var pair = kv.split(/\s*:\s*/); pairs[pair[0]] = pair[1]; } }); return pairs; } function filter(name, data, filters) { var filtered = true; if (typeof data === 'object') { Object.keys(filters).some(function (filter) { var exclude = filter.match(/^!(.+)/); if (filter in data || (exclude && exclude[1] in data)) { if ((exclude && new RegExp(filters[filter]).test(data[exclude[1]])) || (!exclude && !(new RegExp(filters[filter]).test(data[filter])))) { Zabbix.log(4, '[ Kubernetes discovery ] Discarded "' + name + '" by filter "' + filter + ': ' + filters[filter] + '"'); filtered = false; return true; } }; }); } return filtered; } try { var input = JSON.parse(value), output = []; if (typeof input !== 'object' || typeof input.items === 'undefined') { Zabbix.log(4, '[ Kubernetes ] Received incorrect JSON: ' + input); throw 'Incorrect JSON. Check debug log for more information.'; } var filterLabels = parseFilters('{$KUBE.NODE.FILTER.LABELS}'), filterAnnotations = parseFilters('{$KUBE.NODE.FILTER.ANNOTATIONS}'); input.items.forEach(function (node) { if (filter(node.metadata.name, node.metadata.labels, filterLabels) && filter(node.metadata.name, node.metadata.annotations, filterAnnotations)) { Zabbix.log(4, '[ Kubernetes discovery ] Filtered node "' + node.metadata.name + '"'); var internalIPs = node.status.addresses.filter(function (addr) { return addr.type === 'InternalIP'; }); var internalIP = internalIPs.length && internalIPs[0].address; if (internalIP in input.endpointIPs) { output.push({ '{#NAME}': node.metadata.name, '{#IP}': internalIP, '{#ROLES}': node.status.roles, '{#ARCH}': node.metadata.labels['kubernetes.io/arch'] || '', '{#OS}': node.metadata.labels['kubernetes.io/os'] || '' }); } else { Zabbix.log(4, '[ Kubernetes discovery ] Node "' + node.metadata.name + '" is not included in the list of endpoint IPs'); } } }); return JSON.stringify(output); } catch (error) { error += (String(error).endsWith('.')) ? '' : '.'; Zabbix.log(3, '[ Kubernetes discovery ] ERROR: ' + error); throw 'Discovery error: ' + error; } `</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `3h`</p> | +|Kubernetes |Node LLD |<p>Generation of data for node discovery rules.</p> |DEPENDENT |kube.nodes.lld<p>**Preprocessing**:</p><p>- JAVASCRIPT: `function parseFilters(filter) { var pairs = {}; filter.split(/\s*,\s*/).forEach(function (kv) { if (/([\w\.-]+\/[\w\.-]+):\s*.+/.test(kv)) { var pair = kv.split(/\s*:\s*/); pairs[pair[0]] = pair[1]; } }); return pairs; } function filter(name, data, filters) { var filtered = true; if (typeof data === 'object') { Object.keys(filters).some(function (filter) { var exclude = filter.match(/^!(.+)/); if (filter in data || (exclude && exclude[1] in data)) { if ((exclude && new RegExp(filters[filter]).test(data[exclude[1]])) || (!exclude && !(new RegExp(filters[filter]).test(data[filter])))) { Zabbix.log(4, '[ Kubernetes discovery ] Discarded "' + name + '" by filter "' + filter + ': ' + filters[filter] + '"'); filtered = false; return true; } }; }); } return filtered; } try { var input = JSON.parse(value), output = []; api_url = '{$KUBE.API.ENDPOINT.URL}', hostname = api_url.match(/\/\/(.+):/); if (typeof hostname[1] === 'undefined') { Zabbix.log(4, '[ Kubernetes ] Received incorrect Kubernetes API url: ' + api_url + '. Expected format: <scheme>://<host>:<port>'); throw 'Cannot get hostname from Kubernetes API url. Check debug log for more information.'; }; if (typeof input !== 'object' || typeof input.items === 'undefined') { Zabbix.log(4, '[ Kubernetes ] Received incorrect JSON: ' + input); throw 'Incorrect JSON. Check debug log for more information.'; } var filterLabels = parseFilters('{$KUBE.NODE.FILTER.LABELS}'), filterAnnotations = parseFilters('{$KUBE.NODE.FILTER.ANNOTATIONS}'); input.items.forEach(function (node) { if (filter(node.metadata.name, node.metadata.labels, filterLabels) && filter(node.metadata.name, node.metadata.annotations, filterAnnotations)) { Zabbix.log(4, '[ Kubernetes discovery ] Filtered node "' + node.metadata.name + '"'); var internalIPs = node.status.addresses.filter(function (addr) { return addr.type === 'InternalIP'; }); var internalIP = internalIPs.length && internalIPs[0].address; if (internalIP in input.endpointIPs) { output.push({ '{#NAME}': node.metadata.name, '{#IP}': internalIP, '{#ROLES}': node.status.roles, '{#ARCH}': node.metadata.labels['kubernetes.io/arch'] || '', '{#OS}': node.metadata.labels['kubernetes.io/os'] || '', '{#CLUSTER_HOSTNAME}': hostname[1] }); } else { Zabbix.log(4, '[ Kubernetes discovery ] Node "' + node.metadata.name + '" is not included in the list of endpoint IPs'); } } }); return JSON.stringify(output); } catch (error) { error += (String(error).endsWith('.')) ? '' : '.'; Zabbix.log(3, '[ Kubernetes discovery ] ERROR: ' + error); throw 'Discovery error: ' + error; } `</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `3h`</p> | |Kubernetes |Node [{#NAME}] Addresses: External IP |<p>Typically the IP address of the node that is externally routable (available from outside the cluster).</p> |DEPENDENT |kube.node.addresses.external_ip[{#NAME}]<p>**Preprocessing**:</p><p>- JSONPATH: `$.items[?(@.metadata.name == "{#NAME}")].status.addresses[?(@.type == "ExternalIP")].address.first()`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `3h`</p> | |Kubernetes |Node [{#NAME}] Addresses: Internal IP |<p>Typically the IP address of the node that is routable only within the cluster.</p> |DEPENDENT |kube.node.addresses.internal_ip[{#NAME}]<p>**Preprocessing**:</p><p>- JSONPATH: `$.items[?(@.metadata.name == "{#NAME}")].status.addresses[?(@.type == "InternalIP")].address.first()`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `3h`</p> | |Kubernetes |Node [{#NAME}] Allocatable: CPU |<p>Allocatable CPU.</p><p>'Allocatable' on a Kubernetes node is defined as the amount of compute resources that are available for pods. The scheduler does not over-subscribe 'Allocatable'. 'CPU', 'memory' and 'ephemeral-storage' are supported as of now.</p> |DEPENDENT |kube.node.allocatable.cpu[{#NAME}]<p>**Preprocessing**:</p><p>- JSONPATH: `$.items[?(@.metadata.name == "{#NAME}")].status.allocatable.cpu.first()`</p> | diff --git a/templates/app/kubernetes_http/kubernetes_nodes_http/template_kubernetes_nodes.yaml b/templates/app/kubernetes_http/kubernetes_nodes_http/template_kubernetes_nodes.yaml index 4da847a065a..259071b057f 100644 --- a/templates/app/kubernetes_http/kubernetes_nodes_http/template_kubernetes_nodes.yaml +++ b/templates/app/kubernetes_http/kubernetes_nodes_http/template_kubernetes_nodes.yaml @@ -1,6 +1,6 @@ zabbix_export: version: '6.0' - date: '2022-04-15T08:11:32Z' + date: '2022-06-21T16:32:25Z' groups: - uuid: a571c0d144b14fd4a87a9d9b2aa9fcd6 @@ -18,7 +18,7 @@ zabbix_export: You can discuss this template or leave feedback on our forum https://www.zabbix.com/forum/zabbix-suggestions-and-feedback - Template tooling version used: 0.41 + Template tooling version used: 0.42 groups: - name: Templates/Applications @@ -378,6 +378,13 @@ zabbix_export: try { var input = JSON.parse(value), output = []; + api_url = '{$KUBE.API.ENDPOINT.URL}', + hostname = api_url.match(/\/\/(.+):/); + + if (typeof hostname[1] === 'undefined') { + Zabbix.log(4, '[ Kubernetes ] Received incorrect Kubernetes API url: ' + api_url + '. Expected format: <scheme>://<host>:<port>'); + throw 'Cannot get hostname from Kubernetes API url. Check debug log for more information.'; + }; if (typeof input !== 'object' || typeof input.items === 'undefined') { Zabbix.log(4, '[ Kubernetes ] Received incorrect JSON: ' + input); @@ -404,7 +411,8 @@ zabbix_export: '{#IP}': internalIP, '{#ROLES}': node.status.roles, '{#ARCH}': node.metadata.labels['kubernetes.io/arch'] || '', - '{#OS}': node.metadata.labels['kubernetes.io/os'] || '' + '{#OS}': node.metadata.labels['kubernetes.io/os'] || '', + '{#CLUSTER_HOSTNAME}': hostname[1] }); } else { @@ -1448,7 +1456,7 @@ zabbix_export: name: Templates/Applications group_prototypes: - - name: 'Kubernetes/Nodes/Role: {#ROLES}' + name: '{#CLUSTER_HOSTNAME}: Kubernetes/Nodes/Role: {#ROLES}' templates: - name: 'Linux by Zabbix agent' diff --git a/templates/app/kubernetes_http/kubernetes_state_http/README.md b/templates/app/kubernetes_http/kubernetes_state_http/README.md index ae7fd73f0bc..85ee359b157 100644 --- a/templates/app/kubernetes_http/kubernetes_state_http/README.md +++ b/templates/app/kubernetes_http/kubernetes_state_http/README.md @@ -9,7 +9,7 @@ It works without external scripts and uses the script item to make HTTP requests Template `Kubernetes cluster state by HTTP` — collects metrics by HTTP agent from kube-state-metrics endpoint and Kubernetes API. -Don't forget change macros {$KUBE.API.ENDPOINT.URL} and {$KUBE.API.TOKEN}. +Don't forget change macros {$KUBE.API.URL} and {$KUBE.API.TOKEN}. Also, see the Macros section for a list of macros used to set trigger values. *NOTE.* Some metrics may not be collected depending on your Kubernetes version and configuration. @@ -22,10 +22,20 @@ This template was tested on: > See [Zabbix template operation](https://www.zabbix.com/documentation/6.0/manual/config/templates_out_of_the_box/http) for basic instructions. +Install the [Zabbix Helm Chart](https://git.zabbix.com/projects/ZT/repos/kubernetes-helm/browse?at=refs%2Fheads%2Frelease%2F6.0) in your Kubernetes cluster. Internal service metrics are collected from kube-state-metrics endpoint. + Template needs to use Authorization via API token. -Don't forget change macros {$KUBE.API.ENDPOINT.URL} and {$KUBE.API.TOKEN}. +Set the `{$KUBE.API.URL}` such as `<scheme>://<host>:<port>`. + +Get the generated service account token using the command + +`kubectl get secret zabbix-service-account -n monitoring -o jsonpath={.data.token} | base64 -d` + +Then set it to the macro `{$KUBE.API.TOKEN}`. +Set `{$KUBE.STATE.ENDPOINT.NAME}` with Kube state metrics endpoint name. See `kubectl -n monitoring get ep`. Default: `zabbix-kube-state-metrics`. + Also, see the Macros section for a list of macros used to set trigger values. *NOTE.* Some metrics may not be collected depending on your Kubernetes version and configuration. diff --git a/templates/app/kubernetes_http/kubernetes_state_http/template_kubernetes_state.yaml b/templates/app/kubernetes_http/kubernetes_state_http/template_kubernetes_state.yaml index 612dcb28d82..b5632af7136 100644 --- a/templates/app/kubernetes_http/kubernetes_state_http/template_kubernetes_state.yaml +++ b/templates/app/kubernetes_http/kubernetes_state_http/template_kubernetes_state.yaml @@ -1,6 +1,6 @@ zabbix_export: version: '6.0' - date: '2022-04-06T19:27:54Z' + date: '2022-06-21T16:32:14Z' groups: - uuid: a571c0d144b14fd4a87a9d9b2aa9fcd6 @@ -18,7 +18,7 @@ zabbix_export: You can discuss this template or leave feedback on our forum https://www.zabbix.com/forum/zabbix-suggestions-and-feedback - Template tooling version used: 0.41 + Template tooling version used: 0.42 groups: - name: Templates/Applications @@ -123,7 +123,14 @@ zabbix_export: Kube.setParams(JSON.parse(value)); var nodes = Kube.getNodes(), - controlPlaneNodes = []; + controlPlaneNodes = [], + api_url = '{$KUBE.API.URL}', + hostname = api_url.match(/\/\/(.+):/); + + if (typeof hostname[1] === 'undefined') { + Zabbix.log(4, '[ Kubernetes ] Received incorrect Kubernetes API url: ' + api_url + '. Expected format: <scheme>://<host>:<port>'); + throw 'Cannot get hostname from Kubernetes API url. Check debug log for more information.'; + }; for (idx in nodes.items) { for (label in nodes.items[idx].metadata.labels) { @@ -133,16 +140,16 @@ zabbix_export: }); var internalIP = internalIPs.length && internalIPs[0].address; - controlPlaneNodes.push({ '{#NAME}': nodes.items[idx].metadata.name, '{#IP}': internalIP, - '{#KUBE.API.SERVER.URL}': Kube.params.api_server_scheme + '://' + internalIP + ':' + Kube.params.api_server_port + '/metrics', - '{#KUBE.CONTROLLER.SERVER.URL}': Kube.params.controller_scheme + '://' + internalIP + ':' + Kube.params.controller_port + '/metrics', - '{#KUBE.SCHEDULER.SERVER.URL}': Kube.params.scheduler_scheme + '://' + internalIP + ':' + Kube.params.scheduler_port + '/metrics', + '{#KUBE.API.SERVER.URL}': Kube.params.api_server_scheme + '://' + ((/(\d+.){3}\d+/.test(internalIP)) ? internalIP : '['+internalIP+']') + ':' + Kube.params.api_server_port + '/metrics', + '{#KUBE.CONTROLLER.SERVER.URL}': Kube.params.controller_scheme + '://' + ((/(\d+.){3}\d+/.test(internalIP)) ? internalIP : '['+internalIP+']') + ':' + Kube.params.controller_port + '/metrics', + '{#KUBE.SCHEDULER.SERVER.URL}': Kube.params.scheduler_scheme + '://' + ((/(\d+.){3}\d+/.test(internalIP)) ? internalIP : '['+internalIP+']') + ':' + Kube.params.scheduler_port + '/metrics', '{#COMPONENT.API}' : 'API', '{#COMPONENT.CONTROLLER}' : 'Controller manager', - '{#COMPONENT.SCHEDULER}' : 'Scheduler' + '{#COMPONENT.SCHEDULER}' : 'Scheduler', + '{#CLUSTER_HOSTNAME}': hostname[1] }); break; @@ -439,7 +446,13 @@ zabbix_export: var nodes = Kube.getNodes(), kubeNodes = []; + api_url = '{$KUBE.API.URL}', + hostname = api_url.match(/\/\/(.+):/); + if (typeof hostname[1] === 'undefined') { + Zabbix.log(4, '[ Kubernetes ] Received incorrect Kubernetes API url: ' + api_url + '. Expected format: <scheme>://<host>:<port>'); + throw 'Cannot get hostname from Kubernetes API url. Check debug log for more information.'; + }; for (idx in nodes.items) { var internalIPs = nodes.items[idx].status.addresses.filter(function (addr) { return addr.type === 'InternalIP'; @@ -450,8 +463,9 @@ zabbix_export: kubeNodes.push({ '{#NAME}': nodes.items[idx].metadata.name, '{#IP}': internalIP, - '{#KUBE.KUBELET.URL}': Kube.params.kubelet_scheme + '://' + internalIP + ':' + Kube.params.kubelet_port, - '{#COMPONENT}': 'Kubelet' + '{#KUBE.KUBELET.URL}': Kube.params.kubelet_scheme + '://' + ((/(\d+.){3}\d+/.test(internalIP)) ? internalIP : '['+internalIP+']') + ':' + Kube.params.kubelet_port, + '{#COMPONENT}': 'Kubelet', + '{#CLUSTER_HOSTNAME}': hostname[1] }); } @@ -734,7 +748,7 @@ zabbix_export: name: Templates/Applications group_prototypes: - - name: 'Kubernetes/Components: {#COMPONENT.API}' + name: '{#CLUSTER_HOSTNAME}: Kubernetes/Components: {#COMPONENT.API}' templates: - name: 'Kubernetes API server by HTTP' @@ -835,7 +849,7 @@ zabbix_export: name: Templates/Applications group_prototypes: - - name: 'Kubernetes/Components: {#COMPONENT.CONTROLLER}' + name: '{#CLUSTER_HOSTNAME}: Kubernetes/Components: {#COMPONENT.CONTROLLER}' templates: - name: 'Kubernetes Controller manager by HTTP' @@ -1931,7 +1945,7 @@ zabbix_export: name: Templates/Applications group_prototypes: - - name: 'Kubernetes/Components: {#COMPONENT}' + name: '{#CLUSTER_HOSTNAME}: Kubernetes/Components: {#COMPONENT}' templates: - name: 'Kubernetes Kubelet by HTTP' @@ -3674,7 +3688,7 @@ zabbix_export: name: Templates/Applications group_prototypes: - - name: 'Kubernetes/Components: {#COMPONENT.SCHEDULER}' + name: '{#CLUSTER_HOSTNAME}: Kubernetes/Components: {#COMPONENT.SCHEDULER}' templates: - name: 'Kubernetes Scheduler by HTTP' diff --git a/templates/server/hpe_synergy_http/README.md b/templates/server/hpe_synergy_http/README.md new file mode 100644 index 00000000000..3a4f7b35f12 --- /dev/null +++ b/templates/server/hpe_synergy_http/README.md @@ -0,0 +1,317 @@ + +# HPE Synergy by HTTP + +## Overview + +For Zabbix version: 6.0 and higher +The template to monitor HPE Synergy by HTTP. +It works without any external scripts and uses the script item. + +This template was tested on: + +- HPE Synergy, version 12000 Frame with API version 1200 + +## Setup + +> See [Zabbix template operation](https://www.zabbix.com/documentation/6.0/manual/config/templates_out_of_the_box/http) for basic instructions. + +1. Link template to the host. +2. Configure macros {$HPE.SYNERGY.API.USERNAME} and {$HPE.SYNERGY.API.PASSWORD}. + +## Zabbix configuration + +No specific Zabbix configuration is required. + +### Macros used + +|Name|Description|Default| +|----|-----------|-------| +|{$HPE.SYNERGY.API.PASSWORD} |<p>Specify password for API.</p> |`` | +|{$HPE.SYNERGY.API.PORT} |<p>The API port.</p> |`443` | +|{$HPE.SYNERGY.API.SCHEME} |<p>The API scheme (http/https).</p> |`https` | +|{$HPE.SYNERGY.API.USERNAME} |<p>Specify user name for API.</p> |`zabbix` | +|{$HPE.SYNERGY.DATA.TIMEOUT} |<p>Response timeout for API.</p> |`15s` | + +## Template links + +There are no template links in this template. + +## Discovery rules + +|Name|Description|Type|Key and additional info| +|----|-----------|----|----| +|Appliance bays discovery |<p>A list of the appliance bays in the enclosure.</p> |DEPENDENT |hpe.synergy.appliances.discovery<p>**Preprocessing**:</p><p>- JSONPATH: `$.applianceBays`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | +|Cross bars discovery |<p>SDX cross fabric module connects to all compute devices installed in the system enclosure and brings in the capability of hard partitioning. Crossbar details are relevant only for enclosures with type "SDX".</p> |DEPENDENT |hpe.synergy.crossbars.discovery<p>**Preprocessing**:</p><p>- JSONPATH: `$.crossBars`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | +|Datacenters discovery |<p>A list of the datacenters.</p> |DEPENDENT |hpe.synergy.datacenters.discovery<p>**Preprocessing**:</p><p>- JSONPATH: `$.datacenters.members`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | +|Devices discovery |<p>A list of device bays in the enclosure.</p> |DEPENDENT |hpe.synergy.devices.discovery<p>**Preprocessing**:</p><p>- JSONPATH: `$.deviceBays`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | +|Enclosures discovery |<p>A list of enclosures resources.</p> |DEPENDENT |hpe.synergy.enclosures.discovery<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | +|Ethernet networks discovery |<p>A list of the ethernet networks.</p> |DEPENDENT |hpe.synergy.ethernet.networks.discovery<p>**Preprocessing**:</p><p>- JSONPATH: `$.["ethernet-networks"].members`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | +|Fabrics discovery |<p>A list of the fabrics.</p> |DEPENDENT |hpe.synergy.fabrics.discovery<p>**Preprocessing**:</p><p>- JSONPATH: `$.fabrics.members`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | +|Fans discovery |<p>A list of the fan bays in the enclosure.</p> |DEPENDENT |hpe.synergy.fans.discovery<p>**Preprocessing**:</p><p>- JSONPATH: `$.fanBays`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | +|FC networks discovery |<p>A list of the FC networks.</p> |DEPENDENT |hpe.synergy.fc.networks.discovery<p>**Preprocessing**:</p><p>- JSONPATH: `$.["fc-networks"].members`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | +|Hypervisor managers discovery |<p>A list of the hypervisor managers.</p> |DEPENDENT |hpe.synergy.hypervisor.managers.discovery<p>**Preprocessing**:</p><p>- JSONPATH: `$.["hypervisor-managers"].members`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | +|Interconnects discovery |<p>Interconnects are centrally managed by their containing logical interconnect. The interconnect provides a physical view of detailed downlink and uplink port state and configuration, including the current link state, speed, port role (uplink, downlink, or stacking), current pluggable media, power state, and immediate connected neighbor.</p> |DEPENDENT |hpe.synergy.interconnects.discovery<p>**Preprocessing**:</p><p>- JSONPATH: `$.interconnects.members`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | +|Logical enclosures discovery |<p>A list of the logical enclosures.</p> |DEPENDENT |hpe.synergy.logical_enclosures.discovery<p>**Preprocessing**:</p><p>- JSONPATH: `$.["logical-enclosures"].members`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | +|Managers discovery |<p>A list of the Synergy Frame Link Module bays.</p> |DEPENDENT |hpe.synergy.frame_link_modules.discovery<p>**Preprocessing**:</p><p>- JSONPATH: `$.managerBays`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | +|nPar discovery |<p>Electrically isolated hardware partition (nPar). Partition details are relevant only for enclosures with type "SDX".</p> |DEPENDENT |hpe.synergy.npar.discovery<p>**Preprocessing**:</p><p>- JSONPATH: `$.partitions`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | +|Power supplies discovery |<p>List of power supply bays in the enclosure.</p> |DEPENDENT |hpe.synergy.ps.discovery<p>**Preprocessing**:</p><p>- JSONPATH: `$.powerSupplyBays`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | +|Racks discovery |<p>A list of the racks.</p> |DEPENDENT |hpe.synergy.racks.discovery<p>**Preprocessing**:</p><p>- JSONPATH: `$.racks.members`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | +|Server hardware discovery |<p>The server hardware resource is a representation of a physical server.</p> |DEPENDENT |hpe.synergy.server_hardware.discovery<p>**Preprocessing**:</p><p>- JSONPATH: `$.["server-hardware"].members`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | +|Storage pools discovery |<p>A list of the storage pools.</p> |DEPENDENT |hpe.synergy.storage_pools.discovery<p>**Preprocessing**:</p><p>- JSONPATH: `$.["storage-pools"].members`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | +|Storage systems discovery |<p>A list of the storage systems.</p> |DEPENDENT |hpe.synergy.storage_systems.discovery<p>**Preprocessing**:</p><p>- JSONPATH: `$.["storage-systems"].members`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | +|Storage volumes discovery |<p>A list of the storage volumes.</p> |DEPENDENT |hpe.synergy.storage_volumes.discovery<p>**Preprocessing**:</p><p>- JSONPATH: `$.["storage-volumes"].members`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | +|Uplink sets discovery |<p>A list of the uplink sets.</p> |DEPENDENT |hpe.synergy.uplink_sets.discovery<p>**Preprocessing**:</p><p>- JSONPATH: `$.["uplink-sets"].members`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | + +## Items collected + +|Group|Name|Description|Type|Key and additional info| +|-----|----|-----------|----|---------------------| +|HPE |HPE Synergy: Get data |<p>The JSON with result of API requests.</p> |SCRIPT |hpe.synergy.data.get<p>**Expression**:</p>`The text is too long. Please see the template.` | +|HPE |HPE Synergy: Get errors |<p>A list of errors from API requests.</p> |DEPENDENT |hpe.synergy.data.errors<p>**Preprocessing**:</p><p>- JSONPATH: `$.errors`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> | +|HPE |HPE Synergy: Get enclosures |<p>A list of enclosures.</p> |DEPENDENT |hpe.synergy.data.enclosures<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members.[0]`</p> | +|HPE |HPE Synergy: Service ping |<p>Checks if the service is running and accepting TCP connections.</p> |SIMPLE |net.tcp.service["{$HPE.SYNERGY.API.SCHEME}","{HOST.CONN}","{$HPE.SYNERGY.API.PORT}"]<p>**Preprocessing**:</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `10m`</p> | +|HPE |Appliance bay [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Model |<p>The model name for the appliance.</p> |DEPENDENT |hpe.synergy.appliance["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",model]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].applianceBays[?(@.bayNumber == "{#BAY_NUMBER}")].model.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1d`</p> | +|HPE |Appliance bay [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Part number |<p>The part number of the appliance.</p> |DEPENDENT |hpe.synergy.appliance["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",part_number]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].applianceBays[?(@.bayNumber == "{#BAY_NUMBER}")].partNumber.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1d`</p> | +|HPE |Appliance bay [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Powered on |<p>Yes if the appliance is powered on; false otherwise.</p> |DEPENDENT |hpe.synergy.appliance["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",powered_on]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].applianceBays[?(@.bayNumber == "{#BAY_NUMBER}")].poweredOn.first()`</p><p>- BOOL_TO_DECIMAL</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> | +|HPE |Appliance bay [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Power state |<p>The power state of the appliance bay.</p><p>EFuse - The power state of the bay is that it has been EFused.</p><p>Reset - The power state of the bay is that it has been reset.</p><p>SoftReset - The power state of the bay is that it has been soft reset.</p><p>Unknown - The power state of the bay is unknown.</p> |DEPENDENT |hpe.synergy.appliance["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",bay_power_state]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].applianceBays[?(@.bayNumber == "{#BAY_NUMBER}")].bayPowerState.first()`</p><p>- STR_REPLACE: `EFuse 0`</p><p>- STR_REPLACE: `SoftReset 1`</p><p>- STR_REPLACE: `Reset 2`</p><p>- STR_REPLACE: `Unknown 3`</p><p>- IN_RANGE: `0 3 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 3`</p> | +|HPE |Appliance bay [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Presence |<p>Indicates whether an appliance is present in the bay:</p><p>Absent - The device slot is empty.</p><p>PresenceNoOp - The device slot is uninitialized.</p><p>PresenceUnknown - The device presence is unknown.</p><p>Present - The device slot has a device in it.</p><p>Subsumed - The device slot is configured to be part of another device slot. Not applicable for fan or power supply bays.</p> |DEPENDENT |hpe.synergy.appliance["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",presence]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].applianceBays[?(@.bayNumber == "{#BAY_NUMBER}")].devicePresence.first()`</p><p>- STR_REPLACE: `Absent 0`</p><p>- STR_REPLACE: `PresenceNoOp 1`</p><p>- STR_REPLACE: `PresenceUnknown 2`</p><p>- STR_REPLACE: `Present 3`</p><p>- STR_REPLACE: `Subsumed 4`</p><p>- IN_RANGE: `0 4 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 2`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> | +|HPE |Appliance bay [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Serial number |<p>The serial number of the appliance.</p> |DEPENDENT |hpe.synergy.appliance["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",serial_number]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].applianceBays[?(@.bayNumber == "{#BAY_NUMBER}")].serialNumber.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1d`</p> | +|HPE |Appliance bay [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Spare part number |<p>The spare part number of the appliance.</p> |DEPENDENT |hpe.synergy.appliance["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",spare_part_number]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].applianceBays[?(@.bayNumber == "{#BAY_NUMBER}")].sparePartNumber.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1d`</p> | +|HPE |Appliance bay [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Status |<p>The hardware status of the appliance:</p><p>Critical - Needs immediate attention.</p><p>Disabled - The resource is currently not operational.</p><p>OK - Indicates normal/informational behaviour.</p><p>Unknown - The health status is not yet known or cannot be determined.</p><p>Warning - Needs attention soon.</p> |DEPENDENT |hpe.synergy.appliance["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",status]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].applianceBays[?(@.bayNumber == "{#BAY_NUMBER}")].status.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `10m`</p><p>- STR_REPLACE: `Critical 0`</p><p>- STR_REPLACE: `Disabled 1`</p><p>- STR_REPLACE: `OK 2`</p><p>- STR_REPLACE: `Unknown 3`</p><p>- STR_REPLACE: `Warning 4`</p><p>- IN_RANGE: `0 4 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 3`</p> | +|HPE |Crossbar [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: HW version |<p>Hardware version.</p> |DEPENDENT |hpe.synergy.crossbar["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",hw_version]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].crossBars[?(@.bayNumber == "{#BAY_NUMBER}")].hwVersion.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1d`</p> | +|HPE |Crossbar [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Part number |<p>The part number provided by the manufacturer.</p> |DEPENDENT |hpe.synergy.crossbar["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",part_number]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].crossBars[?(@.bayNumber == "{#BAY_NUMBER}")].partNumber.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1d`</p> | +|HPE |Crossbar [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Presence |<p>Presence in a bay:</p><p>Absent - The device slot is empty.</p><p>PresenceNoOp - The device slot is uninitialized.</p><p>PresenceUnknown - The device presence is unknown.</p><p>Present - The device slot has a device in it.</p><p>Subsumed - The device slot is configured to be part of another device slot. Not applicable for fan or power supply bays.</p> |DEPENDENT |hpe.synergy.crossbar["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",presence]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].crossBars[?(@.bayNumber == "{#BAY_NUMBER}")].presence.first()`</p><p>- STR_REPLACE: `Absent 0`</p><p>- STR_REPLACE: `PresenceNoOp 1`</p><p>- STR_REPLACE: `PresenceUnknown 2`</p><p>- STR_REPLACE: `Present 3`</p><p>- STR_REPLACE: `Subsumed 4`</p><p>- IN_RANGE: `0 4 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 2`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> | +|HPE |Crossbar [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Serial number |<p>Serial number.</p> |DEPENDENT |hpe.synergy.crossbar["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",serial_number]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].crossBars[?(@.bayNumber == "{#BAY_NUMBER}")].serialNumber.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1d`</p> | +|HPE |Crossbar [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Status |<p>Overall health status of the crossbar:</p><p>Critical - Needs immediate attention.</p><p>Disabled - The resource is currently not operational.</p><p>OK - Indicates normal/informational behaviour.</p><p>Unknown - The health status is not yet known or cannot be determined.</p><p>Warning - Needs attention soon.</p> |DEPENDENT |hpe.synergy.crossbar["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",status]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].crossBars[?(@.bayNumber == "{#BAY_NUMBER}")].status.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `10m`</p><p>- STR_REPLACE: `Critical 0`</p><p>- STR_REPLACE: `Disabled 1`</p><p>- STR_REPLACE: `OK 2`</p><p>- STR_REPLACE: `Unknown 3`</p><p>- STR_REPLACE: `Warning 4`</p><p>- IN_RANGE: `0 4 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 3`</p> | +|HPE |Datacenter [{#NAME}]: State |<p>The current state of the resource. Valid values include Adding, AddError, Configured, CredentialError, Refreshing, RefreshError, Removing, RemoveError, and Unmanaged.</p> |DEPENDENT |hpe.synergy.datacenter["{#NAME}",state]<p>**Preprocessing**:</p><p>- JSONPATH: `$.datacenters.members[?(@.name == "{#NAME}")].state.first()`</p><p>- STR_REPLACE: `Adding 0`</p><p>- STR_REPLACE: `AddError 1`</p><p>- STR_REPLACE: `Configured 2`</p><p>- STR_REPLACE: `CredentialError 3`</p><p>- STR_REPLACE: `Refreshing 4`</p><p>- STR_REPLACE: `RefreshError 5`</p><p>- STR_REPLACE: `Removing 6`</p><p>- STR_REPLACE: `RemoveError 7`</p><p>- STR_REPLACE: `Unmanaged 8`</p><p>- IN_RANGE: `0 8 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 9`</p> | +|HPE |Datacenter [{#NAME}]: Status |<p>Overall health status of the resource. The following are the valid values for the status of the resource:</p><p>OK - indicates normal/informational behavior.</p><p>Disabled - indicates that a resource is not operational.</p><p>Warning - needs attention soon.</p><p>Critical - needs immediate attention.</p><p>Unknown - should be avoided, but there may be rare occasions where status is Unknown.</p> |DEPENDENT |hpe.synergy.datacenter["{#NAME}",status]<p>**Preprocessing**:</p><p>- JSONPATH: `$.datacenters.members[?(@.name == "{#NAME}")].status.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `10m`</p><p>- STR_REPLACE: `Critical 0`</p><p>- STR_REPLACE: `Disabled 1`</p><p>- STR_REPLACE: `OK 2`</p><p>- STR_REPLACE: `Unknown 3`</p><p>- STR_REPLACE: `Warning 4`</p><p>- IN_RANGE: `0 4 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 3`</p> | +|HPE |Device [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Model |<p>Model name of an unsupported device occupying the bay, if available.</p> |DEPENDENT |hpe.synergy.device["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",model]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].deviceBays[?(@.bayNumber == "{#BAY_NUMBER}")].model.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1d`</p> | +|HPE |Device [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Power allocated |<p>The power allocated for the enclosed blade.</p> |DEPENDENT |hpe.synergy.device["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",power_allocation]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].deviceBays[?(@.bayNumber == "{#BAY_NUMBER}")].powerAllocationWatts.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> | +|HPE |Device [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Presence |<p>Indicates whether a device is present:</p><p>Absent - The device slot is empty.</p><p>PresenceNoOp - The device slot is uninitialized.</p><p>PresenceUnknown - The device presence is unknown.</p><p>Present - The device slot has a device in it.</p><p>Subsumed - The device slot is configured to be part of another device slot. Not applicable for fan or power supply bays.</p> |DEPENDENT |hpe.synergy.device["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",presence]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].deviceBays[?(@.bayNumber == "{#BAY_NUMBER}")].devicePresence.first()`</p><p>- STR_REPLACE: `Absent 0`</p><p>- STR_REPLACE: `PresenceNoOp 1`</p><p>- STR_REPLACE: `PresenceUnknown 2`</p><p>- STR_REPLACE: `Present 3`</p><p>- STR_REPLACE: `Subsumed 4`</p><p>- IN_RANGE: `0 4 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 2`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> | +|HPE |Device [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Serial number |<p>If available, the serial number of any device occupying the bay.</p> |DEPENDENT |hpe.synergy.device["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",serial_number]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].deviceBays[?(@.bayNumber == "{#BAY_NUMBER}")].serialNumber.first()`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1d`</p> | +|HPE |Enclosure [{#NAME}]: Appliance bays count |<p>The number of appliance bays in the enclosure.</p> |DEPENDENT |hpe.synergy.enclosure["{#NAME}",appliance_bay_count]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#NAME}")].applianceBayCount.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> | +|HPE |Enclosure [{#NAME}]: Device bays count |<p>The number of device bays in the enclosure.</p> |DEPENDENT |hpe.synergy.enclosure["{#NAME}",device_bay_count]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#NAME}")].deviceBayCount.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> | +|HPE |Enclosure [{#NAME}]: Device bays power |<p>The amount of power allocated for the blades in the enclosure.</p> |DEPENDENT |hpe.synergy.enclosure["{#NAME}",device_bay_watts]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#NAME}")].deviceBayWatts.first()`</p> | +|HPE |Enclosure [{#NAME}]: Fan bays count |<p>The number of fan bays in the enclosure.</p> |DEPENDENT |hpe.synergy.enclosure["{#NAME}",fan_bay_count]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#NAME}")].fanBayCount.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> | +|HPE |Enclosure [{#NAME}]: Firmware baseline |<p>The name of the current firmware baseline.</p> |DEPENDENT |hpe.synergy.enclosure["{#NAME}",fw_baseline_name]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#NAME}")].fwBaselineName.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1d`</p> | +|HPE |Enclosure [{#NAME}]: Interconnect bays count |<p>The number of interconnect bays in the enclosure.</p> |DEPENDENT |hpe.synergy.enclosure["{#NAME}",interconnect_bay_count]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#NAME}")].interconnectBayCount.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> | +|HPE |Enclosure [{#NAME}]: Interconnect bays power |<p>The amount of power allocated for the interconnects in the enclosure.</p> |DEPENDENT |hpe.synergy.enclosure["{#NAME}",interconnect_bay_watts]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#NAME}")].interconnectBayWatts.first()`</p> | +|HPE |Enclosure [{#NAME}]: Min power supplies |<p>The minimum number of power supplies needed.</p> |DEPENDENT |hpe.synergy.enclosure["{#NAME}",min_ps]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#NAME}")].minimumPowerSupplies.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1d`</p> | +|HPE |Enclosure [{#NAME}]: Min power supplies for redundant power feed |<p>The minimum number of power supplies needed to fulfill the redundant line feed power mode.</p> |DEPENDENT |hpe.synergy.enclosure["{#NAME}",min_ps_redundant]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#NAME}")].minimumPowerSuppliesForRedundantPowerFeed.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1d`</p> | +|HPE |Enclosure [{#NAME}]: Model |<p>The enclosure model name, eg, "BladeSystem c7000 Enclosure G2".</p> |DEPENDENT |hpe.synergy.enclosure["{#NAME}",model]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#NAME}")].enclosureModel.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1d`</p> | +|HPE |Enclosure [{#NAME}]: Part number |<p>The part number of the enclosure.</p> |DEPENDENT |hpe.synergy.enclosure["{#NAME}",part_number]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#NAME}")].partNumber.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1d`</p> | +|HPE |Enclosure [{#NAME}]: Power allocated for fans and management devices |<p>The amount of power allocated for the fans and management devices of the enclosure.</p> |DEPENDENT |hpe.synergy.enclosure["{#NAME}",fans_mgmt_power]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#NAME}")].fansAndManagementDevicesWatts.first()`</p> | +|HPE |Enclosure [{#NAME}]: Power capacity |<p>The power capacity based on power mode.</p> |DEPENDENT |hpe.synergy.enclosure["{#NAME}",power_capacity]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#NAME}")].powerCapacityWatts.first()`</p> | +|HPE |Enclosure [{#NAME}]: Power supply bays count |<p>The number of power supply bays in the enclosure.</p> |DEPENDENT |hpe.synergy.enclosure["{#NAME}",ps_bay_count]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#NAME}")].powerSupplyBayCount.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> | +|HPE |Enclosure [{#NAME}]: Serial number |<p>The serial number of the enclosure.</p> |DEPENDENT |hpe.synergy.enclosure["{#NAME}",serial_number]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#NAME}")].serialNumber.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1d`</p> | +|HPE |Enclosure [{#NAME}]: State |<p>Current resource state of the enclosure:</p><p>Adding - The enclosure is being added.</p><p>Configured - The enclosure is configured and part of a logical enclosure. This is the usual state for an enclosure under full management.</p><p>Configuring - A transient state while the enclosure is being configured for a logical enclosure.</p><p>Interrupted - The previous operation on the enclosure did not complete. The operation should be re-attempted.</p><p>Monitored - The enclosure is being monitored. It is not part of a logical enclosure and only hardware-control operations are available.</p><p>Pending - There are pending operations on the enclosure. Additional operations are denied.</p><p>RemoveFailed - The previous operation to remove the enclosure did not succeed. The operation should be re-attempted.</p><p>Removing - The enclosure is being removed.</p><p>Unmanaged - The enclosure has been discovered, but has not yet been added for management or monitoring.</p><p>Unsupported - The enclosure model or version is not currently supported by HPE OneView. It cannot be configured or monitored.</p> |DEPENDENT |hpe.synergy.enclosure["{#NAME}",state]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#NAME}")].state.first()`</p><p>- STR_REPLACE: `Adding 0`</p><p>- STR_REPLACE: `Configured 1`</p><p>- STR_REPLACE: `Configuring 2`</p><p>- STR_REPLACE: `Interrupted 3`</p><p>- STR_REPLACE: `Monitored 4`</p><p>- STR_REPLACE: `Pending 5`</p><p>- STR_REPLACE: `RemoveFailed 6`</p><p>- STR_REPLACE: `Removing 7`</p><p>- STR_REPLACE: `Unmanaged 8`</p><p>- STR_REPLACE: `Unsupported 9`</p><p>- IN_RANGE: `0 9 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 10`</p> | +|HPE |Enclosure [{#NAME}]: State reason |<p>Indicates the reason the resource in its current state:</p><p>Missing - The enclosure is no longer connected into the frame link topology.</p><p>None - No reason is available, or none applies.</p><p>NotAdded - The enclosure has not been added.</p><p>NotOwner - The enclosure reports being managed by something other than this HPE OneView.</p><p>OperationFailed - A prior operation was interrupted.</p><p>Unowned - The enclosure reports not being under management.</p><p>UnsupportedFirmware - The firmware version of the enclosure is not supported by this version of HPE OneView.</p><p>UpdatingFirmware - A firmware update is in progress.</p> |DEPENDENT |hpe.synergy.enclosure["{#NAME}",state_reason]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#NAME}")].stateReason.first()`</p><p>- STR_REPLACE: `Missing 0`</p><p>- STR_REPLACE: `None 1`</p><p>- STR_REPLACE: `NotAdded 2`</p><p>- STR_REPLACE: `NotOwner 3`</p><p>- STR_REPLACE: `OperationFailed 4`</p><p>- STR_REPLACE: `Unowned 5`</p><p>- STR_REPLACE: `UnsupportedFirmware 6`</p><p>- STR_REPLACE: `UpdatingFirmware 7`</p><p>- IN_RANGE: `0 7 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 8`</p> | +|HPE |Enclosure [{#NAME}]: Status |<p>Overall health status of the enclosure.</p><p>The enclosure status reflects the hardware health of the enclosure, all bays, and enclosure components (e.g. enclosure mid-plane, fans, power supplies, Synergy Frame Link Modules, and Synergy Composers). It explicitly does not include the status of other HPE OneView resources such as blades (server hardware), interconnects, and drive enclosures.</p><p>Critical - Needs immediate attention.</p><p>Disabled - The resource is currently not operational.</p><p>OK - Indicates normal/informational behaviour.</p><p>Unknown - The health status is not yet known or cannot be determined.</p><p>Warning - Needs attention soon.</p> |DEPENDENT |hpe.synergy.enclosure["{#NAME}",status]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#NAME}")].status.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `10m`</p><p>- STR_REPLACE: `Critical 0`</p><p>- STR_REPLACE: `Disabled 1`</p><p>- STR_REPLACE: `OK 2`</p><p>- STR_REPLACE: `Unknown 3`</p><p>- STR_REPLACE: `Warning 4`</p><p>- IN_RANGE: `0 4 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 3`</p> | +|HPE |Enclosure [{#NAME}]: Total allocated power |<p>The total amount of power allocated in the enclosure.</p> |DEPENDENT |hpe.synergy.enclosure["{#NAME}",power_total_allocated]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#NAME}")].powerAllocatedWatts.first()`</p> | +|HPE |Enclosure [{#NAME}]: Total available power |<p>The amount of unallocated power in the enclosure.</p> |DEPENDENT |hpe.synergy.enclosure["{#NAME}",power_total_available]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#NAME}")].powerAvailableWatts.first()`</p> | +|HPE |Enclosure [{#NAME}]: Type |<p>The type of the enclosure, eg, "C7000" or "SY12000" or "SDX".</p> |DEPENDENT |hpe.synergy.enclosure["{#NAME}",type]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#NAME}")].enclosureType.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | +|HPE |Ethernet network [{#NAME}]: State |<p>The current state of the resource.</p> |DEPENDENT |hpe.synergy.ethernet.network["{#NAME}",state]<p>**Preprocessing**:</p><p>- JSONPATH: `$.["ethernet-networks"].members[?(@.name == "{#NAME}")].state.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> | +|HPE |Ethernet network [{#NAME}]: Status |<p>Overall health status of the resource. The following are the valid values for the status of the resource:</p><p>OK - indicates normal/informational behavior.</p><p>Disabled - indicates that a resource is not operational.</p><p>Warning - needs attention soon.</p><p>Critical - needs immediate attention.</p><p>Unknown - should be avoided, but there may be rare occasions where status is Unknown.</p> |DEPENDENT |hpe.synergy.ethernet.network["{#NAME}",status]<p>**Preprocessing**:</p><p>- JSONPATH: `$.["ethernet-networks"].members[?(@.name == "{#NAME}")].status.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `10m`</p><p>- STR_REPLACE: `Critical 0`</p><p>- STR_REPLACE: `Disabled 1`</p><p>- STR_REPLACE: `OK 2`</p><p>- STR_REPLACE: `Unknown 3`</p><p>- STR_REPLACE: `Warning 4`</p><p>- IN_RANGE: `0 4 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 3`</p> | +|HPE |Fabric [{#NAME}]: State |<p>The current state of the resource.</p> |DEPENDENT |hpe.synergy.fabric["{#NAME}",state]<p>**Preprocessing**:</p><p>- JSONPATH: `$.fabrics.members[?(@.name == "{#NAME}")].state.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> | +|HPE |Fabric [{#NAME}]: Status |<p>Overall health status of the resource. The following are the valid values for the status of the resource:</p><p>OK - indicates normal/informational behavior.</p><p>Disabled - indicates that a resource is not operational.</p><p>Warning - needs attention soon.</p><p>Critical - needs immediate attention.</p><p>Unknown - should be avoided, but there may be rare occasions where status is Unknown.</p> |DEPENDENT |hpe.synergy.fabric["{#NAME}",status]<p>**Preprocessing**:</p><p>- JSONPATH: `$.fabrics.members[?(@.name == "{#NAME}")].status.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `10m`</p><p>- STR_REPLACE: `Critical 0`</p><p>- STR_REPLACE: `Disabled 1`</p><p>- STR_REPLACE: `OK 2`</p><p>- STR_REPLACE: `Unknown 3`</p><p>- STR_REPLACE: `Warning 4`</p><p>- IN_RANGE: `0 4 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 3`</p> | +|HPE |Fan [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Model |<p>The common descriptive model of the fan.</p> |DEPENDENT |hpe.synergy.fan["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",model]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].fanBays[?(@.bayNumber == "{#BAY_NUMBER}")].model.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1d`</p> | +|HPE |Fan [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Part number |<p>The part number of the fan.</p> |DEPENDENT |hpe.synergy.fan["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",part_number]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].fanBays[?(@.bayNumber == "{#BAY_NUMBER}")].partNumber.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1d`</p> | +|HPE |Fan [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Presence |<p>Indicates whether a fan is present:</p><p>Absent - The device slot is empty.</p><p>PresenceNoOp - The device slot is uninitialized.</p><p>PresenceUnknown - The device presence is unknown.</p><p>Present - The device slot has a device in it.</p><p>Subsumed - The device slot is configured to be part of another device slot. Not applicable for fan or power supply bays.</p> |DEPENDENT |hpe.synergy.fan["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",presence]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].fanBays[?(@.bayNumber == "{#BAY_NUMBER}")].devicePresence.first()`</p><p>- STR_REPLACE: `Absent 0`</p><p>- STR_REPLACE: `PresenceNoOp 1`</p><p>- STR_REPLACE: `PresenceUnknown 2`</p><p>- STR_REPLACE: `Present 3`</p><p>- STR_REPLACE: `Subsumed 4`</p><p>- IN_RANGE: `0 4 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 2`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> | +|HPE |Fan [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Required |<p>Indicates whether the enclosure configuration requires a fan to be present in the bay.</p> |DEPENDENT |hpe.synergy.fan["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",required]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].fanBays[?(@.bayNumber == "{#BAY_NUMBER}")].deviceRequired.first()`</p><p>- BOOL_TO_DECIMAL</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> | +|HPE |Fan [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Serial number |<p>The serial number of the fan.</p> |DEPENDENT |hpe.synergy.fan["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",serial_number]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].fanBays[?(@.bayNumber == "{#BAY_NUMBER}")].serialNumber.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1d`</p> | +|HPE |Fan [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Spare part number |<p>The spare part number to be used when ordering an additional or replacement fan of this type.</p> |DEPENDENT |hpe.synergy.fan["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",spare_part_number]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].fanBays[?(@.bayNumber == "{#BAY_NUMBER}")].sparePartNumber.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1d`</p> | +|HPE |Fan [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: State |<p>Current state of the fan:</p><p>Degraded - Fan is degraded.</p><p>Failed - Fan has failed.</p><p>Misplaced - Fan is present, but not required, in this bay, and the overall fan configuration is not compliant with the enclosure fan placement rules.</p><p>Missing - Fan is required, but is not present.</p><p>OK - Fan bay has no issues.</p><p>Unknown - Unknown fan's state.</p> |DEPENDENT |hpe.synergy.fan["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",state]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].fanBays[?(@.bayNumber == "{#BAY_NUMBER}")].state.first()`</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 5`</p><p>- STR_REPLACE: `Degraded 0`</p><p>- STR_REPLACE: `Failed 1`</p><p>- STR_REPLACE: `Misplaced 2`</p><p>- STR_REPLACE: `Missing 3`</p><p>- STR_REPLACE: `OK 4`</p><p>- IN_RANGE: `0 4 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 5`</p> | +|HPE |Fan [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Status |<p>Overall health status of the fan:</p><p>Critical - Needs immediate attention.</p><p>Disabled - The resource is currently not operational.</p><p>OK - Indicates normal/informational behavior.</p><p>Unknown - The health status is not yet known or cannot be determined.</p><p>Warning - Needs attention soon.</p> |DEPENDENT |hpe.synergy.fan["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",status]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].fanBays[?(@.bayNumber == "{#BAY_NUMBER}")].status.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `10m`</p><p>- STR_REPLACE: `Critical 0`</p><p>- STR_REPLACE: `Disabled 1`</p><p>- STR_REPLACE: `OK 2`</p><p>- STR_REPLACE: `Unknown 3`</p><p>- STR_REPLACE: `Warning 4`</p><p>- IN_RANGE: `0 4 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 3`</p> | +|HPE |FC network [{#NAME}]: State |<p>The current state of the resource.</p> |DEPENDENT |hpe.synergy.fc.network["{#NAME}",state]<p>**Preprocessing**:</p><p>- JSONPATH: `$.["fc-networks"].members[?(@.name == "{#NAME}")].state.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> | +|HPE |FC network [{#NAME}]: Status |<p>Overall health status of the resource. The following are the valid values for the status of the resource:</p><p>OK - indicates normal/informational behavior.</p><p>Disabled - indicates that a resource is not operational.</p><p>Warning - needs attention soon.</p><p>Critical - needs immediate attention.</p><p>Unknown - should be avoided, but there may be rare occasions where status is Unknown.</p> |DEPENDENT |hpe.synergy.fc.network["{#NAME}",status]<p>**Preprocessing**:</p><p>- JSONPATH: `$.["fc-networks"].members[?(@.name == "{#NAME}")].status.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `10m`</p><p>- STR_REPLACE: `Critical 0`</p><p>- STR_REPLACE: `Disabled 1`</p><p>- STR_REPLACE: `OK 2`</p><p>- STR_REPLACE: `Unknown 3`</p><p>- STR_REPLACE: `Warning 4`</p><p>- IN_RANGE: `0 4 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 3`</p> | +|HPE |Hypervisor manager [{#NAME}]: State |<p>Current state of the resource. Valid values include Connected, Disconnected, Configuring and Error.</p> |DEPENDENT |hpe.synergy.hypervisor_manager["{#NAME}",state]<p>**Preprocessing**:</p><p>- JSONPATH: `$.["hypervisor-managers"].members[?(@.displayName == "{#NAME}")].state.first()`</p><p>- STR_REPLACE: `Connected 0`</p><p>- STR_REPLACE: `Disconnected 1`</p><p>- STR_REPLACE: `Configuring 2`</p><p>- STR_REPLACE: `Error 3`</p><p>- IN_RANGE: `0 3 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 4`</p> | +|HPE |Hypervisor manager [{#NAME}]: State reason |<p>Indicates the reason the resource in its current state.</p> |DEPENDENT |hpe.synergy.hypervisor_manager["{#NAME}",state_reason]<p>**Preprocessing**:</p><p>- JSONPATH: `$.["hypervisor-managers"].members[?(@.displayName == "{#NAME}")].stateReason.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> | +|HPE |Hypervisor manager [{#NAME}]: Status |<p>Current status of this resource:</p><p>Critical - Needs immediate attention.</p><p>Disabled - The resource is currently not operational.</p><p>OK - Indicates normal/informational behavior.</p><p>Unknown - The health status is not yet known or cannot be determined.</p><p>Warning - Needs attention soon.</p> |DEPENDENT |hpe.synergy.hypervisor_manager["{#NAME}",status]<p>**Preprocessing**:</p><p>- JSONPATH: `$.["hypervisor-managers"].members[?(@.displayName == "{#NAME}")].status.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `10m`</p><p>- STR_REPLACE: `Critical 0`</p><p>- STR_REPLACE: `Disabled 1`</p><p>- STR_REPLACE: `OK 2`</p><p>- STR_REPLACE: `Unknown 3`</p><p>- STR_REPLACE: `Warning 4`</p><p>- IN_RANGE: `0 4 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 3`</p> | +|HPE |Interconnect [{#NAME}]: Hardware health |<p>Interconnect hardware health status.</p> |DEPENDENT |hpe.synergy.interconnect["{#NAME}",hw.health]<p>**Preprocessing**:</p><p>- JSONPATH: `$.interconnects.members[?(@.name == "{#NAME}")].interconnectHardwareHealth.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> | +|HPE |Interconnect [{#NAME}]: Model |<p>Interconnect model.</p> |DEPENDENT |hpe.synergy.interconnect["{#NAME}",model]<p>**Preprocessing**:</p><p>- JSONPATH: `$.interconnects.members[?(@.name == "{#NAME}")].model.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1d`</p> | +|HPE |Interconnect [{#NAME}]: Part number |<p>Interconnect part number.</p> |DEPENDENT |hpe.synergy.interconnect["{#NAME}",part_number]<p>**Preprocessing**:</p><p>- JSONPATH: `$.interconnects.members[?(@.name == "{#NAME}")].partNumber.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1d`</p> | +|HPE |Interconnect [{#NAME}]: Port count |<p>Number of ports on the interconnect.</p> |DEPENDENT |hpe.synergy.interconnect["{#NAME}",port_count]<p>**Preprocessing**:</p><p>- JSONPATH: `$.interconnects.members[?(@.name == "{#NAME}")].portCount.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> | +|HPE |Interconnect [{#NAME}]: Serial number |<p>Interconnect serial number.</p> |DEPENDENT |hpe.synergy.interconnect["{#NAME}",serial_number]<p>**Preprocessing**:</p><p>- JSONPATH: `$.interconnects.members[?(@.name == "{#NAME}")].serialNumber.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1d`</p> | +|HPE |Interconnect [{#NAME}]: Spare part number |<p>Interconnect spare part number.</p> |DEPENDENT |hpe.synergy.interconnect["{#NAME}",spare_part_number]<p>**Preprocessing**:</p><p>- JSONPATH: `$.interconnects.members[?(@.name == "{#NAME}")].sparePartNumber.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1d`</p> | +|HPE |Interconnect [{#NAME}]: State |<p>Current state of the resource</p> |DEPENDENT |hpe.synergy.interconnect["{#NAME}",state]<p>**Preprocessing**:</p><p>- JSONPATH: `$.interconnects.members[?(@.name == "{#NAME}")].state.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> | +|HPE |Interconnect [{#NAME}]: Status |<p>Overall health status of the resource. The following are the valid values for the status of the resource:</p><p>Critical - Needs immediate attention.</p><p>Disabled - The resource is currently not operational.</p><p>OK - Indicates normal/informational behavior.</p><p>Unknown - The health status is not yet known or cannot be determined.</p><p>Unknown - should be avoided, but there may be rare occasions where status is Unknown.</p> |DEPENDENT |hpe.synergy.interconnect["{#NAME}",status]<p>**Preprocessing**:</p><p>- JSONPATH: `$.interconnects.members[?(@.name == "{#NAME}")].status.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `10m`</p><p>- STR_REPLACE: `Critical 0`</p><p>- STR_REPLACE: `Disabled 1`</p><p>- STR_REPLACE: `OK 2`</p><p>- STR_REPLACE: `Unknown 3`</p><p>- STR_REPLACE: `Warning 4`</p><p>- IN_RANGE: `0 4 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 3`</p> | +|HPE |Logical enclosure [{#NAME}]: State |<p>Current resource state of the logical enclosure:</p><p>Consistent - This is the expected state of the logical enclosure. The logical enclosure configuration is consistent with the enclosure group and the configuration of the hardware resources is consistent with the logical enclosure configuration.</p><p>Creating - The logical enclosure is being created.</p><p>DeleteFailed - The prior attempt to delete the logical enclosure failed. Retry the delete operation potentially with the force option. No other logical enclosure operations are allowed in this state.</p><p>Deleting - The logical enclosure is being deleted.</p><p>Inconsistent - The configuration of the logical enclosure differs from that of the enclosure group, or the configuration of the hardware resources is inconsistent with the logical enclosure configuration. Perform an Update from group, Reapply configuration, or Update firmware action as appropriate to bring the configuration back into consistency.</p><p>Updating - Configuration changes are being applied to the hardware configuration.</p> |DEPENDENT |hpe.synergy.logical_enclosure["{#NAME}",state]<p>**Preprocessing**:</p><p>- JSONPATH: `$.["logical-enclosures"].members[?(@.name == "{#NAME}")].state.first()`</p><p>- STR_REPLACE: `Inconsistent 0`</p><p>- STR_REPLACE: `Creating 1`</p><p>- STR_REPLACE: `DeleteFailed 2`</p><p>- STR_REPLACE: `Deleting 3`</p><p>- STR_REPLACE: `Consistent 4`</p><p>- STR_REPLACE: `Updating 5`</p><p>- IN_RANGE: `0 5 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 6`</p> | +|HPE |Logical enclosure [{#NAME}]: Status |<p>Overall health status of the resource. The following are the valid values for the status of the resource:</p><p>OK - indicates normal/informational behavior.</p><p>Disabled - indicates that a resource is not operational.</p><p>Warning - needs attention soon.</p><p>Critical - needs immediate attention.</p><p>Unknown - should be avoided, but there may be rare occasions where status is Unknown.</p> |DEPENDENT |hpe.synergy.logical_enclosure["{#NAME}",status]<p>**Preprocessing**:</p><p>- JSONPATH: `$.["logical-enclosures"].members[?(@.name == "{#NAME}")].status.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `10m`</p><p>- STR_REPLACE: `Critical 0`</p><p>- STR_REPLACE: `Disabled 1`</p><p>- STR_REPLACE: `OK 2`</p><p>- STR_REPLACE: `Unknown 3`</p><p>- STR_REPLACE: `Warning 4`</p><p>- IN_RANGE: `0 4 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 3`</p> | +|HPE |Partition [{#ENCLOSURE_NAME}:{#PARTITION_ID}]: Devices count |<p>The number of blades in the partition.</p> |DEPENDENT |hpe.synergy.partition["{#PARTITION_ID}","{#ENCLOSURE_NAME}",device_count]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].partitions[?(@.partitionID == "{#PARTITION_ID}")].deviceCount.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `10m`</p> | +|HPE |Partition [{#ENCLOSURE_NAME}:{#PARTITION_ID}]: Health |<p>Indicates the health of the partition and the health of its owned resources (blades and IO bays) as reported by firmware. If a problem is detected with one of the resources, the health of the partition is reported as Degraded. If all of the resources in the partition are operating correctly the health of the partition is reported as OK.</p><p>NparDegrade - One or more resources in the partition are unhealthy.</p><p>NparHealthInvalid - Partition health is invalid.</p><p>NparHealthMax - Delimiter defined by firmware.</p><p>NparOk - All the resources in partition are healthy.</p> |DEPENDENT |hpe.synergy.partition["{#PARTITION_ID}","{#ENCLOSURE_NAME}",health]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].partitions[?(@.partitionID == "{#PARTITION_ID}")].partitionHealth.first()`</p><p>- STR_REPLACE: `NparDegrade 0`</p><p>- STR_REPLACE: `NparHealthInvalid 1`</p><p>- STR_REPLACE: `NparHealthMax 2`</p><p>- STR_REPLACE: `NparOk 3`</p><p>- IN_RANGE: `0 3 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 4`</p> | +|HPE |Partition [{#ENCLOSURE_NAME}:{#PARTITION_ID}]: Memory |<p>Total memory of the partition.</p> |DEPENDENT |hpe.synergy.partition["{#PARTITION_ID}","{#ENCLOSURE_NAME}",memory]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].partitions[?(@.partitionID == "{#PARTITION_ID}")].memoryMb.first()`</p><p>- MULTIPLIER: `1048576`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> | +|HPE |Partition [{#ENCLOSURE_NAME}:{#PARTITION_ID}]: Processors Count |<p>The number of processors in the partition.</p> |DEPENDENT |hpe.synergy.partition["{#PARTITION_ID}","{#ENCLOSURE_NAME}",processor_count]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].partitions[?(@.partitionID == "{#PARTITION_ID}")].processorCount.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `10m`</p> | +|HPE |Partition [{#ENCLOSURE_NAME}:{#PARTITION_ID}]: Status |<p>Indicates whether the partition has booted and its current power state:</p><p>ParStatusActive - Partition is active when a 'poweron' operation is initiated on the partition and the firmware boot process is started.</p><p>ParStatusInactive - Partition is in inactive state after it has been created or shut down.</p><p>ParStatusInvalid - Partition status is invalid.</p><p>ParStatusManualRepair - Partition is under manual repair.</p><p>ParStatusMax - Delimiter defined by OA firmware.</p><p>ParStatusUndefined - Partition status is undefined.</p><p>ParStatusUnknown - Partition might report an 'Unknown' state after an OA restart. This state is possible when the firmware is not able to identify the correct partition state due to internal firmware errors at OA startup. The state is persistent and can only be cleared by force powering off the partition from the OA. A partition in this state will not accept any partition operation except parstatus and force poweroff. Any active OS instances continue to run unhindered even when the partition is in an Unknown state.</p> |DEPENDENT |hpe.synergy.partition["{#PARTITION_ID}","{#ENCLOSURE_NAME}",status]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].partitions[?(@.partitionID == "{#PARTITION_ID}")].partitionStatus.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `10m`</p><p>- STR_REPLACE: `ParStatusActive 0`</p><p>- STR_REPLACE: `ParStatusInactive 1`</p><p>- STR_REPLACE: `ParStatusInvalid 2`</p><p>- STR_REPLACE: `ParStatusManualRepair 3`</p><p>- STR_REPLACE: `ParStatusMax 4`</p><p>- STR_REPLACE: `ParStatusUndefined 5`</p><p>- STR_REPLACE: `ParStatusUnknown 6`</p><p>- IN_RANGE: `0 6 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 6`</p> | +|HPE |Power Supply [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Model |<p>The common descriptive model of the power supply.</p> |DEPENDENT |hpe.synergy.power_supply["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",model]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].powerSupplyBays[?(@.bayNumber == "{#BAY_NUMBER}")].model.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1d`</p> | +|HPE |Power Supply [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Output capacity |<p>The power supply output capacity.</p> |DEPENDENT |hpe.synergy.power_supply["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",output_capacity]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].powerSupplyBays[?(@.bayNumber == "{#BAY_NUMBER}")].outputCapacityWatts.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> | +|HPE |Power Supply [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Part number |<p>The part number of the power supply.</p> |DEPENDENT |hpe.synergy.power_supply["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",part_number]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].powerSupplyBays[?(@.bayNumber == "{#BAY_NUMBER}")].partNumber.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1d`</p> | +|HPE |Power Supply [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Presence |<p>Indicates whether a power supply is present.</p><p>Absent - The device slot is empty.</p><p>PresenceNoOp - The device slot is uninitialized.</p><p>PresenceUnknown - The device presence is unknown.</p><p>Present - The device slot has a device in it.</p><p>Subsumed - The device slot is configured to be part of another device slot. Not applicable for fan or power supply bays.</p> |DEPENDENT |hpe.synergy.power_supply["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",presence]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].powerSupplyBays[?(@.bayNumber == "{#BAY_NUMBER}")].devicePresence.first()`</p><p>- STR_REPLACE: `Absent 0`</p><p>- STR_REPLACE: `PresenceNoOp 1`</p><p>- STR_REPLACE: `PresenceUnknown 2`</p><p>- STR_REPLACE: `Present 3`</p><p>- STR_REPLACE: `Subsumed 4`</p><p>- IN_RANGE: `0 4 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 2`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> | +|HPE |Power Supply [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Serial number |<p>The unique serial number of the power supply.</p> |DEPENDENT |hpe.synergy.power_supply["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",serial_number]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].powerSupplyBays[?(@.bayNumber == "{#BAY_NUMBER}")].serialNumber.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1d`</p> | +|HPE |Power Supply [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Spare part number |<p>The spare part number to be used when ordering an additional or replacement power supply of this type.</p> |DEPENDENT |hpe.synergy.power_supply["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",spare_part_number]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].powerSupplyBays[?(@.bayNumber == "{#BAY_NUMBER}")].sparePartNumber.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1d`</p> | +|HPE |Power Supply [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Status |<p>Overall health status of the power supply:</p><p>Critical - Needs immediate attention.</p><p>Disabled - The resource is currently not operational.</p><p>OK - Indicates normal/informational behavior.</p><p>Unknown - The health status is not yet known or cannot be determined.</p><p>Warning - Needs attention soon.</p> |DEPENDENT |hpe.synergy.power_supply["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",status]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].powerSupplyBays[?(@.bayNumber == "{#BAY_NUMBER}")].status.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `10m`</p><p>- STR_REPLACE: `Critical 0`</p><p>- STR_REPLACE: `Disabled 1`</p><p>- STR_REPLACE: `OK 2`</p><p>- STR_REPLACE: `Unknown 3`</p><p>- STR_REPLACE: `Warning 4`</p><p>- IN_RANGE: `0 4 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 3`</p> | +|HPE |Rack [{#NAME}]: State |<p>The current state of the resource. Valid values include Adding, AddError, Configured, CredentialError, Refreshing, RefreshError, Removing, RemoveError, and Unmanaged.</p> |DEPENDENT |hpe.synergy.rack["{#NAME}",state]<p>**Preprocessing**:</p><p>- JSONPATH: `$.racks.members[?(@.name == "{#NAME}")].state.first()`</p><p>- STR_REPLACE: `Adding 0`</p><p>- STR_REPLACE: `AddError 1`</p><p>- STR_REPLACE: `Configured 2`</p><p>- STR_REPLACE: `CredentialError 3`</p><p>- STR_REPLACE: `Refreshing 4`</p><p>- STR_REPLACE: `RefreshError 5`</p><p>- STR_REPLACE: `Removing 6`</p><p>- STR_REPLACE: `RemoveError 7`</p><p>- STR_REPLACE: `Unmanaged 8`</p><p>- IN_RANGE: `0 8 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 9`</p> | +|HPE |Rack [{#NAME}]: Status |<p>Overall health status of the resource. The following are the valid values for the status of the resource:</p><p>OK - indicates normal/informational behavior.</p><p>Disabled - indicates that a resource is not operational.</p><p>Warning - needs attention soon.</p><p>Critical - needs immediate attention.</p><p>Unknown - should be avoided, but there may be rare occasions where status is Unknown.</p> |DEPENDENT |hpe.synergy.rack["{#NAME}",status]<p>**Preprocessing**:</p><p>- JSONPATH: `$.racks.members[?(@.name == "{#NAME}")].status.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `10m`</p><p>- STR_REPLACE: `Critical 0`</p><p>- STR_REPLACE: `Disabled 1`</p><p>- STR_REPLACE: `OK 2`</p><p>- STR_REPLACE: `Unknown 3`</p><p>- STR_REPLACE: `Warning 4`</p><p>- IN_RANGE: `0 4 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 3`</p> | +|HPE |Server [{#SERVER_NAME}:{#LOCATION}]: Maintenance state |<p>Server Hardware maintenance flag - Disruptive maintenance operations like firmware update can cause many server hardware alerts to be generated in a short period of time. Ex: Network connectivity lost or Server reset detected. When this field is set, predefined alerts for this particular device are suppressed. This field is set only when firmware update is ongoing. The alerts are processed normally once firmware update operation completes. Possible values are Maintenance and Normal.</p> |DEPENDENT |hpe.synergy.server_hardware["{#LOCATION}",maintenance_state]<p>**Preprocessing**:</p><p>- JSONPATH: `$.["server-hardware"].members[?(@.name == "{#LOCATION}")].maintenanceState.first()`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p><p>- STR_REPLACE: `Maintenance 0`</p><p>- STR_REPLACE: `Normal 1`</p><p>- IN_RANGE: `0 1 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 2`</p> | +|HPE |Server [{#SERVER_NAME}:{#LOCATION}]: Maintenance state reason |<p>This field is set to Firmware update when server is put to maintenance.</p> |DEPENDENT |hpe.synergy.server_hardware["{#LOCATION}",maintenance_state_reason]<p>**Preprocessing**:</p><p>- JSONPATH: `$.["server-hardware"].members[?(@.name == "{#LOCATION}")].maintenanceStateReason.first()`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> | +|HPE |Server [{#SERVER_NAME}:{#LOCATION}]: Memory |<p>Amount of memory installed on this server hardware.</p> |DEPENDENT |hpe.synergy.server_hardware["{#LOCATION}",memory]<p>**Preprocessing**:</p><p>- JSONPATH: `$.["server-hardware"].members[?(@.name == "{#LOCATION}")].memoryMb.first()`</p><p>- MULTIPLIER: `1048576`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> | +|HPE |Server [{#SERVER_NAME}:{#LOCATION}]: Migration state |<p>The state of an ongoing VCM migration:</p><p>Migrating - The enclosure is in the process of migrating from VCM.</p><p>NotApplicable - The enclosure did not require or has already completed migration.</p><p>Unknown - The migration state is unknown.</p> |DEPENDENT |hpe.synergy.server_hardware["{#LOCATION}",migration_state]<p>**Preprocessing**:</p><p>- JSONPATH: `$.["server-hardware"].members[?(@.name == "{#LOCATION}")].migrationState.first()`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p><p>- STR_REPLACE: `Migrating 0`</p><p>- STR_REPLACE: `NotApplicable 1`</p><p>- STR_REPLACE: `Unknown 2`</p><p>- IN_RANGE: `0 2 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 2`</p> | +|HPE |Server [{#SERVER_NAME}:{#LOCATION}]: Model |<p>The full server hardware model string.</p> |DEPENDENT |hpe.synergy.server_hardware["{#LOCATION}",model]<p>**Preprocessing**:</p><p>- JSONPATH: `$.["server-hardware"].members[?(@.name == "{#LOCATION}")].model.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1d`</p> | +|HPE |Server [{#SERVER_NAME}:{#LOCATION}]: Part number |<p>The part number for this server hardware.</p> |DEPENDENT |hpe.synergy.server_hardware["{#LOCATION}",part_number]<p>**Preprocessing**:</p><p>- JSONPATH: `$.["server-hardware"].members[?(@.name == "{#LOCATION}")].partNumber.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1d`</p> | +|HPE |Server [{#SERVER_NAME}:{#LOCATION}]: Power state |<p>Current power state of the server hardware. Values are Unknown, On, Off, PoweringOn, PoweringOff or Resetting.</p> |DEPENDENT |hpe.synergy.server_hardware["{#LOCATION}",power_state]<p>**Preprocessing**:</p><p>- JSONPATH: `$.["server-hardware"].members[?(@.name == "{#LOCATION}")].powerState.first()`</p><p>- STR_REPLACE: `PoweringOff 0`</p><p>- STR_REPLACE: `PoweringOn 1`</p><p>- STR_REPLACE: `Resetting 2`</p><p>- STR_REPLACE: `Unknown 3`</p><p>- STR_REPLACE: `Off 4`</p><p>- STR_REPLACE: `On 5`</p><p>- IN_RANGE: `0 5 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 3`</p> | +|HPE |Server [{#SERVER_NAME}:{#LOCATION}]: Processor cores count |<p>The number of cores available per processor.</p> |DEPENDENT |hpe.synergy.server_hardware.processor["{#LOCATION}",cores_count]<p>**Preprocessing**:</p><p>- JSONPATH: `$.["server-hardware"].members[?(@.name == "{#LOCATION}")].processorCoreCount.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> | +|HPE |Server [{#SERVER_NAME}:{#LOCATION}]: Processors count |<p>The number of processors installed on this server hardware.</p> |DEPENDENT |hpe.synergy.server_hardware.processor["{#LOCATION}",count]<p>**Preprocessing**:</p><p>- JSONPATH: `$.["server-hardware"].members[?(@.name == "{#LOCATION}")].processorCount.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> | +|HPE |Server [{#SERVER_NAME}:{#LOCATION}]: Processor speed |<p>Speed of the CPUs.</p> |DEPENDENT |hpe.synergy.server_hardware.processor["{#LOCATION}",speed]<p>**Preprocessing**:</p><p>- JSONPATH: `$.["server-hardware"].members[?(@.name == "{#LOCATION}")].processorSpeedMhz.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> | +|HPE |Server [{#SERVER_NAME}:{#LOCATION}]: Processor type |<p>Type of CPU installed on this server hardware.</p> |DEPENDENT |hpe.synergy.server_hardware.processor["{#LOCATION}",type]<p>**Preprocessing**:</p><p>- JSONPATH: `$.["server-hardware"].members[?(@.name == "{#LOCATION}")].processorType.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1d`</p> | +|HPE |Server [{#SERVER_NAME}:{#LOCATION}]: Serial number |<p>The serial number of the server hardware.</p> |DEPENDENT |hpe.synergy.server_hardware["{#LOCATION}",serial_number]<p>**Preprocessing**:</p><p>- JSONPATH: `$.["server-hardware"].members[?(@.name == "{#LOCATION}")].serialNumber.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1d`</p> | +|HPE |Server [{#SERVER_NAME}:{#LOCATION}]: State |<p>The current resource state of the server hardware. Allowable values are:</p><p>Unknown - Not initialized,</p><p>Adding - Server being added,</p><p>NoProfileApplied - Server successfully added,</p><p>Monitored - Server being monitored,</p><p>Unmanaged - Discovered a supported server,</p><p>Removing - Server being removed,</p><p>RemoveFailed - Unsuccessful server removal,</p><p>Removed - Server successfully removed,</p><p>ApplyingProfile - Profile being applied to server,</p><p>ProfileApplied - Profile successfully applied,</p><p>RemovingProfile - Profile being removed,</p><p>ProfileError - Unsuccessful profile apply or removal,</p><p>Unsupported - Server model or version not currently supported by the appliance,</p><p>UpdatingFirmware - Server firmware update in progress.</p> |DEPENDENT |hpe.synergy.server_hardware["{#LOCATION}",state]<p>**Preprocessing**:</p><p>- JSONPATH: `$.["server-hardware"].members[?(@.name == "{#LOCATION}")].state.first()`</p><p>- STR_REPLACE: `Unknown 0`</p><p>- STR_REPLACE: `Adding 1`</p><p>- STR_REPLACE: `NoProfileApplied 2`</p><p>- STR_REPLACE: `Monitored 3`</p><p>- STR_REPLACE: `Unmanaged 4`</p><p>- STR_REPLACE: `Removing 5`</p><p>- STR_REPLACE: `RemoveFailed 6`</p><p>- STR_REPLACE: `Removed 7`</p><p>- STR_REPLACE: `ApplyingProfile 8`</p><p>- STR_REPLACE: `ProfileApplied 9`</p><p>- STR_REPLACE: `RemovingProfile 10`</p><p>- STR_REPLACE: `ProfileError 11`</p><p>- STR_REPLACE: `Unsupported 12`</p><p>- STR_REPLACE: `UpdatingFirmware 13`</p><p>- IN_RANGE: `0 13 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 0`</p> | +|HPE |Server [{#SERVER_NAME}:{#LOCATION}]: State reason |<p>The reason for the current resource state of the server hardware. This only applies if the state is 'Unmanaged', otherwise it is set to 'NotApplicable'. Allowable values are:</p><p>Unsupported - Server model or version not currently supported by the appliance,</p><p>UpdatingFirmware - Server firmware update in progress,</p><p>NotApplicable - When PhysicalServerState is anything besides 'Unmanaged',</p><p>NotOwner - No claim on server,</p><p>Inventory - Server added by PDU,</p><p>Unconfigured - Discovery data incomplete or iLO configuration failure,</p><p>UnsupportedFirmware - iLO firmware version below minimum support level,</p><p>Interrupted - When PhysicalServerState is a result of an operation that was terminated before completing,</p><p>CommunicationError - Appliance cannot communicate with iLO or OA.</p> |DEPENDENT |hpe.synergy.server_hardware["{#LOCATION}",state_reason]<p>**Preprocessing**:</p><p>- JSONPATH: `$.["server-hardware"].members[?(@.name == "{#LOCATION}")].stateReason.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> | +|HPE |Server [{#SERVER_NAME}:{#LOCATION}]: Status |<p>Overall health status of the resource. The following are the valid values for the status of the resource:</p><p>OK - indicates normal/informational behavior.</p><p>Disabled - indicates that a resource is not operational or that a server profile has not been assigned.</p><p>Warning - needs attention soon.</p><p>Critical - needs attention soon.</p><p>Unknown - should be avoided, but there may be rare occasions where status is Unknown.</p> |DEPENDENT |hpe.synergy.server_hardware["{#LOCATION}",status]<p>**Preprocessing**:</p><p>- JSONPATH: `$.["server-hardware"].members[?(@.name == "{#LOCATION}")].status.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `10m`</p><p>- STR_REPLACE: `Critical 0`</p><p>- STR_REPLACE: `Disabled 1`</p><p>- STR_REPLACE: `OK 2`</p><p>- STR_REPLACE: `Unknown 3`</p><p>- STR_REPLACE: `Warning 4`</p><p>- IN_RANGE: `0 4 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 3`</p> | +|HPE |Storage pool [{#NAME}]: Capacity allocated |<p>Capacity allocated from the storage pool in bytes.</p> |DEPENDENT |hpe.synergy.storage.pools.capacity["{#NAME}",allocated]<p>**Preprocessing**:</p><p>- JSONPATH: `$.["storage-pools"].members[?(@.name == "{#NAME}")].allocatedCapacity.first()`</p> | +|HPE |Storage pool [{#NAME}]: Capacity free |<p>Free capacity available from the storage pool in bytes.</p> |DEPENDENT |hpe.synergy.storage.pools.capacity["{#NAME}",free]<p>**Preprocessing**:</p><p>- JSONPATH: `$.["storage-pools"].members[?(@.name == "{#NAME}")].freeCapacity.first()`</p> | +|HPE |Storage pool [{#NAME}]: Capacity allocated to snapshots |<p>The pool capacity allocated to snapshots in bytes.</p> |DEPENDENT |hpe.synergy.storage.pools.capacity["{#NAME}",snapshot]<p>**Preprocessing**:</p><p>- JSONPATH: `$.["storage-pools"].members[?(@.name == "{#NAME}")].deviceSpecificAttributes.allocatedCapacity.snapshotAllocatedCapacity.first()`</p> | +|HPE |Storage pool [{#NAME}]: State |<p>Current state of the resource:</p><p>AddFailed - An attempt to add the resource failed</p><p>Adding - The resource is in the process of being added</p><p>Configured - The resource is configured</p><p>Connected - The appliance has connected to the resource</p><p>Copying - The resource is in the process of being copied</p><p>CreateFailed - An attempt to create the resource failed</p><p>Creating - The resource is in the process of being created</p><p>DeleteFailed - An attempt to delete the resource failed</p><p>Deleting - The resource is in the process of being deleted</p><p>Discovered - The resource has been discovered by the appliance, but it is not managed by the appliance</p><p>Managed - The resource is managed by the appliance</p><p>Normal - The resource is in a normal state</p><p>UpdateFailed - An attempt to update the resource failed</p><p>Updating - The resource is in the process of being updated</p> |DEPENDENT |hpe.synergy.storage.pools["{#NAME}",state]<p>**Preprocessing**:</p><p>- JSONPATH: `$.["storage-pools"].members[?(@.name == "{#NAME}")].state.first()`</p><p>- STR_REPLACE: `AddFailed 0`</p><p>- STR_REPLACE: `Adding 1`</p><p>- STR_REPLACE: `Configured 2`</p><p>- STR_REPLACE: `Connected 3`</p><p>- STR_REPLACE: `Copying 4`</p><p>- STR_REPLACE: `CreateFailed 5`</p><p>- STR_REPLACE: `Creating 6`</p><p>- STR_REPLACE: `DeleteFailed 7`</p><p>- STR_REPLACE: `Deleting 8`</p><p>- STR_REPLACE: `Discovered 9`</p><p>- STR_REPLACE: `Managed 10`</p><p>- STR_REPLACE: `Normal 11`</p><p>- STR_REPLACE: `UpdateFailed 12`</p><p>- STR_REPLACE: `Updating 13`</p><p>- IN_RANGE: `0 13 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 14`</p> | +|HPE |Storage pool [{#NAME}]: Status |<p>Overall health status of the resource. The following are the valid values for the status of the resource:</p><p>OK - indicates normal/informational behavior.</p><p>Disabled - indicates that a resource is not operational.</p><p>Warning - needs attention soon.</p><p>Critical - needs immediate attention.</p><p>Unknown - should be avoided, but there may be rare occasions where status is Unknown.</p> |DEPENDENT |hpe.synergy.storage.pools["{#NAME}",status]<p>**Preprocessing**:</p><p>- JSONPATH: `$.["storage-pools"].members[?(@.name == "{#NAME}")].status.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `10m`</p><p>- STR_REPLACE: `Critical 0`</p><p>- STR_REPLACE: `Disabled 1`</p><p>- STR_REPLACE: `OK 2`</p><p>- STR_REPLACE: `Unknown 3`</p><p>- STR_REPLACE: `Warning 4`</p><p>- IN_RANGE: `0 4 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 3`</p> | +|HPE |Storage pool [{#NAME}]: Capacity total |<p>Total capacity of the storage pool in bytes.</p> |DEPENDENT |hpe.synergy.storage.pools.capacity["{#NAME}",total]<p>**Preprocessing**:</p><p>- JSONPATH: `$.["storage-pools"].members[?(@.name == "{#NAME}")].totalCapacity.first()`</p> | +|HPE |Storage system [{#NAME}]: Capacity allocated |<p>Capacity allocated in bytes.</p> |DEPENDENT |hpe.synergy.storage.system.capacity["{#NAME}",allocated]<p>**Preprocessing**:</p><p>- JSONPATH: `$.["storage-systems"].members[?(@.name == "{#NAME}")].allocatedCapacity.first()`</p> | +|HPE |Storage system [{#NAME}]: Capacity free |<p>Free capacity of the storage system in bytes.</p> |DEPENDENT |hpe.synergy.storage.system.capacity["{#NAME}",free]<p>**Preprocessing**:</p><p>- JSONPATH: `$.["storage-systems"].members[?(@.name == "{#NAME}")].freeCapacity.first()`</p> | +|HPE |Storage system [{#NAME}]: State |<p>Current state of the resource:</p><p>AddFailed - An attempt to add the resource failed</p><p>Adding - The resource is in the process of being added</p><p>Configured - The resource is configured</p><p>Connected - The appliance has connected to the resource</p><p>Copying - The resource is in the process of being copied</p><p>CreateFailed - An attempt to create the resource failed</p><p>Creating - The resource is in the process of being created</p><p>DeleteFailed - An attempt to delete the resource failed</p><p>Deleting - The resource is in the process of being deleted</p><p>Discovered - The resource has been discovered by the appliance, but it is not managed by the appliance</p><p>Managed - The resource is managed by the appliance</p><p>Normal - The resource is in a normal state</p><p>UpdateFailed - An attempt to update the resource failed</p><p>Updating - The resource is in the process of being updated</p> |DEPENDENT |hpe.synergy.storage.system["{#NAME}",state]<p>**Preprocessing**:</p><p>- JSONPATH: `$.["storage-systems"].members[?(@.name == "{#NAME}")].state.first()`</p><p>- STR_REPLACE: `AddFailed 0`</p><p>- STR_REPLACE: `Adding 1`</p><p>- STR_REPLACE: `Configured 2`</p><p>- STR_REPLACE: `Connected 3`</p><p>- STR_REPLACE: `Copying 4`</p><p>- STR_REPLACE: `CreateFailed 5`</p><p>- STR_REPLACE: `Creating 6`</p><p>- STR_REPLACE: `DeleteFailed 7`</p><p>- STR_REPLACE: `Deleting 8`</p><p>- STR_REPLACE: `Discovered 9`</p><p>- STR_REPLACE: `Managed 10`</p><p>- STR_REPLACE: `Normal 11`</p><p>- STR_REPLACE: `UpdateFailed 12`</p><p>- STR_REPLACE: `Updating 13`</p><p>- IN_RANGE: `0 13 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 14`</p> | +|HPE |Storage system [{#NAME}]: Status |<p>Overall health status of the resource. The following are the valid values for the status of the resource:</p><p>OK - indicates normal/informational behavior.</p><p>Disabled - indicates that a resource is not operational.</p><p>Warning - needs attention soon.</p><p>Critical - needs immediate attention.</p><p>Unknown - should be avoided, but there may be rare occasions where status is Unknown.</p> |DEPENDENT |hpe.synergy.storage.system["{#NAME}",status]<p>**Preprocessing**:</p><p>- JSONPATH: `$.["storage-systems"].members[?(@.name == "{#NAME}")].status.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `10m`</p><p>- STR_REPLACE: `Critical 0`</p><p>- STR_REPLACE: `Disabled 1`</p><p>- STR_REPLACE: `OK 2`</p><p>- STR_REPLACE: `Unknown 3`</p><p>- STR_REPLACE: `Warning 4`</p><p>- IN_RANGE: `0 4 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 3`</p> | +|HPE |Storage system [{#NAME}]: Capacity total |<p>Total capacity of the storage system in bytes.</p> |DEPENDENT |hpe.synergy.storage.system.capacity["{#NAME}",total]<p>**Preprocessing**:</p><p>- JSONPATH: `$.["storage-systems"].members[?(@.name == "{#NAME}")].totalCapacity.first()`</p> | +|HPE |Storage volume [{#NAME}]: Capacity allocated |<p>Capacity allocated in bytes.</p> |DEPENDENT |hpe.synergy.storage.volumes.capacity["{#NAME}",allocated]<p>**Preprocessing**:</p><p>- JSONPATH: `$.["storage-volumes"].members[?(@.name == "{#NAME}")].allocatedCapacity.first()`</p> | +|HPE |Storage volume [{#NAME}]: Capacity provisioned |<p>Total provisioned capacity of volume in bytes.</p> |DEPENDENT |hpe.synergy.storage.volumes.capacity["{#NAME}",provisioned]<p>**Preprocessing**:</p><p>- JSONPATH: `$.["storage-volumes"].members[?(@.name == "{#NAME}")].provisionedCapacity.first()`</p> | +|HPE |Storage volume [{#NAME}]: State |<p>Current state of the resource:</p><p>AddFailed - An attempt to add the resource failed</p><p>Adding - The resource is in the process of being added</p><p>Configured - The resource is configured</p><p>Connected - The appliance has connected to the resource</p><p>Copying - The resource is in the process of being copied</p><p>CreateFailed - An attempt to create the resource failed</p><p>Creating - The resource is in the process of being created</p><p>DeleteFailed - An attempt to delete the resource failed</p><p>Deleting - The resource is in the process of being deleted</p><p>Discovered - The resource has been discovered by the appliance, but it is not managed by the appliance</p><p>Managed - The resource is managed by the appliance</p><p>Normal - The resource is in a normal state</p><p>UpdateFailed - An attempt to update the resource failed</p><p>Updating - The resource is in the process of being updated</p> |DEPENDENT |hpe.synergy.storage.volumes["{#NAME}",state]<p>**Preprocessing**:</p><p>- JSONPATH: `$.["storage-volumes"].members[?(@.name == "{#NAME}")].state.first()`</p><p>- STR_REPLACE: `AddFailed 0`</p><p>- STR_REPLACE: `Adding 1`</p><p>- STR_REPLACE: `Configured 2`</p><p>- STR_REPLACE: `Connected 3`</p><p>- STR_REPLACE: `Copying 4`</p><p>- STR_REPLACE: `CreateFailed 5`</p><p>- STR_REPLACE: `Creating 6`</p><p>- STR_REPLACE: `DeleteFailed 7`</p><p>- STR_REPLACE: `Deleting 8`</p><p>- STR_REPLACE: `Discovered 9`</p><p>- STR_REPLACE: `Managed 10`</p><p>- STR_REPLACE: `Normal 11`</p><p>- STR_REPLACE: `UpdateFailed 12`</p><p>- STR_REPLACE: `Updating 13`</p><p>- IN_RANGE: `0 13 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 14`</p> | +|HPE |Storage volume [{#NAME}]: Status |<p>Overall health status of the resource. The following are the valid values for the status of the resource:</p><p>OK - indicates normal/informational behavior.</p><p>Disabled - indicates that a resource is not operational.</p><p>Warning - needs attention soon.</p><p>Critical - needs immediate attention.</p><p>Unknown - should be avoided, but there may be rare occasions where status is Unknown.</p> |DEPENDENT |hpe.synergy.storage.volumes["{#NAME}",status]<p>**Preprocessing**:</p><p>- JSONPATH: `$.["storage-volumes"].members[?(@.name == "{#NAME}")].status.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `10m`</p><p>- STR_REPLACE: `Critical 0`</p><p>- STR_REPLACE: `Disabled 1`</p><p>- STR_REPLACE: `OK 2`</p><p>- STR_REPLACE: `Unknown 3`</p><p>- STR_REPLACE: `Warning 4`</p><p>- IN_RANGE: `0 4 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 3`</p> | +|HPE |Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Firmware version |<p>The firmware version of the manager.</p> |DEPENDENT |hpe.synergy.manager["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",fw_version]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].managerBays[?(@.bayNumber == "{#BAY_NUMBER}")].fwVersion.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1d`</p> | +|HPE |Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Link port state |<p>The state of the LINK port:</p><p>Disabled - The port is disabled.</p><p>Linked - The port is linked.</p><p>Unlinked - The port is unlinked.</p> |DEPENDENT |hpe.synergy.manager["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",link_port_state]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].managerBays[?(@.bayNumber == "{#BAY_NUMBER}")].linkPortState.first()`</p><p>- STR_REPLACE: `Disabled 0`</p><p>- STR_REPLACE: `Linked 1`</p><p>- STR_REPLACE: `Unlinked 2`</p><p>- IN_RANGE: `0 2 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 3`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `10m`</p> | +|HPE |Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Link port status |<p>The status of the LINK port:</p><p>Critical - Needs immediate attention.</p><p>Disabled - The resource is currently not operational.</p><p>OK - Indicates normal/informational behavior.</p><p>Unknown - The health status is not yet known or cannot be determined.</p><p>Warning - Needs attention soon.</p> |DEPENDENT |hpe.synergy.manager["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",link_port_status]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].managerBays[?(@.bayNumber == "{#BAY_NUMBER}")].linkPortStatus.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `10m`</p><p>- STR_REPLACE: `Critical 0`</p><p>- STR_REPLACE: `Disabled 1`</p><p>- STR_REPLACE: `OK 2`</p><p>- STR_REPLACE: `Unknown 3`</p><p>- STR_REPLACE: `Warning 4`</p><p>- IN_RANGE: `0 4 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 3`</p> | +|HPE |Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: MGMT port state |<p>The state of the MGMT port:</p><p>Active - The port is in active mode.</p><p>Disabled - The port is in disabled mode.</p><p>I3s - The port is configured for OS deployment network traffic.</p><p>Other - The port is in other mode.</p><p>Standby - The port is in standby mode.</p><p>Unknown - The port mode is not known.</p> |DEPENDENT |hpe.synergy.manager["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",mgmt_port_state]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].managerBays[?(@.bayNumber == "{#BAY_NUMBER}")].mgmtPortState.first()`</p><p>- STR_REPLACE: `Active 0`</p><p>- STR_REPLACE: `Disabled 1`</p><p>- STR_REPLACE: `I3s 2`</p><p>- STR_REPLACE: `Other 3`</p><p>- STR_REPLACE: `Standby 4`</p><p>- STR_REPLACE: `Unknown 5`</p><p>- IN_RANGE: `0 5 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 5`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `10m`</p> | +|HPE |Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: MGMT port status |<p>The status of the MGMT port:</p><p>Critical - Needs immediate attention.</p><p>Disabled - The resource is currently not operational.</p><p>OK - Indicates normal/informational behavior.</p><p>Unknown - The health status is not yet known or cannot be determined.</p><p>Warning - Needs attention soon.</p> |DEPENDENT |hpe.synergy.manager["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",mgmt_port_status]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].managerBays[?(@.bayNumber == "{#BAY_NUMBER}")].mgmtPortStatus.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `10m`</p><p>- STR_REPLACE: `Critical 0`</p><p>- STR_REPLACE: `Disabled 1`</p><p>- STR_REPLACE: `OK 2`</p><p>- STR_REPLACE: `Unknown 3`</p><p>- STR_REPLACE: `Warning 4`</p><p>- IN_RANGE: `0 4 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 3`</p> | +|HPE |Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Model |<p>The model of the link module.</p> |DEPENDENT |hpe.synergy.manager["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",model]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].managerBays[?(@.bayNumber == "{#BAY_NUMBER}")].model.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1d`</p> | +|HPE |Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Part number |<p>The part number of the link module.</p> |DEPENDENT |hpe.synergy.manager["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",part_number]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].managerBays[?(@.bayNumber == "{#BAY_NUMBER}")].partNumber.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1d`</p> | +|HPE |Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Presence |<p>Indicates whether a manager is present in the bay:</p><p>Absent - The device slot is empty.</p><p>PresenceNoOp - The device slot is uninitialized.</p><p>PresenceUnknown - The device presence is unknown.</p><p>Present - The device slot has a device in it.</p><p>Subsumed - The device slot is configured to be part of another device slot. Not applicable for fan or power supply bays.</p> |DEPENDENT |hpe.synergy.manager["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",presence]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].managerBays[?(@.bayNumber == "{#BAY_NUMBER}")].devicePresence.first()`</p><p>- STR_REPLACE: `Absent 0`</p><p>- STR_REPLACE: `PresenceNoOp 1`</p><p>- STR_REPLACE: `PresenceUnknown 2`</p><p>- STR_REPLACE: `Present 3`</p><p>- STR_REPLACE: `Subsumed 4`</p><p>- IN_RANGE: `0 4 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 2`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> | +|HPE |Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Serial number |<p>The serial number of the link module.</p> |DEPENDENT |hpe.synergy.manager["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",serial_number]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].managerBays[?(@.bayNumber == "{#BAY_NUMBER}")].serialNumber.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1d`</p> | +|HPE |Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Spare part number |<p>The spare part number of the link module.</p> |DEPENDENT |hpe.synergy.manager["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",spare_part_number]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].managerBays[?(@.bayNumber == "{#BAY_NUMBER}")].sparePartNumber.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1d`</p> | +|HPE |Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Status |<p>The health status of the link module:</p><p>Critical - Needs immediate attention.</p><p>Disabled - The resource is currently not operational.</p><p>OK - Indicates normal/informational behavior.</p><p>Unknown - The health status is not yet known or cannot be determined.</p><p>Warning - Needs attention soon.</p> |DEPENDENT |hpe.synergy.manager["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",status]<p>**Preprocessing**:</p><p>- JSONPATH: `$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].managerBays[?(@.bayNumber == "{#BAY_NUMBER}")].status.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `10m`</p><p>- STR_REPLACE: `Critical 0`</p><p>- STR_REPLACE: `Disabled 1`</p><p>- STR_REPLACE: `OK 2`</p><p>- STR_REPLACE: `Unknown 3`</p><p>- STR_REPLACE: `Warning 4`</p><p>- IN_RANGE: `0 4 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 3`</p> | +|HPE |Uplink set [{#NAME}]: State |<p>Current state of the resource.</p> |DEPENDENT |hpe.synergy.uplink_set["{#NAME}",state]<p>**Preprocessing**:</p><p>- JSONPATH: `$.["uplink-sets"].members[?(@.name == "{#NAME}")].state.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> | +|HPE |Uplink set [{#NAME}]: Status |<p>Overall health status of the resource. The following are the valid values for the status of the resource:</p><p>OK - indicates normal/informational behavior.</p><p>Disabled - indicates that a resource is not operational.</p><p>Warning - needs attention soon.</p><p>Critical - needs immediate attention.</p><p>Unknown - should be avoided, but there may be rare occasions where status is Unknown.</p> |DEPENDENT |hpe.synergy.uplink_set["{#NAME}",status]<p>**Preprocessing**:</p><p>- JSONPATH: `$.["uplink-sets"].members[?(@.name == "{#NAME}")].status.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `10m`</p><p>- STR_REPLACE: `Critical 0`</p><p>- STR_REPLACE: `Disabled 1`</p><p>- STR_REPLACE: `OK 2`</p><p>- STR_REPLACE: `Unknown 3`</p><p>- STR_REPLACE: `Warning 4`</p><p>- IN_RANGE: `0 4 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 3`</p> | + +## Triggers + +|Name|Description|Expression|Severity|Dependencies and additional info| +|----|-----------|----|----|----| +|HPE Synergy: There are errors in requests to API |<p>Zabbix has received errors in requests to API.</p> |`length(last(/HPE Synergy by HTTP/hpe.synergy.data.errors))>0` |AVERAGE |<p>**Depends on**:</p><p>- HPE Synergy: Service is unavailable</p> | +|HPE Synergy: Service is unavailable |<p>-</p> |`max(/HPE Synergy by HTTP/net.tcp.service["{$HPE.SYNERGY.API.SCHEME}","{HOST.CONN}","{$HPE.SYNERGY.API.PORT}"],5m)=0` |HIGH |<p>Manual close: YES</p> | +|Appliance bay [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Has critical status |<p>Appliance [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] status is critical. Needs immediate attention.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.appliance["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",status])=0` |HIGH | | +|Appliance bay [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Has warning status |<p>Appliance [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] status is warning. Needs attention soon.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.appliance["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",status])=4` |WARNING | | +|Appliance bay [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Is disabled |<p>Appliance [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] currently not operational.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.appliance["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",status])=1` |INFO | | +|Crossbar [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Is subsumed |<p>The device slot is configured to be part of another device slot.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.crossbar["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",presence])=4` |AVERAGE | | +|Crossbar [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Has critical status |<p>Crossbar [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] status is critical. Needs immediate attention.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.crossbar["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",status])=0` |HIGH | | +|Crossbar [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Has warning status |<p>Crossbar [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] status is warning. Needs attention soon.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.crossbar["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",status])=4` |WARNING | | +|Crossbar [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Is disabled |<p>Crossbar [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] currently not operational.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.crossbar["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",status])=1` |INFO | | +|Datacenter [{#NAME}]: Add error |<p>Datacenter [{#NAME}] add failed.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.datacenter["{#NAME}",state])=1` |AVERAGE | | +|Datacenter [{#NAME}]: Has credential error |<p>Datacenter [{#NAME}] has credential error.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.datacenter["{#NAME}",state])=3` |AVERAGE | | +|Datacenter [{#NAME}]: Has refresh error |<p>Datacenter [{#NAME}] has refresh error.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.datacenter["{#NAME}",state])=5` |AVERAGE | | +|Datacenter [{#NAME}]: Has remove error |<p>Datacenter [{#NAME}] has remove error.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.datacenter["{#NAME}",state])=7` |AVERAGE | | +|Datacenter [{#NAME}]: Has critical status |<p>Datacenter [{#NAME}] status is critical. Needs immediate attention.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.datacenter["{#NAME}",status])=0` |HIGH | | +|Datacenter [{#NAME}]: Has warning status |<p>Datacenter [{#NAME}] status is warning. Needs attention soon.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.datacenter["{#NAME}",status])=4` |WARNING | | +|Datacenter [{#NAME}]: Is disabled |<p>Datacenter [{#NAME}] currently not operational.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.datacenter["{#NAME}",status])=1` |INFO | | +|Device [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Is subsumed |<p>The device slot is configured to be part of another device slot.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.device["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",presence])=4` |AVERAGE | | +|Enclosure [{#NAME}]: Is interrupted |<p>The previous operation on the enclosure did not complete. The operation should be re-attempted.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.enclosure["{#NAME}",state])=3 and last(/HPE Synergy by HTTP/hpe.synergy.enclosure["{#NAME}",state_reason])>-1` |WARNING | | +|Enclosure [{#NAME}]: Is unsupported |<p>The enclosure model or version is not currently supported by HPE OneView. It cannot be configured or monitored.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.enclosure["{#NAME}",state])=9 and last(/HPE Synergy by HTTP/hpe.synergy.enclosure["{#NAME}",state_reason])>-1` |AVERAGE | | +|Enclosure [{#NAME}]: Remove failed |<p>The previous operation to remove the enclosure did not succeed. The operation should be re-attempted.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.enclosure["{#NAME}",state])=6 and last(/HPE Synergy by HTTP/hpe.synergy.enclosure["{#NAME}",state_reason])>-1` |WARNING | | +|Enclosure [{#NAME}]: Is missing |<p>The enclosure is no longer connected into the frame link topology.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.enclosure["{#NAME}",state_reason])=0` |AVERAGE | | +|Enclosure [{#NAME}]: Is unowned |<p>The enclosure reports not being under management.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.enclosure["{#NAME}",state_reason])=5` |AVERAGE | | +|Enclosure [{#NAME}]: Has critical status |<p>Enclosure [{#NAME}] status is critical. Needs immediate attention.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.enclosure["{#NAME}",status])=0` |HIGH | | +|Enclosure [{#NAME}]: Has warning status |<p>Enclosure [{#NAME}] status is warning. Needs attention soon.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.enclosure["{#NAME}",status])=4` |WARNING | | +|Enclosure [{#NAME}]: Is disabled |<p>Enclosure [{#NAME}] currently not operational.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.enclosure["{#NAME}",status])=1` |INFO | | +|Ethernet network [{#NAME}]: Has critical status |<p>Ethernet network [{#NAME}] status is critical. Needs immediate attention.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.ethernet.network["{#NAME}",status])=0` |HIGH | | +|Ethernet network [{#NAME}]: Has warning status |<p>Ethernet network [{#NAME}] status is warning. Needs attention soon.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.ethernet.network["{#NAME}",status])=4` |WARNING | | +|Ethernet network [{#NAME}]: Is disabled |<p>Ethernet network [{#NAME}] currently not operational.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.ethernet.network["{#NAME}",status])=1` |INFO | | +|Fabric [{#NAME}]: Has critical status |<p>Fabric [{#NAME}] status is critical. Needs immediate attention.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.fabric["{#NAME}",status])=0` |HIGH | | +|Fabric [{#NAME}]: Has warning status |<p>Fabric [{#NAME}] status is warning. Needs attention soon.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.fabric["{#NAME}",status])=4` |WARNING | | +|Fabric [{#NAME}]: Is disabled |<p>Fabric [{#NAME}] currently not operational.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.fabric["{#NAME}",status])=1` |INFO | | +|Fan [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Is degraded |<p>Fan [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] is in degraded state.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.fan["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",state])=0` |AVERAGE | | +|Fan [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Is failed |<p>Fan [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] is in failed state.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.fan["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",state])=1` |HIGH | | +|Fan [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Is misplaced |<p>Fan [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] is misplaced.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.fan["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",state])=2` |WARNING | | +|Fan [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Is missing |<p>Fan [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] is missing.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.fan["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",state])=3` |AVERAGE | | +|Fan [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Has critical status |<p>Fan [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] status is critical. Needs immediate attention.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.fan["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",status])=0` |HIGH | | +|Fan [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Has warning status |<p>Fan [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] status is warning. Needs attention soon.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.fan["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",status])=4` |WARNING | | +|Fan [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Is disabled |<p>Fan [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] currently not operational.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.fan["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",status])=1` |INFO | | +|FC network [{#NAME}]: Has critical status |<p>FC network [{#NAME}] status is critical. Needs immediate attention.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.fc.network["{#NAME}",status])=0` |HIGH | | +|FC network [{#NAME}]: Has warning status |<p>FC network [{#NAME}] status is warning. Needs attention soon.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.fc.network["{#NAME}",status])=4` |WARNING | | +|FC network [{#NAME}]: Is disabled |<p>FC network [{#NAME}] currently not operational.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.fc.network["{#NAME}",status])=1` |INFO | | +|Hypervisor manager [{#NAME}]: Is in error state |<p>Hypervisor manager [{#NAME}] has error.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.hypervisor_manager["{#NAME}",state])=3 and length(last(/HPE Synergy by HTTP/hpe.synergy.hypervisor_manager["{#NAME}",state_reason]))>0` |HIGH | | +|Hypervisor manager [{#NAME}]: Has critical status |<p>Hypervisor manager [{#NAME}] status is critical. Needs immediate attention.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.hypervisor_manager["{#NAME}",status])=0` |HIGH | | +|Hypervisor manager [{#NAME}]: Has warning status |<p>Hypervisor manager [{#NAME}] status is warning. Needs attention soon.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.hypervisor_manager["{#NAME}",status])=4` |WARNING | | +|Hypervisor manager [{#NAME}]: Is disabled |<p>Hypervisor manager [{#NAME}] currently not operational.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.hypervisor_manager["{#NAME}",status])=1` |INFO | | +|Interconnect [{#NAME}]: Has critical status |<p>Interconnect [{#NAME}] status is critical. Needs immediate attention.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.interconnect["{#NAME}",status])=0` |HIGH | | +|Interconnect [{#NAME}]: Has warning status |<p>Interconnect [{#NAME}] status is warning. Needs attention soon.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.interconnect["{#NAME}",status])=4` |WARNING | | +|Interconnect [{#NAME}]: Is disabled |<p>Interconnect [{#NAME}] currently not operational.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.interconnect["{#NAME}",status])=1` |INFO | | +|Logical enclosure [{#NAME}]: Delete failed |<p>Indicator that the deletion of a logical enclosure failed.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.logical_enclosure["{#NAME}",state])=2` |AVERAGE | | +|Logical enclosure [{#NAME}]: Is inconsistent |<p>The configuration of the logical enclosure differs from that of the enclosure group, or the configuration of the hardware resources is inconsistent with the logical enclosure configuration. Perform an Update from group, Reapply configuration, or Update firmware action as appropriate to bring the configuration back into consistency.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.logical_enclosure["{#NAME}",state])=0` |AVERAGE | | +|Logical enclosure [{#NAME}]: Has critical status |<p>Logical enclosure [{#NAME}] status is critical. Needs immediate attention.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.logical_enclosure["{#NAME}",status])=0` |HIGH | | +|Logical enclosure [{#NAME}]: Has warning status |<p>Logical enclosure [{#NAME}] status is warning. Needs attention soon.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.logical_enclosure["{#NAME}",status])=4` |WARNING | | +|Logical enclosure [{#NAME}]: Is disabled |<p>Logical enclosure [{#NAME}] currently not operational.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.logical_enclosure["{#NAME}",status])=1` |INFO | | +|Partition [{#ENCLOSURE_NAME}:{#PARTITION_ID}]: Health is invalid |<p>Partition health is invalid.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.partition["{#PARTITION_ID}","{#ENCLOSURE_NAME}",health])=1` |AVERAGE | | +|Partition [{#ENCLOSURE_NAME}:{#PARTITION_ID}]: Health is degraded |<p>One or more resources in the partition are unhealthy.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.partition["{#PARTITION_ID}","{#ENCLOSURE_NAME}",health])=0` |HIGH | | +|Partition [{#ENCLOSURE_NAME}:{#PARTITION_ID}]: Is invalid |<p>Partition status is invalid.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.partition["{#PARTITION_ID}","{#ENCLOSURE_NAME}",status])=2` |AVERAGE | | +|Power Supply [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Has critical status |<p>Power Supply [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] status is critical. Needs immediate attention.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.power_supply["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",status])=0` |HIGH | | +|Power Supply [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Has warning status |<p>Power Supply [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] status is warning. Needs attention soon.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.power_supply["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",status])=4` |WARNING | | +|Power Supply [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Is disabled |<p>Power Supply [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] currently not operational.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.power_supply["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",status])=1` |INFO | | +|Rack [{#NAME}]: Add error |<p>Rack [{#NAME}] add failed.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.rack["{#NAME}",state])=1` |AVERAGE | | +|Rack [{#NAME}]: Has credential error |<p>Rack [{#NAME}] has credential error.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.rack["{#NAME}",state])=3` |AVERAGE | | +|Rack [{#NAME}]: Has refresh error |<p>Rack [{#NAME}] has refresh error.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.rack["{#NAME}",state])=5` |AVERAGE | | +|Rack [{#NAME}]: Has remove error |<p>Rack [{#NAME}] has remove error.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.rack["{#NAME}",state])=7` |AVERAGE | | +|Rack [{#NAME}]: Has critical status |<p>Rack [{#NAME}] status is critical. Needs immediate attention.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.rack["{#NAME}",status])=0` |HIGH | | +|Rack [{#NAME}]: Has warning status |<p>Rack [{#NAME}] status is warning. Needs attention soon.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.rack["{#NAME}",status])=4` |WARNING | | +|Rack [{#NAME}]: Is disabled |<p>Rack [{#NAME}] currently not operational.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.rack["{#NAME}",status])=1` |INFO | | +|Server [{#SERVER_NAME}:{#LOCATION}]: Is in maintenance mode |<p>Disruptive maintenance operations like firmware update can cause many server hardware alerts to be generated in a short period of time. Ex: Network connectivity lost or Server reset detected.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.server_hardware["{#LOCATION}",maintenance_state])=0 and length(last(/HPE Synergy by HTTP/hpe.synergy.server_hardware["{#LOCATION}",maintenance_state_reason]))>0` |INFO | | +|Server [{#SERVER_NAME}:{#LOCATION}]: Has profile error |<p>Unsuccessful profile apply or removal.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.server_hardware["{#LOCATION}",state])=11` |AVERAGE | | +|Server [{#SERVER_NAME}:{#LOCATION}]: Is not initialized |<p>Server not initialized.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.server_hardware["{#LOCATION}",state])=0` |WARNING | | +|Server [{#SERVER_NAME}:{#LOCATION}]: Is unsupported |<p>Server model or version not currently supported by the appliance.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.server_hardware["{#LOCATION}",state])=12` |AVERAGE | | +|Server [{#SERVER_NAME}:{#LOCATION}]: Remove failed |<p>The previous operation to remove the server hardware did not succeed. The operation should be re-attempted.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.server_hardware["{#LOCATION}",state])=6` |AVERAGE | | +|Server [{#SERVER_NAME}:{#LOCATION}]: Is unmanaged |<p>Discovered a supported server.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.server_hardware["{#LOCATION}",state])=4 and length(last(/HPE Synergy by HTTP/hpe.synergy.server_hardware["{#LOCATION}",state_reason]))>0` |AVERAGE | | +|Server [{#SERVER_NAME}:{#LOCATION}]: Has critical status |<p>Server [{#SERVER_NAME}:{#LOCATION}] status is critical. Needs immediate attention.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.server_hardware["{#LOCATION}",status])=0` |HIGH | | +|Server [{#SERVER_NAME}:{#LOCATION}]: Has warning status |<p>Server [{#SERVER_NAME}:{#LOCATION}] status is warning. Needs attention soon.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.server_hardware["{#LOCATION}",status])=4` |WARNING | | +|Server [{#SERVER_NAME}:{#LOCATION}]: Is disabled |<p>Server [{#SERVER_NAME}:{#LOCATION}] currently not operational.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.server_hardware["{#LOCATION}",status])=1` |INFO | | +|Storage pool [{#NAME}]: Add error |<p>Storage pool [{#NAME}] add failed.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.storage.pools["{#NAME}",state])=0` |AVERAGE | | +|Storage pool [{#NAME}]: Create failed |<p>Storage pool [{#NAME}] create failed.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.storage.pools["{#NAME}",state])=5` |AVERAGE | | +|Storage pool [{#NAME}]: Delete failed |<p>Storage pool [{#NAME}] delete failed.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.storage.pools["{#NAME}",state])=7` |AVERAGE | | +|Storage pool [{#NAME}]: Update failed |<p>Storage pool [{#NAME}] update failed.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.storage.pools["{#NAME}",state])=12` |AVERAGE | | +|Storage pool [{#NAME}]: Has critical status |<p>Storage pool [{#NAME}] status is critical. Needs immediate attention.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.storage.pools["{#NAME}",status])=0` |HIGH | | +|Storage pool [{#NAME}]: Has warning status |<p>Storage pool [{#NAME}] status is warning. Needs attention soon.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.storage.pools["{#NAME}",status])=4` |WARNING | | +|Storage pool [{#NAME}]: Is disabled |<p>Storage pool [{#NAME}] currently not operational.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.storage.pools["{#NAME}",status])=1` |INFO | | +|Storage system [{#NAME}]: Add error |<p>Storage system [{#NAME}] add failed.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.storage.system["{#NAME}",state])=0` |AVERAGE | | +|Storage system [{#NAME}]: Create failed |<p>Storage system [{#NAME}] create failed.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.storage.system["{#NAME}",state])=5` |AVERAGE | | +|Storage system [{#NAME}]: Delete failed |<p>Storage system [{#NAME}] delete failed.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.storage.system["{#NAME}",state])=7` |AVERAGE | | +|Storage system [{#NAME}]: Update failed |<p>Storage system [{#NAME}] update failed.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.storage.system["{#NAME}",state])=12` |AVERAGE | | +|Storage system [{#NAME}]: Has critical status |<p>Storage system [{#NAME}] status is critical. Needs immediate attention.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.storage.system["{#NAME}",status])=0` |HIGH | | +|Storage system [{#NAME}]: Has warning status |<p>Storage system [{#NAME}] status is warning. Needs attention soon.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.storage.system["{#NAME}",status])=4` |WARNING | | +|Storage system [{#NAME}]: Is disabled |<p>Storage system [{#NAME}] currently not operational.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.storage.system["{#NAME}",status])=1` |INFO | | +|Storage volume [{#NAME}]: Add error |<p>Storage volume [{#NAME}] add failed.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.storage.volumes["{#NAME}",state])=0` |AVERAGE | | +|Storage volume [{#NAME}]: Create failed |<p>Storage volume [{#NAME}] create failed.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.storage.volumes["{#NAME}",state])=5` |AVERAGE | | +|Storage volume [{#NAME}]: Delete failed |<p>Storage volume [{#NAME}] delete failed.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.storage.volumes["{#NAME}",state])=7` |AVERAGE | | +|Storage volume [{#NAME}]: Update failed |<p>Storage volume [{#NAME}] update failed.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.storage.volumes["{#NAME}",state])=12` |AVERAGE | | +|Storage volume [{#NAME}]: Has critical status |<p>Storage volume [{#NAME}] status is critical. Needs immediate attention.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.storage.volumes["{#NAME}",status])=0` |HIGH | | +|Storage volume [{#NAME}]: Has warning status |<p>Storage volume [{#NAME}] status is warning. Needs attention soon.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.storage.volumes["{#NAME}",status])=4` |WARNING | | +|Storage volume [{#NAME}]: Is disabled |<p>Storage volume [{#NAME}] currently not operational.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.storage.volumes["{#NAME}",status])=1` |INFO | | +|Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Link port has critical status |<p>Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] link port status is critical. Needs immediate attention.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.manager["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",link_port_status])=0` |HIGH | | +|Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Link port has warning status |<p>Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] link port status is warning. Needs attention soon.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.manager["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",link_port_status])=4` |WARNING | | +|Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Link port is disabled |<p>Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] link port currently not operational.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.manager["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",link_port_status])=1` |INFO | | +|Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: MGMT port has critical status |<p>Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] mgmt port status is critical. Needs immediate attention.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.manager["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",mgmt_port_status])=0` |HIGH | | +|Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: MGMT port has warning status |<p>Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] MGMT port status is warning. Needs attention soon.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.manager["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",mgmt_port_status])=4` |WARNING | | +|Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: MGMT port is disabled |<p>Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] MGMT port currently not operational.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.manager["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",mgmt_port_status])=1` |INFO | | +|Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Is subsumed |<p>The device slot is configured to be part of another device slot.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.manager["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",presence])=4` |AVERAGE | | +|Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Has critical status |<p>Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] status is critical. Needs immediate attention.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.manager["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",status])=0` |HIGH | | +|Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Has warning status |<p>Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] status is warning. Needs attention soon.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.manager["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",status])=4` |WARNING | | +|Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Is disabled |<p>Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] currently not operational.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.manager["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",status])=1` |INFO | | +|Uplink set [{#NAME}]: Has critical status |<p>Uplink set [{#NAME}] status is critical. Needs immediate attention.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.uplink_set["{#NAME}",status])=0` |HIGH | | +|Uplink set [{#NAME}]: Has warning status |<p>Uplink set [{#NAME}] status is warning. Needs attention soon.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.uplink_set["{#NAME}",status])=4` |WARNING | | +|Uplink set [{#NAME}]: Is disabled |<p>Uplink set [{#NAME}] currently not operational.</p> |`last(/HPE Synergy by HTTP/hpe.synergy.uplink_set["{#NAME}",status])=1` |INFO | | + +## Feedback + +Please report any issues with the template at https://support.zabbix.com + +You can also provide feedback, discuss the template or ask for help with it at [ZABBIX forums](https://www.zabbix.com/forum/zabbix-suggestions-and-feedback/). + diff --git a/templates/server/hpe_synergy_http/template_server_hpe_synergy_http.yaml b/templates/server/hpe_synergy_http/template_server_hpe_synergy_http.yaml new file mode 100644 index 00000000000..a013c20a2dc --- /dev/null +++ b/templates/server/hpe_synergy_http/template_server_hpe_synergy_http.yaml @@ -0,0 +1,8270 @@ +zabbix_export: + version: '6.0' + date: '2022-07-05T06:29:44Z' + groups: + - + uuid: e960332b3f6c46a1956486d4f3f99fce + name: 'Templates/Server hardware' + templates: + - + uuid: 0ffde4421f524bcbac2f47fec87c0f95 + template: 'HPE Synergy by HTTP' + name: 'HPE Synergy by HTTP' + description: | + The template to monitor HPE Synergy by HTTP. + It works without any external scripts and uses the script item. + + Setup: + 1. Link template to the host. + 2. Configure macros {$HPE.SYNERGY.API.USERNAME} and {$HPE.SYNERGY.API.PASSWORD}. + + You can discuss this template or leave feedback on our forum https://www.zabbix.com/forum/zabbix-suggestions-and-feedback/ + + Template tooling version used: 0.41 + groups: + - + name: 'Templates/Server hardware' + items: + - + uuid: 6a12ea452d444c8ca5aec2698709d979 + name: 'HPE Synergy: Get enclosures' + type: DEPENDENT + key: hpe.synergy.data.enclosures + delay: '0' + history: 0d + trends: '0' + value_type: TEXT + description: 'A list of enclosures.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members.[0]' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: raw + - + uuid: c0049d63dffe4cdaafa806796051e06b + name: 'HPE Synergy: Get errors' + type: DEPENDENT + key: hpe.synergy.data.errors + delay: '0' + history: 7d + trends: '0' + value_type: TEXT + description: 'A list of errors from API requests.' + preprocessing: + - + type: JSONPATH + parameters: + - $.errors + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1h + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: raw + triggers: + - + uuid: dba8cff13328403dae2cbda8f106b384 + expression: 'length(last(/HPE Synergy by HTTP/hpe.synergy.data.errors))>0' + name: 'HPE Synergy: There are errors in requests to API' + opdata: '{ITEM.LASTVALUE1}' + priority: AVERAGE + description: 'Zabbix has received errors in requests to API.' + dependencies: + - + name: 'HPE Synergy: Service is unavailable' + expression: 'max(/HPE Synergy by HTTP/net.tcp.service["{$HPE.SYNERGY.API.SCHEME}","{HOST.CONN}","{$HPE.SYNERGY.API.PORT}"],5m)=0' + tags: + - + tag: scope + value: availability + - + uuid: 2f9816e8a60149f4aafdf7ffb0632224 + name: 'HPE Synergy: Get data' + type: SCRIPT + key: hpe.synergy.data.get + history: 0d + trends: '0' + value_type: TEXT + params: | + var Synergy = { + params: {}, + session_id: null, + api_version: null, + + setParams: function (params) { + ['username', 'password', 'base_url'].forEach(function (field) { + if (typeof params !== 'object' || typeof params[field] === 'undefined' || params[field] === '') { + throw 'Required param is not set: ' + field + '.'; + } + }); + + Synergy.params = params; + if (typeof Synergy.params.base_url === 'string' && !Synergy.params.base_url.endsWith('/')) { + Synergy.params.base_url += '/'; + } + }, + + checkVersion: function () { + if (Synergy.api_version !== null) { + return; + } + + var response, request = new HttpRequest(); + request.addHeader('Content-Type: application/json'); + + response = request.post(Synergy.params.base_url + 'rest/version'); + + if (request.getStatus() !== 200) { + throw 'Get version request failed with status code ' + request.getStatus() + ': ' + response; + } + + if (response !== null) { + try { + version_data = JSON.parse(response); + } + catch (error) { + throw 'Failed to parse get version response received from device API.'; + } + } + else { + throw 'No data received by get version request.'; + } + + if ('currentVersion' in version_data && 'minimumVersion' in version_data) { + if (version_data['minimumVersion'] <= 1200 && version_data['currentVersion'] >= 1200) { + Synergy.api_version = 1200; + } else { + throw 'API version is not supported.'; + } + } else { + throw 'Get version response does not contain version.'; + } + }, + + login: function () { + if (Synergy.session_id !== null || Synergy.api_version === null) { + return; + } + + var response, request = new HttpRequest(); + request.addHeader('Content-Type: application/json'); + request.addHeader('X-API-Version: ' + Synergy.api_version); + + response = request.post(Synergy.params.base_url + 'rest/login-sessions', JSON.stringify({ + 'userName': Synergy.params.username, + 'password': Synergy.params.password + })); + + if (request.getStatus() !== 200) { + throw 'Auth request failed with status code ' + request.getStatus() + ': ' + response; + } + + if (response !== null) { + try { + auth_data = JSON.parse(response); + } + catch (error) { + throw 'Failed to parse auth response received from device API.'; + } + } + else { + throw 'No data received by auth request.'; + } + + if ('sessionID' in auth_data) { + Synergy.session_id = auth_data['sessionID']; + } else { + throw 'Auth response does not contain session ID.'; + } + }, + + logout: function () { + if (Synergy.session_id !== null && Synergy.api_version !== null) { + var response, request = new HttpRequest(); + request.addHeader('Content-Type: application/json'); + request.addHeader('X-API-Version: ' + Synergy.api_version); + response = request.delete(Synergy.params.base_url + 'rest/login-sessions'); + } + }, + + requestData: function (method) { + if (Synergy.session_id === null || Synergy.api_version === null) { + return; + } + + request = new HttpRequest(); + request.addHeader('Auth: ' + Synergy.session_id); + request.addHeader('X-API-Version: ' + Synergy.api_version); + + raw_data = request.get(Synergy.params.base_url + 'rest/' + method); + + if (request.getStatus() < 200 || request.getStatus() >= 300) { + throw 'Request failed with status code ' + request.getStatus() + ': ' + raw_data; + } + + if (raw_data !== null) { + try { + return JSON.parse(raw_data); + } + catch (error) { + throw 'Failed to parse response received from device API.'; + } + } + else { + throw 'No data received by ' + method + ' request.'; + } + } + }; + + var methods = ['datacenters', 'enclosures', 'ethernet-networks', 'fabrics', 'fc-networks', 'hypervisor-managers', 'interconnects', 'logical-enclosures', 'racks', 'server-hardware', 'storage-pools', 'storage-systems', 'storage-volumes', 'uplink-sets'], + data = {}; + + data['errors'] = {}; + + try { + Synergy.setParams(JSON.parse(value)); + + try { + Synergy.checkVersion(); + } + catch (error) { + data.errors.version = error.toString(); + } + + try { + Synergy.login(); + } + catch (error) { + data.errors.auth = error.toString(); + } + + if (!('auth' in data.errors) && !('version' in data.errors)) { + for (var i in methods) { + try { + if (methods[i] === 'enclosures') { + var bays = ['applianceBays', 'crossBars', 'deviceBays', 'fanBays', 'partitions', 'powerSupplyBays', 'managerBays']; + + enclosures = Synergy.requestData(methods[i]); + + enclosures.members.forEach(function (enclosure) { + enclosure_name = enclosure.name; + + for (var j in bays) { + bay = enclosure[bays[j]]; + + bay.forEach(function (b) { + b.enclosureName = enclosure_name; + enclosures.members[bays[j[b]]] = b; + }); + } + }); + + data[methods[i]] = enclosures; + } + else { + data[methods[i]] = Synergy.requestData(methods[i]); + } + } + catch (error) { + data.errors[methods[i]] = error.toString(); + } + } + } + } + catch (error) { + data.errors.params = error.toString(); + } + + try { + Synergy.logout(); + } + catch (error) { + } + + if (Object.keys(data.errors).length !== 0) { + errors = 'Failed to receive data:'; + for (var error in data.errors) { + errors += '\n' + error + ' : ' + data.errors[error]; + } + data.errors = errors; + } + else { + data.errors = ''; + } + + return JSON.stringify(data); + description: 'The JSON with result of API requests.' + timeout: '{$HPE.SYNERGY.DATA.TIMEOUT}' + parameters: + - + name: base_url + value: '{$HPE.SYNERGY.API.SCHEME}://{HOST.CONN}' + - + name: password + value: '{$HPE.SYNERGY.API.PASSWORD}' + - + name: username + value: '{$HPE.SYNERGY.API.USERNAME}' + tags: + - + tag: component + value: raw + - + uuid: 86da94cecaa1424e9a22479d556d7b12 + name: 'HPE Synergy: Service ping' + type: SIMPLE + key: 'net.tcp.service["{$HPE.SYNERGY.API.SCHEME}","{HOST.CONN}","{$HPE.SYNERGY.API.PORT}"]' + history: 7d + description: 'Checks if the service is running and accepting TCP connections.' + valuemap: + name: 'Service state' + preprocessing: + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 10m + tags: + - + tag: component + value: health + - + tag: component + value: network + triggers: + - + uuid: 165774c1ffab46899352a36dd32bb574 + expression: 'max(/HPE Synergy by HTTP/net.tcp.service["{$HPE.SYNERGY.API.SCHEME}","{HOST.CONN}","{$HPE.SYNERGY.API.PORT}"],5m)=0' + name: 'HPE Synergy: Service is unavailable' + priority: HIGH + manual_close: 'YES' + tags: + - + tag: scope + value: availability + discovery_rules: + - + uuid: 73d93ade7489472fae4e68b05de52291 + name: 'Appliance bays discovery' + type: DEPENDENT + key: hpe.synergy.appliances.discovery + delay: '0' + description: 'A list of the appliance bays in the enclosure.' + item_prototypes: + - + uuid: d3be63fe949c4960ba5a66c546b4ebcd + name: 'Appliance bay [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Power state' + type: DEPENDENT + key: 'hpe.synergy.appliance["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",bay_power_state]' + delay: '0' + history: 7d + description: | + The power state of the appliance bay. + + EFuse - The power state of the bay is that it has been EFused. + Reset - The power state of the bay is that it has been reset. + SoftReset - The power state of the bay is that it has been soft reset. + Unknown - The power state of the bay is unknown. + valuemap: + name: 'Power state' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].applianceBays[?(@.bayNumber == "{#BAY_NUMBER}")].bayPowerState.first()' + - + type: STR_REPLACE + parameters: + - EFuse + - '0' + - + type: STR_REPLACE + parameters: + - SoftReset + - '1' + - + type: STR_REPLACE + parameters: + - Reset + - '2' + - + type: STR_REPLACE + parameters: + - Unknown + - '3' + - + type: IN_RANGE + parameters: + - '0' + - '3' + error_handler: CUSTOM_VALUE + error_handler_params: '3' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: bay-number + value: '{#BAY_NUMBER}' + - + tag: component + value: appliance + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + - + uuid: 08e834ca1ea04357b13d0383cfba8503 + name: 'Appliance bay [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Model' + type: DEPENDENT + key: 'hpe.synergy.appliance["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",model]' + delay: '0' + history: 7d + trends: '0' + value_type: CHAR + description: 'The model name for the appliance.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].applianceBays[?(@.bayNumber == "{#BAY_NUMBER}")].model.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1d + master_item: + key: hpe.synergy.data.get + tags: + - + tag: bay-number + value: '{#BAY_NUMBER}' + - + tag: component + value: appliance + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + - + uuid: df7ef9ae030c417e9c3a9b64d22c2bb9 + name: 'Appliance bay [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Part number' + type: DEPENDENT + key: 'hpe.synergy.appliance["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",part_number]' + delay: '0' + history: 7d + trends: '0' + value_type: CHAR + description: 'The part number of the appliance.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].applianceBays[?(@.bayNumber == "{#BAY_NUMBER}")].partNumber.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1d + master_item: + key: hpe.synergy.data.get + tags: + - + tag: bay-number + value: '{#BAY_NUMBER}' + - + tag: component + value: appliance + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + - + uuid: 7921c3c8ac07452d9a0cc47436d10aac + name: 'Appliance bay [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Powered on' + type: DEPENDENT + key: 'hpe.synergy.appliance["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",powered_on]' + delay: '0' + history: 7d + description: 'Yes if the appliance is powered on; false otherwise.' + valuemap: + name: Boolean + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].applianceBays[?(@.bayNumber == "{#BAY_NUMBER}")].poweredOn.first()' + - + type: BOOL_TO_DECIMAL + parameters: + - '' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1h + master_item: + key: hpe.synergy.data.get + tags: + - + tag: bay-number + value: '{#BAY_NUMBER}' + - + tag: component + value: appliance + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + - + uuid: d4501f70c9e74f5dbe11ab608629c666 + name: 'Appliance bay [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Presence' + type: DEPENDENT + key: 'hpe.synergy.appliance["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",presence]' + delay: '0' + history: 7d + description: | + Indicates whether an appliance is present in the bay: + + Absent - The device slot is empty. + PresenceNoOp - The device slot is uninitialized. + PresenceUnknown - The device presence is unknown. + Present - The device slot has a device in it. + Subsumed - The device slot is configured to be part of another device slot. Not applicable for fan or power supply bays. + valuemap: + name: 'Device presence' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].applianceBays[?(@.bayNumber == "{#BAY_NUMBER}")].devicePresence.first()' + - + type: STR_REPLACE + parameters: + - Absent + - '0' + - + type: STR_REPLACE + parameters: + - PresenceNoOp + - '1' + - + type: STR_REPLACE + parameters: + - PresenceUnknown + - '2' + - + type: STR_REPLACE + parameters: + - Present + - '3' + - + type: STR_REPLACE + parameters: + - Subsumed + - '4' + - + type: IN_RANGE + parameters: + - '0' + - '4' + error_handler: CUSTOM_VALUE + error_handler_params: '2' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1h + master_item: + key: hpe.synergy.data.get + tags: + - + tag: bay-number + value: '{#BAY_NUMBER}' + - + tag: component + value: appliance + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + - + uuid: f352ca846fa34ba698b28f8d8883a14d + name: 'Appliance bay [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Serial number' + type: DEPENDENT + key: 'hpe.synergy.appliance["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",serial_number]' + delay: '0' + history: 7d + trends: '0' + value_type: CHAR + description: 'The serial number of the appliance.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].applianceBays[?(@.bayNumber == "{#BAY_NUMBER}")].serialNumber.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1d + master_item: + key: hpe.synergy.data.get + tags: + - + tag: bay-number + value: '{#BAY_NUMBER}' + - + tag: component + value: appliance + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + - + uuid: 6d47ed045d904cc780c538a330ba0895 + name: 'Appliance bay [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Spare part number' + type: DEPENDENT + key: 'hpe.synergy.appliance["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",spare_part_number]' + delay: '0' + history: 7d + trends: '0' + value_type: CHAR + description: 'The spare part number of the appliance.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].applianceBays[?(@.bayNumber == "{#BAY_NUMBER}")].sparePartNumber.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1d + master_item: + key: hpe.synergy.data.get + tags: + - + tag: bay-number + value: '{#BAY_NUMBER}' + - + tag: component + value: appliance + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + - + uuid: 836036ba1abb43bbaaabddaa8bb438d3 + name: 'Appliance bay [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Status' + type: DEPENDENT + key: 'hpe.synergy.appliance["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",status]' + delay: '0' + history: 7d + description: | + The hardware status of the appliance: + + Critical - Needs immediate attention. + Disabled - The resource is currently not operational. + OK - Indicates normal/informational behaviour. + Unknown - The health status is not yet known or cannot be determined. + Warning - Needs attention soon. + valuemap: + name: 'Health status' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].applianceBays[?(@.bayNumber == "{#BAY_NUMBER}")].status.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 10m + - + type: STR_REPLACE + parameters: + - Critical + - '0' + - + type: STR_REPLACE + parameters: + - Disabled + - '1' + - + type: STR_REPLACE + parameters: + - OK + - '2' + - + type: STR_REPLACE + parameters: + - Unknown + - '3' + - + type: STR_REPLACE + parameters: + - Warning + - '4' + - + type: IN_RANGE + parameters: + - '0' + - '4' + error_handler: CUSTOM_VALUE + error_handler_params: '3' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: bay-number + value: '{#BAY_NUMBER}' + - + tag: component + value: appliance + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + trigger_prototypes: + - + uuid: d79a138fe0cd4f918e664380af8da355 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.appliance["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",status])=0' + name: 'Appliance bay [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Has critical status' + priority: HIGH + description: 'Appliance [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] status is critical. Needs immediate attention.' + tags: + - + tag: scope + value: availability + - + uuid: c4acd5d5451d437ab5366b24643577be + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.appliance["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",status])=4' + name: 'Appliance bay [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Has warning status' + priority: WARNING + description: 'Appliance [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] status is warning. Needs attention soon.' + tags: + - + tag: scope + value: availability + - + uuid: 7b8b298e334e409da6dabf6476c80dbf + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.appliance["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",status])=1' + name: 'Appliance bay [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Is disabled' + priority: INFO + description: 'Appliance [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] currently not operational.' + tags: + - + tag: scope + value: availability + master_item: + key: hpe.synergy.data.enclosures + lld_macro_paths: + - + lld_macro: '{#BAY_NUMBER}' + path: $.bayNumber + - + lld_macro: '{#ENCLOSURE_NAME}' + path: $.enclosureName + preprocessing: + - + type: JSONPATH + parameters: + - $.applianceBays + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 6h + - + uuid: 2ebb056eceea47d7ab8ca623504feb04 + name: 'Cross bars discovery' + type: DEPENDENT + key: hpe.synergy.crossbars.discovery + delay: '0' + description: 'SDX cross fabric module connects to all compute devices installed in the system enclosure and brings in the capability of hard partitioning. Crossbar details are relevant only for enclosures with type "SDX".' + item_prototypes: + - + uuid: c64e3a01454f473b888e57496ec642d3 + name: 'Crossbar [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: HW version' + type: DEPENDENT + key: 'hpe.synergy.crossbar["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",hw_version]' + delay: '0' + history: 7d + trends: '0' + value_type: CHAR + description: 'Hardware version.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].crossBars[?(@.bayNumber == "{#BAY_NUMBER}")].hwVersion.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1d + master_item: + key: hpe.synergy.data.get + tags: + - + tag: bay-number + value: '{#BAY_NUMBER}' + - + tag: component + value: crossbar + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + - + uuid: aaa521f31d2d4e04b918892e8e02911d + name: 'Crossbar [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Part number' + type: DEPENDENT + key: 'hpe.synergy.crossbar["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",part_number]' + delay: '0' + history: 7d + trends: '0' + value_type: CHAR + description: 'The part number provided by the manufacturer.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].crossBars[?(@.bayNumber == "{#BAY_NUMBER}")].partNumber.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1d + master_item: + key: hpe.synergy.data.get + tags: + - + tag: bay-number + value: '{#BAY_NUMBER}' + - + tag: component + value: crossbar + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + - + uuid: 4c29bf3ba488474188104c51a483949e + name: 'Crossbar [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Presence' + type: DEPENDENT + key: 'hpe.synergy.crossbar["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",presence]' + delay: '0' + history: 7d + description: | + Presence in a bay: + + Absent - The device slot is empty. + PresenceNoOp - The device slot is uninitialized. + PresenceUnknown - The device presence is unknown. + Present - The device slot has a device in it. + Subsumed - The device slot is configured to be part of another device slot. Not applicable for fan or power supply bays. + valuemap: + name: 'Device presence' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].crossBars[?(@.bayNumber == "{#BAY_NUMBER}")].presence.first()' + - + type: STR_REPLACE + parameters: + - Absent + - '0' + - + type: STR_REPLACE + parameters: + - PresenceNoOp + - '1' + - + type: STR_REPLACE + parameters: + - PresenceUnknown + - '2' + - + type: STR_REPLACE + parameters: + - Present + - '3' + - + type: STR_REPLACE + parameters: + - Subsumed + - '4' + - + type: IN_RANGE + parameters: + - '0' + - '4' + error_handler: CUSTOM_VALUE + error_handler_params: '2' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1h + master_item: + key: hpe.synergy.data.get + tags: + - + tag: bay-number + value: '{#BAY_NUMBER}' + - + tag: component + value: crossbar + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + trigger_prototypes: + - + uuid: b414be87e93f4f08a131d46b34b1b478 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.crossbar["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",presence])=4' + name: 'Crossbar [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Is subsumed' + priority: AVERAGE + description: 'The device slot is configured to be part of another device slot.' + tags: + - + tag: scope + value: notice + - + uuid: c7fe889af0fc43e0b73b20a99b7d193a + name: 'Crossbar [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Serial number' + type: DEPENDENT + key: 'hpe.synergy.crossbar["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",serial_number]' + delay: '0' + history: 7d + trends: '0' + value_type: CHAR + description: 'Serial number.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].crossBars[?(@.bayNumber == "{#BAY_NUMBER}")].serialNumber.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1d + master_item: + key: hpe.synergy.data.get + tags: + - + tag: bay-number + value: '{#BAY_NUMBER}' + - + tag: component + value: crossbar + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + - + uuid: 322073fa57dc49df9b12898a647fe255 + name: 'Crossbar [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Status' + type: DEPENDENT + key: 'hpe.synergy.crossbar["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",status]' + delay: '0' + history: 7d + description: | + Overall health status of the crossbar: + + Critical - Needs immediate attention. + Disabled - The resource is currently not operational. + OK - Indicates normal/informational behaviour. + Unknown - The health status is not yet known or cannot be determined. + Warning - Needs attention soon. + valuemap: + name: 'Health status' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].crossBars[?(@.bayNumber == "{#BAY_NUMBER}")].status.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 10m + - + type: STR_REPLACE + parameters: + - Critical + - '0' + - + type: STR_REPLACE + parameters: + - Disabled + - '1' + - + type: STR_REPLACE + parameters: + - OK + - '2' + - + type: STR_REPLACE + parameters: + - Unknown + - '3' + - + type: STR_REPLACE + parameters: + - Warning + - '4' + - + type: IN_RANGE + parameters: + - '0' + - '4' + error_handler: CUSTOM_VALUE + error_handler_params: '3' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: bay-number + value: '{#BAY_NUMBER}' + - + tag: component + value: crossbar + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + trigger_prototypes: + - + uuid: dd23cdf994c848d4b45baf4d1716f198 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.crossbar["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",status])=0' + name: 'Crossbar [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Has critical status' + priority: HIGH + description: 'Crossbar [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] status is critical. Needs immediate attention.' + tags: + - + tag: scope + value: availability + - + uuid: 264dff5509fb4608b862bfd3e0510e32 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.crossbar["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",status])=4' + name: 'Crossbar [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Has warning status' + priority: WARNING + description: 'Crossbar [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] status is warning. Needs attention soon.' + tags: + - + tag: scope + value: availability + - + uuid: 89e007afab2b4331877b3a7c1b6a98fb + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.crossbar["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",status])=1' + name: 'Crossbar [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Is disabled' + priority: INFO + description: 'Crossbar [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] currently not operational.' + tags: + - + tag: scope + value: availability + master_item: + key: hpe.synergy.data.enclosures + lld_macro_paths: + - + lld_macro: '{#BAY_NUMBER}' + path: $.bayNumber + - + lld_macro: '{#ENCLOSURE_NAME}' + path: $.enclosureName + preprocessing: + - + type: JSONPATH + parameters: + - $.crossBars + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 6h + - + uuid: 148ed07fd68049c6976df0bc8ccdc416 + name: 'Datacenters discovery' + type: DEPENDENT + key: hpe.synergy.datacenters.discovery + delay: '0' + description: 'A list of the datacenters.' + item_prototypes: + - + uuid: d37c1e2376ba4da5822041ad8ff37c8a + name: 'Datacenter [{#NAME}]: State' + type: DEPENDENT + key: 'hpe.synergy.datacenter["{#NAME}",state]' + delay: '0' + history: 7d + description: 'The current state of the resource. Valid values include Adding, AddError, Configured, CredentialError, Refreshing, RefreshError, Removing, RemoveError, and Unmanaged.' + valuemap: + name: 'Rack state' + preprocessing: + - + type: JSONPATH + parameters: + - '$.datacenters.members[?(@.name == "{#NAME}")].state.first()' + - + type: STR_REPLACE + parameters: + - Adding + - '0' + - + type: STR_REPLACE + parameters: + - AddError + - '1' + - + type: STR_REPLACE + parameters: + - Configured + - '2' + - + type: STR_REPLACE + parameters: + - CredentialError + - '3' + - + type: STR_REPLACE + parameters: + - Refreshing + - '4' + - + type: STR_REPLACE + parameters: + - RefreshError + - '5' + - + type: STR_REPLACE + parameters: + - Removing + - '6' + - + type: STR_REPLACE + parameters: + - RemoveError + - '7' + - + type: STR_REPLACE + parameters: + - Unmanaged + - '8' + - + type: IN_RANGE + parameters: + - '0' + - '8' + error_handler: CUSTOM_VALUE + error_handler_params: '9' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: datacenter + - + tag: datacenter + value: '{#NAME}' + trigger_prototypes: + - + uuid: 4f0d8ded588f4175911edff4efd4d1cd + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.datacenter["{#NAME}",state])=1' + name: 'Datacenter [{#NAME}]: Add error' + priority: AVERAGE + description: 'Datacenter [{#NAME}] add failed.' + tags: + - + tag: scope + value: notice + - + uuid: 896d145d3e3e49719a1b8e01117a5987 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.datacenter["{#NAME}",state])=3' + name: 'Datacenter [{#NAME}]: Has credential error' + priority: AVERAGE + description: 'Datacenter [{#NAME}] has credential error.' + tags: + - + tag: scope + value: notice + - + uuid: 8ecd353d5f0742aaabd6f65d9a7b8897 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.datacenter["{#NAME}",state])=5' + name: 'Datacenter [{#NAME}]: Has refresh error' + priority: AVERAGE + description: 'Datacenter [{#NAME}] has refresh error.' + tags: + - + tag: scope + value: availability + - + uuid: 091237538cab4e35a19c0f76b9c50539 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.datacenter["{#NAME}",state])=7' + name: 'Datacenter [{#NAME}]: Has remove error' + priority: AVERAGE + description: 'Datacenter [{#NAME}] has remove error.' + tags: + - + tag: scope + value: notice + - + uuid: b9b2a869c6364cbc8ac6eb3ff7511b29 + name: 'Datacenter [{#NAME}]: Status' + type: DEPENDENT + key: 'hpe.synergy.datacenter["{#NAME}",status]' + delay: '0' + history: 7d + description: | + Overall health status of the resource. The following are the valid values for the status of the resource: + + OK - indicates normal/informational behavior. + Disabled - indicates that a resource is not operational. + Warning - needs attention soon. + Critical - needs immediate attention. + Unknown - should be avoided, but there may be rare occasions where status is Unknown. + valuemap: + name: 'Health status' + preprocessing: + - + type: JSONPATH + parameters: + - '$.datacenters.members[?(@.name == "{#NAME}")].status.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 10m + - + type: STR_REPLACE + parameters: + - Critical + - '0' + - + type: STR_REPLACE + parameters: + - Disabled + - '1' + - + type: STR_REPLACE + parameters: + - OK + - '2' + - + type: STR_REPLACE + parameters: + - Unknown + - '3' + - + type: STR_REPLACE + parameters: + - Warning + - '4' + - + type: IN_RANGE + parameters: + - '0' + - '4' + error_handler: CUSTOM_VALUE + error_handler_params: '3' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: datacenter + - + tag: datacenter + value: '{#NAME}' + trigger_prototypes: + - + uuid: 5dbb654f17f345de8279c8249eae3207 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.datacenter["{#NAME}",status])=0' + name: 'Datacenter [{#NAME}]: Has critical status' + priority: HIGH + description: 'Datacenter [{#NAME}] status is critical. Needs immediate attention.' + tags: + - + tag: scope + value: availability + - + uuid: d04a24eceaad4741a877fdf1c58141c5 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.datacenter["{#NAME}",status])=4' + name: 'Datacenter [{#NAME}]: Has warning status' + priority: WARNING + description: 'Datacenter [{#NAME}] status is warning. Needs attention soon.' + tags: + - + tag: scope + value: availability + - + uuid: 7c70db1e75df47aeb8b4f87a634abde9 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.datacenter["{#NAME}",status])=1' + name: 'Datacenter [{#NAME}]: Is disabled' + priority: INFO + description: 'Datacenter [{#NAME}] currently not operational.' + tags: + - + tag: scope + value: availability + master_item: + key: hpe.synergy.data.get + lld_macro_paths: + - + lld_macro: '{#NAME}' + path: $.name + preprocessing: + - + type: JSONPATH + parameters: + - $.datacenters.members + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 6h + - + uuid: 3cde01eb8cbb4977824dc4fd00c56a10 + name: 'Devices discovery' + type: DEPENDENT + key: hpe.synergy.devices.discovery + delay: '0' + description: 'A list of device bays in the enclosure.' + item_prototypes: + - + uuid: 38ecff044b1d4ff88f8e99b21998181a + name: 'Device [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Model' + type: DEPENDENT + key: 'hpe.synergy.device["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",model]' + delay: '0' + history: 7d + trends: '0' + value_type: CHAR + description: 'Model name of an unsupported device occupying the bay, if available.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].deviceBays[?(@.bayNumber == "{#BAY_NUMBER}")].model.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1d + master_item: + key: hpe.synergy.data.get + tags: + - + tag: bay-number + value: '{#BAY_NUMBER}' + - + tag: component + value: device + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + - + uuid: 125d25085af54d509c6f2401a85042dc + name: 'Device [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Power allocated' + type: DEPENDENT + key: 'hpe.synergy.device["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",power_allocation]' + delay: '0' + history: 7d + units: W + description: 'The power allocated for the enclosed blade.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].deviceBays[?(@.bayNumber == "{#BAY_NUMBER}")].powerAllocationWatts.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1h + master_item: + key: hpe.synergy.data.get + tags: + - + tag: bay-number + value: '{#BAY_NUMBER}' + - + tag: component + value: device + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + - + uuid: 9167abd4d23445eba156f2529cb5b827 + name: 'Device [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Presence' + type: DEPENDENT + key: 'hpe.synergy.device["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",presence]' + delay: '0' + history: 7d + description: | + Indicates whether a device is present: + + Absent - The device slot is empty. + PresenceNoOp - The device slot is uninitialized. + PresenceUnknown - The device presence is unknown. + Present - The device slot has a device in it. + Subsumed - The device slot is configured to be part of another device slot. Not applicable for fan or power supply bays. + valuemap: + name: 'Device presence' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].deviceBays[?(@.bayNumber == "{#BAY_NUMBER}")].devicePresence.first()' + - + type: STR_REPLACE + parameters: + - Absent + - '0' + - + type: STR_REPLACE + parameters: + - PresenceNoOp + - '1' + - + type: STR_REPLACE + parameters: + - PresenceUnknown + - '2' + - + type: STR_REPLACE + parameters: + - Present + - '3' + - + type: STR_REPLACE + parameters: + - Subsumed + - '4' + - + type: IN_RANGE + parameters: + - '0' + - '4' + error_handler: CUSTOM_VALUE + error_handler_params: '2' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1h + master_item: + key: hpe.synergy.data.get + tags: + - + tag: bay-number + value: '{#BAY_NUMBER}' + - + tag: component + value: device + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + trigger_prototypes: + - + uuid: 37ccc7acfc56466cb1a0f31e11603bcc + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.device["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",presence])=4' + name: 'Device [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Is subsumed' + priority: AVERAGE + description: 'The device slot is configured to be part of another device slot.' + tags: + - + tag: scope + value: notice + - + uuid: c2c012eab77d425da1c69f65a5078277 + name: 'Device [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Serial number' + type: DEPENDENT + key: 'hpe.synergy.device["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",serial_number]' + delay: '0' + history: 7d + trends: '0' + value_type: CHAR + description: 'If available, the serial number of any device occupying the bay.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].deviceBays[?(@.bayNumber == "{#BAY_NUMBER}")].serialNumber.first()' + error_handler: DISCARD_VALUE + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1d + master_item: + key: hpe.synergy.data.get + tags: + - + tag: bay-number + value: '{#BAY_NUMBER}' + - + tag: component + value: device + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + master_item: + key: hpe.synergy.data.enclosures + lld_macro_paths: + - + lld_macro: '{#BAY_NUMBER}' + path: $.bayNumber + - + lld_macro: '{#ENCLOSURE_NAME}' + path: $.enclosureName + preprocessing: + - + type: JSONPATH + parameters: + - $.deviceBays + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 6h + - + uuid: 62f5e7c29207459c80163148a6231d8a + name: 'Enclosures discovery' + type: DEPENDENT + key: hpe.synergy.enclosures.discovery + delay: '0' + description: 'A list of enclosures resources.' + item_prototypes: + - + uuid: fb5f6aaec9254d9b998d68d647321a28 + name: 'Enclosure [{#NAME}]: Appliance bays count' + type: DEPENDENT + key: 'hpe.synergy.enclosure["{#NAME}",appliance_bay_count]' + delay: '0' + history: 7d + description: 'The number of appliance bays in the enclosure.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#NAME}")].applianceBayCount.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1h + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: appliance + - + tag: component + value: enclosure + - + tag: enclosure + value: '{#NAME}' + - + uuid: e0cc3af5e941491ebbb6227f2ece06a7 + name: 'Enclosure [{#NAME}]: Device bays count' + type: DEPENDENT + key: 'hpe.synergy.enclosure["{#NAME}",device_bay_count]' + delay: '0' + history: 7d + description: 'The number of device bays in the enclosure.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#NAME}")].deviceBayCount.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1h + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: device + - + tag: component + value: enclosure + - + tag: enclosure + value: '{#NAME}' + - + uuid: e17e34afe0dd4e4ea2534b7762033a83 + name: 'Enclosure [{#NAME}]: Device bays power' + type: DEPENDENT + key: 'hpe.synergy.enclosure["{#NAME}",device_bay_watts]' + delay: '0' + history: 7d + units: W + description: 'The amount of power allocated for the blades in the enclosure.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#NAME}")].deviceBayWatts.first()' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: device + - + tag: component + value: enclosure + - + tag: enclosure + value: '{#NAME}' + - + uuid: 732b7bbca90e458ead5558cea465f88e + name: 'Enclosure [{#NAME}]: Power allocated for fans and management devices' + type: DEPENDENT + key: 'hpe.synergy.enclosure["{#NAME}",fans_mgmt_power]' + delay: '0' + history: 7d + units: W + description: 'The amount of power allocated for the fans and management devices of the enclosure.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#NAME}")].fansAndManagementDevicesWatts.first()' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: enclosure + - + tag: component + value: fan + - + tag: component + value: management + - + tag: component + value: power + - + tag: enclosure + value: '{#NAME}' + - + uuid: d6af8f4c7cf04fe6a41c02e6ff50b98a + name: 'Enclosure [{#NAME}]: Fan bays count' + type: DEPENDENT + key: 'hpe.synergy.enclosure["{#NAME}",fan_bay_count]' + delay: '0' + history: 7d + description: 'The number of fan bays in the enclosure.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#NAME}")].fanBayCount.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1h + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: enclosure + - + tag: component + value: fan + - + tag: enclosure + value: '{#NAME}' + - + uuid: 8e2740eea20d4a0fb42b0cef4c894fce + name: 'Enclosure [{#NAME}]: Firmware baseline' + type: DEPENDENT + key: 'hpe.synergy.enclosure["{#NAME}",fw_baseline_name]' + delay: '0' + history: 7d + trends: '0' + value_type: CHAR + description: 'The name of the current firmware baseline.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#NAME}")].fwBaselineName.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1d + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: enclosure + - + tag: enclosure + value: '{#NAME}' + - + uuid: 145729f95cfe42f0a8e8308b856a03a2 + name: 'Enclosure [{#NAME}]: Interconnect bays count' + type: DEPENDENT + key: 'hpe.synergy.enclosure["{#NAME}",interconnect_bay_count]' + delay: '0' + history: 7d + description: 'The number of interconnect bays in the enclosure.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#NAME}")].interconnectBayCount.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1h + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: enclosure + - + tag: component + value: interconnect + - + tag: enclosure + value: '{#NAME}' + - + uuid: 153278ea2f8940d18024f220d922130a + name: 'Enclosure [{#NAME}]: Interconnect bays power' + type: DEPENDENT + key: 'hpe.synergy.enclosure["{#NAME}",interconnect_bay_watts]' + delay: '0' + history: 7d + units: W + description: 'The amount of power allocated for the interconnects in the enclosure.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#NAME}")].interconnectBayWatts.first()' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: enclosure + - + tag: component + value: interconnect + - + tag: enclosure + value: '{#NAME}' + - + uuid: 8685fbee85b2412b8c53dc82209ca90a + name: 'Enclosure [{#NAME}]: Min power supplies' + type: DEPENDENT + key: 'hpe.synergy.enclosure["{#NAME}",min_ps]' + delay: '0' + history: 7d + description: 'The minimum number of power supplies needed.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#NAME}")].minimumPowerSupplies.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1d + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: enclosure + - + tag: component + value: power + - + tag: enclosure + value: '{#NAME}' + - + uuid: 7adece9356e04a7db4e35fa1e1979e78 + name: 'Enclosure [{#NAME}]: Min power supplies for redundant power feed' + type: DEPENDENT + key: 'hpe.synergy.enclosure["{#NAME}",min_ps_redundant]' + delay: '0' + history: 7d + description: 'The minimum number of power supplies needed to fulfill the redundant line feed power mode.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#NAME}")].minimumPowerSuppliesForRedundantPowerFeed.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1d + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: enclosure + - + tag: component + value: power + - + tag: enclosure + value: '{#NAME}' + - + uuid: 19447ecdba484d04aff2ff3c90ccaef7 + name: 'Enclosure [{#NAME}]: Model' + type: DEPENDENT + key: 'hpe.synergy.enclosure["{#NAME}",model]' + delay: '0' + history: 7d + trends: '0' + value_type: CHAR + description: 'The enclosure model name, eg, "BladeSystem c7000 Enclosure G2".' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#NAME}")].enclosureModel.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1d + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: enclosure + - + tag: enclosure + value: '{#NAME}' + - + uuid: 2ff00b9a0e2446a88aefc5cd62ca8763 + name: 'Enclosure [{#NAME}]: Part number' + type: DEPENDENT + key: 'hpe.synergy.enclosure["{#NAME}",part_number]' + delay: '0' + history: 7d + trends: '0' + value_type: CHAR + description: 'The part number of the enclosure.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#NAME}")].partNumber.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1d + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: enclosure + - + tag: enclosure + value: '{#NAME}' + - + uuid: 3c2bf0a14a9847c9925e52aa7e6815f1 + name: 'Enclosure [{#NAME}]: Power capacity' + type: DEPENDENT + key: 'hpe.synergy.enclosure["{#NAME}",power_capacity]' + delay: '0' + history: 7d + units: W + description: 'The power capacity based on power mode.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#NAME}")].powerCapacityWatts.first()' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: enclosure + - + tag: component + value: power + - + tag: enclosure + value: '{#NAME}' + - + uuid: 68ad000d8b4e4bd5b2778802426ec764 + name: 'Enclosure [{#NAME}]: Total allocated power' + type: DEPENDENT + key: 'hpe.synergy.enclosure["{#NAME}",power_total_allocated]' + delay: '0' + history: 7d + units: W + description: 'The total amount of power allocated in the enclosure.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#NAME}")].powerAllocatedWatts.first()' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: enclosure + - + tag: component + value: power + - + tag: enclosure + value: '{#NAME}' + - + uuid: af45f99643fa40429e8401bf150cd7a1 + name: 'Enclosure [{#NAME}]: Total available power' + type: DEPENDENT + key: 'hpe.synergy.enclosure["{#NAME}",power_total_available]' + delay: '0' + history: 7d + units: W + description: 'The amount of unallocated power in the enclosure.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#NAME}")].powerAvailableWatts.first()' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: enclosure + - + tag: component + value: power + - + tag: enclosure + value: '{#NAME}' + - + uuid: 820f177f59044d28a945642f36b6a193 + name: 'Enclosure [{#NAME}]: Power supply bays count' + type: DEPENDENT + key: 'hpe.synergy.enclosure["{#NAME}",ps_bay_count]' + delay: '0' + history: 7d + description: 'The number of power supply bays in the enclosure.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#NAME}")].powerSupplyBayCount.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1h + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: enclosure + - + tag: component + value: power + - + tag: enclosure + value: '{#NAME}' + - + uuid: 4ee9c37fd5024e3d820f74fe174a42e7 + name: 'Enclosure [{#NAME}]: Serial number' + type: DEPENDENT + key: 'hpe.synergy.enclosure["{#NAME}",serial_number]' + delay: '0' + history: 7d + trends: '0' + value_type: CHAR + description: 'The serial number of the enclosure.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#NAME}")].serialNumber.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1d + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: enclosure + - + tag: enclosure + value: '{#NAME}' + - + uuid: d70426e6912f4128a58ba0f14dd3b5a0 + name: 'Enclosure [{#NAME}]: State' + type: DEPENDENT + key: 'hpe.synergy.enclosure["{#NAME}",state]' + delay: '0' + history: 7d + description: | + Current resource state of the enclosure: + + Adding - The enclosure is being added. + Configured - The enclosure is configured and part of a logical enclosure. This is the usual state for an enclosure under full management. + Configuring - A transient state while the enclosure is being configured for a logical enclosure. + Interrupted - The previous operation on the enclosure did not complete. The operation should be re-attempted. + Monitored - The enclosure is being monitored. It is not part of a logical enclosure and only hardware-control operations are available. + Pending - There are pending operations on the enclosure. Additional operations are denied. + RemoveFailed - The previous operation to remove the enclosure did not succeed. The operation should be re-attempted. + Removing - The enclosure is being removed. + Unmanaged - The enclosure has been discovered, but has not yet been added for management or monitoring. + Unsupported - The enclosure model or version is not currently supported by HPE OneView. It cannot be configured or monitored. + valuemap: + name: 'Enclosure state' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#NAME}")].state.first()' + - + type: STR_REPLACE + parameters: + - Adding + - '0' + - + type: STR_REPLACE + parameters: + - Configured + - '1' + - + type: STR_REPLACE + parameters: + - Configuring + - '2' + - + type: STR_REPLACE + parameters: + - Interrupted + - '3' + - + type: STR_REPLACE + parameters: + - Monitored + - '4' + - + type: STR_REPLACE + parameters: + - Pending + - '5' + - + type: STR_REPLACE + parameters: + - RemoveFailed + - '6' + - + type: STR_REPLACE + parameters: + - Removing + - '7' + - + type: STR_REPLACE + parameters: + - Unmanaged + - '8' + - + type: STR_REPLACE + parameters: + - Unsupported + - '9' + - + type: IN_RANGE + parameters: + - '0' + - '9' + error_handler: CUSTOM_VALUE + error_handler_params: '10' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: enclosure + - + tag: enclosure + value: '{#NAME}' + - + uuid: 6947d7dc74744e05a5b2fbd6ae918f16 + name: 'Enclosure [{#NAME}]: State reason' + type: DEPENDENT + key: 'hpe.synergy.enclosure["{#NAME}",state_reason]' + delay: '0' + history: 7d + description: | + Indicates the reason the resource in its current state: + + Missing - The enclosure is no longer connected into the frame link topology. + None - No reason is available, or none applies. + NotAdded - The enclosure has not been added. + NotOwner - The enclosure reports being managed by something other than this HPE OneView. + OperationFailed - A prior operation was interrupted. + Unowned - The enclosure reports not being under management. + UnsupportedFirmware - The firmware version of the enclosure is not supported by this version of HPE OneView. + UpdatingFirmware - A firmware update is in progress. + valuemap: + name: 'State reason' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#NAME}")].stateReason.first()' + - + type: STR_REPLACE + parameters: + - Missing + - '0' + - + type: STR_REPLACE + parameters: + - None + - '1' + - + type: STR_REPLACE + parameters: + - NotAdded + - '2' + - + type: STR_REPLACE + parameters: + - NotOwner + - '3' + - + type: STR_REPLACE + parameters: + - OperationFailed + - '4' + - + type: STR_REPLACE + parameters: + - Unowned + - '5' + - + type: STR_REPLACE + parameters: + - UnsupportedFirmware + - '6' + - + type: STR_REPLACE + parameters: + - UpdatingFirmware + - '7' + - + type: IN_RANGE + parameters: + - '0' + - '7' + error_handler: CUSTOM_VALUE + error_handler_params: '8' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: enclosure + - + tag: enclosure + value: '{#NAME}' + trigger_prototypes: + - + uuid: 61f81dcbb3c74f14982bd29b78f6a57b + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.enclosure["{#NAME}",state_reason])=0' + name: 'Enclosure [{#NAME}]: Is missing' + priority: AVERAGE + description: 'The enclosure is no longer connected into the frame link topology.' + tags: + - + tag: scope + value: availability + - + uuid: 6101e612efa54715a72263b4ea9d5b7d + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.enclosure["{#NAME}",state_reason])=5' + name: 'Enclosure [{#NAME}]: Is unowned' + priority: AVERAGE + description: 'The enclosure reports not being under management.' + tags: + - + tag: scope + value: availability + - + uuid: a22c6445c8e9491bbd0e08ba63c37659 + name: 'Enclosure [{#NAME}]: Status' + type: DEPENDENT + key: 'hpe.synergy.enclosure["{#NAME}",status]' + delay: '0' + history: 7d + description: | + Overall health status of the enclosure. + The enclosure status reflects the hardware health of the enclosure, all bays, and enclosure components (e.g. enclosure mid-plane, fans, power supplies, Synergy Frame Link Modules, and Synergy Composers). It explicitly does not include the status of other HPE OneView resources such as blades (server hardware), interconnects, and drive enclosures. + + Critical - Needs immediate attention. + Disabled - The resource is currently not operational. + OK - Indicates normal/informational behaviour. + Unknown - The health status is not yet known or cannot be determined. + Warning - Needs attention soon. + valuemap: + name: 'Health status' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#NAME}")].status.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 10m + - + type: STR_REPLACE + parameters: + - Critical + - '0' + - + type: STR_REPLACE + parameters: + - Disabled + - '1' + - + type: STR_REPLACE + parameters: + - OK + - '2' + - + type: STR_REPLACE + parameters: + - Unknown + - '3' + - + type: STR_REPLACE + parameters: + - Warning + - '4' + - + type: IN_RANGE + parameters: + - '0' + - '4' + error_handler: CUSTOM_VALUE + error_handler_params: '3' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: enclosure + - + tag: enclosure + value: '{#NAME}' + trigger_prototypes: + - + uuid: 862f37cbe3b144b5ae70998bf7406497 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.enclosure["{#NAME}",status])=0' + name: 'Enclosure [{#NAME}]: Has critical status' + priority: HIGH + description: 'Enclosure [{#NAME}] status is critical. Needs immediate attention.' + tags: + - + tag: scope + value: availability + - + uuid: 50f4cfc199564b26bf575d88ec5ba57e + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.enclosure["{#NAME}",status])=4' + name: 'Enclosure [{#NAME}]: Has warning status' + priority: WARNING + description: 'Enclosure [{#NAME}] status is warning. Needs attention soon.' + tags: + - + tag: scope + value: availability + - + uuid: c3ce50cdb5374904970903c082a98f72 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.enclosure["{#NAME}",status])=1' + name: 'Enclosure [{#NAME}]: Is disabled' + priority: INFO + description: 'Enclosure [{#NAME}] currently not operational.' + tags: + - + tag: scope + value: availability + - + uuid: 66d773b8d4794752b3ff9b5913ee32f2 + name: 'Enclosure [{#NAME}]: Type' + type: DEPENDENT + key: 'hpe.synergy.enclosure["{#NAME}",type]' + delay: '0' + history: 7d + trends: '0' + value_type: CHAR + description: 'The type of the enclosure, eg, "C7000" or "SY12000" or "SDX".' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#NAME}")].enclosureType.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 6h + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: enclosure + - + tag: enclosure + value: '{#NAME}' + trigger_prototypes: + - + uuid: 7cd90689dd8147949b1da375b055c71f + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.enclosure["{#NAME}",state])=3 and last(/HPE Synergy by HTTP/hpe.synergy.enclosure["{#NAME}",state_reason])>-1' + name: 'Enclosure [{#NAME}]: Is interrupted' + opdata: 'Reason: {ITEM.LASTVALUE2}' + priority: WARNING + description: 'The previous operation on the enclosure did not complete. The operation should be re-attempted.' + tags: + - + tag: scope + value: notice + - + uuid: 7bfc1a8cde3349cba772a6217df3e275 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.enclosure["{#NAME}",state])=9 and last(/HPE Synergy by HTTP/hpe.synergy.enclosure["{#NAME}",state_reason])>-1' + name: 'Enclosure [{#NAME}]: Is unsupported' + opdata: 'Reason: {ITEM.LASTVALUE2}' + priority: AVERAGE + description: 'The enclosure model or version is not currently supported by HPE OneView. It cannot be configured or monitored.' + tags: + - + tag: scope + value: availability + - + uuid: ef82fad1874d4dd5918d9c33323b6ae6 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.enclosure["{#NAME}",state])=6 and last(/HPE Synergy by HTTP/hpe.synergy.enclosure["{#NAME}",state_reason])>-1' + name: 'Enclosure [{#NAME}]: Remove failed' + opdata: 'Reason: {ITEM.LASTVALUE2}' + priority: WARNING + description: 'The previous operation to remove the enclosure did not succeed. The operation should be re-attempted.' + tags: + - + tag: scope + value: notice + graph_prototypes: + - + uuid: 1f9d74b503f14765ad6a054f604f3e28 + name: 'Enclosure [{#NAME}]: Power capacity' + graph_items: + - + color: 1A7C11 + item: + host: 'HPE Synergy by HTTP' + key: 'hpe.synergy.enclosure["{#NAME}",power_capacity]' + - + sortorder: '1' + color: 2774A4 + item: + host: 'HPE Synergy by HTTP' + key: 'hpe.synergy.enclosure["{#NAME}",power_total_allocated]' + - + sortorder: '2' + color: F63100 + item: + host: 'HPE Synergy by HTTP' + key: 'hpe.synergy.enclosure["{#NAME}",power_total_available]' + - + sortorder: '3' + color: A54F10 + item: + host: 'HPE Synergy by HTTP' + key: 'hpe.synergy.enclosure["{#NAME}",fans_mgmt_power]' + - + sortorder: '4' + color: FC6EA3 + item: + host: 'HPE Synergy by HTTP' + key: 'hpe.synergy.enclosure["{#NAME}",device_bay_watts]' + - + sortorder: '5' + color: 6C59DC + item: + host: 'HPE Synergy by HTTP' + key: 'hpe.synergy.enclosure["{#NAME}",interconnect_bay_watts]' + master_item: + key: hpe.synergy.data.get + lld_macro_paths: + - + lld_macro: '{#NAME}' + path: $.name + preprocessing: + - + type: JSONPATH + parameters: + - $.enclosures.members + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 6h + - + uuid: 386a121cbef74d0d9f625eedd6ed291c + name: 'Ethernet networks discovery' + type: DEPENDENT + key: hpe.synergy.ethernet.networks.discovery + delay: '0' + description: 'A list of the ethernet networks.' + item_prototypes: + - + uuid: 9b69d74467d6440eb98fc6c69c2f6779 + name: 'Ethernet network [{#NAME}]: State' + type: DEPENDENT + key: 'hpe.synergy.ethernet.network["{#NAME}",state]' + delay: '0' + history: 7d + trends: '0' + value_type: CHAR + description: 'The current state of the resource.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.["ethernet-networks"].members[?(@.name == "{#NAME}")].state.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1h + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: network + - + tag: network + value: '{#NAME}' + - + uuid: ec1c0f1ec9f34c7aa1d6c9509e4fc6a7 + name: 'Ethernet network [{#NAME}]: Status' + type: DEPENDENT + key: 'hpe.synergy.ethernet.network["{#NAME}",status]' + delay: '0' + history: 7d + description: | + Overall health status of the resource. The following are the valid values for the status of the resource: + + OK - indicates normal/informational behavior. + Disabled - indicates that a resource is not operational. + Warning - needs attention soon. + Critical - needs immediate attention. + Unknown - should be avoided, but there may be rare occasions where status is Unknown. + valuemap: + name: 'Health status' + preprocessing: + - + type: JSONPATH + parameters: + - '$.["ethernet-networks"].members[?(@.name == "{#NAME}")].status.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 10m + - + type: STR_REPLACE + parameters: + - Critical + - '0' + - + type: STR_REPLACE + parameters: + - Disabled + - '1' + - + type: STR_REPLACE + parameters: + - OK + - '2' + - + type: STR_REPLACE + parameters: + - Unknown + - '3' + - + type: STR_REPLACE + parameters: + - Warning + - '4' + - + type: IN_RANGE + parameters: + - '0' + - '4' + error_handler: CUSTOM_VALUE + error_handler_params: '3' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: network + - + tag: network + value: '{#NAME}' + trigger_prototypes: + - + uuid: c658a58285184a82969b520d5be1f9b2 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.ethernet.network["{#NAME}",status])=0' + name: 'Ethernet network [{#NAME}]: Has critical status' + priority: HIGH + description: 'Ethernet network [{#NAME}] status is critical. Needs immediate attention.' + tags: + - + tag: scope + value: availability + - + uuid: 6881808352bd4588b42debf5f2703f69 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.ethernet.network["{#NAME}",status])=4' + name: 'Ethernet network [{#NAME}]: Has warning status' + priority: WARNING + description: 'Ethernet network [{#NAME}] status is warning. Needs attention soon.' + tags: + - + tag: scope + value: availability + - + uuid: eef185ab54584c069df2a4349dff9cc7 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.ethernet.network["{#NAME}",status])=1' + name: 'Ethernet network [{#NAME}]: Is disabled' + priority: INFO + description: 'Ethernet network [{#NAME}] currently not operational.' + tags: + - + tag: scope + value: availability + master_item: + key: hpe.synergy.data.get + lld_macro_paths: + - + lld_macro: '{#NAME}' + path: $.name + preprocessing: + - + type: JSONPATH + parameters: + - '$.["ethernet-networks"].members' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 6h + - + uuid: 67c37bbfab9345d38ed5e576fdb7cb23 + name: 'Fabrics discovery' + type: DEPENDENT + key: hpe.synergy.fabrics.discovery + delay: '0' + description: 'A list of the fabrics.' + item_prototypes: + - + uuid: 9f38d17239ee45d4a22e8f08dde37910 + name: 'Fabric [{#NAME}]: State' + type: DEPENDENT + key: 'hpe.synergy.fabric["{#NAME}",state]' + delay: '0' + history: 7d + trends: '0' + value_type: CHAR + description: 'The current state of the resource.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.fabrics.members[?(@.name == "{#NAME}")].state.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1h + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: fabric + - + tag: fabric + value: '{#NAME}' + - + uuid: 82f8bedd589643d1954f329f5f10b9b9 + name: 'Fabric [{#NAME}]: Status' + type: DEPENDENT + key: 'hpe.synergy.fabric["{#NAME}",status]' + delay: '0' + history: 7d + description: | + Overall health status of the resource. The following are the valid values for the status of the resource: + + OK - indicates normal/informational behavior. + Disabled - indicates that a resource is not operational. + Warning - needs attention soon. + Critical - needs immediate attention. + Unknown - should be avoided, but there may be rare occasions where status is Unknown. + valuemap: + name: 'Health status' + preprocessing: + - + type: JSONPATH + parameters: + - '$.fabrics.members[?(@.name == "{#NAME}")].status.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 10m + - + type: STR_REPLACE + parameters: + - Critical + - '0' + - + type: STR_REPLACE + parameters: + - Disabled + - '1' + - + type: STR_REPLACE + parameters: + - OK + - '2' + - + type: STR_REPLACE + parameters: + - Unknown + - '3' + - + type: STR_REPLACE + parameters: + - Warning + - '4' + - + type: IN_RANGE + parameters: + - '0' + - '4' + error_handler: CUSTOM_VALUE + error_handler_params: '3' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: fabric + - + tag: fabric + value: '{#NAME}' + trigger_prototypes: + - + uuid: 5f67d217108d4e7fbfcaed29f0f8564f + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.fabric["{#NAME}",status])=0' + name: 'Fabric [{#NAME}]: Has critical status' + priority: HIGH + description: 'Fabric [{#NAME}] status is critical. Needs immediate attention.' + tags: + - + tag: scope + value: availability + - + uuid: c546f87158ee42ba8d76aa3fd6767efa + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.fabric["{#NAME}",status])=4' + name: 'Fabric [{#NAME}]: Has warning status' + priority: WARNING + description: 'Fabric [{#NAME}] status is warning. Needs attention soon.' + tags: + - + tag: scope + value: availability + - + uuid: c963ad956b0644c394bd58dbbb05858a + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.fabric["{#NAME}",status])=1' + name: 'Fabric [{#NAME}]: Is disabled' + priority: INFO + description: 'Fabric [{#NAME}] currently not operational.' + tags: + - + tag: scope + value: availability + master_item: + key: hpe.synergy.data.get + lld_macro_paths: + - + lld_macro: '{#NAME}' + path: $.name + preprocessing: + - + type: JSONPATH + parameters: + - $.fabrics.members + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 6h + - + uuid: 5d5303b09c6e43748571c9ea247774be + name: 'Fans discovery' + type: DEPENDENT + key: hpe.synergy.fans.discovery + delay: '0' + description: 'A list of the fan bays in the enclosure.' + item_prototypes: + - + uuid: 8449918637ab4f98932ca75d859546b2 + name: 'Fan [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Model' + type: DEPENDENT + key: 'hpe.synergy.fan["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",model]' + delay: '0' + history: 7d + trends: '0' + value_type: CHAR + description: 'The common descriptive model of the fan.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].fanBays[?(@.bayNumber == "{#BAY_NUMBER}")].model.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1d + master_item: + key: hpe.synergy.data.get + tags: + - + tag: bay-number + value: '{#BAY_NUMBER}' + - + tag: component + value: fan + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + - + uuid: 539f8b373baf46d7bcde5fc090f02284 + name: 'Fan [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Part number' + type: DEPENDENT + key: 'hpe.synergy.fan["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",part_number]' + delay: '0' + history: 7d + trends: '0' + value_type: CHAR + description: 'The part number of the fan.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].fanBays[?(@.bayNumber == "{#BAY_NUMBER}")].partNumber.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1d + master_item: + key: hpe.synergy.data.get + tags: + - + tag: bay-number + value: '{#BAY_NUMBER}' + - + tag: component + value: fan + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + - + uuid: eb7ad5fc3d4947eda9642c2a2d440796 + name: 'Fan [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Presence' + type: DEPENDENT + key: 'hpe.synergy.fan["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",presence]' + delay: '0' + history: 7d + description: | + Indicates whether a fan is present: + + Absent - The device slot is empty. + PresenceNoOp - The device slot is uninitialized. + PresenceUnknown - The device presence is unknown. + Present - The device slot has a device in it. + Subsumed - The device slot is configured to be part of another device slot. Not applicable for fan or power supply bays. + valuemap: + name: 'Device presence' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].fanBays[?(@.bayNumber == "{#BAY_NUMBER}")].devicePresence.first()' + - + type: STR_REPLACE + parameters: + - Absent + - '0' + - + type: STR_REPLACE + parameters: + - PresenceNoOp + - '1' + - + type: STR_REPLACE + parameters: + - PresenceUnknown + - '2' + - + type: STR_REPLACE + parameters: + - Present + - '3' + - + type: STR_REPLACE + parameters: + - Subsumed + - '4' + - + type: IN_RANGE + parameters: + - '0' + - '4' + error_handler: CUSTOM_VALUE + error_handler_params: '2' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1h + master_item: + key: hpe.synergy.data.get + tags: + - + tag: bay-number + value: '{#BAY_NUMBER}' + - + tag: component + value: fan + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + - + uuid: 6782d5441add454384b41d9ede2a8cf2 + name: 'Fan [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Required' + type: DEPENDENT + key: 'hpe.synergy.fan["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",required]' + delay: '0' + history: 7d + description: 'Indicates whether the enclosure configuration requires a fan to be present in the bay.' + valuemap: + name: Boolean + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].fanBays[?(@.bayNumber == "{#BAY_NUMBER}")].deviceRequired.first()' + - + type: BOOL_TO_DECIMAL + parameters: + - '' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1h + master_item: + key: hpe.synergy.data.get + tags: + - + tag: bay-number + value: '{#BAY_NUMBER}' + - + tag: component + value: fan + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + - + uuid: 16a8b59afdf04df1a070e1249fdd1a61 + name: 'Fan [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Serial number' + type: DEPENDENT + key: 'hpe.synergy.fan["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",serial_number]' + delay: '0' + history: 7d + trends: '0' + value_type: CHAR + description: 'The serial number of the fan.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].fanBays[?(@.bayNumber == "{#BAY_NUMBER}")].serialNumber.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1d + master_item: + key: hpe.synergy.data.get + tags: + - + tag: bay-number + value: '{#BAY_NUMBER}' + - + tag: component + value: fan + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + - + uuid: 4e6338579bea4bb7acb06e57d55365e5 + name: 'Fan [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Spare part number' + type: DEPENDENT + key: 'hpe.synergy.fan["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",spare_part_number]' + delay: '0' + history: 7d + trends: '0' + value_type: CHAR + description: 'The spare part number to be used when ordering an additional or replacement fan of this type.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].fanBays[?(@.bayNumber == "{#BAY_NUMBER}")].sparePartNumber.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1d + master_item: + key: hpe.synergy.data.get + tags: + - + tag: bay-number + value: '{#BAY_NUMBER}' + - + tag: component + value: fan + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + - + uuid: 19171c26420f4cd894509a817c3245d8 + name: 'Fan [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: State' + type: DEPENDENT + key: 'hpe.synergy.fan["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",state]' + delay: '0' + history: 7d + description: | + Current state of the fan: + + Degraded - Fan is degraded. + Failed - Fan has failed. + Misplaced - Fan is present, but not required, in this bay, and the overall fan configuration is not compliant with the enclosure fan placement rules. + Missing - Fan is required, but is not present. + OK - Fan bay has no issues. + Unknown - Unknown fan's state. + valuemap: + name: 'Resource state' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].fanBays[?(@.bayNumber == "{#BAY_NUMBER}")].state.first()' + error_handler: CUSTOM_VALUE + error_handler_params: '5' + - + type: STR_REPLACE + parameters: + - Degraded + - '0' + - + type: STR_REPLACE + parameters: + - Failed + - '1' + - + type: STR_REPLACE + parameters: + - Misplaced + - '2' + - + type: STR_REPLACE + parameters: + - Missing + - '3' + - + type: STR_REPLACE + parameters: + - OK + - '4' + - + type: IN_RANGE + parameters: + - '0' + - '4' + error_handler: CUSTOM_VALUE + error_handler_params: '5' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: bay-number + value: '{#BAY_NUMBER}' + - + tag: component + value: fan + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + trigger_prototypes: + - + uuid: cc28f87bd5b445c3abd07af689d8ee74 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.fan["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",state])=0' + name: 'Fan [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Is degraded' + priority: AVERAGE + description: 'Fan [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] is in degraded state.' + tags: + - + tag: scope + value: availability + - + uuid: 113096666e074f8eadab59c0250968af + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.fan["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",state])=1' + name: 'Fan [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Is failed' + priority: HIGH + description: 'Fan [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] is in failed state.' + tags: + - + tag: scope + value: availability + - + uuid: 63589098cc6b4e9ea7e7855e5a6b980e + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.fan["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",state])=2' + name: 'Fan [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Is misplaced' + priority: WARNING + description: 'Fan [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] is misplaced.' + tags: + - + tag: scope + value: availability + - + uuid: 6b89f74f468942f789f75fdbb2b6cee6 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.fan["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",state])=3' + name: 'Fan [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Is missing' + priority: AVERAGE + description: 'Fan [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] is missing.' + tags: + - + tag: scope + value: availability + - + uuid: e9ac8ad873a04d549ed492b1c23966cb + name: 'Fan [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Status' + type: DEPENDENT + key: 'hpe.synergy.fan["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",status]' + delay: '0' + history: 7d + description: | + Overall health status of the fan: + + Critical - Needs immediate attention. + Disabled - The resource is currently not operational. + OK - Indicates normal/informational behavior. + Unknown - The health status is not yet known or cannot be determined. + Warning - Needs attention soon. + valuemap: + name: 'Health status' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].fanBays[?(@.bayNumber == "{#BAY_NUMBER}")].status.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 10m + - + type: STR_REPLACE + parameters: + - Critical + - '0' + - + type: STR_REPLACE + parameters: + - Disabled + - '1' + - + type: STR_REPLACE + parameters: + - OK + - '2' + - + type: STR_REPLACE + parameters: + - Unknown + - '3' + - + type: STR_REPLACE + parameters: + - Warning + - '4' + - + type: IN_RANGE + parameters: + - '0' + - '4' + error_handler: CUSTOM_VALUE + error_handler_params: '3' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: bay-number + value: '{#BAY_NUMBER}' + - + tag: component + value: fan + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + trigger_prototypes: + - + uuid: 6b7b21cc6a3144edaf5fb3da2b54370f + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.fan["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",status])=0' + name: 'Fan [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Has critical status' + priority: HIGH + description: 'Fan [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] status is critical. Needs immediate attention.' + tags: + - + tag: scope + value: availability + - + uuid: 168ea39107c748d0b7008b4525ff4504 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.fan["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",status])=4' + name: 'Fan [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Has warning status' + priority: WARNING + description: 'Fan [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] status is warning. Needs attention soon.' + tags: + - + tag: scope + value: availability + - + uuid: 41296079847b49d285e395e77f920e06 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.fan["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",status])=1' + name: 'Fan [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Is disabled' + priority: INFO + description: 'Fan [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] currently not operational.' + tags: + - + tag: scope + value: availability + master_item: + key: hpe.synergy.data.enclosures + lld_macro_paths: + - + lld_macro: '{#BAY_NUMBER}' + path: $.bayNumber + - + lld_macro: '{#ENCLOSURE_NAME}' + path: $.enclosureName + preprocessing: + - + type: JSONPATH + parameters: + - $.fanBays + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 6h + - + uuid: 100519374fc94a4487a871224c483229 + name: 'FC networks discovery' + type: DEPENDENT + key: hpe.synergy.fc.networks.discovery + delay: '0' + description: 'A list of the FC networks.' + item_prototypes: + - + uuid: 1defd79827204bbcaffe79cd7a9df059 + name: 'FC network [{#NAME}]: State' + type: DEPENDENT + key: 'hpe.synergy.fc.network["{#NAME}",state]' + delay: '0' + history: 7d + trends: '0' + value_type: CHAR + description: 'The current state of the resource.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.["fc-networks"].members[?(@.name == "{#NAME}")].state.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1h + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: fc-network + - + tag: fc-network + value: '{#NAME}' + - + uuid: db0c86d17310421088cad2853d35c177 + name: 'FC network [{#NAME}]: Status' + type: DEPENDENT + key: 'hpe.synergy.fc.network["{#NAME}",status]' + delay: '0' + history: 7d + description: | + Overall health status of the resource. The following are the valid values for the status of the resource: + + OK - indicates normal/informational behavior. + Disabled - indicates that a resource is not operational. + Warning - needs attention soon. + Critical - needs immediate attention. + Unknown - should be avoided, but there may be rare occasions where status is Unknown. + valuemap: + name: 'Health status' + preprocessing: + - + type: JSONPATH + parameters: + - '$.["fc-networks"].members[?(@.name == "{#NAME}")].status.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 10m + - + type: STR_REPLACE + parameters: + - Critical + - '0' + - + type: STR_REPLACE + parameters: + - Disabled + - '1' + - + type: STR_REPLACE + parameters: + - OK + - '2' + - + type: STR_REPLACE + parameters: + - Unknown + - '3' + - + type: STR_REPLACE + parameters: + - Warning + - '4' + - + type: IN_RANGE + parameters: + - '0' + - '4' + error_handler: CUSTOM_VALUE + error_handler_params: '3' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: fc-network + - + tag: fc-network + value: '{#NAME}' + trigger_prototypes: + - + uuid: 38b9aba3f57f4b779f26dcf3d53090cf + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.fc.network["{#NAME}",status])=0' + name: 'FC network [{#NAME}]: Has critical status' + priority: HIGH + description: 'FC network [{#NAME}] status is critical. Needs immediate attention.' + tags: + - + tag: scope + value: availability + - + uuid: edf33e3c732442c6ac3327e995d0919e + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.fc.network["{#NAME}",status])=4' + name: 'FC network [{#NAME}]: Has warning status' + priority: WARNING + description: 'FC network [{#NAME}] status is warning. Needs attention soon.' + tags: + - + tag: scope + value: availability + - + uuid: 518a795f68bf4b81ac17332f511ffdb5 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.fc.network["{#NAME}",status])=1' + name: 'FC network [{#NAME}]: Is disabled' + priority: INFO + description: 'FC network [{#NAME}] currently not operational.' + tags: + - + tag: scope + value: availability + master_item: + key: hpe.synergy.data.get + lld_macro_paths: + - + lld_macro: '{#NAME}' + path: $.name + preprocessing: + - + type: JSONPATH + parameters: + - '$.["fc-networks"].members' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 6h + - + uuid: 0ac7b7355249475eac517cbc9ac8ba83 + name: 'Managers discovery' + type: DEPENDENT + key: hpe.synergy.frame_link_modules.discovery + delay: '0' + description: 'A list of the Synergy Frame Link Module bays.' + item_prototypes: + - + uuid: 64e7f977edf34338aa74e8acc88d98fd + name: 'Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Firmware version' + type: DEPENDENT + key: 'hpe.synergy.manager["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",fw_version]' + delay: '0' + history: 7d + trends: '0' + value_type: CHAR + description: 'The firmware version of the manager.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].managerBays[?(@.bayNumber == "{#BAY_NUMBER}")].fwVersion.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1d + master_item: + key: hpe.synergy.data.get + tags: + - + tag: bay-number + value: '{#BAY_NUMBER}' + - + tag: component + value: manager + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + - + uuid: c34aade5cdf1469cbab8fe97ede864ea + name: 'Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Link port state' + type: DEPENDENT + key: 'hpe.synergy.manager["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",link_port_state]' + delay: '0' + history: 7d + description: | + The state of the LINK port: + + Disabled - The port is disabled. + Linked - The port is linked. + Unlinked - The port is unlinked. + valuemap: + name: 'Link port state' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].managerBays[?(@.bayNumber == "{#BAY_NUMBER}")].linkPortState.first()' + - + type: STR_REPLACE + parameters: + - Disabled + - '0' + - + type: STR_REPLACE + parameters: + - Linked + - '1' + - + type: STR_REPLACE + parameters: + - Unlinked + - '2' + - + type: IN_RANGE + parameters: + - '0' + - '2' + error_handler: CUSTOM_VALUE + error_handler_params: '3' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 10m + master_item: + key: hpe.synergy.data.get + tags: + - + tag: bay-number + value: '{#BAY_NUMBER}' + - + tag: component + value: manager + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + - + uuid: ca60cadc2c0f44e7a281e956bc34d1da + name: 'Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Link port status' + type: DEPENDENT + key: 'hpe.synergy.manager["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",link_port_status]' + delay: '0' + history: 7d + description: | + The status of the LINK port: + + Critical - Needs immediate attention. + Disabled - The resource is currently not operational. + OK - Indicates normal/informational behavior. + Unknown - The health status is not yet known or cannot be determined. + Warning - Needs attention soon. + valuemap: + name: 'Health status' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].managerBays[?(@.bayNumber == "{#BAY_NUMBER}")].linkPortStatus.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 10m + - + type: STR_REPLACE + parameters: + - Critical + - '0' + - + type: STR_REPLACE + parameters: + - Disabled + - '1' + - + type: STR_REPLACE + parameters: + - OK + - '2' + - + type: STR_REPLACE + parameters: + - Unknown + - '3' + - + type: STR_REPLACE + parameters: + - Warning + - '4' + - + type: IN_RANGE + parameters: + - '0' + - '4' + error_handler: CUSTOM_VALUE + error_handler_params: '3' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: bay-number + value: '{#BAY_NUMBER}' + - + tag: component + value: manager + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + trigger_prototypes: + - + uuid: d0a6196dc2984373916bbb857687d398 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.manager["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",link_port_status])=0' + name: 'Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Link port has critical status' + priority: HIGH + description: 'Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] link port status is critical. Needs immediate attention.' + tags: + - + tag: scope + value: availability + - + tag: scope + value: capacity + - + uuid: 73fd558563794741b1416fb73ba4f173 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.manager["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",link_port_status])=4' + name: 'Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Link port has warning status' + priority: WARNING + description: 'Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] link port status is warning. Needs attention soon.' + tags: + - + tag: scope + value: availability + - + tag: scope + value: capacity + - + uuid: ab5f51fe1dcd4a859ffb3dff66450b33 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.manager["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",link_port_status])=1' + name: 'Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Link port is disabled' + priority: INFO + description: 'Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] link port currently not operational.' + tags: + - + tag: scope + value: capacity + - + uuid: b636ea6e5d994e728579cd5d479fe298 + name: 'Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: MGMT port state' + type: DEPENDENT + key: 'hpe.synergy.manager["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",mgmt_port_state]' + delay: '0' + history: 7d + description: | + The state of the MGMT port: + + Active - The port is in active mode. + Disabled - The port is in disabled mode. + I3s - The port is configured for OS deployment network traffic. + Other - The port is in other mode. + Standby - The port is in standby mode. + Unknown - The port mode is not known. + valuemap: + name: 'MGMT port state' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].managerBays[?(@.bayNumber == "{#BAY_NUMBER}")].mgmtPortState.first()' + - + type: STR_REPLACE + parameters: + - Active + - '0' + - + type: STR_REPLACE + parameters: + - Disabled + - '1' + - + type: STR_REPLACE + parameters: + - I3s + - '2' + - + type: STR_REPLACE + parameters: + - Other + - '3' + - + type: STR_REPLACE + parameters: + - Standby + - '4' + - + type: STR_REPLACE + parameters: + - Unknown + - '5' + - + type: IN_RANGE + parameters: + - '0' + - '5' + error_handler: CUSTOM_VALUE + error_handler_params: '5' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 10m + master_item: + key: hpe.synergy.data.get + tags: + - + tag: bay-number + value: '{#BAY_NUMBER}' + - + tag: component + value: manager + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + - + uuid: 41a66b669b15425796f1dce9b46545c5 + name: 'Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: MGMT port status' + type: DEPENDENT + key: 'hpe.synergy.manager["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",mgmt_port_status]' + delay: '0' + history: 7d + description: | + The status of the MGMT port: + + Critical - Needs immediate attention. + Disabled - The resource is currently not operational. + OK - Indicates normal/informational behavior. + Unknown - The health status is not yet known or cannot be determined. + Warning - Needs attention soon. + valuemap: + name: 'Health status' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].managerBays[?(@.bayNumber == "{#BAY_NUMBER}")].mgmtPortStatus.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 10m + - + type: STR_REPLACE + parameters: + - Critical + - '0' + - + type: STR_REPLACE + parameters: + - Disabled + - '1' + - + type: STR_REPLACE + parameters: + - OK + - '2' + - + type: STR_REPLACE + parameters: + - Unknown + - '3' + - + type: STR_REPLACE + parameters: + - Warning + - '4' + - + type: IN_RANGE + parameters: + - '0' + - '4' + error_handler: CUSTOM_VALUE + error_handler_params: '3' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: bay-number + value: '{#BAY_NUMBER}' + - + tag: component + value: manager + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + trigger_prototypes: + - + uuid: 514ecd9c1bbd4821ad84e5ddb042d0c6 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.manager["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",mgmt_port_status])=0' + name: 'Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: MGMT port has critical status' + priority: HIGH + description: 'Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] mgmt port status is critical. Needs immediate attention.' + tags: + - + tag: scope + value: availability + - + uuid: 7dd75b26c54d41228199ee9e810272bc + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.manager["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",mgmt_port_status])=4' + name: 'Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: MGMT port has warning status' + priority: WARNING + description: 'Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] MGMT port status is warning. Needs attention soon.' + tags: + - + tag: scope + value: availability + - + uuid: 1b7b8409bc394f22b940c09e56b3fa5c + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.manager["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",mgmt_port_status])=1' + name: 'Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: MGMT port is disabled' + priority: INFO + description: 'Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] MGMT port currently not operational.' + tags: + - + tag: scope + value: notice + - + uuid: 99281bb985fe46c6ac9328e2e491665e + name: 'Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Model' + type: DEPENDENT + key: 'hpe.synergy.manager["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",model]' + delay: '0' + history: 7d + trends: '0' + value_type: CHAR + description: 'The model of the link module.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].managerBays[?(@.bayNumber == "{#BAY_NUMBER}")].model.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1d + master_item: + key: hpe.synergy.data.get + tags: + - + tag: bay-number + value: '{#BAY_NUMBER}' + - + tag: component + value: manager + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + - + uuid: 90a8d8e504834e4393c3fa0bbcb5e802 + name: 'Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Part number' + type: DEPENDENT + key: 'hpe.synergy.manager["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",part_number]' + delay: '0' + history: 7d + trends: '0' + value_type: CHAR + description: 'The part number of the link module.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].managerBays[?(@.bayNumber == "{#BAY_NUMBER}")].partNumber.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1d + master_item: + key: hpe.synergy.data.get + tags: + - + tag: bay-number + value: '{#BAY_NUMBER}' + - + tag: component + value: manager + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + - + uuid: 4a9f6da6f67545fb9ed5a8333bd1b303 + name: 'Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Presence' + type: DEPENDENT + key: 'hpe.synergy.manager["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",presence]' + delay: '0' + history: 7d + description: | + Indicates whether a manager is present in the bay: + + Absent - The device slot is empty. + PresenceNoOp - The device slot is uninitialized. + PresenceUnknown - The device presence is unknown. + Present - The device slot has a device in it. + Subsumed - The device slot is configured to be part of another device slot. Not applicable for fan or power supply bays. + valuemap: + name: 'Device presence' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].managerBays[?(@.bayNumber == "{#BAY_NUMBER}")].devicePresence.first()' + - + type: STR_REPLACE + parameters: + - Absent + - '0' + - + type: STR_REPLACE + parameters: + - PresenceNoOp + - '1' + - + type: STR_REPLACE + parameters: + - PresenceUnknown + - '2' + - + type: STR_REPLACE + parameters: + - Present + - '3' + - + type: STR_REPLACE + parameters: + - Subsumed + - '4' + - + type: IN_RANGE + parameters: + - '0' + - '4' + error_handler: CUSTOM_VALUE + error_handler_params: '2' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1h + master_item: + key: hpe.synergy.data.get + tags: + - + tag: bay-number + value: '{#BAY_NUMBER}' + - + tag: component + value: manager + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + trigger_prototypes: + - + uuid: d47706453e8944e497ff01feaaa19aab + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.manager["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",presence])=4' + name: 'Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Is subsumed' + priority: AVERAGE + description: 'The device slot is configured to be part of another device slot.' + tags: + - + tag: scope + value: notice + - + uuid: 1d9ac1bcc74048df8358c148c3ed9ce4 + name: 'Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Serial number' + type: DEPENDENT + key: 'hpe.synergy.manager["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",serial_number]' + delay: '0' + history: 7d + trends: '0' + value_type: CHAR + description: 'The serial number of the link module.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].managerBays[?(@.bayNumber == "{#BAY_NUMBER}")].serialNumber.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1d + master_item: + key: hpe.synergy.data.get + tags: + - + tag: bay-number + value: '{#BAY_NUMBER}' + - + tag: component + value: manager + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + - + uuid: c6ee7ec806e04600b6826dbb373bcafe + name: 'Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Spare part number' + type: DEPENDENT + key: 'hpe.synergy.manager["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",spare_part_number]' + delay: '0' + history: 7d + trends: '0' + value_type: CHAR + description: 'The spare part number of the link module.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].managerBays[?(@.bayNumber == "{#BAY_NUMBER}")].sparePartNumber.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1d + master_item: + key: hpe.synergy.data.get + tags: + - + tag: bay-number + value: '{#BAY_NUMBER}' + - + tag: component + value: manager + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + - + uuid: 0f72a6c8e89b4ea0b66bb0becae93bb1 + name: 'Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Status' + type: DEPENDENT + key: 'hpe.synergy.manager["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",status]' + delay: '0' + history: 7d + description: | + The health status of the link module: + + Critical - Needs immediate attention. + Disabled - The resource is currently not operational. + OK - Indicates normal/informational behavior. + Unknown - The health status is not yet known or cannot be determined. + Warning - Needs attention soon. + valuemap: + name: 'Health status' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].managerBays[?(@.bayNumber == "{#BAY_NUMBER}")].status.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 10m + - + type: STR_REPLACE + parameters: + - Critical + - '0' + - + type: STR_REPLACE + parameters: + - Disabled + - '1' + - + type: STR_REPLACE + parameters: + - OK + - '2' + - + type: STR_REPLACE + parameters: + - Unknown + - '3' + - + type: STR_REPLACE + parameters: + - Warning + - '4' + - + type: IN_RANGE + parameters: + - '0' + - '4' + error_handler: CUSTOM_VALUE + error_handler_params: '3' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: bay-number + value: '{#BAY_NUMBER}' + - + tag: component + value: manager + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + trigger_prototypes: + - + uuid: c1d8fa7ff1fe444aaefdffdcda810e5c + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.manager["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",status])=0' + name: 'Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Has critical status' + priority: HIGH + description: 'Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] status is critical. Needs immediate attention.' + tags: + - + tag: scope + value: availability + - + uuid: 44b30472c18a49cf9c0f7bb2f30fd184 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.manager["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",status])=4' + name: 'Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Has warning status' + priority: WARNING + description: 'Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] status is warning. Needs attention soon.' + tags: + - + tag: scope + value: availability + - + uuid: 34dd6fb0ed264192b7d1b46ba2778b16 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.manager["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",status])=1' + name: 'Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Is disabled' + priority: INFO + description: 'Manager [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] currently not operational.' + tags: + - + tag: scope + value: notice + master_item: + key: hpe.synergy.data.enclosures + lld_macro_paths: + - + lld_macro: '{#BAY_NUMBER}' + path: $.bayNumber + - + lld_macro: '{#ENCLOSURE_NAME}' + path: $.enclosureName + preprocessing: + - + type: JSONPATH + parameters: + - $.managerBays + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 6h + - + uuid: 6d77748c49de4c6c9c0319a52bec29fc + name: 'Hypervisor managers discovery' + type: DEPENDENT + key: hpe.synergy.hypervisor.managers.discovery + delay: '0' + description: 'A list of the hypervisor managers.' + item_prototypes: + - + uuid: a60a72ddc0de4a9c9b0b7be53542089c + name: 'Hypervisor manager [{#NAME}]: State' + type: DEPENDENT + key: 'hpe.synergy.hypervisor_manager["{#NAME}",state]' + delay: '0' + history: 7d + description: 'Current state of the resource. Valid values include Connected, Disconnected, Configuring and Error.' + valuemap: + name: 'Hypervisor manager state' + preprocessing: + - + type: JSONPATH + parameters: + - '$.["hypervisor-managers"].members[?(@.displayName == "{#NAME}")].state.first()' + - + type: STR_REPLACE + parameters: + - Connected + - '0' + - + type: STR_REPLACE + parameters: + - Disconnected + - '1' + - + type: STR_REPLACE + parameters: + - Configuring + - '2' + - + type: STR_REPLACE + parameters: + - Error + - '3' + - + type: IN_RANGE + parameters: + - '0' + - '3' + error_handler: CUSTOM_VALUE + error_handler_params: '4' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: hypervisor-manager + - + tag: hypervisor-manager + value: '{#NAME}' + - + uuid: 2f0874b4d0464fc58d64c12a04b8d738 + name: 'Hypervisor manager [{#NAME}]: State reason' + type: DEPENDENT + key: 'hpe.synergy.hypervisor_manager["{#NAME}",state_reason]' + delay: '0' + history: 7d + trends: '0' + value_type: CHAR + description: 'Indicates the reason the resource in its current state.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.["hypervisor-managers"].members[?(@.displayName == "{#NAME}")].stateReason.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1h + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: hypervisor-manager + - + tag: hypervisor-manager + value: '{#NAME}' + - + uuid: e5ec285a6c74478d903284ecb67d3f96 + name: 'Hypervisor manager [{#NAME}]: Status' + type: DEPENDENT + key: 'hpe.synergy.hypervisor_manager["{#NAME}",status]' + delay: '0' + history: 7d + description: | + Current status of this resource: + + Critical - Needs immediate attention. + Disabled - The resource is currently not operational. + OK - Indicates normal/informational behavior. + Unknown - The health status is not yet known or cannot be determined. + Warning - Needs attention soon. + valuemap: + name: 'Health status' + preprocessing: + - + type: JSONPATH + parameters: + - '$.["hypervisor-managers"].members[?(@.displayName == "{#NAME}")].status.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 10m + - + type: STR_REPLACE + parameters: + - Critical + - '0' + - + type: STR_REPLACE + parameters: + - Disabled + - '1' + - + type: STR_REPLACE + parameters: + - OK + - '2' + - + type: STR_REPLACE + parameters: + - Unknown + - '3' + - + type: STR_REPLACE + parameters: + - Warning + - '4' + - + type: IN_RANGE + parameters: + - '0' + - '4' + error_handler: CUSTOM_VALUE + error_handler_params: '3' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: hypervisor-manager + - + tag: hypervisor-manager + value: '{#NAME}' + trigger_prototypes: + - + uuid: a942a7ddfad14bb08915c7ba6c3248bc + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.hypervisor_manager["{#NAME}",status])=0' + name: 'Hypervisor manager [{#NAME}]: Has critical status' + priority: HIGH + description: 'Hypervisor manager [{#NAME}] status is critical. Needs immediate attention.' + tags: + - + tag: scope + value: availability + - + uuid: d81f11c478484d77a64049a2716865b4 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.hypervisor_manager["{#NAME}",status])=4' + name: 'Hypervisor manager [{#NAME}]: Has warning status' + priority: WARNING + description: 'Hypervisor manager [{#NAME}] status is warning. Needs attention soon.' + tags: + - + tag: scope + value: availability + - + uuid: ea85e02ebac94ab2821659c88eb5363c + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.hypervisor_manager["{#NAME}",status])=1' + name: 'Hypervisor manager [{#NAME}]: Is disabled' + priority: INFO + description: 'Hypervisor manager [{#NAME}] currently not operational.' + tags: + - + tag: scope + value: availability + trigger_prototypes: + - + uuid: fd90d819f10d43cc9b18ae5e5ee96b66 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.hypervisor_manager["{#NAME}",state])=3 and length(last(/HPE Synergy by HTTP/hpe.synergy.hypervisor_manager["{#NAME}",state_reason]))>0' + name: 'Hypervisor manager [{#NAME}]: Is in error state' + opdata: 'Reason: {ITEM.LASTVALUE2}' + priority: HIGH + description: 'Hypervisor manager [{#NAME}] has error.' + tags: + - + tag: scope + value: availability + master_item: + key: hpe.synergy.data.get + lld_macro_paths: + - + lld_macro: '{#NAME}' + path: $.displayName + preprocessing: + - + type: JSONPATH + parameters: + - '$.["hypervisor-managers"].members' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 6h + - + uuid: c05507c8d82f4354a813670620298732 + name: 'Interconnects discovery' + type: DEPENDENT + key: hpe.synergy.interconnects.discovery + delay: '0' + description: 'Interconnects are centrally managed by their containing logical interconnect. The interconnect provides a physical view of detailed downlink and uplink port state and configuration, including the current link state, speed, port role (uplink, downlink, or stacking), current pluggable media, power state, and immediate connected neighbor.' + item_prototypes: + - + uuid: dc4822f158da4577a47ec4cf920b9b90 + name: 'Interconnect [{#NAME}]: Hardware health' + type: DEPENDENT + key: 'hpe.synergy.interconnect["{#NAME}",hw.health]' + delay: '0' + history: 7d + trends: '0' + value_type: CHAR + description: 'Interconnect hardware health status.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.interconnects.members[?(@.name == "{#NAME}")].interconnectHardwareHealth.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1h + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: health + - + tag: component + value: interconnect + - + tag: interconnect + value: '{#NAME}' + - + uuid: 7113bba95f38421a8bcffe77f9a3944d + name: 'Interconnect [{#NAME}]: Model' + type: DEPENDENT + key: 'hpe.synergy.interconnect["{#NAME}",model]' + delay: '0' + history: 7d + trends: '0' + value_type: CHAR + description: 'Interconnect model.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.interconnects.members[?(@.name == "{#NAME}")].model.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1d + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: interconnect + - + tag: interconnect + value: '{#NAME}' + - + uuid: d3e8fc007d5e4adf899fdb3d0f786fb1 + name: 'Interconnect [{#NAME}]: Part number' + type: DEPENDENT + key: 'hpe.synergy.interconnect["{#NAME}",part_number]' + delay: '0' + history: 7d + trends: '0' + value_type: CHAR + description: 'Interconnect part number.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.interconnects.members[?(@.name == "{#NAME}")].partNumber.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1d + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: interconnect + - + tag: interconnect + value: '{#NAME}' + - + uuid: c2e482f840184c278c09017623fd96d1 + name: 'Interconnect [{#NAME}]: Port count' + type: DEPENDENT + key: 'hpe.synergy.interconnect["{#NAME}",port_count]' + delay: '0' + history: 7d + description: 'Number of ports on the interconnect.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.interconnects.members[?(@.name == "{#NAME}")].portCount.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1h + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: interconnect + - + tag: interconnect + value: '{#NAME}' + - + uuid: 27e4c424f81940b1958e0455042bf3d3 + name: 'Interconnect [{#NAME}]: Serial number' + type: DEPENDENT + key: 'hpe.synergy.interconnect["{#NAME}",serial_number]' + delay: '0' + history: 7d + trends: '0' + value_type: CHAR + description: 'Interconnect serial number.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.interconnects.members[?(@.name == "{#NAME}")].serialNumber.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1d + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: interconnect + - + tag: interconnect + value: '{#NAME}' + - + uuid: 8232b536d74846d7a90ce19400418a36 + name: 'Interconnect [{#NAME}]: Spare part number' + type: DEPENDENT + key: 'hpe.synergy.interconnect["{#NAME}",spare_part_number]' + delay: '0' + history: 7d + trends: '0' + value_type: CHAR + description: 'Interconnect spare part number.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.interconnects.members[?(@.name == "{#NAME}")].sparePartNumber.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1d + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: interconnect + - + tag: interconnect + value: '{#NAME}' + - + uuid: bd97faaf4a4c47a1a87d97650d65a375 + name: 'Interconnect [{#NAME}]: State' + type: DEPENDENT + key: 'hpe.synergy.interconnect["{#NAME}",state]' + delay: '0' + history: 7d + trends: '0' + value_type: CHAR + description: 'Current state of the resource' + preprocessing: + - + type: JSONPATH + parameters: + - '$.interconnects.members[?(@.name == "{#NAME}")].state.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1h + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: interconnect + - + tag: interconnect + value: '{#NAME}' + - + uuid: ac234400f7324bbea2c736c6f7afd131 + name: 'Interconnect [{#NAME}]: Status' + type: DEPENDENT + key: 'hpe.synergy.interconnect["{#NAME}",status]' + delay: '0' + history: 7d + description: | + Overall health status of the resource. The following are the valid values for the status of the resource: + + Critical - Needs immediate attention. + Disabled - The resource is currently not operational. + OK - Indicates normal/informational behavior. + Unknown - The health status is not yet known or cannot be determined. + Unknown - should be avoided, but there may be rare occasions where status is Unknown. + valuemap: + name: 'Health status' + preprocessing: + - + type: JSONPATH + parameters: + - '$.interconnects.members[?(@.name == "{#NAME}")].status.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 10m + - + type: STR_REPLACE + parameters: + - Critical + - '0' + - + type: STR_REPLACE + parameters: + - Disabled + - '1' + - + type: STR_REPLACE + parameters: + - OK + - '2' + - + type: STR_REPLACE + parameters: + - Unknown + - '3' + - + type: STR_REPLACE + parameters: + - Warning + - '4' + - + type: IN_RANGE + parameters: + - '0' + - '4' + error_handler: CUSTOM_VALUE + error_handler_params: '3' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: interconnect + - + tag: interconnect + value: '{#NAME}' + trigger_prototypes: + - + uuid: ccc001583dc6478aa3569b14b65be97d + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.interconnect["{#NAME}",status])=0' + name: 'Interconnect [{#NAME}]: Has critical status' + priority: HIGH + description: 'Interconnect [{#NAME}] status is critical. Needs immediate attention.' + tags: + - + tag: scope + value: availability + - + uuid: a6d1c63e2aa04c71bac2eaef5b693110 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.interconnect["{#NAME}",status])=4' + name: 'Interconnect [{#NAME}]: Has warning status' + priority: WARNING + description: 'Interconnect [{#NAME}] status is warning. Needs attention soon.' + tags: + - + tag: scope + value: availability + - + uuid: 6649436c06c345f8a394356e8a4fe546 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.interconnect["{#NAME}",status])=1' + name: 'Interconnect [{#NAME}]: Is disabled' + priority: INFO + description: 'Interconnect [{#NAME}] currently not operational.' + tags: + - + tag: scope + value: availability + master_item: + key: hpe.synergy.data.get + lld_macro_paths: + - + lld_macro: '{#ENCLOSURE_NAME}' + path: $.enclosureName + - + lld_macro: '{#NAME}' + path: $.name + preprocessing: + - + type: JSONPATH + parameters: + - $.interconnects.members + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 6h + - + uuid: eae31026740c4de299a5e52753eb9445 + name: 'Logical enclosures discovery' + type: DEPENDENT + key: hpe.synergy.logical_enclosures.discovery + delay: '0' + description: 'A list of the logical enclosures.' + item_prototypes: + - + uuid: 785f3a94e8614810b7ccc84be779ad1d + name: 'Logical enclosure [{#NAME}]: State' + type: DEPENDENT + key: 'hpe.synergy.logical_enclosure["{#NAME}",state]' + delay: '0' + history: 7d + description: | + Current resource state of the logical enclosure: + + Consistent - This is the expected state of the logical enclosure. The logical enclosure configuration is consistent with the enclosure group and the configuration of the hardware resources is consistent with the logical enclosure configuration. + Creating - The logical enclosure is being created. + DeleteFailed - The prior attempt to delete the logical enclosure failed. Retry the delete operation potentially with the force option. No other logical enclosure operations are allowed in this state. + Deleting - The logical enclosure is being deleted. + Inconsistent - The configuration of the logical enclosure differs from that of the enclosure group, or the configuration of the hardware resources is inconsistent with the logical enclosure configuration. Perform an Update from group, Reapply configuration, or Update firmware action as appropriate to bring the configuration back into consistency. + Updating - Configuration changes are being applied to the hardware configuration. + valuemap: + name: 'Logical enclosure state' + preprocessing: + - + type: JSONPATH + parameters: + - '$.["logical-enclosures"].members[?(@.name == "{#NAME}")].state.first()' + - + type: STR_REPLACE + parameters: + - Inconsistent + - '0' + - + type: STR_REPLACE + parameters: + - Creating + - '1' + - + type: STR_REPLACE + parameters: + - DeleteFailed + - '2' + - + type: STR_REPLACE + parameters: + - Deleting + - '3' + - + type: STR_REPLACE + parameters: + - Consistent + - '4' + - + type: STR_REPLACE + parameters: + - Updating + - '5' + - + type: IN_RANGE + parameters: + - '0' + - '5' + error_handler: CUSTOM_VALUE + error_handler_params: '6' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: logical-enclosure + - + tag: logical-enclosure + value: '{#NAME}' + trigger_prototypes: + - + uuid: 1c17c2f49bea47bc978698e4b8d8281b + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.logical_enclosure["{#NAME}",state])=2' + name: 'Logical enclosure [{#NAME}]: Delete failed' + priority: AVERAGE + description: 'Indicator that the deletion of a logical enclosure failed.' + tags: + - + tag: scope + value: availability + - + uuid: 85354d24f47d45f48c5dda86b9f22fe3 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.logical_enclosure["{#NAME}",state])=0' + name: 'Logical enclosure [{#NAME}]: Is inconsistent' + priority: AVERAGE + description: 'The configuration of the logical enclosure differs from that of the enclosure group, or the configuration of the hardware resources is inconsistent with the logical enclosure configuration. Perform an Update from group, Reapply configuration, or Update firmware action as appropriate to bring the configuration back into consistency.' + tags: + - + tag: scope + value: availability + - + uuid: 0f1e0448aeaf464cb608d576eb42a481 + name: 'Logical enclosure [{#NAME}]: Status' + type: DEPENDENT + key: 'hpe.synergy.logical_enclosure["{#NAME}",status]' + delay: '0' + history: 7d + description: | + Overall health status of the resource. The following are the valid values for the status of the resource: + + OK - indicates normal/informational behavior. + Disabled - indicates that a resource is not operational. + Warning - needs attention soon. + Critical - needs immediate attention. + Unknown - should be avoided, but there may be rare occasions where status is Unknown. + valuemap: + name: 'Health status' + preprocessing: + - + type: JSONPATH + parameters: + - '$.["logical-enclosures"].members[?(@.name == "{#NAME}")].status.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 10m + - + type: STR_REPLACE + parameters: + - Critical + - '0' + - + type: STR_REPLACE + parameters: + - Disabled + - '1' + - + type: STR_REPLACE + parameters: + - OK + - '2' + - + type: STR_REPLACE + parameters: + - Unknown + - '3' + - + type: STR_REPLACE + parameters: + - Warning + - '4' + - + type: IN_RANGE + parameters: + - '0' + - '4' + error_handler: CUSTOM_VALUE + error_handler_params: '3' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: logical-enclosure + - + tag: logical-enclosure + value: '{#NAME}' + trigger_prototypes: + - + uuid: b3af6beba595455eb7774b3c609e9108 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.logical_enclosure["{#NAME}",status])=0' + name: 'Logical enclosure [{#NAME}]: Has critical status' + priority: HIGH + description: 'Logical enclosure [{#NAME}] status is critical. Needs immediate attention.' + tags: + - + tag: scope + value: availability + - + uuid: 32061fadb9c74abab1a1d1371e2cf3e8 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.logical_enclosure["{#NAME}",status])=4' + name: 'Logical enclosure [{#NAME}]: Has warning status' + priority: WARNING + description: 'Logical enclosure [{#NAME}] status is warning. Needs attention soon.' + tags: + - + tag: scope + value: availability + - + uuid: c7ec2fb26b794b28b99eb321a3201fce + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.logical_enclosure["{#NAME}",status])=1' + name: 'Logical enclosure [{#NAME}]: Is disabled' + priority: INFO + description: 'Logical enclosure [{#NAME}] currently not operational.' + tags: + - + tag: scope + value: availability + master_item: + key: hpe.synergy.data.get + lld_macro_paths: + - + lld_macro: '{#NAME}' + path: $.name + preprocessing: + - + type: JSONPATH + parameters: + - '$.["logical-enclosures"].members' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 6h + - + uuid: b800eed59653494cb5383e91627f0ef7 + name: 'nPar discovery' + type: DEPENDENT + key: hpe.synergy.npar.discovery + delay: '0' + description: 'Electrically isolated hardware partition (nPar). Partition details are relevant only for enclosures with type "SDX".' + item_prototypes: + - + uuid: 8ee334ce899341a8b1292dd84d7b0af4 + name: 'Partition [{#ENCLOSURE_NAME}:{#PARTITION_ID}]: Devices count' + type: DEPENDENT + key: 'hpe.synergy.partition["{#PARTITION_ID}","{#ENCLOSURE_NAME}",device_count]' + delay: '0' + history: 7d + description: 'The number of blades in the partition.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].partitions[?(@.partitionID == "{#PARTITION_ID}")].deviceCount.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 10m + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: partition + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + - + tag: partition + value: '{#PARTITION_ID}' + - + uuid: e090ef309a9a4f8a98d3c5e24bd53d4d + name: 'Partition [{#ENCLOSURE_NAME}:{#PARTITION_ID}]: Health' + type: DEPENDENT + key: 'hpe.synergy.partition["{#PARTITION_ID}","{#ENCLOSURE_NAME}",health]' + delay: '0' + history: 7d + description: | + Indicates the health of the partition and the health of its owned resources (blades and IO bays) as reported by firmware. If a problem is detected with one of the resources, the health of the partition is reported as Degraded. If all of the resources in the partition are operating correctly the health of the partition is reported as OK. + + NparDegrade - One or more resources in the partition are unhealthy. + NparHealthInvalid - Partition health is invalid. + NparHealthMax - Delimiter defined by firmware. + NparOk - All the resources in partition are healthy. + valuemap: + name: 'Partition health' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].partitions[?(@.partitionID == "{#PARTITION_ID}")].partitionHealth.first()' + - + type: STR_REPLACE + parameters: + - NparDegrade + - '0' + - + type: STR_REPLACE + parameters: + - NparHealthInvalid + - '1' + - + type: STR_REPLACE + parameters: + - NparHealthMax + - '2' + - + type: STR_REPLACE + parameters: + - NparOk + - '3' + - + type: IN_RANGE + parameters: + - '0' + - '3' + error_handler: CUSTOM_VALUE + error_handler_params: '4' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: health + - + tag: component + value: partition + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + - + tag: partition + value: '{#PARTITION_ID}' + trigger_prototypes: + - + uuid: 1c85a47cfa96487f8c338afe21ad7ce3 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.partition["{#PARTITION_ID}","{#ENCLOSURE_NAME}",health])=0' + name: 'Partition [{#ENCLOSURE_NAME}:{#PARTITION_ID}]: Health is degraded' + priority: HIGH + description: 'One or more resources in the partition are unhealthy.' + tags: + - + tag: scope + value: availability + - + uuid: fdf5fa892eda46aaa2551168e36428bc + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.partition["{#PARTITION_ID}","{#ENCLOSURE_NAME}",health])=1' + name: 'Partition [{#ENCLOSURE_NAME}:{#PARTITION_ID}]: Health is invalid' + priority: AVERAGE + description: 'Partition health is invalid.' + tags: + - + tag: scope + value: availability + - + uuid: fc5d550b6bdd4e2a891f4faa5e51f792 + name: 'Partition [{#ENCLOSURE_NAME}:{#PARTITION_ID}]: Memory' + type: DEPENDENT + key: 'hpe.synergy.partition["{#PARTITION_ID}","{#ENCLOSURE_NAME}",memory]' + delay: '0' + history: 7d + units: B + description: 'Total memory of the partition.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].partitions[?(@.partitionID == "{#PARTITION_ID}")].memoryMb.first()' + - + type: MULTIPLIER + parameters: + - '1048576' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1h + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: memory + - + tag: component + value: partition + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + - + tag: partition + value: '{#PARTITION_ID}' + - + uuid: b388a6aeae4e4bd4b14b0eb334b67934 + name: 'Partition [{#ENCLOSURE_NAME}:{#PARTITION_ID}]: Processors Count' + type: DEPENDENT + key: 'hpe.synergy.partition["{#PARTITION_ID}","{#ENCLOSURE_NAME}",processor_count]' + delay: '0' + history: 7d + description: 'The number of processors in the partition.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].partitions[?(@.partitionID == "{#PARTITION_ID}")].processorCount.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 10m + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: cpu + - + tag: component + value: partition + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + - + tag: partition + value: '{#PARTITION_ID}' + - + uuid: ed4ad1bb9a534b40af4754cf31dc87f9 + name: 'Partition [{#ENCLOSURE_NAME}:{#PARTITION_ID}]: Status' + type: DEPENDENT + key: 'hpe.synergy.partition["{#PARTITION_ID}","{#ENCLOSURE_NAME}",status]' + delay: '0' + history: 7d + description: | + Indicates whether the partition has booted and its current power state: + + ParStatusActive - Partition is active when a 'poweron' operation is initiated on the partition and the firmware boot process is started. + ParStatusInactive - Partition is in inactive state after it has been created or shut down. + ParStatusInvalid - Partition status is invalid. + ParStatusManualRepair - Partition is under manual repair. + ParStatusMax - Delimiter defined by OA firmware. + ParStatusUndefined - Partition status is undefined. + ParStatusUnknown - Partition might report an 'Unknown' state after an OA restart. This state is possible when the firmware is not able to identify the correct partition state due to internal firmware errors at OA startup. The state is persistent and can only be cleared by force powering off the partition from the OA. A partition in this state will not accept any partition operation except parstatus and force poweroff. Any active OS instances continue to run unhindered even when the partition is in an Unknown state. + valuemap: + name: 'Partition status' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].partitions[?(@.partitionID == "{#PARTITION_ID}")].partitionStatus.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 10m + - + type: STR_REPLACE + parameters: + - ParStatusActive + - '0' + - + type: STR_REPLACE + parameters: + - ParStatusInactive + - '1' + - + type: STR_REPLACE + parameters: + - ParStatusInvalid + - '2' + - + type: STR_REPLACE + parameters: + - ParStatusManualRepair + - '3' + - + type: STR_REPLACE + parameters: + - ParStatusMax + - '4' + - + type: STR_REPLACE + parameters: + - ParStatusUndefined + - '5' + - + type: STR_REPLACE + parameters: + - ParStatusUnknown + - '6' + - + type: IN_RANGE + parameters: + - '0' + - '6' + error_handler: CUSTOM_VALUE + error_handler_params: '6' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: partition + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + - + tag: partition + value: '{#PARTITION_ID}' + trigger_prototypes: + - + uuid: 1a9c705957d34bfc976c23a8b1f38e14 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.partition["{#PARTITION_ID}","{#ENCLOSURE_NAME}",status])=2' + name: 'Partition [{#ENCLOSURE_NAME}:{#PARTITION_ID}]: Is invalid' + priority: AVERAGE + description: 'Partition status is invalid.' + tags: + - + tag: scope + value: availability + master_item: + key: hpe.synergy.data.enclosures + lld_macro_paths: + - + lld_macro: '{#ENCLOSURE_NAME}' + path: $.enclosureName + - + lld_macro: '{#PARTITION_ID}' + path: $.partitionID + preprocessing: + - + type: JSONPATH + parameters: + - $.partitions + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 6h + - + uuid: 8346025282a044cd8dafc2521a596f18 + name: 'Power supplies discovery' + type: DEPENDENT + key: hpe.synergy.ps.discovery + delay: '0' + description: 'List of power supply bays in the enclosure.' + item_prototypes: + - + uuid: e748215b1d4a404ca0269909d321cdc6 + name: 'Power Supply [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Model' + type: DEPENDENT + key: 'hpe.synergy.power_supply["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",model]' + delay: '0' + history: 7d + trends: '0' + value_type: CHAR + description: 'The common descriptive model of the power supply.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].powerSupplyBays[?(@.bayNumber == "{#BAY_NUMBER}")].model.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1d + master_item: + key: hpe.synergy.data.get + tags: + - + tag: bay-number + value: '{#BAY_NUMBER}' + - + tag: component + value: power + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + - + uuid: e0ac31d34ab34af383e56fb1c0a9972a + name: 'Power Supply [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Output capacity' + type: DEPENDENT + key: 'hpe.synergy.power_supply["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",output_capacity]' + delay: '0' + history: 7d + units: W + description: 'The power supply output capacity.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].powerSupplyBays[?(@.bayNumber == "{#BAY_NUMBER}")].outputCapacityWatts.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1h + master_item: + key: hpe.synergy.data.get + tags: + - + tag: bay-number + value: '{#BAY_NUMBER}' + - + tag: component + value: power + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + - + uuid: 98c72f6e11ab4dcba08c82793de9af96 + name: 'Power Supply [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Part number' + type: DEPENDENT + key: 'hpe.synergy.power_supply["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",part_number]' + delay: '0' + history: 7d + trends: '0' + value_type: CHAR + description: 'The part number of the power supply.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].powerSupplyBays[?(@.bayNumber == "{#BAY_NUMBER}")].partNumber.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1d + master_item: + key: hpe.synergy.data.get + tags: + - + tag: bay-number + value: '{#BAY_NUMBER}' + - + tag: component + value: power + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + - + uuid: 31cc380acfec455bbb4828d4aeae1ddc + name: 'Power Supply [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Presence' + type: DEPENDENT + key: 'hpe.synergy.power_supply["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",presence]' + delay: '0' + history: 7d + description: | + Indicates whether a power supply is present. + + Absent - The device slot is empty. + PresenceNoOp - The device slot is uninitialized. + PresenceUnknown - The device presence is unknown. + Present - The device slot has a device in it. + Subsumed - The device slot is configured to be part of another device slot. Not applicable for fan or power supply bays. + valuemap: + name: 'Device presence' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].powerSupplyBays[?(@.bayNumber == "{#BAY_NUMBER}")].devicePresence.first()' + - + type: STR_REPLACE + parameters: + - Absent + - '0' + - + type: STR_REPLACE + parameters: + - PresenceNoOp + - '1' + - + type: STR_REPLACE + parameters: + - PresenceUnknown + - '2' + - + type: STR_REPLACE + parameters: + - Present + - '3' + - + type: STR_REPLACE + parameters: + - Subsumed + - '4' + - + type: IN_RANGE + parameters: + - '0' + - '4' + error_handler: CUSTOM_VALUE + error_handler_params: '2' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1h + master_item: + key: hpe.synergy.data.get + tags: + - + tag: bay-number + value: '{#BAY_NUMBER}' + - + tag: component + value: power + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + - + uuid: 87ee5abdfdcf41459dd11678469a2fb4 + name: 'Power Supply [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Serial number' + type: DEPENDENT + key: 'hpe.synergy.power_supply["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",serial_number]' + delay: '0' + history: 7d + trends: '0' + value_type: CHAR + description: 'The unique serial number of the power supply.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].powerSupplyBays[?(@.bayNumber == "{#BAY_NUMBER}")].serialNumber.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1d + master_item: + key: hpe.synergy.data.get + tags: + - + tag: bay-number + value: '{#BAY_NUMBER}' + - + tag: component + value: power + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + - + uuid: ada2815275ce488f8ec1bc7a4a536681 + name: 'Power Supply [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Spare part number' + type: DEPENDENT + key: 'hpe.synergy.power_supply["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",spare_part_number]' + delay: '0' + history: 7d + trends: '0' + value_type: CHAR + description: 'The spare part number to be used when ordering an additional or replacement power supply of this type.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].powerSupplyBays[?(@.bayNumber == "{#BAY_NUMBER}")].sparePartNumber.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1d + master_item: + key: hpe.synergy.data.get + tags: + - + tag: bay-number + value: '{#BAY_NUMBER}' + - + tag: component + value: power + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + - + uuid: a2c1cf1e0f714e46af414d8c7427d3db + name: 'Power Supply [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Status' + type: DEPENDENT + key: 'hpe.synergy.power_supply["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",status]' + delay: '0' + history: 7d + description: | + Overall health status of the power supply: + + Critical - Needs immediate attention. + Disabled - The resource is currently not operational. + OK - Indicates normal/informational behavior. + Unknown - The health status is not yet known or cannot be determined. + Warning - Needs attention soon. + valuemap: + name: 'Health status' + preprocessing: + - + type: JSONPATH + parameters: + - '$.enclosures.members[?(@.name == "{#ENCLOSURE_NAME}")].powerSupplyBays[?(@.bayNumber == "{#BAY_NUMBER}")].status.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 10m + - + type: STR_REPLACE + parameters: + - Critical + - '0' + - + type: STR_REPLACE + parameters: + - Disabled + - '1' + - + type: STR_REPLACE + parameters: + - OK + - '2' + - + type: STR_REPLACE + parameters: + - Unknown + - '3' + - + type: STR_REPLACE + parameters: + - Warning + - '4' + - + type: IN_RANGE + parameters: + - '0' + - '4' + error_handler: CUSTOM_VALUE + error_handler_params: '3' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: bay-number + value: '{#BAY_NUMBER}' + - + tag: component + value: power + - + tag: enclosure + value: '{#ENCLOSURE_NAME}' + trigger_prototypes: + - + uuid: ce96e032cf49415aa341b238abcabd1b + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.power_supply["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",status])=0' + name: 'Power Supply [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Has critical status' + priority: HIGH + description: 'Power Supply [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] status is critical. Needs immediate attention.' + tags: + - + tag: scope + value: availability + - + uuid: 711695d95bc14ddfbe54be917c5e3340 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.power_supply["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",status])=4' + name: 'Power Supply [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Has warning status' + priority: WARNING + description: 'Power Supply [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] status is warning. Needs attention soon.' + tags: + - + tag: scope + value: availability + - + uuid: 6d286b675b7546a5b429792345867d16 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.power_supply["{#BAY_NUMBER}","{#ENCLOSURE_NAME}",status])=1' + name: 'Power Supply [{#ENCLOSURE_NAME}:{#BAY_NUMBER}]: Is disabled' + priority: INFO + description: 'Power Supply [{#ENCLOSURE_NAME}:{#BAY_NUMBER}] currently not operational.' + tags: + - + tag: scope + value: availability + master_item: + key: hpe.synergy.data.enclosures + lld_macro_paths: + - + lld_macro: '{#BAY_NUMBER}' + path: $.bayNumber + - + lld_macro: '{#ENCLOSURE_NAME}' + path: $.enclosureName + preprocessing: + - + type: JSONPATH + parameters: + - $.powerSupplyBays + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 6h + - + uuid: de1819e3eab74663b7cbd893c12ea540 + name: 'Racks discovery' + type: DEPENDENT + key: hpe.synergy.racks.discovery + delay: '0' + description: 'A list of the racks.' + item_prototypes: + - + uuid: 921fa76608e4437d961af2409dddde0b + name: 'Rack [{#NAME}]: State' + type: DEPENDENT + key: 'hpe.synergy.rack["{#NAME}",state]' + delay: '0' + history: 7d + description: 'The current state of the resource. Valid values include Adding, AddError, Configured, CredentialError, Refreshing, RefreshError, Removing, RemoveError, and Unmanaged.' + valuemap: + name: 'Rack state' + preprocessing: + - + type: JSONPATH + parameters: + - '$.racks.members[?(@.name == "{#NAME}")].state.first()' + - + type: STR_REPLACE + parameters: + - Adding + - '0' + - + type: STR_REPLACE + parameters: + - AddError + - '1' + - + type: STR_REPLACE + parameters: + - Configured + - '2' + - + type: STR_REPLACE + parameters: + - CredentialError + - '3' + - + type: STR_REPLACE + parameters: + - Refreshing + - '4' + - + type: STR_REPLACE + parameters: + - RefreshError + - '5' + - + type: STR_REPLACE + parameters: + - Removing + - '6' + - + type: STR_REPLACE + parameters: + - RemoveError + - '7' + - + type: STR_REPLACE + parameters: + - Unmanaged + - '8' + - + type: IN_RANGE + parameters: + - '0' + - '8' + error_handler: CUSTOM_VALUE + error_handler_params: '9' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: rack + - + tag: rack + value: '{#NAME}' + trigger_prototypes: + - + uuid: 3a4eebe27b2046d3af9f6b7dca4f1aeb + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.rack["{#NAME}",state])=1' + name: 'Rack [{#NAME}]: Add error' + priority: AVERAGE + description: 'Rack [{#NAME}] add failed.' + tags: + - + tag: scope + value: capacity + - + tag: scope + value: notice + - + uuid: 73d7062711f4440dad2b20865dbc79f6 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.rack["{#NAME}",state])=3' + name: 'Rack [{#NAME}]: Has credential error' + priority: AVERAGE + description: 'Rack [{#NAME}] has credential error.' + tags: + - + tag: scope + value: notice + - + uuid: 32b884dfb5164ae78f6274dc6ca4e0cb + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.rack["{#NAME}",state])=5' + name: 'Rack [{#NAME}]: Has refresh error' + priority: AVERAGE + description: 'Rack [{#NAME}] has refresh error.' + tags: + - + tag: scope + value: availability + - + uuid: 9ae1160a1bc242a9a1fe3fbf3b155ea7 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.rack["{#NAME}",state])=7' + name: 'Rack [{#NAME}]: Has remove error' + priority: AVERAGE + description: 'Rack [{#NAME}] has remove error.' + tags: + - + tag: scope + value: notice + - + uuid: b9473388000e4107b7a419611bc1b81a + name: 'Rack [{#NAME}]: Status' + type: DEPENDENT + key: 'hpe.synergy.rack["{#NAME}",status]' + delay: '0' + history: 7d + description: | + Overall health status of the resource. The following are the valid values for the status of the resource: + + OK - indicates normal/informational behavior. + Disabled - indicates that a resource is not operational. + Warning - needs attention soon. + Critical - needs immediate attention. + Unknown - should be avoided, but there may be rare occasions where status is Unknown. + valuemap: + name: 'Health status' + preprocessing: + - + type: JSONPATH + parameters: + - '$.racks.members[?(@.name == "{#NAME}")].status.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 10m + - + type: STR_REPLACE + parameters: + - Critical + - '0' + - + type: STR_REPLACE + parameters: + - Disabled + - '1' + - + type: STR_REPLACE + parameters: + - OK + - '2' + - + type: STR_REPLACE + parameters: + - Unknown + - '3' + - + type: STR_REPLACE + parameters: + - Warning + - '4' + - + type: IN_RANGE + parameters: + - '0' + - '4' + error_handler: CUSTOM_VALUE + error_handler_params: '3' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: rack + - + tag: rack + value: '{#NAME}' + trigger_prototypes: + - + uuid: f03657d149374102837fef92efc0bf28 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.rack["{#NAME}",status])=0' + name: 'Rack [{#NAME}]: Has critical status' + priority: HIGH + description: 'Rack [{#NAME}] status is critical. Needs immediate attention.' + tags: + - + tag: scope + value: availability + - + uuid: 74b635c0c6a7412395f36ac71fe56ec8 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.rack["{#NAME}",status])=4' + name: 'Rack [{#NAME}]: Has warning status' + priority: WARNING + description: 'Rack [{#NAME}] status is warning. Needs attention soon.' + tags: + - + tag: scope + value: availability + - + uuid: 1e4124bef22448f7b99b3b0ecd29a3ab + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.rack["{#NAME}",status])=1' + name: 'Rack [{#NAME}]: Is disabled' + priority: INFO + description: 'Rack [{#NAME}] currently not operational.' + tags: + - + tag: scope + value: availability + master_item: + key: hpe.synergy.data.get + lld_macro_paths: + - + lld_macro: '{#NAME}' + path: $.name + preprocessing: + - + type: JSONPATH + parameters: + - $.racks.members + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 6h + - + uuid: dfe04e3e5bfd4c73b0f02a6329e3149b + name: 'Server hardware discovery' + type: DEPENDENT + key: hpe.synergy.server_hardware.discovery + delay: '0' + description: 'The server hardware resource is a representation of a physical server.' + item_prototypes: + - + uuid: 44f23870429347fb8930669c98ded461 + name: 'Server [{#SERVER_NAME}:{#LOCATION}]: Processor cores count' + type: DEPENDENT + key: 'hpe.synergy.server_hardware.processor["{#LOCATION}",cores_count]' + delay: '0' + history: 7d + description: 'The number of cores available per processor.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.["server-hardware"].members[?(@.name == "{#LOCATION}")].processorCoreCount.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1h + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: cpu + - + tag: component + value: server + - + tag: location + value: '{#LOCATION}' + - + tag: server + value: '{#SERVER_NAME}' + - + uuid: 5c9d2faf103241879fd19b0e18774dbd + name: 'Server [{#SERVER_NAME}:{#LOCATION}]: Processors count' + type: DEPENDENT + key: 'hpe.synergy.server_hardware.processor["{#LOCATION}",count]' + delay: '0' + history: 7d + description: 'The number of processors installed on this server hardware.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.["server-hardware"].members[?(@.name == "{#LOCATION}")].processorCount.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1h + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: cpu + - + tag: component + value: server + - + tag: location + value: '{#LOCATION}' + - + tag: server + value: '{#SERVER_NAME}' + - + uuid: dd1e7364fb614b2b9177f92b2ffe42a0 + name: 'Server [{#SERVER_NAME}:{#LOCATION}]: Processor speed' + type: DEPENDENT + key: 'hpe.synergy.server_hardware.processor["{#LOCATION}",speed]' + delay: '0' + history: 7d + units: '!MHz' + description: 'Speed of the CPUs.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.["server-hardware"].members[?(@.name == "{#LOCATION}")].processorSpeedMhz.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1h + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: cpu + - + tag: component + value: server + - + tag: location + value: '{#LOCATION}' + - + tag: server + value: '{#SERVER_NAME}' + - + uuid: a62de8aa573146d1a2118abff9f43245 + name: 'Server [{#SERVER_NAME}:{#LOCATION}]: Processor type' + type: DEPENDENT + key: 'hpe.synergy.server_hardware.processor["{#LOCATION}",type]' + delay: '0' + history: 7d + trends: '0' + value_type: CHAR + description: 'Type of CPU installed on this server hardware.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.["server-hardware"].members[?(@.name == "{#LOCATION}")].processorType.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1d + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: cpu + - + tag: component + value: server + - + tag: location + value: '{#LOCATION}' + - + tag: server + value: '{#SERVER_NAME}' + - + uuid: 67d50f909325417b9c47241cda44aa6b + name: 'Server [{#SERVER_NAME}:{#LOCATION}]: Maintenance state' + type: DEPENDENT + key: 'hpe.synergy.server_hardware["{#LOCATION}",maintenance_state]' + delay: '0' + history: 7d + description: 'Server Hardware maintenance flag - Disruptive maintenance operations like firmware update can cause many server hardware alerts to be generated in a short period of time. Ex: Network connectivity lost or Server reset detected. When this field is set, predefined alerts for this particular device are suppressed. This field is set only when firmware update is ongoing. The alerts are processed normally once firmware update operation completes. Possible values are Maintenance and Normal.' + valuemap: + name: 'Maintenance state' + preprocessing: + - + type: JSONPATH + parameters: + - '$.["server-hardware"].members[?(@.name == "{#LOCATION}")].maintenanceState.first()' + error_handler: DISCARD_VALUE + - + type: STR_REPLACE + parameters: + - Maintenance + - '0' + - + type: STR_REPLACE + parameters: + - Normal + - '1' + - + type: IN_RANGE + parameters: + - '0' + - '1' + error_handler: CUSTOM_VALUE + error_handler_params: '2' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: server + - + tag: location + value: '{#LOCATION}' + - + tag: server + value: '{#SERVER_NAME}' + - + uuid: 90dc2db2bb6c4a968899ef04b8e2f96e + name: 'Server [{#SERVER_NAME}:{#LOCATION}]: Maintenance state reason' + type: DEPENDENT + key: 'hpe.synergy.server_hardware["{#LOCATION}",maintenance_state_reason]' + delay: '0' + history: 7d + trends: '0' + value_type: CHAR + description: 'This field is set to Firmware update when server is put to maintenance.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.["server-hardware"].members[?(@.name == "{#LOCATION}")].maintenanceStateReason.first()' + error_handler: DISCARD_VALUE + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1h + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: server + - + tag: location + value: '{#LOCATION}' + - + tag: server + value: '{#SERVER_NAME}' + - + uuid: 7239def772f84acfbfd017e1e835e7c5 + name: 'Server [{#SERVER_NAME}:{#LOCATION}]: Memory' + type: DEPENDENT + key: 'hpe.synergy.server_hardware["{#LOCATION}",memory]' + delay: '0' + history: 7d + units: B + description: 'Amount of memory installed on this server hardware.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.["server-hardware"].members[?(@.name == "{#LOCATION}")].memoryMb.first()' + - + type: MULTIPLIER + parameters: + - '1048576' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1h + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: memory + - + tag: component + value: server + - + tag: location + value: '{#LOCATION}' + - + tag: server + value: '{#SERVER_NAME}' + - + uuid: 1a3dfc33d4d14d82846197e66550786d + name: 'Server [{#SERVER_NAME}:{#LOCATION}]: Migration state' + type: DEPENDENT + key: 'hpe.synergy.server_hardware["{#LOCATION}",migration_state]' + delay: '0' + history: 7d + description: | + The state of an ongoing VCM migration: + + Migrating - The enclosure is in the process of migrating from VCM. + NotApplicable - The enclosure did not require or has already completed migration. + Unknown - The migration state is unknown. + valuemap: + name: 'Migration state' + preprocessing: + - + type: JSONPATH + parameters: + - '$.["server-hardware"].members[?(@.name == "{#LOCATION}")].migrationState.first()' + error_handler: DISCARD_VALUE + - + type: STR_REPLACE + parameters: + - Migrating + - '0' + - + type: STR_REPLACE + parameters: + - NotApplicable + - '1' + - + type: STR_REPLACE + parameters: + - Unknown + - '2' + - + type: IN_RANGE + parameters: + - '0' + - '2' + error_handler: CUSTOM_VALUE + error_handler_params: '2' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: server + - + tag: location + value: '{#LOCATION}' + - + tag: server + value: '{#SERVER_NAME}' + - + uuid: 0b6a9c030b154aa6ae112b809bfaf498 + name: 'Server [{#SERVER_NAME}:{#LOCATION}]: Model' + type: DEPENDENT + key: 'hpe.synergy.server_hardware["{#LOCATION}",model]' + delay: '0' + history: 7d + trends: '0' + value_type: CHAR + description: 'The full server hardware model string.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.["server-hardware"].members[?(@.name == "{#LOCATION}")].model.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1d + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: server + - + tag: location + value: '{#LOCATION}' + - + tag: server + value: '{#SERVER_NAME}' + - + uuid: 21edfb42e64e42878cccf66125d28b96 + name: 'Server [{#SERVER_NAME}:{#LOCATION}]: Part number' + type: DEPENDENT + key: 'hpe.synergy.server_hardware["{#LOCATION}",part_number]' + delay: '0' + history: 7d + trends: '0' + value_type: CHAR + description: 'The part number for this server hardware.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.["server-hardware"].members[?(@.name == "{#LOCATION}")].partNumber.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1d + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: server + - + tag: location + value: '{#LOCATION}' + - + tag: server + value: '{#SERVER_NAME}' + - + uuid: a2c03713255841d38f0152a432920252 + name: 'Server [{#SERVER_NAME}:{#LOCATION}]: Power state' + type: DEPENDENT + key: 'hpe.synergy.server_hardware["{#LOCATION}",power_state]' + delay: '0' + history: 7d + description: 'Current power state of the server hardware. Values are Unknown, On, Off, PoweringOn, PoweringOff or Resetting.' + valuemap: + name: 'Physical server power state' + preprocessing: + - + type: JSONPATH + parameters: + - '$.["server-hardware"].members[?(@.name == "{#LOCATION}")].powerState.first()' + - + type: STR_REPLACE + parameters: + - PoweringOff + - '0' + - + type: STR_REPLACE + parameters: + - PoweringOn + - '1' + - + type: STR_REPLACE + parameters: + - Resetting + - '2' + - + type: STR_REPLACE + parameters: + - Unknown + - '3' + - + type: STR_REPLACE + parameters: + - 'Off' + - '4' + - + type: STR_REPLACE + parameters: + - 'On' + - '5' + - + type: IN_RANGE + parameters: + - '0' + - '5' + error_handler: CUSTOM_VALUE + error_handler_params: '3' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: power + - + tag: component + value: server + - + tag: location + value: '{#LOCATION}' + - + tag: server + value: '{#SERVER_NAME}' + - + uuid: eaf38e9c25fb46de8e621220bca8aed5 + name: 'Server [{#SERVER_NAME}:{#LOCATION}]: Serial number' + type: DEPENDENT + key: 'hpe.synergy.server_hardware["{#LOCATION}",serial_number]' + delay: '0' + history: 7d + trends: '0' + value_type: CHAR + description: 'The serial number of the server hardware.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.["server-hardware"].members[?(@.name == "{#LOCATION}")].serialNumber.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1d + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: server + - + tag: location + value: '{#LOCATION}' + - + tag: server + value: '{#SERVER_NAME}' + - + uuid: 01be2f5f8b594caaab4ec25e3955405e + name: 'Server [{#SERVER_NAME}:{#LOCATION}]: State' + type: DEPENDENT + key: 'hpe.synergy.server_hardware["{#LOCATION}",state]' + delay: '0' + history: 7d + description: | + The current resource state of the server hardware. Allowable values are: + + Unknown - Not initialized, + Adding - Server being added, + NoProfileApplied - Server successfully added, + Monitored - Server being monitored, + Unmanaged - Discovered a supported server, + Removing - Server being removed, + RemoveFailed - Unsuccessful server removal, + Removed - Server successfully removed, + ApplyingProfile - Profile being applied to server, + ProfileApplied - Profile successfully applied, + RemovingProfile - Profile being removed, + ProfileError - Unsuccessful profile apply or removal, + Unsupported - Server model or version not currently supported by the appliance, + UpdatingFirmware - Server firmware update in progress. + valuemap: + name: 'Server hardware state' + preprocessing: + - + type: JSONPATH + parameters: + - '$.["server-hardware"].members[?(@.name == "{#LOCATION}")].state.first()' + - + type: STR_REPLACE + parameters: + - Unknown + - '0' + - + type: STR_REPLACE + parameters: + - Adding + - '1' + - + type: STR_REPLACE + parameters: + - NoProfileApplied + - '2' + - + type: STR_REPLACE + parameters: + - Monitored + - '3' + - + type: STR_REPLACE + parameters: + - Unmanaged + - '4' + - + type: STR_REPLACE + parameters: + - Removing + - '5' + - + type: STR_REPLACE + parameters: + - RemoveFailed + - '6' + - + type: STR_REPLACE + parameters: + - Removed + - '7' + - + type: STR_REPLACE + parameters: + - ApplyingProfile + - '8' + - + type: STR_REPLACE + parameters: + - ProfileApplied + - '9' + - + type: STR_REPLACE + parameters: + - RemovingProfile + - '10' + - + type: STR_REPLACE + parameters: + - ProfileError + - '11' + - + type: STR_REPLACE + parameters: + - Unsupported + - '12' + - + type: STR_REPLACE + parameters: + - UpdatingFirmware + - '13' + - + type: IN_RANGE + parameters: + - '0' + - '13' + error_handler: CUSTOM_VALUE + error_handler_params: '0' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: server + - + tag: location + value: '{#LOCATION}' + - + tag: server + value: '{#SERVER_NAME}' + trigger_prototypes: + - + uuid: ce0f72a3fe5e495cb8dd20b94a2779d6 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.server_hardware["{#LOCATION}",state])=11' + name: 'Server [{#SERVER_NAME}:{#LOCATION}]: Has profile error' + priority: AVERAGE + description: 'Unsuccessful profile apply or removal.' + tags: + - + tag: scope + value: notice + - + uuid: 5af93ca2f30d443ea18e8cf6ce139575 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.server_hardware["{#LOCATION}",state])=0' + name: 'Server [{#SERVER_NAME}:{#LOCATION}]: Is not initialized' + priority: WARNING + description: 'Server not initialized.' + tags: + - + tag: scope + value: availability + - + uuid: c03e5c9a910c4953bb18e6347a037ea6 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.server_hardware["{#LOCATION}",state])=12' + name: 'Server [{#SERVER_NAME}:{#LOCATION}]: Is unsupported' + priority: AVERAGE + description: 'Server model or version not currently supported by the appliance.' + tags: + - + tag: scope + value: availability + - + uuid: 1364b9806a104d6d8412329d47e3e505 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.server_hardware["{#LOCATION}",state])=6' + name: 'Server [{#SERVER_NAME}:{#LOCATION}]: Remove failed' + priority: AVERAGE + description: 'The previous operation to remove the server hardware did not succeed. The operation should be re-attempted.' + tags: + - + tag: scope + value: notice + - + uuid: 4c09bde33af048b7a3d7cfbcaae6ff54 + name: 'Server [{#SERVER_NAME}:{#LOCATION}]: State reason' + type: DEPENDENT + key: 'hpe.synergy.server_hardware["{#LOCATION}",state_reason]' + delay: '0' + history: 7d + trends: '0' + value_type: CHAR + description: | + The reason for the current resource state of the server hardware. This only applies if the state is 'Unmanaged', otherwise it is set to 'NotApplicable'. Allowable values are: + + Unsupported - Server model or version not currently supported by the appliance, + UpdatingFirmware - Server firmware update in progress, + NotApplicable - When PhysicalServerState is anything besides 'Unmanaged', + NotOwner - No claim on server, + Inventory - Server added by PDU, + Unconfigured - Discovery data incomplete or iLO configuration failure, + UnsupportedFirmware - iLO firmware version below minimum support level, + Interrupted - When PhysicalServerState is a result of an operation that was terminated before completing, + CommunicationError - Appliance cannot communicate with iLO or OA. + preprocessing: + - + type: JSONPATH + parameters: + - '$.["server-hardware"].members[?(@.name == "{#LOCATION}")].stateReason.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1h + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: server + - + tag: location + value: '{#LOCATION}' + - + tag: server + value: '{#SERVER_NAME}' + - + uuid: 1fec814f88b6400ab70b9a164a25b297 + name: 'Server [{#SERVER_NAME}:{#LOCATION}]: Status' + type: DEPENDENT + key: 'hpe.synergy.server_hardware["{#LOCATION}",status]' + delay: '0' + history: 7d + description: | + Overall health status of the resource. The following are the valid values for the status of the resource: + + OK - indicates normal/informational behavior. + Disabled - indicates that a resource is not operational or that a server profile has not been assigned. + Warning - needs attention soon. + Critical - needs attention soon. + Unknown - should be avoided, but there may be rare occasions where status is Unknown. + valuemap: + name: 'Health status' + preprocessing: + - + type: JSONPATH + parameters: + - '$.["server-hardware"].members[?(@.name == "{#LOCATION}")].status.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 10m + - + type: STR_REPLACE + parameters: + - Critical + - '0' + - + type: STR_REPLACE + parameters: + - Disabled + - '1' + - + type: STR_REPLACE + parameters: + - OK + - '2' + - + type: STR_REPLACE + parameters: + - Unknown + - '3' + - + type: STR_REPLACE + parameters: + - Warning + - '4' + - + type: IN_RANGE + parameters: + - '0' + - '4' + error_handler: CUSTOM_VALUE + error_handler_params: '3' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: server + - + tag: location + value: '{#LOCATION}' + - + tag: server + value: '{#SERVER_NAME}' + trigger_prototypes: + - + uuid: 7db1e7eff2624546a065863a2d821287 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.server_hardware["{#LOCATION}",status])=0' + name: 'Server [{#SERVER_NAME}:{#LOCATION}]: Has critical status' + priority: HIGH + description: 'Server [{#SERVER_NAME}:{#LOCATION}] status is critical. Needs immediate attention.' + tags: + - + tag: scope + value: availability + - + uuid: 5c0da62e9a704d5ca556c04dbaa8e243 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.server_hardware["{#LOCATION}",status])=4' + name: 'Server [{#SERVER_NAME}:{#LOCATION}]: Has warning status' + priority: WARNING + description: 'Server [{#SERVER_NAME}:{#LOCATION}] status is warning. Needs attention soon.' + tags: + - + tag: scope + value: availability + - + uuid: 79f661ed3a764515a915ba79a009ec4c + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.server_hardware["{#LOCATION}",status])=1' + name: 'Server [{#SERVER_NAME}:{#LOCATION}]: Is disabled' + priority: INFO + description: 'Server [{#SERVER_NAME}:{#LOCATION}] currently not operational.' + tags: + - + tag: scope + value: availability + trigger_prototypes: + - + uuid: cd1156d4df6e411690f94a2857beab16 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.server_hardware["{#LOCATION}",maintenance_state])=0 and length(last(/HPE Synergy by HTTP/hpe.synergy.server_hardware["{#LOCATION}",maintenance_state_reason]))>0' + name: 'Server [{#SERVER_NAME}:{#LOCATION}]: Is in maintenance mode' + opdata: 'Reason: {ITEM.LASTVALUE2}' + priority: INFO + description: 'Disruptive maintenance operations like firmware update can cause many server hardware alerts to be generated in a short period of time. Ex: Network connectivity lost or Server reset detected.' + tags: + - + tag: scope + value: notice + - + uuid: f74bf53c1b394aad9019b603de9a2c09 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.server_hardware["{#LOCATION}",state])=4 and length(last(/HPE Synergy by HTTP/hpe.synergy.server_hardware["{#LOCATION}",state_reason]))>0' + name: 'Server [{#SERVER_NAME}:{#LOCATION}]: Is unmanaged' + opdata: 'Reason: {ITEM.LASTVALUE2}' + priority: AVERAGE + description: 'Discovered a supported server.' + tags: + - + tag: scope + value: notice + master_item: + key: hpe.synergy.data.get + lld_macro_paths: + - + lld_macro: '{#LOCATION}' + path: $.name + - + lld_macro: '{#SERVER_NAME}' + path: $.serverName + preprocessing: + - + type: JSONPATH + parameters: + - '$.["server-hardware"].members' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 6h + - + uuid: a295686d8b5b4970b1ea5eb67bee55f1 + name: 'Storage pools discovery' + type: DEPENDENT + key: hpe.synergy.storage_pools.discovery + delay: '0' + description: 'A list of the storage pools.' + item_prototypes: + - + uuid: 6f21fd88ccdb46ac83cd6a4beba12f95 + name: 'Storage pool [{#NAME}]: Capacity allocated' + type: DEPENDENT + key: 'hpe.synergy.storage.pools.capacity["{#NAME}",allocated]' + delay: '0' + history: 7d + units: B + description: 'Capacity allocated from the storage pool in bytes.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.["storage-pools"].members[?(@.name == "{#NAME}")].allocatedCapacity.first()' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: storage + - + tag: pool + value: '{#NAME}' + - + uuid: e6ffbb837f2945418f200f8d57b8bf39 + name: 'Storage pool [{#NAME}]: Capacity free' + type: DEPENDENT + key: 'hpe.synergy.storage.pools.capacity["{#NAME}",free]' + delay: '0' + history: 7d + units: B + description: 'Free capacity available from the storage pool in bytes.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.["storage-pools"].members[?(@.name == "{#NAME}")].freeCapacity.first()' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: storage + - + tag: pool + value: '{#NAME}' + - + uuid: b3f2dc2c62574ead8986ace6751738d0 + name: 'Storage pool [{#NAME}]: Capacity allocated to snapshots' + type: DEPENDENT + key: 'hpe.synergy.storage.pools.capacity["{#NAME}",snapshot]' + delay: '0' + history: 7d + units: B + description: 'The pool capacity allocated to snapshots in bytes.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.["storage-pools"].members[?(@.name == "{#NAME}")].deviceSpecificAttributes.allocatedCapacity.snapshotAllocatedCapacity.first()' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: storage + - + tag: pool + value: '{#NAME}' + - + uuid: 5d172531ae344037a94e23fd5c72165a + name: 'Storage pool [{#NAME}]: Capacity total' + type: DEPENDENT + key: 'hpe.synergy.storage.pools.capacity["{#NAME}",total]' + delay: '0' + history: 7d + units: B + description: 'Total capacity of the storage pool in bytes.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.["storage-pools"].members[?(@.name == "{#NAME}")].totalCapacity.first()' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: storage + - + tag: pool + value: '{#NAME}' + - + uuid: 52f63554126b4ee0a6fd6efdfea36356 + name: 'Storage pool [{#NAME}]: State' + type: DEPENDENT + key: 'hpe.synergy.storage.pools["{#NAME}",state]' + delay: '0' + history: 7d + description: | + Current state of the resource: + + AddFailed - An attempt to add the resource failed + Adding - The resource is in the process of being added + Configured - The resource is configured + Connected - The appliance has connected to the resource + Copying - The resource is in the process of being copied + CreateFailed - An attempt to create the resource failed + Creating - The resource is in the process of being created + DeleteFailed - An attempt to delete the resource failed + Deleting - The resource is in the process of being deleted + Discovered - The resource has been discovered by the appliance, but it is not managed by the appliance + Managed - The resource is managed by the appliance + Normal - The resource is in a normal state + UpdateFailed - An attempt to update the resource failed + Updating - The resource is in the process of being updated + valuemap: + name: 'Storage volume state' + preprocessing: + - + type: JSONPATH + parameters: + - '$.["storage-pools"].members[?(@.name == "{#NAME}")].state.first()' + - + type: STR_REPLACE + parameters: + - AddFailed + - '0' + - + type: STR_REPLACE + parameters: + - Adding + - '1' + - + type: STR_REPLACE + parameters: + - Configured + - '2' + - + type: STR_REPLACE + parameters: + - Connected + - '3' + - + type: STR_REPLACE + parameters: + - Copying + - '4' + - + type: STR_REPLACE + parameters: + - CreateFailed + - '5' + - + type: STR_REPLACE + parameters: + - Creating + - '6' + - + type: STR_REPLACE + parameters: + - DeleteFailed + - '7' + - + type: STR_REPLACE + parameters: + - Deleting + - '8' + - + type: STR_REPLACE + parameters: + - Discovered + - '9' + - + type: STR_REPLACE + parameters: + - Managed + - '10' + - + type: STR_REPLACE + parameters: + - Normal + - '11' + - + type: STR_REPLACE + parameters: + - UpdateFailed + - '12' + - + type: STR_REPLACE + parameters: + - Updating + - '13' + - + type: IN_RANGE + parameters: + - '0' + - '13' + error_handler: CUSTOM_VALUE + error_handler_params: '14' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: storage + - + tag: pool + value: '{#NAME}' + trigger_prototypes: + - + uuid: ae6ac88132f14763ba1ab0488d78d79d + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.storage.pools["{#NAME}",state])=0' + name: 'Storage pool [{#NAME}]: Add error' + priority: AVERAGE + description: 'Storage pool [{#NAME}] add failed.' + tags: + - + tag: scope + value: capacity + - + tag: scope + value: notice + - + uuid: 439cee82cd6744d09b4597a6aeeda91a + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.storage.pools["{#NAME}",state])=5' + name: 'Storage pool [{#NAME}]: Create failed' + priority: AVERAGE + description: 'Storage pool [{#NAME}] create failed.' + tags: + - + tag: scope + value: capacity + - + tag: scope + value: notice + - + uuid: 91031655fd16446995f316b20e2c0bed + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.storage.pools["{#NAME}",state])=7' + name: 'Storage pool [{#NAME}]: Delete failed' + priority: AVERAGE + description: 'Storage pool [{#NAME}] delete failed.' + tags: + - + tag: scope + value: notice + - + uuid: d0a7155241b34e1f9dd3e01203aee3ba + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.storage.pools["{#NAME}",state])=12' + name: 'Storage pool [{#NAME}]: Update failed' + priority: AVERAGE + description: 'Storage pool [{#NAME}] update failed.' + tags: + - + tag: scope + value: notice + - + uuid: 9f3c42f517c64f9bb8869617438a9aff + name: 'Storage pool [{#NAME}]: Status' + type: DEPENDENT + key: 'hpe.synergy.storage.pools["{#NAME}",status]' + delay: '0' + history: 7d + description: | + Overall health status of the resource. The following are the valid values for the status of the resource: + + OK - indicates normal/informational behavior. + Disabled - indicates that a resource is not operational. + Warning - needs attention soon. + Critical - needs immediate attention. + Unknown - should be avoided, but there may be rare occasions where status is Unknown. + valuemap: + name: 'Health status' + preprocessing: + - + type: JSONPATH + parameters: + - '$.["storage-pools"].members[?(@.name == "{#NAME}")].status.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 10m + - + type: STR_REPLACE + parameters: + - Critical + - '0' + - + type: STR_REPLACE + parameters: + - Disabled + - '1' + - + type: STR_REPLACE + parameters: + - OK + - '2' + - + type: STR_REPLACE + parameters: + - Unknown + - '3' + - + type: STR_REPLACE + parameters: + - Warning + - '4' + - + type: IN_RANGE + parameters: + - '0' + - '4' + error_handler: CUSTOM_VALUE + error_handler_params: '3' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: storage + - + tag: pool + value: '{#NAME}' + trigger_prototypes: + - + uuid: bace21ba544d45b58541a3e2affde554 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.storage.pools["{#NAME}",status])=0' + name: 'Storage pool [{#NAME}]: Has critical status' + priority: HIGH + description: 'Storage pool [{#NAME}] status is critical. Needs immediate attention.' + tags: + - + tag: scope + value: availability + - + tag: scope + value: capacity + - + uuid: 135683c55d81457e90ba97d8e02165a6 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.storage.pools["{#NAME}",status])=4' + name: 'Storage pool [{#NAME}]: Has warning status' + priority: WARNING + description: 'Storage pool [{#NAME}] status is warning. Needs attention soon.' + tags: + - + tag: scope + value: availability + - + tag: scope + value: capacity + - + uuid: 4d7c963326d54600b639ec2d14babeb7 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.storage.pools["{#NAME}",status])=1' + name: 'Storage pool [{#NAME}]: Is disabled' + priority: INFO + description: 'Storage pool [{#NAME}] currently not operational.' + tags: + - + tag: scope + value: capacity + graph_prototypes: + - + uuid: a248b84392c44b4bbf9594550b35b8f8 + name: 'Storage pool [{#NAME}]: Capacity' + graph_items: + - + color: 1A7C11 + item: + host: 'HPE Synergy by HTTP' + key: 'hpe.synergy.storage.pools.capacity["{#NAME}",allocated]' + - + sortorder: '1' + color: 2774A4 + item: + host: 'HPE Synergy by HTTP' + key: 'hpe.synergy.storage.pools.capacity["{#NAME}",free]' + - + sortorder: '2' + color: F63100 + item: + host: 'HPE Synergy by HTTP' + key: 'hpe.synergy.storage.pools.capacity["{#NAME}",snapshot]' + master_item: + key: hpe.synergy.data.get + lld_macro_paths: + - + lld_macro: '{#NAME}' + path: $.name + preprocessing: + - + type: JSONPATH + parameters: + - '$.["storage-pools"].members' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 6h + - + uuid: 65c71880235345d69327b8cdfbd526e6 + name: 'Storage systems discovery' + type: DEPENDENT + key: hpe.synergy.storage_systems.discovery + delay: '0' + description: 'A list of the storage systems.' + item_prototypes: + - + uuid: f1047d18a75f4981a5d1b16ccdafce5b + name: 'Storage system [{#NAME}]: Capacity allocated' + type: DEPENDENT + key: 'hpe.synergy.storage.system.capacity["{#NAME}",allocated]' + delay: '0' + history: 7d + units: B + description: 'Capacity allocated in bytes.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.["storage-systems"].members[?(@.name == "{#NAME}")].allocatedCapacity.first()' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: storage + - + tag: system + value: '{#NAME}' + - + uuid: 501b587b1aa14263ac8d77325c8adfd3 + name: 'Storage system [{#NAME}]: Capacity free' + type: DEPENDENT + key: 'hpe.synergy.storage.system.capacity["{#NAME}",free]' + delay: '0' + history: 7d + units: B + description: 'Free capacity of the storage system in bytes.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.["storage-systems"].members[?(@.name == "{#NAME}")].freeCapacity.first()' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: storage + - + tag: system + value: '{#NAME}' + - + uuid: 1ee384a67e0c49b99beaca7c682e7f54 + name: 'Storage system [{#NAME}]: Capacity total' + type: DEPENDENT + key: 'hpe.synergy.storage.system.capacity["{#NAME}",total]' + delay: '0' + history: 7d + units: B + description: 'Total capacity of the storage system in bytes.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.["storage-systems"].members[?(@.name == "{#NAME}")].totalCapacity.first()' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: storage + - + tag: system + value: '{#NAME}' + - + uuid: 5de77ea6bd76408792e45e111d46c501 + name: 'Storage system [{#NAME}]: State' + type: DEPENDENT + key: 'hpe.synergy.storage.system["{#NAME}",state]' + delay: '0' + history: 7d + description: | + Current state of the resource: + + AddFailed - An attempt to add the resource failed + Adding - The resource is in the process of being added + Configured - The resource is configured + Connected - The appliance has connected to the resource + Copying - The resource is in the process of being copied + CreateFailed - An attempt to create the resource failed + Creating - The resource is in the process of being created + DeleteFailed - An attempt to delete the resource failed + Deleting - The resource is in the process of being deleted + Discovered - The resource has been discovered by the appliance, but it is not managed by the appliance + Managed - The resource is managed by the appliance + Normal - The resource is in a normal state + UpdateFailed - An attempt to update the resource failed + Updating - The resource is in the process of being updated + valuemap: + name: 'Storage volume state' + preprocessing: + - + type: JSONPATH + parameters: + - '$.["storage-systems"].members[?(@.name == "{#NAME}")].state.first()' + - + type: STR_REPLACE + parameters: + - AddFailed + - '0' + - + type: STR_REPLACE + parameters: + - Adding + - '1' + - + type: STR_REPLACE + parameters: + - Configured + - '2' + - + type: STR_REPLACE + parameters: + - Connected + - '3' + - + type: STR_REPLACE + parameters: + - Copying + - '4' + - + type: STR_REPLACE + parameters: + - CreateFailed + - '5' + - + type: STR_REPLACE + parameters: + - Creating + - '6' + - + type: STR_REPLACE + parameters: + - DeleteFailed + - '7' + - + type: STR_REPLACE + parameters: + - Deleting + - '8' + - + type: STR_REPLACE + parameters: + - Discovered + - '9' + - + type: STR_REPLACE + parameters: + - Managed + - '10' + - + type: STR_REPLACE + parameters: + - Normal + - '11' + - + type: STR_REPLACE + parameters: + - UpdateFailed + - '12' + - + type: STR_REPLACE + parameters: + - Updating + - '13' + - + type: IN_RANGE + parameters: + - '0' + - '13' + error_handler: CUSTOM_VALUE + error_handler_params: '14' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: storage + - + tag: system + value: '{#NAME}' + trigger_prototypes: + - + uuid: cfdbabe4ff584b96a961e395b3a4cda8 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.storage.system["{#NAME}",state])=0' + name: 'Storage system [{#NAME}]: Add error' + priority: AVERAGE + description: 'Storage system [{#NAME}] add failed.' + tags: + - + tag: scope + value: capacity + - + tag: scope + value: notice + - + uuid: e759872ffa334bc2b73335b612238c82 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.storage.system["{#NAME}",state])=5' + name: 'Storage system [{#NAME}]: Create failed' + priority: AVERAGE + description: 'Storage system [{#NAME}] create failed.' + tags: + - + tag: scope + value: capacity + - + tag: scope + value: notice + - + uuid: 1df4613458b748b59d761d45f494920a + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.storage.system["{#NAME}",state])=7' + name: 'Storage system [{#NAME}]: Delete failed' + priority: AVERAGE + description: 'Storage system [{#NAME}] delete failed.' + tags: + - + tag: scope + value: notice + - + uuid: 3c856acaa42e4ee0807713afba3937ac + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.storage.system["{#NAME}",state])=12' + name: 'Storage system [{#NAME}]: Update failed' + priority: AVERAGE + description: 'Storage system [{#NAME}] update failed.' + tags: + - + tag: scope + value: notice + - + uuid: 5f9b2be3d232468e98451b380a624ae9 + name: 'Storage system [{#NAME}]: Status' + type: DEPENDENT + key: 'hpe.synergy.storage.system["{#NAME}",status]' + delay: '0' + history: 7d + description: | + Overall health status of the resource. The following are the valid values for the status of the resource: + + OK - indicates normal/informational behavior. + Disabled - indicates that a resource is not operational. + Warning - needs attention soon. + Critical - needs immediate attention. + Unknown - should be avoided, but there may be rare occasions where status is Unknown. + valuemap: + name: 'Health status' + preprocessing: + - + type: JSONPATH + parameters: + - '$.["storage-systems"].members[?(@.name == "{#NAME}")].status.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 10m + - + type: STR_REPLACE + parameters: + - Critical + - '0' + - + type: STR_REPLACE + parameters: + - Disabled + - '1' + - + type: STR_REPLACE + parameters: + - OK + - '2' + - + type: STR_REPLACE + parameters: + - Unknown + - '3' + - + type: STR_REPLACE + parameters: + - Warning + - '4' + - + type: IN_RANGE + parameters: + - '0' + - '4' + error_handler: CUSTOM_VALUE + error_handler_params: '3' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: storage + - + tag: system + value: '{#NAME}' + trigger_prototypes: + - + uuid: f8533d36153b4269916c7a9843ea8d5c + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.storage.system["{#NAME}",status])=0' + name: 'Storage system [{#NAME}]: Has critical status' + priority: HIGH + description: 'Storage system [{#NAME}] status is critical. Needs immediate attention.' + tags: + - + tag: scope + value: availability + - + tag: scope + value: capacity + - + uuid: fc278fec8e3d452bb953599a1cd42336 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.storage.system["{#NAME}",status])=4' + name: 'Storage system [{#NAME}]: Has warning status' + priority: WARNING + description: 'Storage system [{#NAME}] status is warning. Needs attention soon.' + tags: + - + tag: scope + value: availability + - + tag: scope + value: capacity + - + uuid: 4e60a92c30ed4cf7960d7979a8e2fb77 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.storage.system["{#NAME}",status])=1' + name: 'Storage system [{#NAME}]: Is disabled' + priority: INFO + description: 'Storage system [{#NAME}] currently not operational.' + tags: + - + tag: scope + value: capacity + graph_prototypes: + - + uuid: c5c21884eb714c009dc0289f426b62e7 + name: 'Storage system [{#NAME}]: Capacity' + graph_items: + - + color: 1A7C11 + item: + host: 'HPE Synergy by HTTP' + key: 'hpe.synergy.storage.system.capacity["{#NAME}",allocated]' + - + sortorder: '1' + color: 2774A4 + item: + host: 'HPE Synergy by HTTP' + key: 'hpe.synergy.storage.system.capacity["{#NAME}",free]' + - + sortorder: '2' + color: F63100 + item: + host: 'HPE Synergy by HTTP' + key: 'hpe.synergy.storage.system.capacity["{#NAME}",total]' + master_item: + key: hpe.synergy.data.get + lld_macro_paths: + - + lld_macro: '{#NAME}' + path: $.name + preprocessing: + - + type: JSONPATH + parameters: + - '$.["storage-systems"].members' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 6h + - + uuid: 8f274eade77c49abb1185f3545630653 + name: 'Storage volumes discovery' + type: DEPENDENT + key: hpe.synergy.storage_volumes.discovery + delay: '0' + description: 'A list of the storage volumes.' + item_prototypes: + - + uuid: 6c5fcfa5f07e4c07a1a05d6a49e1e5cd + name: 'Storage volume [{#NAME}]: Capacity allocated' + type: DEPENDENT + key: 'hpe.synergy.storage.volumes.capacity["{#NAME}",allocated]' + delay: '0' + history: 7d + units: B + description: 'Capacity allocated in bytes.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.["storage-volumes"].members[?(@.name == "{#NAME}")].allocatedCapacity.first()' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: storage + - + tag: volume + value: '{#NAME}' + - + uuid: 67076354bbb34d839c23873898dab4bd + name: 'Storage volume [{#NAME}]: Capacity provisioned' + type: DEPENDENT + key: 'hpe.synergy.storage.volumes.capacity["{#NAME}",provisioned]' + delay: '0' + history: 7d + units: B + description: 'Total provisioned capacity of volume in bytes.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.["storage-volumes"].members[?(@.name == "{#NAME}")].provisionedCapacity.first()' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: storage + - + tag: volume + value: '{#NAME}' + - + uuid: 169c6201cabe48b89ff7591e9112394b + name: 'Storage volume [{#NAME}]: State' + type: DEPENDENT + key: 'hpe.synergy.storage.volumes["{#NAME}",state]' + delay: '0' + history: 7d + description: | + Current state of the resource: + + AddFailed - An attempt to add the resource failed + Adding - The resource is in the process of being added + Configured - The resource is configured + Connected - The appliance has connected to the resource + Copying - The resource is in the process of being copied + CreateFailed - An attempt to create the resource failed + Creating - The resource is in the process of being created + DeleteFailed - An attempt to delete the resource failed + Deleting - The resource is in the process of being deleted + Discovered - The resource has been discovered by the appliance, but it is not managed by the appliance + Managed - The resource is managed by the appliance + Normal - The resource is in a normal state + UpdateFailed - An attempt to update the resource failed + Updating - The resource is in the process of being updated + valuemap: + name: 'Storage volume state' + preprocessing: + - + type: JSONPATH + parameters: + - '$.["storage-volumes"].members[?(@.name == "{#NAME}")].state.first()' + - + type: STR_REPLACE + parameters: + - AddFailed + - '0' + - + type: STR_REPLACE + parameters: + - Adding + - '1' + - + type: STR_REPLACE + parameters: + - Configured + - '2' + - + type: STR_REPLACE + parameters: + - Connected + - '3' + - + type: STR_REPLACE + parameters: + - Copying + - '4' + - + type: STR_REPLACE + parameters: + - CreateFailed + - '5' + - + type: STR_REPLACE + parameters: + - Creating + - '6' + - + type: STR_REPLACE + parameters: + - DeleteFailed + - '7' + - + type: STR_REPLACE + parameters: + - Deleting + - '8' + - + type: STR_REPLACE + parameters: + - Discovered + - '9' + - + type: STR_REPLACE + parameters: + - Managed + - '10' + - + type: STR_REPLACE + parameters: + - Normal + - '11' + - + type: STR_REPLACE + parameters: + - UpdateFailed + - '12' + - + type: STR_REPLACE + parameters: + - Updating + - '13' + - + type: IN_RANGE + parameters: + - '0' + - '13' + error_handler: CUSTOM_VALUE + error_handler_params: '14' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: storage + - + tag: volume + value: '{#NAME}' + trigger_prototypes: + - + uuid: b13d8a034a214bb5bd82d9e573d06e7b + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.storage.volumes["{#NAME}",state])=0' + name: 'Storage volume [{#NAME}]: Add error' + priority: AVERAGE + description: 'Storage volume [{#NAME}] add failed.' + tags: + - + tag: scope + value: capacity + - + tag: scope + value: notice + - + uuid: 15f5b0ded7d8430d9b6338d8ab4a26e7 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.storage.volumes["{#NAME}",state])=5' + name: 'Storage volume [{#NAME}]: Create failed' + priority: AVERAGE + description: 'Storage volume [{#NAME}] create failed.' + tags: + - + tag: scope + value: capacity + - + tag: scope + value: notice + - + uuid: d7b4d59197dc4471b3db746c527213ae + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.storage.volumes["{#NAME}",state])=7' + name: 'Storage volume [{#NAME}]: Delete failed' + priority: AVERAGE + description: 'Storage volume [{#NAME}] delete failed.' + tags: + - + tag: scope + value: notice + - + uuid: c0b2dc67758446fa82c6bf9c92c76e93 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.storage.volumes["{#NAME}",state])=12' + name: 'Storage volume [{#NAME}]: Update failed' + priority: AVERAGE + description: 'Storage volume [{#NAME}] update failed.' + tags: + - + tag: scope + value: notice + - + uuid: 6c9927a095e04feb808c05aa44b672d0 + name: 'Storage volume [{#NAME}]: Status' + type: DEPENDENT + key: 'hpe.synergy.storage.volumes["{#NAME}",status]' + delay: '0' + history: 7d + description: | + Overall health status of the resource. The following are the valid values for the status of the resource: + + OK - indicates normal/informational behavior. + Disabled - indicates that a resource is not operational. + Warning - needs attention soon. + Critical - needs immediate attention. + Unknown - should be avoided, but there may be rare occasions where status is Unknown. + valuemap: + name: 'Health status' + preprocessing: + - + type: JSONPATH + parameters: + - '$.["storage-volumes"].members[?(@.name == "{#NAME}")].status.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 10m + - + type: STR_REPLACE + parameters: + - Critical + - '0' + - + type: STR_REPLACE + parameters: + - Disabled + - '1' + - + type: STR_REPLACE + parameters: + - OK + - '2' + - + type: STR_REPLACE + parameters: + - Unknown + - '3' + - + type: STR_REPLACE + parameters: + - Warning + - '4' + - + type: IN_RANGE + parameters: + - '0' + - '4' + error_handler: CUSTOM_VALUE + error_handler_params: '3' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: storage + - + tag: volume + value: '{#NAME}' + trigger_prototypes: + - + uuid: 284d76cba28a4fc195b4b825665bc570 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.storage.volumes["{#NAME}",status])=0' + name: 'Storage volume [{#NAME}]: Has critical status' + priority: HIGH + description: 'Storage volume [{#NAME}] status is critical. Needs immediate attention.' + tags: + - + tag: scope + value: availability + - + tag: scope + value: capacity + - + uuid: ab040784159040a1ad031015e9ebef73 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.storage.volumes["{#NAME}",status])=4' + name: 'Storage volume [{#NAME}]: Has warning status' + priority: WARNING + description: 'Storage volume [{#NAME}] status is warning. Needs attention soon.' + tags: + - + tag: scope + value: availability + - + tag: scope + value: capacity + - + uuid: ea9c2c2993b74859b30caaeac8871982 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.storage.volumes["{#NAME}",status])=1' + name: 'Storage volume [{#NAME}]: Is disabled' + priority: INFO + description: 'Storage volume [{#NAME}] currently not operational.' + tags: + - + tag: scope + value: availability + - + tag: scope + value: capacity + graph_prototypes: + - + uuid: f5530d63e0704ad884731cffc3a50051 + name: 'Storage volume [{#NAME}]: Capacity' + graph_items: + - + color: 1A7C11 + item: + host: 'HPE Synergy by HTTP' + key: 'hpe.synergy.storage.volumes.capacity["{#NAME}",allocated]' + - + sortorder: '1' + color: 2774A4 + item: + host: 'HPE Synergy by HTTP' + key: 'hpe.synergy.storage.volumes.capacity["{#NAME}",provisioned]' + master_item: + key: hpe.synergy.data.get + lld_macro_paths: + - + lld_macro: '{#NAME}' + path: $.name + preprocessing: + - + type: JSONPATH + parameters: + - '$.["storage-volumes"].members' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 6h + - + uuid: d4ba209881884b75b1edd7cca832be79 + name: 'Uplink sets discovery' + type: DEPENDENT + key: hpe.synergy.uplink_sets.discovery + delay: '0' + description: 'A list of the uplink sets.' + item_prototypes: + - + uuid: be09b2f2848d4143a396a9b0cb945ecc + name: 'Uplink set [{#NAME}]: State' + type: DEPENDENT + key: 'hpe.synergy.uplink_set["{#NAME}",state]' + delay: '0' + history: 7d + trends: '0' + value_type: CHAR + description: 'Current state of the resource.' + preprocessing: + - + type: JSONPATH + parameters: + - '$.["uplink-sets"].members[?(@.name == "{#NAME}")].state.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 1h + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: network + - + tag: component + value: uplink-set + - + tag: uplink-set + value: '{#NAME}' + - + uuid: 08fe02575307492ea4ad42a6bfa4a2a9 + name: 'Uplink set [{#NAME}]: Status' + type: DEPENDENT + key: 'hpe.synergy.uplink_set["{#NAME}",status]' + delay: '0' + history: 7d + description: | + Overall health status of the resource. The following are the valid values for the status of the resource: + + OK - indicates normal/informational behavior. + Disabled - indicates that a resource is not operational. + Warning - needs attention soon. + Critical - needs immediate attention. + Unknown - should be avoided, but there may be rare occasions where status is Unknown. + valuemap: + name: 'Health status' + preprocessing: + - + type: JSONPATH + parameters: + - '$.["uplink-sets"].members[?(@.name == "{#NAME}")].status.first()' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 10m + - + type: STR_REPLACE + parameters: + - Critical + - '0' + - + type: STR_REPLACE + parameters: + - Disabled + - '1' + - + type: STR_REPLACE + parameters: + - OK + - '2' + - + type: STR_REPLACE + parameters: + - Unknown + - '3' + - + type: STR_REPLACE + parameters: + - Warning + - '4' + - + type: IN_RANGE + parameters: + - '0' + - '4' + error_handler: CUSTOM_VALUE + error_handler_params: '3' + master_item: + key: hpe.synergy.data.get + tags: + - + tag: component + value: network + - + tag: component + value: uplink-set + - + tag: uplink-set + value: '{#NAME}' + trigger_prototypes: + - + uuid: 89514e78b6e949278e83c3a2372d0fb9 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.uplink_set["{#NAME}",status])=0' + name: 'Uplink set [{#NAME}]: Has critical status' + priority: HIGH + description: 'Uplink set [{#NAME}] status is critical. Needs immediate attention.' + tags: + - + tag: scope + value: availability + - + uuid: 09f23615c85f43758a05d89466b3ca31 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.uplink_set["{#NAME}",status])=4' + name: 'Uplink set [{#NAME}]: Has warning status' + priority: WARNING + description: 'Uplink set [{#NAME}] status is warning. Needs attention soon.' + tags: + - + tag: scope + value: availability + - + uuid: 57187189c1bc4269873b51ef91a010c4 + expression: 'last(/HPE Synergy by HTTP/hpe.synergy.uplink_set["{#NAME}",status])=1' + name: 'Uplink set [{#NAME}]: Is disabled' + priority: INFO + description: 'Uplink set [{#NAME}] currently not operational.' + tags: + - + tag: scope + value: availability + master_item: + key: hpe.synergy.data.get + lld_macro_paths: + - + lld_macro: '{#NAME}' + path: $.name + preprocessing: + - + type: JSONPATH + parameters: + - '$.["uplink-sets"].members' + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - 6h + tags: + - + tag: class + value: hardware + - + tag: target + value: hpe + - + tag: target + value: synergy + macros: + - + macro: '{$HPE.SYNERGY.API.PASSWORD}' + type: SECRET_TEXT + description: 'Specify password for API.' + - + macro: '{$HPE.SYNERGY.API.PORT}' + value: '443' + description: 'The API port.' + - + macro: '{$HPE.SYNERGY.API.SCHEME}' + value: https + description: 'The API scheme (http/https).' + - + macro: '{$HPE.SYNERGY.API.USERNAME}' + value: zabbix + description: 'Specify user name for API.' + - + macro: '{$HPE.SYNERGY.DATA.TIMEOUT}' + value: 15s + description: 'Response timeout for API.' + valuemaps: + - + uuid: 20d3a73c6cc84329a5dfafff29de32cc + name: Boolean + mappings: + - + value: '0' + newvalue: 'No' + - + value: '1' + newvalue: 'Yes' + - + uuid: d3641b3e94ad495f8e0c5c49984a5aa1 + name: 'Device presence' + mappings: + - + value: '0' + newvalue: Absent + - + value: '1' + newvalue: PresenceNoOp + - + value: '2' + newvalue: PresenceUnknown + - + value: '3' + newvalue: Present + - + value: '4' + newvalue: Subsumed + - + uuid: 082018b109e24116bbd92f0657113165 + name: 'Enclosure state' + mappings: + - + value: '0' + newvalue: Adding + - + value: '1' + newvalue: Configured + - + value: '2' + newvalue: Configuring + - + value: '3' + newvalue: Interrupted + - + value: '4' + newvalue: Monitored + - + value: '5' + newvalue: Pending + - + value: '6' + newvalue: RemoveFailed + - + value: '7' + newvalue: Removing + - + value: '8' + newvalue: Unmanaged + - + value: '9' + newvalue: Unsupported + - + value: '10' + newvalue: Unknown + - + uuid: 05742432aca048ca96684ba52bd058ae + name: 'Health status' + mappings: + - + value: '0' + newvalue: Critical + - + value: '1' + newvalue: Disabled + - + value: '2' + newvalue: OK + - + value: '3' + newvalue: Unknown + - + value: '4' + newvalue: Warning + - + uuid: 6cd4b888faa442c19392b959f1605179 + name: 'Hypervisor manager state' + mappings: + - + value: '0' + newvalue: Connected + - + value: '1' + newvalue: Disconnected + - + value: '2' + newvalue: Configuring + - + value: '3' + newvalue: Error + - + value: '4' + newvalue: Unknown + - + uuid: 930add5553ea42668e590c9824d9e8d3 + name: 'Link port state' + mappings: + - + value: '0' + newvalue: Disabled + - + value: '1' + newvalue: Linked + - + value: '2' + newvalue: Unlinked + - + value: '3' + newvalue: Unknown + - + uuid: 556391b7f9c045c89d28ac52a1082635 + name: 'Logical enclosure state' + mappings: + - + value: '0' + newvalue: Inconsistent + - + value: '1' + newvalue: Creating + - + value: '2' + newvalue: DeleteFailed + - + value: '3' + newvalue: Deleting + - + value: '4' + newvalue: Consistent + - + value: '5' + newvalue: Updating + - + value: '6' + newvalue: Unknown + - + uuid: e26c553cffab4766866bf25639fb89da + name: 'Maintenance state' + mappings: + - + value: '0' + newvalue: Maintenance + - + value: '1' + newvalue: Normal + - + value: '2' + newvalue: Unknown + - + uuid: c66615691cba4abc9c7adecc29bb346b + name: 'MGMT port state' + mappings: + - + value: '0' + newvalue: Active + - + value: '1' + newvalue: Disabled + - + value: '2' + newvalue: I3s + - + value: '3' + newvalue: Other + - + value: '4' + newvalue: Standby + - + value: '5' + newvalue: Unknown + - + uuid: 6feb2826df9244a8b6b7732c98090b63 + name: 'Migration state' + mappings: + - + value: '0' + newvalue: Migrating + - + value: '1' + newvalue: NotApplicable + - + value: '2' + newvalue: Unknown + - + uuid: b878a1503ac14781a142f69a587264ed + name: 'Partition health' + mappings: + - + value: '0' + newvalue: NparDegrade + - + value: '1' + newvalue: NparHealthInvalid + - + value: '2' + newvalue: NparHealthMax + - + value: '3' + newvalue: NparOk + - + value: '4' + newvalue: Unknown + - + uuid: 2c6d8b81e7ee4407b17ca06739ac71f1 + name: 'Partition status' + mappings: + - + value: '0' + newvalue: ParStatusActive + - + value: '1' + newvalue: ParStatusInactive + - + value: '2' + newvalue: ParStatusInvalid + - + value: '3' + newvalue: ParStatusManualRepair + - + value: '4' + newvalue: ParStatusMax + - + value: '5' + newvalue: ParStatusUndefined + - + value: '6' + newvalue: ParStatusUnknown + - + uuid: 7daddccc109d41f8abf1e04ba1fbd358 + name: 'Physical server power state' + mappings: + - + value: '0' + newvalue: PoweringOff + - + value: '1' + newvalue: PoweringOn + - + value: '2' + newvalue: Resetting + - + value: '3' + newvalue: Unknown + - + value: '4' + newvalue: 'Off' + - + value: '5' + newvalue: 'On' + - + uuid: fe093138fdd14f7f80fa4498d91d7fa0 + name: 'Power state' + mappings: + - + value: '0' + newvalue: EFuse + - + value: '1' + newvalue: Reset + - + value: '2' + newvalue: SoftReset + - + value: '3' + newvalue: Unknown + - + uuid: 5a4901bdd6024256afbfebee6827e103 + name: 'Rack state' + mappings: + - + value: '0' + newvalue: Adding + - + value: '1' + newvalue: AddError + - + value: '2' + newvalue: Configured + - + value: '3' + newvalue: CredentialError + - + value: '4' + newvalue: Refreshing + - + value: '5' + newvalue: RefreshError + - + value: '6' + newvalue: Removing + - + value: '7' + newvalue: RemoveError + - + value: '8' + newvalue: Unmanaged + - + value: '9' + newvalue: Unknown + - + uuid: ba5903d60953477aafd313d3688c8dd8 + name: 'Resource state' + mappings: + - + value: '0' + newvalue: Degraded + - + value: '1' + newvalue: Failed + - + value: '2' + newvalue: Misplaced + - + value: '3' + newvalue: Missing + - + value: '4' + newvalue: OK + - + value: '5' + newvalue: Unknown + - + uuid: a545b93c790741a29b726f04f03cbc8f + name: 'Server hardware state' + mappings: + - + value: '0' + newvalue: Unknown + - + value: '1' + newvalue: Adding + - + value: '2' + newvalue: NoProfileApplied + - + value: '3' + newvalue: Monitored + - + value: '4' + newvalue: Unmanaged + - + value: '5' + newvalue: Removing + - + value: '6' + newvalue: RemoveFailed + - + value: '7' + newvalue: Removed + - + value: '8' + newvalue: ApplyingProfile + - + value: '9' + newvalue: ProfileApplied + - + value: '10' + newvalue: RemovingProfile + - + value: '11' + newvalue: ProfileError + - + value: '12' + newvalue: Unsupported + - + value: '13' + newvalue: UpdatingFirmware + - + uuid: 2d6f2f67dc114502ae699e873130ba23 + name: 'Service state' + mappings: + - + value: '0' + newvalue: Down + - + value: '1' + newvalue: Up + - + uuid: 647f5a6d2ce54e78af163f8676f3f1e0 + name: 'State reason' + mappings: + - + value: '0' + newvalue: Missing + - + value: '1' + newvalue: None + - + value: '2' + newvalue: 'Not Added' + - + value: '3' + newvalue: 'Not Owner' + - + value: '4' + newvalue: 'Operation Failed' + - + value: '5' + newvalue: Unowned + - + value: '6' + newvalue: 'Unsupported Firmware' + - + value: '7' + newvalue: 'Updating Firmware' + - + value: '8' + newvalue: Unknown + - + uuid: e20d58a33c3b4a8891dda5da8b86cd5a + name: 'Storage volume state' + mappings: + - + value: '0' + newvalue: AddFailed + - + value: '1' + newvalue: Adding + - + value: '2' + newvalue: Configured + - + value: '3' + newvalue: Connected + - + value: '4' + newvalue: Copying + - + value: '5' + newvalue: CreateFailed + - + value: '6' + newvalue: Creating + - + value: '7' + newvalue: DeleteFailed + - + value: '8' + newvalue: Deleting + - + value: '9' + newvalue: Discovered + - + value: '10' + newvalue: Managed + - + value: '11' + newvalue: Normal + - + value: '12' + newvalue: UpdateFailed + - + value: '13' + newvalue: Updating + - + value: '14' + newvalue: Unknown diff --git a/ui/app/controllers/CControllerHostEdit.php b/ui/app/controllers/CControllerHostEdit.php index 51b2c6e58c0..886545c4a22 100644 --- a/ui/app/controllers/CControllerHostEdit.php +++ b/ui/app/controllers/CControllerHostEdit.php @@ -133,7 +133,8 @@ class CControllerHostEdit extends CController { if ($this->hasInput('full_clone') || $this->hasInput('clone')) { $clone_hostid = $this->getInput('hostid'); $this->host = ['hostid' => null]; - } else { + } + else { $hosts = API::Host()->get([ 'output' => ['hostid', 'host', 'name', 'status', 'description', 'proxy_hostid', 'ipmi_authtype', 'ipmi_privilege', 'ipmi_username', 'ipmi_password', 'tls_connect', 'tls_accept', 'tls_issuer', @@ -352,7 +353,7 @@ class CControllerHostEdit extends CController { */ protected function extendDiscoveryRule(?array &$editable_discovery_rule): void { $editable_discovery_rule = $this->host['discoveryRule'] - ? API::DiscoveryRule([ + ? API::DiscoveryRule()->get([ 'output' => [], 'itemids' => array_column($this->host['discoveryRule'], 'itemid'), 'editable' => true, diff --git a/ui/app/controllers/CControllerWidgetGraphView.php b/ui/app/controllers/CControllerWidgetGraphView.php index 82ac42643e9..ea69a05caa7 100644 --- a/ui/app/controllers/CControllerWidgetGraphView.php +++ b/ui/app/controllers/CControllerWidgetGraphView.php @@ -92,7 +92,7 @@ class CControllerWidgetGraphView extends CControllerWidget { $is_dynamic_item = ($is_template_dashboard || $fields['dynamic'] == WIDGET_DYNAMIC_ITEM); // Replace graph item by particular host item if dynamic items are used. - if ($is_dynamic_item && $dynamic_hostid && $resourceid) { + if ($is_dynamic_item && $dynamic_hostid != 0 && $resourceid) { // Find same simple-graph item in selected $dynamic_hostid host. if ($fields['source_type'] == ZBX_WIDGET_FIELD_RESOURCE_SIMPLE_GRAPH) { $src_items = API::Item()->get([ @@ -218,7 +218,7 @@ class CControllerWidgetGraphView extends CControllerWidget { // get graph, used below $graph = API::Graph()->get([ 'output' => API_OUTPUT_EXTEND, - 'selectHosts' => ['name'], + 'selectHosts' => ['hostid', 'name'], 'graphids' => $resourceid, 'expandName' => true ]); @@ -267,7 +267,7 @@ class CControllerWidgetGraphView extends CControllerWidget { ? $graph['hosts'][0]['name'].NAME_DELIMITER.$graph['name'] : $graph['name']; - if ($is_dynamic_item && $dynamic_hostid && $resourceid) { + if ($is_dynamic_item && $dynamic_hostid != 0 && $resourceid) { if ($graph['graphtype'] == GRAPH_TYPE_PIE || $graph['graphtype'] == GRAPH_TYPE_EXPLODED) { $graph_src = (new CUrl('chart7.php')) ->setArgument('name', $host['name'].NAME_DELIMITER.$graph['name']) @@ -341,30 +341,31 @@ class CControllerWidgetGraphView extends CControllerWidget { } else { if ($fields['source_type'] == ZBX_WIDGET_FIELD_RESOURCE_GRAPH) { - if ($is_dynamic_item && $dynamic_hostid) { - $template_graphs = API::Graph()->get([ - 'output' => ['name'], - 'graphids' => [$resourceid] - ]); - - $resourceid = null; - - if ($template_graphs) { - $host_graphs = API::Graph()->get([ - 'output' => ['graphid'], - 'hostids' => [$dynamic_hostid], - 'filter' => [ - 'name' => $template_graphs[0]['name'] - ] - ]); - - if ($host_graphs) { - $resourceid = $host_graphs[0]['graphid']; - } - } + $has_host_graph = $is_dynamic_item && $dynamic_hostid != 0 + ? (bool) API::Graph()->get([ + 'output' => [], + 'hostids' => [$dynamic_hostid], + 'filter' => [ + 'name' => $graph['name'] + ] + ]) + : true; + + if ($has_host_graph) { + $graph_url = $this->checkAccess(CRoleHelper::UI_MONITORING_HOSTS) + ? (new CUrl('zabbix.php')) + ->setArgument('action', 'charts.view') + ->setArgument('filter_hostids', [$graph['hosts'][0]['hostid']]) + ->setArgument('filter_name', $graph['name']) + ->setArgument('filter_show', GRAPH_FILTER_HOST) + ->setArgument('filter_set', '1') + ->setArgument('from', '') + ->setArgument('to', '') + : null; + } + else { + $graph_url = null; } - - $graph_url = null; } else { $graph_url = $this->checkAccess(CRoleHelper::UI_MONITORING_LATEST_DATA) diff --git a/ui/app/partials/configuration.host.edit.html.php b/ui/app/partials/configuration.host.edit.html.php index 19f5cc1b093..735960f80bb 100644 --- a/ui/app/partials/configuration.host.edit.html.php +++ b/ui/app/partials/configuration.host.edit.html.php @@ -556,6 +556,5 @@ if (array_key_exists('buttons', $data)) { } $host_form - ->addItem($data['warning']) ->addItem($tabs) ->show(); diff --git a/ui/app/partials/monitoring.problem.filter.php b/ui/app/partials/monitoring.problem.filter.php index e0627962b8c..24d36d8bf48 100644 --- a/ui/app/partials/monitoring.problem.filter.php +++ b/ui/app/partials/monitoring.problem.filter.php @@ -118,7 +118,6 @@ $left_column ->setChecked($data['age_state'] == 1) ->setUncheckedValue(0) ->setId('age_state_#{uniqid}'), - (new CDiv())->addClass(ZBX_STYLE_FORM_INPUT_MARGIN), $filter_age, (new CDiv())->addClass(ZBX_STYLE_FORM_INPUT_MARGIN), _('days') diff --git a/ui/app/views/administration.user.token.edit.php b/ui/app/views/administration.user.token.edit.php index 51682ff5314..12f7cbc3c70 100644 --- a/ui/app/views/administration.user.token.edit.php +++ b/ui/app/views/administration.user.token.edit.php @@ -64,7 +64,8 @@ $token_from_list = (new CFormList()) (new CDateSelector('expires_at', $data['expires_at'])) ->setDateFormat(ZBX_FULL_DATE_TIME) ->setPlaceholder(_('YYYY-MM-DD hh:mm:ss')) - ->setAriaRequired() + ->setAriaRequired(), + 'expires-at-row' ) ->addRow(_('Enabled'), (new CCheckBox('status', ZBX_AUTH_TOKEN_ENABLED)) @@ -72,7 +73,6 @@ $token_from_list = (new CFormList()) ->setUncheckedValue(ZBX_AUTH_TOKEN_DISABLED) ); - $token_view = (new CTabView())->addTab('token', '', $token_from_list); $cancel_button = (new CRedirectButton(_('Cancel'), (new CUrl('zabbix.php')) ->setArgument('action', 'user.token.list') diff --git a/ui/app/views/js/monitoring.charts.view.js.php b/ui/app/views/js/monitoring.charts.view.js.php index 878143611a6..7e1ec9d4b96 100644 --- a/ui/app/views/js/monitoring.charts.view.js.php +++ b/ui/app/views/js/monitoring.charts.view.js.php @@ -61,7 +61,7 @@ this._app = new ChartList( $('#charts'), this._data.timeline, this._data.config, this._container); this._app.setCharts(this._data.charts); - this._app.onResize(); + this._app.refresh(); this._resize_observer = new ResizeObserver(this._app.onResize.bind(this._app)); this._resize_observer.observe(this._container); @@ -246,27 +246,6 @@ }; /** - * Start or pause timeout based Chart refresh. - * - * @param {number} seconds Seconds to wait before reschedule. Zero seconds will pause schedule. - * @param {number} delay_loading (optional) Add "loading indicator" only when request exceeds delay. - */ - Chart.prototype.scheduleRefresh = function(seconds, delay_loading) { - if (this._timeoutid) { - clearTimeout(this._timeoutid); - } - - if (!seconds) { - return; - } - - this.refresh(delay_loading) - .finally(_ => { - this._timeoutid = setTimeout(() => this.scheduleRefresh(seconds, 0), seconds * 1000); - }); - }; - - /** * @param {jQuery} $el A container where charts are maintained. * @param {object} timeline Time control object. * @param {object} config @@ -372,10 +351,6 @@ clearTimeout(this._timeoutid); } - for (const chart of this.charts) { - chart.scheduleRefresh(0); - } - this.updateListAndCharts(delay_loading) .finally(_ => { if (refresh_interval) { @@ -430,7 +405,6 @@ if (this._prev_width === undefined) { this._prev_width = width; - this.updateCharts(); return; } diff --git a/ui/app/views/js/monitoring.problem.view.js.php b/ui/app/views/js/monitoring.problem.view.js.php index ed6cc5fa9a1..02756407b50 100644 --- a/ui/app/views/js/monitoring.problem.view.js.php +++ b/ui/app/views/js/monitoring.problem.view.js.php @@ -157,7 +157,7 @@ refreshResults() { const url = new Curl(); const screen = window.flickerfreeScreen.screens['problem']; - const data = $.extend(this.filter_defaults, this.global_timerange, url.getArgumentsObject()); + const data = Object.assign({}, this.filter_defaults, this.global_timerange, url.getArgumentsObject()); data.inventory = data.inventory ? data.inventory.filter(inventory => 'value' in inventory && inventory.value !== '') diff --git a/ui/app/views/js/monitoring.widget.navtreeitem.edit.js.php b/ui/app/views/js/monitoring.widget.navtreeitem.edit.js.php new file mode 100644 index 00000000000..fd68a9c09a0 --- /dev/null +++ b/ui/app/views/js/monitoring.widget.navtreeitem.edit.js.php @@ -0,0 +1,48 @@ +<?php declare(strict_types = 0); +/* +** Zabbix +** Copyright (C) 2001-2022 Zabbix SIA +** +** This program 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; either version 2 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program; if not, write to the Free Software +** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +**/ + + +/** + * @var CView $this + */ +?> + +window.navtreeitem_edit_popup = new class { + init() { + jQuery('#sysmapname').on('change', (e) => { + const name_input = document.getElementById('name'); + + if (name_input.value === '') { + name_input.value = e.target.value; + } + }); + + document.getElementById('select').addEventListener('click', () => { + return PopUp('popup.generic', { + srctbl: 'sysmaps', + srcfld1: 'sysmapid', + srcfld2: 'name', + dstfrm: 'widget_dialogue_form', + dstfld1: 'sysmapid', + dstfld2: 'sysmapname' + }, {dialogue_class: 'modal-popup-generic'}); + }); + } +}; diff --git a/ui/app/views/js/popup.host.edit.js.php b/ui/app/views/js/popup.host.edit.js.php index 8557d0bf86c..c22ff8ab198 100644 --- a/ui/app/views/js/popup.host.edit.js.php +++ b/ui/app/views/js/popup.host.edit.js.php @@ -29,7 +29,7 @@ window.host_edit_popup = { dialogue: null, form: null, - init({popup_url, form_name, host_interfaces, host_is_discovered}) { + init({popup_url, form_name, host_interfaces, host_is_discovered, warning}) { this.overlay = overlays_stack.getById('host_edit'); this.dialogue = this.overlay.$dialogue[0]; this.form = this.overlay.$dialogue.$body[0].querySelector('form'); @@ -39,6 +39,12 @@ window.host_edit_popup = { history.replaceState({}, '', popup_url); host_edit.init({form_name, host_interfaces, host_is_discovered}); + + if (warning !== null) { + const message_box = makeMessageBox('warning', warning, null, true, false)[0]; + + this.form.parentNode.insertBefore(message_box, this.form); + } }, addEventListeners() { diff --git a/ui/app/views/monitoring.widget.navtreeitem.edit.php b/ui/app/views/monitoring.widget.navtreeitem.edit.php index accedaf91f9..1794d6e1ef1 100644 --- a/ui/app/views/monitoring.widget.navtreeitem.edit.php +++ b/ui/app/views/monitoring.widget.navtreeitem.edit.php @@ -39,24 +39,9 @@ $form_list = (new CFormList()) ) ->addRow(_('Linked map'), [ new CVar('sysmapid', $data['sysmap']['sysmapid']), - (new CTextBox('sysmapname', $data['sysmap']['name'], true)) - ->setAttribute('onChange', - 'javascript: if(jQuery("#'.$form->getName().' input[type=text]:first").val() === ""){'. - 'jQuery("#widget-dialogue-form input[type=text]:first").val(this.value);}') - ->setWidth(ZBX_TEXTAREA_MEDIUM_WIDTH), + (new CTextBox('sysmapname', $data['sysmap']['name'], true))->setWidth(ZBX_TEXTAREA_MEDIUM_WIDTH), (new CDiv())->addClass(ZBX_STYLE_FORM_INPUT_MARGIN), - (new CButton('select', _('Select'))) - ->addClass(ZBX_STYLE_BTN_GREY) - ->onClick( - 'return PopUp("popup.generic", '.json_encode([ - 'srctbl' => 'sysmaps', - 'srcfld1' => 'sysmapid', - 'srcfld2' => 'name', - 'dstfrm' => $form->getName(), - 'dstfld1' => 'sysmapid', - 'dstfld2' => 'sysmapname' - ]).', {dialogue_class: "modal-popup-generic"});' - ) + (new CButton('select', _('Select')))->addClass(ZBX_STYLE_BTN_GREY) ]); if ($data['depth'] >= WIDGET_NAVIGATION_TREE_MAX_DEPTH) { @@ -69,10 +54,13 @@ else { ]); } -$form->addItem($form_list); +$form + ->addItem($form_list) + ->addItem((new CScriptTag('navtreeitem_edit_popup.init();'))->setOnDocumentReady()); $output = [ - 'body' => $form->toString() + 'body' => $form->toString(), + 'script_inline' => $this->readJsFile('monitoring.widget.navtreeitem.edit.js.php') ]; if (($messages = getMessages()) !== null) { diff --git a/ui/app/views/popup.host.edit.php b/ui/app/views/popup.host.edit.php index 7923458b968..64ec911da05 100644 --- a/ui/app/views/popup.host.edit.php +++ b/ui/app/views/popup.host.edit.php @@ -89,10 +89,6 @@ else { ]; } -if ($data['warning']) { - $data['warning'] = makeMessageBox(ZBX_STYLE_MSG_WARNING, [['message' => $data['warning']]]); -} - $output = [ 'header' => ($data['hostid'] == 0) ? _('New host') : _('Host'), 'body' => (new CPartial('configuration.host.edit.html', $data))->getOutput(), @@ -102,7 +98,8 @@ $output = [ 'popup_url' => $popup_url->getUrl(), 'form_name' => $data['form_name'], 'host_interfaces' => $data['host']['interfaces'], - 'host_is_discovered' => ($data['host']['flags'] == ZBX_FLAG_DISCOVERY_CREATED) + 'host_is_discovered' => ($data['host']['flags'] == ZBX_FLAG_DISCOVERY_CREATED), + 'warning' => $data['warning'] ]).');', 'buttons' => $buttons ]; diff --git a/ui/assets/styles/blue-theme.css b/ui/assets/styles/blue-theme.css index 4c21e63bb6d..82ad95e0dc5 100644 --- a/ui/assets/styles/blue-theme.css +++ b/ui/assets/styles/blue-theme.css @@ -2622,8 +2622,9 @@ z-select, color: #1f2c33; text-overflow: ellipsis; word-break: break-word; - white-space: pre-wrap; - user-select: none; } + user-select: none; + white-space: nowrap; + overflow: hidden; } z-select .list li.hover, .z-select .list li.hover { background-color: #e8f5ff; } @@ -2896,7 +2897,6 @@ form.is-loading { box-shadow: inset 0 -1px 0 0 rgba(31, 44, 51, 0.1); color: #1f2c33; height: 22px; - line-height: 1; vertical-align: middle; white-space: nowrap; } .list-table.compact-view td [class*='icon-'] { @@ -3639,19 +3639,31 @@ select { .checkbox-radio { position: absolute !important; top: auto !important; + z-index: 1; width: 16px !important; height: 16px !important; - opacity: 0; - z-index: 1; } + opacity: 0; } + .checkbox-radio + label span { + position: relative; + display: inline-block; + width: 14px; + height: 14px; + margin-right: 4px; + vertical-align: text-bottom; + background-color: #ffffff; + border: 1px solid #acbbc2; } + .checkbox-radio + label span:active { + border-color: #acbbc2; } + .checkbox-radio + label.label-pos-left span { + margin-left: 4px; + margin-right: 0; } .checkbox-radio:checked[readonly] + label span { transition: none; } .checkbox-radio:checked[readonly] + label span::after { border-color: #acbbc2 !important; } - .checkbox-radio[readonly], - .checkbox-radio[readonly] + label { + .checkbox-radio[readonly], .checkbox-radio[readonly] + label { pointer-events: none; } - .checkbox-radio[readonly] span, - .checkbox-radio[readonly] + label span { + .checkbox-radio[readonly] span, .checkbox-radio[readonly] + label span { transition: none; } .checkbox-radio[type="checkbox"] + label span { border-radius: 2px; } @@ -3682,20 +3694,6 @@ select { border-radius: 50%; } .checkbox-radio[type="radio"]:checked[disabled] + label span::after { background-color: #acbbc2 !important; } - .checkbox-radio + label span { - position: relative; - display: inline-block; - width: 14px; - height: 14px; - margin: -4px 4px 0 0; - bottom: -3px; - border: 1px solid #acbbc2; - background-color: #ffffff; } - .checkbox-radio + label span:active { - border-color: #acbbc2; } - .checkbox-radio + label.label-pos-left span { - margin-left: 6px; - margin-right: 1px; } .checkbox-radio:focus + label span { border-color: #02659f; } .checkbox-radio:checked:focus + label span { @@ -3707,7 +3705,7 @@ select { .checkbox-radio[disabled] + label span { transition: none; } -input[type="checkbox"], input[type="radio"] { +input[type="radio"] { margin: 0; padding: 0; border: 0; @@ -4211,8 +4209,7 @@ button[disabled], button[disabled]:hover, button[disabled]:active { .radio-list-control input[type="radio"][disabled] + label, z-select[disabled] button, .z-select[disabled] button, z-select[readonly] button, -.z-select[readonly] button, .multiselect[aria-disabled], input[disabled], input[readonly], textarea[disabled], textarea[readonly], select option[disabled], select[disabled], select[readonly], .checkbox-radio[readonly] span, -.checkbox-radio[readonly] + label span, .checkbox-radio[disabled] + label span, .macro-input-group button.btn-dropdown-toggle:disabled { +.z-select[readonly] button, .multiselect[aria-disabled], input[disabled], input[readonly], textarea[disabled], textarea[readonly], select option[disabled], select[disabled], select[readonly], .checkbox-radio[readonly] span, .checkbox-radio[readonly] + label span, .checkbox-radio[disabled] + label span, .macro-input-group button.btn-dropdown-toggle:disabled { color: #acbbc2; background-color: #ebebeb !important; border-color: #ccd5d9; } @@ -5861,10 +5858,7 @@ svg { .checkbox-list li { overflow: hidden; text-overflow: ellipsis; - line-height: 20px; } - .checkbox-list li label { - line-height: 16px; - vertical-align: bottom; } + line-height: 24px; } .columns-wrapper { display: flex; @@ -5926,7 +5920,8 @@ svg { .preprocessing-list { display: block; max-width: 930px; - min-width: 800px; } + min-width: 800px; + position: relative; } .preprocessing-list > li { display: block; position: relative; } @@ -6400,47 +6395,44 @@ button.icon-action-command, button.icon-action-close, button.icon-action-msg, bu .range-control { position: relative; - display: inline-block; - vertical-align: middle; } + display: inline-flex; } .range-control input[type=range] { + width: calc(100% + 10px); + height: 20px; + margin: 2px -5px; + padding: 0; + vertical-align: top; + opacity: 0; cursor: pointer; -webkit-appearance: none; /* Hides the slider so that custom slider can be made */ -moz-appearance: none; /* Hides the slider so that custom slider can be made */ - width: calc(100% + 10px); - opacity: 0; - vertical-align: middle; - margin: 0 -5px; - padding: 0; - height: 20px; /* Special styling for WebKit/Blink */ } .range-control input[type=range]:focus { outline: none; } .range-control input[type=range]::-webkit-slider-thumb, .range-control input[type=range]::-moz-range-thumb { - margin-top: 1px; - /* You need to specify a margin in Chrome, but in Firefox and IE it is automatic */ height: 10px; width: 10px; + margin-top: 1px; + /* You need to specify a margin in Chrome, but in Firefox and IE it is automatic */ opacity: 0; } .range-control input[type=range]::-webkit-slider-runnable-track { height: 10px; opacity: 0; } .range-control input[type=text] { - width: 31px; - float: right; } + width: 31px; } .range-control > div { position: relative; width: calc(100% - 10px - 31px); - margin: 2px 10px 0 0; - float: left; } + margin-right: 10px; } .range-control .range-control-track, .range-control .range-control-progress { position: absolute; top: 50%; - margin-top: -1px; left: 0; height: 2px; + margin-top: -1px; cursor: pointer; } .range-control .range-control-track { width: 100%; @@ -6450,12 +6442,12 @@ button.icon-action-command, button.icon-action-close, button.icon-action-msg, bu .range-control .range-control-thumb { position: absolute; top: 50%; - margin-top: -5px; - margin-left: -5px; width: 10px; height: 10px; - border-radius: 50%; - background: #0275b8; } + margin-top: -5px; + margin-left: -5px; + background: #0275b8; + border-radius: 50%; } .range-control.range-control-focus .range-control-thumb { margin-top: -6.66667px; margin-left: -6.66667px; @@ -6472,15 +6464,15 @@ button.icon-action-command, button.icon-action-close, button.icon-action-msg, bu background: #c0c0c0; } .range-control datalist { position: absolute; + top: 50%; display: flex; width: 100%; - top: 50%; margin-top: -1px; } .range-control datalist option { - padding: 0; - font-size: 0; flex: 1 0 0; height: 2px; + padding: 0; + font-size: 0; border-left: 1px solid #ebeef0; } .graph-legend { @@ -6980,9 +6972,9 @@ z-select.z-select-host-interface li[disabled] .description:not(:empty), background-position: -117px -506px !important; } .geomap-filter { - border: 2px solid rgba(223, 228, 231, 0.4); + border: 1px solid #ccd5d9; background-color: #ffffff; - padding: 10px 30px 5px 10px; + padding: 5px 20px 5px 10px; position: absolute; margin-right: -2px; margin-top: 5px; @@ -6990,7 +6982,7 @@ z-select.z-select-host-interface li[disabled] .description:not(:empty), right: 0; } .geomap-filter.collapsed { - display: table; } + display: block; } .geomap-filter li { width: calc(100% + 20px); } diff --git a/ui/assets/styles/dark-theme.css b/ui/assets/styles/dark-theme.css index 4763e28b245..bd234e3177e 100644 --- a/ui/assets/styles/dark-theme.css +++ b/ui/assets/styles/dark-theme.css @@ -2635,8 +2635,9 @@ z-select, color: #f2f2f2; text-overflow: ellipsis; word-break: break-word; - white-space: pre-wrap; - user-select: none; } + user-select: none; + white-space: nowrap; + overflow: hidden; } z-select .list li.hover, .z-select .list li.hover { background-color: #454545; } @@ -2907,7 +2908,6 @@ form.is-loading { box-shadow: inset 0 -1px 0 0 rgba(242, 242, 242, 0.1); color: #f2f2f2; height: 22px; - line-height: 1; vertical-align: middle; white-space: nowrap; } .list-table.compact-view td [class*='icon-'] { @@ -3650,19 +3650,31 @@ select { .checkbox-radio { position: absolute !important; top: auto !important; + z-index: 1; width: 16px !important; height: 16px !important; - opacity: 0; - z-index: 1; } + opacity: 0; } + .checkbox-radio + label span { + position: relative; + display: inline-block; + width: 14px; + height: 14px; + margin-right: 4px; + vertical-align: text-bottom; + background-color: #383838; + border: 1px solid #4f4f4f; } + .checkbox-radio + label span:active { + border-color: #4f4f4f; } + .checkbox-radio + label.label-pos-left span { + margin-left: 4px; + margin-right: 0; } .checkbox-radio:checked[readonly] + label span { transition: none; } .checkbox-radio:checked[readonly] + label span::after { border-color: #4f4f4f !important; } - .checkbox-radio[readonly], - .checkbox-radio[readonly] + label { + .checkbox-radio[readonly], .checkbox-radio[readonly] + label { pointer-events: none; } - .checkbox-radio[readonly] span, - .checkbox-radio[readonly] + label span { + .checkbox-radio[readonly] span, .checkbox-radio[readonly] + label span { transition: none; } .checkbox-radio[type="checkbox"] + label span { border-radius: 2px; } @@ -3693,20 +3705,6 @@ select { border-radius: 50%; } .checkbox-radio[type="radio"]:checked[disabled] + label span::after { background-color: #4f4f4f !important; } - .checkbox-radio + label span { - position: relative; - display: inline-block; - width: 14px; - height: 14px; - margin: -4px 4px 0 0; - bottom: -3px; - border: 1px solid #4f4f4f; - background-color: #383838; } - .checkbox-radio + label span:active { - border-color: #4f4f4f; } - .checkbox-radio + label.label-pos-left span { - margin-left: 6px; - margin-right: 1px; } .checkbox-radio:focus + label span { border-color: #768d99; } .checkbox-radio:checked:focus + label span { @@ -3718,7 +3716,7 @@ select { .checkbox-radio[disabled] + label span { transition: none; } -input[type="checkbox"], input[type="radio"] { +input[type="radio"] { margin: 0; padding: 0; border: 0; @@ -4222,8 +4220,7 @@ button[disabled], button[disabled]:hover, button[disabled]:active { .radio-list-control input[type="radio"][disabled] + label, z-select[disabled] button, .z-select[disabled] button, z-select[readonly] button, -.z-select[readonly] button, .multiselect[aria-disabled], input[disabled], input[readonly], textarea[disabled], textarea[readonly], select option[disabled], select[disabled], select[readonly], .checkbox-radio[readonly] span, -.checkbox-radio[readonly] + label span, .checkbox-radio[disabled] + label span, .macro-input-group button.btn-dropdown-toggle:disabled { +.z-select[readonly] button, .multiselect[aria-disabled], input[disabled], input[readonly], textarea[disabled], textarea[readonly], select option[disabled], select[disabled], select[readonly], .checkbox-radio[readonly] span, .checkbox-radio[readonly] + label span, .checkbox-radio[disabled] + label span, .macro-input-group button.btn-dropdown-toggle:disabled { color: #525252; background-color: #2b2b2b !important; border-color: #3d3d3d; } @@ -5872,10 +5869,7 @@ svg { .checkbox-list li { overflow: hidden; text-overflow: ellipsis; - line-height: 20px; } - .checkbox-list li label { - line-height: 16px; - vertical-align: bottom; } + line-height: 24px; } .columns-wrapper { display: flex; @@ -5937,7 +5931,8 @@ svg { .preprocessing-list { display: block; max-width: 930px; - min-width: 800px; } + min-width: 800px; + position: relative; } .preprocessing-list > li { display: block; position: relative; } @@ -6411,47 +6406,44 @@ button.icon-action-command, button.icon-action-close, button.icon-action-msg, bu .range-control { position: relative; - display: inline-block; - vertical-align: middle; } + display: inline-flex; } .range-control input[type=range] { + width: calc(100% + 10px); + height: 20px; + margin: 2px -5px; + padding: 0; + vertical-align: top; + opacity: 0; cursor: pointer; -webkit-appearance: none; /* Hides the slider so that custom slider can be made */ -moz-appearance: none; /* Hides the slider so that custom slider can be made */ - width: calc(100% + 10px); - opacity: 0; - vertical-align: middle; - margin: 0 -5px; - padding: 0; - height: 20px; /* Special styling for WebKit/Blink */ } .range-control input[type=range]:focus { outline: none; } .range-control input[type=range]::-webkit-slider-thumb, .range-control input[type=range]::-moz-range-thumb { - margin-top: 1px; - /* You need to specify a margin in Chrome, but in Firefox and IE it is automatic */ height: 10px; width: 10px; + margin-top: 1px; + /* You need to specify a margin in Chrome, but in Firefox and IE it is automatic */ opacity: 0; } .range-control input[type=range]::-webkit-slider-runnable-track { height: 10px; opacity: 0; } .range-control input[type=text] { - width: 31px; - float: right; } + width: 31px; } .range-control > div { position: relative; width: calc(100% - 10px - 31px); - margin: 2px 10px 0 0; - float: left; } + margin-right: 10px; } .range-control .range-control-track, .range-control .range-control-progress { position: absolute; top: 50%; - margin-top: -1px; left: 0; height: 2px; + margin-top: -1px; cursor: pointer; } .range-control .range-control-track { width: 100%; @@ -6461,12 +6453,12 @@ button.icon-action-command, button.icon-action-close, button.icon-action-msg, bu .range-control .range-control-thumb { position: absolute; top: 50%; - margin-top: -5px; - margin-left: -5px; width: 10px; height: 10px; - border-radius: 50%; - background: #4796c4; } + margin-top: -5px; + margin-left: -5px; + background: #4796c4; + border-radius: 50%; } .range-control.range-control-focus .range-control-thumb { margin-top: -6.66667px; margin-left: -6.66667px; @@ -6483,15 +6475,15 @@ button.icon-action-command, button.icon-action-close, button.icon-action-msg, bu background: #c0c0c0; } .range-control datalist { position: absolute; + top: 50%; display: flex; width: 100%; - top: 50%; margin-top: -1px; } .range-control datalist option { - padding: 0; - font-size: 0; flex: 1 0 0; height: 2px; + padding: 0; + font-size: 0; border-left: 1px solid #0e1012; } .graph-legend { @@ -6991,9 +6983,9 @@ z-select.z-select-host-interface li[disabled] .description:not(:empty), background-position: -117px -506px !important; } .geomap-filter { - border: 2px solid rgba(48, 48, 48, 0.4); + border: 1px solid #383838; background-color: #2b2b2b; - padding: 10px 30px 5px 10px; + padding: 5px 20px 5px 10px; position: absolute; margin-right: -2px; margin-top: 5px; @@ -7001,7 +6993,7 @@ z-select.z-select-host-interface li[disabled] .description:not(:empty), right: 0; } .geomap-filter.collapsed { - display: table; } + display: block; } .geomap-filter li { width: calc(100% + 20px); } diff --git a/ui/assets/styles/hc-dark.css b/ui/assets/styles/hc-dark.css index 17e5c4287c2..4633a2344af 100644 --- a/ui/assets/styles/hc-dark.css +++ b/ui/assets/styles/hc-dark.css @@ -2611,8 +2611,9 @@ z-select, color: #ffffff; text-overflow: ellipsis; word-break: break-word; - white-space: pre-wrap; - user-select: none; } + user-select: none; + white-space: nowrap; + overflow: hidden; } z-select .list li.hover, .z-select .list li.hover { background-color: #454545; } @@ -2862,7 +2863,6 @@ form.is-loading { box-shadow: inset 0 -1px 0 0 rgba(255, 255, 255, 0.1); color: #ffffff; height: 22px; - line-height: 1; vertical-align: middle; white-space: nowrap; } .list-table.compact-view td [class*='icon-'] { @@ -3605,19 +3605,31 @@ select { .checkbox-radio { position: absolute !important; top: auto !important; + z-index: 1; width: 16px !important; height: 16px !important; - opacity: 0; - z-index: 1; } + opacity: 0; } + .checkbox-radio + label span { + position: relative; + display: inline-block; + width: 14px; + height: 14px; + margin-right: 4px; + vertical-align: text-bottom; + background-color: #383838; + border: 1px solid #666666; } + .checkbox-radio + label span:active { + border-color: #666666; } + .checkbox-radio + label.label-pos-left span { + margin-left: 4px; + margin-right: 0; } .checkbox-radio:checked[readonly] + label span { transition: none; } .checkbox-radio:checked[readonly] + label span::after { border-color: #666666 !important; } - .checkbox-radio[readonly], - .checkbox-radio[readonly] + label { + .checkbox-radio[readonly], .checkbox-radio[readonly] + label { pointer-events: none; } - .checkbox-radio[readonly] span, - .checkbox-radio[readonly] + label span { + .checkbox-radio[readonly] span, .checkbox-radio[readonly] + label span { transition: none; } .checkbox-radio[type="checkbox"] + label span { border-radius: 2px; } @@ -3648,20 +3660,6 @@ select { border-radius: 50%; } .checkbox-radio[type="radio"]:checked[disabled] + label span::after { background-color: #666666 !important; } - .checkbox-radio + label span { - position: relative; - display: inline-block; - width: 14px; - height: 14px; - margin: -4px 4px 0 0; - bottom: -3px; - border: 1px solid #666666; - background-color: #383838; } - .checkbox-radio + label span:active { - border-color: #666666; } - .checkbox-radio + label.label-pos-left span { - margin-left: 6px; - margin-right: 1px; } .checkbox-radio:focus + label span { border-color: #bbbbbb; } .checkbox-radio:checked:focus + label span { @@ -3673,7 +3671,7 @@ select { .checkbox-radio[disabled] + label span { transition: none; } -input[type="checkbox"], input[type="radio"] { +input[type="radio"] { margin: 0; padding: 0; border: 0; @@ -4177,8 +4175,7 @@ button[disabled], button[disabled]:hover, button[disabled]:active { .radio-list-control input[type="radio"][disabled] + label, z-select[disabled] button, .z-select[disabled] button, z-select[readonly] button, -.z-select[readonly] button, .multiselect[aria-disabled], input[disabled], input[readonly], textarea[disabled], textarea[readonly], select option[disabled], select[disabled], select[readonly], .checkbox-radio[readonly] span, -.checkbox-radio[readonly] + label span, .checkbox-radio[disabled] + label span, .macro-input-group button.btn-dropdown-toggle:disabled { +.z-select[readonly] button, .multiselect[aria-disabled], input[disabled], input[readonly], textarea[disabled], textarea[readonly], select option[disabled], select[disabled], select[readonly], .checkbox-radio[readonly] span, .checkbox-radio[readonly] + label span, .checkbox-radio[disabled] + label span, .macro-input-group button.btn-dropdown-toggle:disabled { color: #7d7d7d; background-color: #000000 !important; border-color: #5a5a5a; } @@ -5818,10 +5815,7 @@ svg { .checkbox-list li { overflow: hidden; text-overflow: ellipsis; - line-height: 20px; } - .checkbox-list li label { - line-height: 16px; - vertical-align: bottom; } + line-height: 24px; } .columns-wrapper { display: flex; @@ -5883,7 +5877,8 @@ svg { .preprocessing-list { display: block; max-width: 930px; - min-width: 800px; } + min-width: 800px; + position: relative; } .preprocessing-list > li { display: block; position: relative; } @@ -6357,47 +6352,44 @@ button.icon-action-command, button.icon-action-close, button.icon-action-msg, bu .range-control { position: relative; - display: inline-block; - vertical-align: middle; } + display: inline-flex; } .range-control input[type=range] { + width: calc(100% + 10px); + height: 20px; + margin: 2px -5px; + padding: 0; + vertical-align: top; + opacity: 0; cursor: pointer; -webkit-appearance: none; /* Hides the slider so that custom slider can be made */ -moz-appearance: none; /* Hides the slider so that custom slider can be made */ - width: calc(100% + 10px); - opacity: 0; - vertical-align: middle; - margin: 0 -5px; - padding: 0; - height: 20px; /* Special styling for WebKit/Blink */ } .range-control input[type=range]:focus { outline: none; } .range-control input[type=range]::-webkit-slider-thumb, .range-control input[type=range]::-moz-range-thumb { - margin-top: 1px; - /* You need to specify a margin in Chrome, but in Firefox and IE it is automatic */ height: 10px; width: 10px; + margin-top: 1px; + /* You need to specify a margin in Chrome, but in Firefox and IE it is automatic */ opacity: 0; } .range-control input[type=range]::-webkit-slider-runnable-track { height: 10px; opacity: 0; } .range-control input[type=text] { - width: 31px; - float: right; } + width: 31px; } .range-control > div { position: relative; width: calc(100% - 10px - 31px); - margin: 2px 10px 0 0; - float: left; } + margin-right: 10px; } .range-control .range-control-track, .range-control .range-control-progress { position: absolute; top: 50%; - margin-top: -1px; left: 0; height: 2px; + margin-top: -1px; cursor: pointer; } .range-control .range-control-track { width: 100%; @@ -6407,12 +6399,12 @@ button.icon-action-command, button.icon-action-close, button.icon-action-msg, bu .range-control .range-control-thumb { position: absolute; top: 50%; - margin-top: -5px; - margin-left: -5px; width: 10px; height: 10px; - border-radius: 50%; - background: #f8f8f8; } + margin-top: -5px; + margin-left: -5px; + background: #f8f8f8; + border-radius: 50%; } .range-control.range-control-focus .range-control-thumb { margin-top: -6.66667px; margin-left: -6.66667px; @@ -6429,15 +6421,15 @@ button.icon-action-command, button.icon-action-close, button.icon-action-msg, bu background: #c0c0c0; } .range-control datalist { position: absolute; + top: 50%; display: flex; width: 100%; - top: 50%; margin-top: -1px; } .range-control datalist option { - padding: 0; - font-size: 0; flex: 1 0 0; height: 2px; + padding: 0; + font-size: 0; border-left: 1px solid #111111; } .graph-legend { @@ -6937,9 +6929,9 @@ z-select.z-select-host-interface li[disabled] .description:not(:empty), background-position: -117px -506px !important; } .geomap-filter { - border: 2px solid rgba(68, 68, 68, 0.4); + border: 1px solid #666666; background-color: #000000; - padding: 10px 30px 5px 10px; + padding: 5px 20px 5px 10px; position: absolute; margin-right: -2px; margin-top: 5px; @@ -6947,7 +6939,7 @@ z-select.z-select-host-interface li[disabled] .description:not(:empty), right: 0; } .geomap-filter.collapsed { - display: table; } + display: block; } .geomap-filter li { width: calc(100% + 20px); } @@ -7364,6 +7356,11 @@ z-select button.focusable:focus, .list-table.compact-view td .icon-wizard-action { background: transparent url("../img/icon-sprite.svg?20211222") no-repeat -318px -624px; } +.overlay-dialogue .list-table th:first-child { + padding-left: 0px; } +.overlay-dialogue .list-table td:first-child { + padding-left: 42px; } + .filter-highlight-row-cb { display: none; } diff --git a/ui/assets/styles/hc-light.css b/ui/assets/styles/hc-light.css index efc7f4d8206..502fd43be4d 100644 --- a/ui/assets/styles/hc-light.css +++ b/ui/assets/styles/hc-light.css @@ -2611,8 +2611,9 @@ z-select, color: #000000; text-overflow: ellipsis; word-break: break-word; - white-space: pre-wrap; - user-select: none; } + user-select: none; + white-space: nowrap; + overflow: hidden; } z-select .list li.hover, .z-select .list li.hover { background-color: #f4f4f4; } @@ -2862,7 +2863,6 @@ form.is-loading { box-shadow: inset 0 -1px 0 0 rgba(0, 0, 0, 0.1); color: #000000; height: 22px; - line-height: 1; vertical-align: middle; white-space: nowrap; } .list-table.compact-view td [class*='icon-'] { @@ -3605,19 +3605,31 @@ select { .checkbox-radio { position: absolute !important; top: auto !important; + z-index: 1; width: 16px !important; height: 16px !important; - opacity: 0; - z-index: 1; } + opacity: 0; } + .checkbox-radio + label span { + position: relative; + display: inline-block; + width: 14px; + height: 14px; + margin-right: 4px; + vertical-align: text-bottom; + background-color: #ffffff; + border: 1px solid #888888; } + .checkbox-radio + label span:active { + border-color: #888888; } + .checkbox-radio + label.label-pos-left span { + margin-left: 4px; + margin-right: 0; } .checkbox-radio:checked[readonly] + label span { transition: none; } .checkbox-radio:checked[readonly] + label span::after { border-color: #888888 !important; } - .checkbox-radio[readonly], - .checkbox-radio[readonly] + label { + .checkbox-radio[readonly], .checkbox-radio[readonly] + label { pointer-events: none; } - .checkbox-radio[readonly] span, - .checkbox-radio[readonly] + label span { + .checkbox-radio[readonly] span, .checkbox-radio[readonly] + label span { transition: none; } .checkbox-radio[type="checkbox"] + label span { border-radius: 2px; } @@ -3648,20 +3660,6 @@ select { border-radius: 50%; } .checkbox-radio[type="radio"]:checked[disabled] + label span::after { background-color: #888888 !important; } - .checkbox-radio + label span { - position: relative; - display: inline-block; - width: 14px; - height: 14px; - margin: -4px 4px 0 0; - bottom: -3px; - border: 1px solid #888888; - background-color: #ffffff; } - .checkbox-radio + label span:active { - border-color: #888888; } - .checkbox-radio + label.label-pos-left span { - margin-left: 6px; - margin-right: 1px; } .checkbox-radio:focus + label span { border-color: #000000; } .checkbox-radio:checked:focus + label span { @@ -3673,7 +3671,7 @@ select { .checkbox-radio[disabled] + label span { transition: none; } -input[type="checkbox"], input[type="radio"] { +input[type="radio"] { margin: 0; padding: 0; border: 0; @@ -4177,8 +4175,7 @@ button[disabled], button[disabled]:hover, button[disabled]:active { .radio-list-control input[type="radio"][disabled] + label, z-select[disabled] button, .z-select[disabled] button, z-select[readonly] button, -.z-select[readonly] button, .multiselect[aria-disabled], input[disabled], input[readonly], textarea[disabled], textarea[readonly], select option[disabled], select[disabled], select[readonly], .checkbox-radio[readonly] span, -.checkbox-radio[readonly] + label span, .checkbox-radio[disabled] + label span, .macro-input-group button.btn-dropdown-toggle:disabled { +.z-select[readonly] button, .multiselect[aria-disabled], input[disabled], input[readonly], textarea[disabled], textarea[readonly], select option[disabled], select[disabled], select[readonly], .checkbox-radio[readonly] span, .checkbox-radio[readonly] + label span, .checkbox-radio[disabled] + label span, .macro-input-group button.btn-dropdown-toggle:disabled { color: #9f9f9f; background-color: #f0f0f0 !important; border-color: #9f9f9f; } @@ -5818,10 +5815,7 @@ svg { .checkbox-list li { overflow: hidden; text-overflow: ellipsis; - line-height: 20px; } - .checkbox-list li label { - line-height: 16px; - vertical-align: bottom; } + line-height: 24px; } .columns-wrapper { display: flex; @@ -5883,7 +5877,8 @@ svg { .preprocessing-list { display: block; max-width: 930px; - min-width: 800px; } + min-width: 800px; + position: relative; } .preprocessing-list > li { display: block; position: relative; } @@ -6357,47 +6352,44 @@ button.icon-action-command, button.icon-action-close, button.icon-action-msg, bu .range-control { position: relative; - display: inline-block; - vertical-align: middle; } + display: inline-flex; } .range-control input[type=range] { + width: calc(100% + 10px); + height: 20px; + margin: 2px -5px; + padding: 0; + vertical-align: top; + opacity: 0; cursor: pointer; -webkit-appearance: none; /* Hides the slider so that custom slider can be made */ -moz-appearance: none; /* Hides the slider so that custom slider can be made */ - width: calc(100% + 10px); - opacity: 0; - vertical-align: middle; - margin: 0 -5px; - padding: 0; - height: 20px; /* Special styling for WebKit/Blink */ } .range-control input[type=range]:focus { outline: none; } .range-control input[type=range]::-webkit-slider-thumb, .range-control input[type=range]::-moz-range-thumb { - margin-top: 1px; - /* You need to specify a margin in Chrome, but in Firefox and IE it is automatic */ height: 10px; width: 10px; + margin-top: 1px; + /* You need to specify a margin in Chrome, but in Firefox and IE it is automatic */ opacity: 0; } .range-control input[type=range]::-webkit-slider-runnable-track { height: 10px; opacity: 0; } .range-control input[type=text] { - width: 31px; - float: right; } + width: 31px; } .range-control > div { position: relative; width: calc(100% - 10px - 31px); - margin: 2px 10px 0 0; - float: left; } + margin-right: 10px; } .range-control .range-control-track, .range-control .range-control-progress { position: absolute; top: 50%; - margin-top: -1px; left: 0; height: 2px; + margin-top: -1px; cursor: pointer; } .range-control .range-control-track { width: 100%; @@ -6407,12 +6399,12 @@ button.icon-action-command, button.icon-action-close, button.icon-action-msg, bu .range-control .range-control-thumb { position: absolute; top: 50%; - margin-top: -5px; - margin-left: -5px; width: 10px; height: 10px; - border-radius: 50%; - background: #555555; } + margin-top: -5px; + margin-left: -5px; + background: #555555; + border-radius: 50%; } .range-control.range-control-focus .range-control-thumb { margin-top: -6.66667px; margin-left: -6.66667px; @@ -6429,15 +6421,15 @@ button.icon-action-command, button.icon-action-close, button.icon-action-msg, bu background: #c0c0c0; } .range-control datalist { position: absolute; + top: 50%; display: flex; width: 100%; - top: 50%; margin-top: -1px; } .range-control datalist option { - padding: 0; - font-size: 0; flex: 1 0 0; height: 2px; + padding: 0; + font-size: 0; border-left: 1px solid #ffffff; } .graph-legend { @@ -6937,9 +6929,9 @@ z-select.z-select-host-interface li[disabled] .description:not(:empty), background-position: -117px -506px !important; } .geomap-filter { - border: 2px solid rgba(159, 159, 159, 0.4); + border: 1px solid #383838; background-color: #ffffff; - padding: 10px 30px 5px 10px; + padding: 5px 20px 5px 10px; position: absolute; margin-right: -2px; margin-top: 5px; @@ -6947,7 +6939,7 @@ z-select.z-select-host-interface li[disabled] .description:not(:empty), right: 0; } .geomap-filter.collapsed { - display: table; } + display: block; } .geomap-filter li { width: calc(100% + 20px); } @@ -7300,6 +7292,11 @@ z-select button.focusable:focus, .list-table.compact-view td .icon-wizard-action { background: transparent url("../img/icon-sprite.svg?20211222") no-repeat -165px -624px; } +.overlay-dialogue .list-table th:first-child { + padding-left: 0px; } +.overlay-dialogue .list-table td:first-child { + padding-left: 42px; } + .filter-highlight-row-cb { display: none; } diff --git a/ui/graphs.php b/ui/graphs.php index 9bdc21f9267..79ba750cd8c 100644 --- a/ui/graphs.php +++ b/ui/graphs.php @@ -62,6 +62,7 @@ $fields = [ 'group_graphid' => [T_ZBX_INT, O_OPT, null, DB_ID, null], 'copy_targetids' => [T_ZBX_INT, O_OPT, null, DB_ID, null], 'context' => [T_ZBX_STR, O_MAND, P_SYS, IN('"host", "template"'), null], + 'readonly' => [T_ZBX_INT, O_OPT, null, IN('1'), null], // actions 'action' => [T_ZBX_STR, O_OPT, P_SYS|P_ACT, IN('"graph.masscopyto","graph.massdelete","graph.updatediscover"'), null], 'add' => [T_ZBX_STR, O_OPT, P_SYS|P_ACT, null, null], @@ -502,10 +503,11 @@ elseif (isset($_REQUEST['form'])) { 'group_gid' => getRequest('group_gid', []), 'hostid' => $hostid, 'normal_only' => getRequest('normal_only'), - 'context' => getRequest('context') + 'context' => getRequest('context'), + 'readonly' => getRequest('readonly', 0) ]; - if (!empty($data['graphid']) && !isset($_REQUEST['form_refresh'])) { + if ($data['graphid'] != 0 && ($data['readonly'] || !$data['form_refresh'])) { $options = [ 'graphids' => $data['graphid'], 'output' => API_OUTPUT_EXTEND, @@ -612,7 +614,7 @@ elseif (isset($_REQUEST['form'])) { } } - if (empty($data['graphid']) && !isset($_REQUEST['form_refresh'])) { + if ($data['graphid'] == 0 && !$data['form_refresh']) { $data['show_legend'] = $_REQUEST['show_legend'] = 1; $data['show_work_period'] = $_REQUEST['show_work_period'] = 1; $data['show_triggers'] = $_REQUEST['show_triggers'] = 1; diff --git a/ui/include/classes/graphdraw/CLineGraphDraw.php b/ui/include/classes/graphdraw/CLineGraphDraw.php index a4988b1e782..585fe26262f 100644 --- a/ui/include/classes/graphdraw/CLineGraphDraw.php +++ b/ui/include/classes/graphdraw/CLineGraphDraw.php @@ -930,12 +930,14 @@ class CLineGraphDraw extends CGraphDraw { /** * Get best matching X-axis interval specification for the preferred sub-interval. * - * @param int $pref_sub_interval Preferred sub-interval in seconds. - * @param float $min_sub_interval Preferred minimal sub-interval in seconds (float). Discarded if no matches. + * @param int $pref_sub_interval Preferred sub-interval in seconds. + * @param float $min_sub_interval Preferred minimal sub-interval in seconds (float). Discarded if no matches. + * @param string $magnitude The highest non-permanent date component (Y, m, d, H, i, s). * * @return array */ - private function getOptimalDateTimeIntervalSpec(int $pref_sub_interval, float $min_sub_interval): array { + private function getOptimalDateTimeIntervalSpec(int $pref_sub_interval, float $min_sub_interval, + string $magnitude): array { // Possible X-axis main and sub-intervals. $intervals = [ 'PT1M' => ['PT1S', 'PT5S', 'PT10S', 'PT30S'], @@ -962,9 +964,9 @@ class CLineGraphDraw extends CGraphDraw { $formats = [ 'PT1M' => ['main' => TIME_FORMAT, 'sub' => _('H:i:s')], 'PT1H' => ['main' => TIME_FORMAT, 'sub' => TIME_FORMAT], - 'P1D' => ['main' => _('m-d'), 'sub' => TIME_FORMAT], - 'P1W' => ['main' => _('m-d'), 'sub' => _('m-d')], - 'P1M' => ['main' => _('m-d'), 'sub' => _('m-d')], + 'P1D' => ['main' => $magnitude === 'Y' ? DATE_FORMAT : _('m-d'), 'sub' => TIME_FORMAT], + 'P1W' => ['main' => $magnitude === 'Y' ? DATE_FORMAT : _('m-d'), 'sub' => _('m-d')], + 'P1M' => ['main' => $magnitude === 'Y' ? DATE_FORMAT : _('m-d'), 'sub' => _('m-d')], 'P1Y' => ['main' => _x('Y', DATE_FORMAT_CONTEXT), 'sub' => _('M')], 'P10Y' => ['main' => _x('Y', DATE_FORMAT_CONTEXT), 'sub' => _x('Y', DATE_FORMAT_CONTEXT)] ]; @@ -1082,7 +1084,13 @@ class CLineGraphDraw extends CGraphDraw { $preferred_sub_interval = (int) ($this->period * $this->cell_width / $this->sizeX); - $optimal = $this->getOptimalDateTimeIntervalSpec($preferred_sub_interval, $label_size); + foreach (['Y', 'm', 'd', 'H', 'i', 's'] as $magnitude) { + if (date($magnitude, $this->stime) !== date($magnitude, $this->stime + $this->period)) { + break; + } + } + + $optimal = $this->getOptimalDateTimeIntervalSpec($preferred_sub_interval, $label_size, $magnitude); // Align starting date and time with the interval. $start = strtotime(date($optimal['aligner']['trim'], $this->stime)); diff --git a/ui/include/classes/html/CTabView.php b/ui/include/classes/html/CTabView.php index a01c243d1a0..c913c4d3222 100644 --- a/ui/include/classes/html/CTabView.php +++ b/ui/include/classes/html/CTabView.php @@ -154,17 +154,18 @@ class CTabView extends CDiv { } public function makeJavascript() { + $tab_name = ':tab.'.$this->id; $create_event = ''; if ($this->selectedTab !== null) { $create_event = 'create: function() {'. - 'sessionStorage.setItem(ZBX_SESSION_NAME + "_tab", '.json_encode($this->selectedTab).');'. + 'sessionStorage.setItem(ZBX_SESSION_NAME + "'.$tab_name.'", '.json_encode($this->selectedTab).');'. '},'; $active_tab = 'active: '.json_encode($this->selectedTab).','; } else { $active_tab = 'active: function() {'. - 'return sessionStorage.getItem(ZBX_SESSION_NAME + "_tab") || 0;'. + 'return sessionStorage.getItem(ZBX_SESSION_NAME + "'.$tab_name.'") || 0;'. '}(),'; } @@ -177,14 +178,14 @@ class CTabView extends CDiv { $disabled_tabs. $active_tab. 'activate: function(event, ui) {'. - 'sessionStorage.setItem(ZBX_SESSION_NAME + "_tab", ui.newTab.index().toString());'. + 'sessionStorage.setItem(ZBX_SESSION_NAME + "'.$tab_name.'", ui.newTab.index().toString());'. 'jQuery.cookie("tab", ui.newTab.index().toString());'. $this->tab_change_js. '}'. '})'. // Prevent changing the cookie value in a different tab. '.parent().on("submit", function() {'. - 'jQuery.cookie("tab", sessionStorage.getItem(ZBX_SESSION_NAME + "_tab") || 0);'. + 'jQuery.cookie("tab", sessionStorage.getItem(ZBX_SESSION_NAME + "'.$tab_name.'") || 0);'. '});'; } } diff --git a/ui/include/classes/import/CConfigurationImport.php b/ui/include/classes/import/CConfigurationImport.php index 86a94f43935..653b0230bb0 100644 --- a/ui/include/classes/import/CConfigurationImport.php +++ b/ui/include/classes/import/CConfigurationImport.php @@ -2346,15 +2346,11 @@ class CConfigurationImport { return; } - $dashboards = $this->getFormattedTemplateDashboards(); - - if ($dashboards) { - $dashboard_importer = new CTemplateDashboardImporter($this->options, $this->referencer, - $this->importedObjectContainer - ); + $dashboard_importer = new CTemplateDashboardImporter($this->options, $this->referencer, + $this->importedObjectContainer + ); - $dashboard_importer->delete($dashboards); - } + $dashboard_importer->delete($this->getFormattedTemplateDashboards()); } /** @@ -2561,7 +2557,7 @@ class CConfigurationImport { */ protected function getFormattedTemplateDashboards(): array { if (!array_key_exists('templateDashboards', $this->formattedData)) { - $this->formattedData['templateDashboards'] = $this->adapter->getTemplateDashboards(); + $this->formattedData['templateDashboards'] = $this->adapter->getTemplateDashboards(); } return $this->formattedData['templateDashboards']; diff --git a/ui/include/views/configuration.graph.edit.php b/ui/include/views/configuration.graph.edit.php index a241086e79a..b772e286212 100644 --- a/ui/include/views/configuration.graph.edit.php +++ b/ui/include/views/configuration.graph.edit.php @@ -74,6 +74,7 @@ if (array_key_exists('flags', $data) && $data['flags'] == ZBX_FLAG_DISCOVERY_CRE $readonly = false; if ($is_templated || $discovered_graph) { $readonly = true; + $graphForm->addItem((new CVar('readonly', 1))->removeId()); } if ($discovered_graph) { @@ -431,9 +432,12 @@ if ($data['parent_discoveryid']) { // Append tabs to form. $graphTab = (new CTabView()) - ->setSelected(0) ->addTab('graphTab', ($data['parent_discoveryid'] === null) ? _('Graph') : _('Graph prototype'), $graphFormList); +if (!$data['form_refresh']) { + $graphTab->setSelected(0); +} + /* * Preview tab */ diff --git a/ui/include/views/js/configuration.graph.edit.js.php b/ui/include/views/js/configuration.graph.edit.js.php index 2c883492d2b..8a1a32787ce 100644 --- a/ui/include/views/js/configuration.graph.edit.js.php +++ b/ui/include/views/js/configuration.graph.edit.js.php @@ -337,8 +337,10 @@ this.loadItem(item); }); - $('#tabs').on('tabsactivate', (event, ui) => { - if (ui.newPanel.attr('id') === 'previewTab') { + $('#tabs').on('tabscreate tabsactivate', (event, ui) => { + const $panel = (event.type === 'tabscreate') ? ui.panel : ui.newPanel; + + if ($panel.attr('id') === 'previewTab') { const $preview_chart = $('#previewChart'); const src = new Curl('chart3.php'); diff --git a/ui/js/class.tab-indicators.js b/ui/js/class.tab-indicators.js index f8cf63a1d59..6ed5bdb8557 100644 --- a/ui/js/class.tab-indicators.js +++ b/ui/js/class.tab-indicators.js @@ -537,7 +537,7 @@ class PreprocessingTabIndicatorItem extends TabIndicatorItem { getValue() { return document - .querySelectorAll('#preprocessing .preprocessing-list-item') + .querySelectorAll('#preprocessing .preprocessing-list-item:not(.ui-sortable-placeholder)') .length; } diff --git a/ui/js/widgets/class.widget.js b/ui/js/widgets/class.widget.js index 5640bdc58e4..afddb550969 100644 --- a/ui/js/widgets/class.widget.js +++ b/ui/js/widgets/class.widget.js @@ -733,7 +733,9 @@ class CWidget extends CBaseComponent { this._content_body.insertAdjacentHTML('beforeend', messages); } - this._content_body.insertAdjacentHTML('beforeend', body); + if (body !== undefined) { + this._content_body.insertAdjacentHTML('beforeend', body); + } if (debug !== undefined) { this._content_body.insertAdjacentHTML('beforeend', debug); diff --git a/ui/js/widgets/class.widget.navtree.js b/ui/js/widgets/class.widget.navtree.js index e25c364d996..c424c86c8f8 100644 --- a/ui/js/widgets/class.widget.navtree.js +++ b/ui/js/widgets/class.widget.navtree.js @@ -961,7 +961,8 @@ class CWidgetNavTree extends CWidget { 'action': () => {} } ], - 'dialogueid': 'navtreeitem' + 'dialogueid': 'navtreeitem', + 'script_inline': resp.script_inline }, trigger_elmnt); } }); diff --git a/ui/tests/integration/IntegrationTests.php b/ui/tests/integration/IntegrationTests.php index 88406df41a7..e833788652b 100644 --- a/ui/tests/integration/IntegrationTests.php +++ b/ui/tests/integration/IntegrationTests.php @@ -27,6 +27,7 @@ require_once dirname(__FILE__).'/testValuemaps.php'; require_once dirname(__FILE__).'/testTriggerLinking.php'; require_once dirname(__FILE__).'/testGraphLinking.php'; require_once dirname(__FILE__).'/testEscalations.php'; +require_once dirname(__FILE__).'/testAlertingForServices.php'; require_once dirname(__FILE__).'/testComplexServiceStatus.php'; require_once dirname(__FILE__).'/testServiceRoles.php'; require_once dirname(__FILE__).'/testExpressionMacros.php'; @@ -52,6 +53,7 @@ class IntegrationTests { $suite->addTestSuite('testTriggerLinking'); $suite->addTestSuite('testGraphLinking'); $suite->addTestSuite('testEscalations'); + $suite->addTestSuite('testAlertingForServices'); $suite->addTestSuite('testComplexServiceStatus'); $suite->addTestSuite('testServiceRoles'); $suite->addTestSuite('testExpressionMacros'); diff --git a/ui/tests/integration/testAlertingForServices.php b/ui/tests/integration/testAlertingForServices.php new file mode 100644 index 00000000000..5d3fb5bb60a --- /dev/null +++ b/ui/tests/integration/testAlertingForServices.php @@ -0,0 +1,614 @@ +<?php +/* +** Zabbix +** Copyright (C) 2001-2021 Zabbix SIA +** +** This program 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; either version 2 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program; if not, write to the Free Software +** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +**/ + +require_once dirname(__FILE__).'/../include/CIntegrationTest.php'; + +/** + * Test suite for alerting for services. + * + * @required-components server + * @configurationDataProvider serverConfigurationProvider + * @hosts test_services_alerting + * @backup history,items,triggers,alerts,services + */ +class testAlertingForServices extends CIntegrationTest { + const HOSTNAME = 'test_services_alerting'; + const TRAPPER_KEY = 'test_trapper'; + const SERVICENAME = 'Service 1'; + const TRIGGER_DESC = 'Sample trigger'; + + private static $hostid; + private static $serviceid; + private static $actionid; + private static $triggerid; + private static $problem_tags; + + private function createServiceWithProblemTags($name, $problem_tags) { + $response = $this->call('service.create', [ + 'name' => $name, + 'algorithm' => ZBX_SERVICE_STATUS_CALC_MOST_CRITICAL_ALL, + 'sortorder' => 1, + 'problem_tags' => $problem_tags + ]); + $this->assertArrayHasKey('serviceids', $response['result']); + $this->assertArrayHasKey(0, $response['result']['serviceids']); + + return $response['result']['serviceids'][0]; + } + + /** + * @inheritdoc + */ + public function prepareData() { + // Create host "test_services_alerting" + $response = $this->call('host.create', [ + [ + 'host' => self::HOSTNAME, + 'interfaces' => [ + 'type' => 1, + 'main' => 1, + 'useip' => 1, + 'ip' => '127.0.0.1', + 'dns' => '', + 'port' => $this->getConfigurationValue(self::COMPONENT_AGENT, 'ListenPort') + ], + 'groups' => [['groupid' => 4]], + 'status' => HOST_STATUS_MONITORED + ] + ]); + + $this->assertArrayHasKey('hostids', $response['result']); + $this->assertArrayHasKey(0, $response['result']['hostids']); + self::$hostid = $response['result']['hostids'][0]; + + // Create trapper item + $response = $this->call('item.create', [ + [ + 'name' => self::TRAPPER_KEY, + 'key_' => self::TRAPPER_KEY, + 'type' => ITEM_TYPE_TRAPPER, + 'hostid' => self::$hostid, + 'value_type' => ITEM_VALUE_TYPE_UINT64 + ] + ]); + $this->assertArrayHasKey('itemids', $response['result']); + $this->assertEquals(1, count($response['result']['itemids'])); + + // Create trigger + $response = $this->call('trigger.create', [ + 'description' => self::TRIGGER_DESC, + 'priority' => TRIGGER_SEVERITY_HIGH, + 'status' => TRIGGER_STATUS_ENABLED, + 'type' => 0, + 'recovery_mode' => 0, + 'manual_close' => ZBX_TRIGGER_MANUAL_CLOSE_NOT_ALLOWED, + 'expression' => 'last(/' . self::HOSTNAME . '/' . self::TRAPPER_KEY . ')=1' + ]); + $this->assertArrayHasKey('triggerids', $response['result']); + $this->assertArrayHasKey(0, $response['result']['triggerids']); + self::$triggerid = $response['result']['triggerids'][0]; + + $response = $this->call('trigger.update', [ + 'triggerid' => self::$triggerid, + 'tags' => [ + [ + 'tag' => 'ServiceLink', + 'value' => self::$triggerid . ':' . self::TRIGGER_DESC + ] + ] + ]); + self::$problem_tags = 'ServiceLink:' . self::$triggerid . ':' . self::TRIGGER_DESC; + + // Create service + self::$serviceid = $this->createServiceWithProblemTags(self::SERVICENAME, [ + [ + 'tag' => 'ServiceLink', + 'operator' => 0, + 'value' => self::$triggerid . ':' . self::TRIGGER_DESC + ] + ]); + + // Create action + $response = $this->call('action.create', [ + 'name' => 'Sample service status changed', + 'eventsource' => EVENT_SOURCE_SERVICE, + 'status' => 0, + 'esc_period' => '1h', + 'filter' => [ + 'evaltype' => 0, + 'conditions' => [ + [ + 'conditiontype' => CONDITION_TYPE_SERVICE, + 'operator' => 0, + 'value' => self::$serviceid + ] + ] + ], + 'operations' => [ + [ + 'esc_period' => 0, + 'esc_step_from' => 1, + 'esc_step_to' => 1, + 'operationtype' => OPERATION_TYPE_MESSAGE, + 'opmessage' => [ + 'default_msg' => 0, + 'mediatypeid' => 0, + 'message' => 'Problem', + 'subject' => 'Problem' + ], + 'opmessage_grp' => [['usrgrpid' => 7]] + ] + ], + 'recovery_operations' => [ + [ + 'operationtype' => OPERATION_TYPE_MESSAGE, + 'opmessage' => [ + 'default_msg' => 0, + 'mediatypeid' => 0, + 'message' => 'Recovery', + 'subject' => 'Recovery' + ], + 'opmessage_grp' => [['usrgrpid' => 7]] + ] + ], + 'update_operations' => [ + [ + 'operationtype' => OPERATION_TYPE_MESSAGE, + 'opmessage' => [ + 'default_msg' => 0, + 'mediatypeid' => 0, + 'message' => 'Update', + 'subject' => 'Update' + ], + 'opmessage_grp' => [['usrgrpid' => 7]] + ] + ] + ] + ); + $this->assertArrayHasKey('actionids', $response['result']); + $this->assertArrayHasKey(0, $response['result']['actionids']); + self::$actionid = $response['result']['actionids'][0]; + + return true; + } + + /** + * Component configuration provider for agent related tests. + * + * @return array + */ + public function serverConfigurationProvider() { + return [ + self::COMPONENT_SERVER => [ + 'DebugLevel' => 4, + 'LogFileSize' => 20 + ] + ]; + } + + /** + * Check alerting based on service action. + * + * @backup actions,alerts,history_uint,events,problem,service_problem,triggers,escalations + */ + public function testAlertingForServices_checkServiceStatusChange() { + $this->sendSenderValue(self::HOSTNAME, self::TRAPPER_KEY, 1); + + $response = $this->callUntilDataIsPresent('alert.get', [ + 'output' => 'extend', + 'actionsids' => self::$actionid, + 'eventsource' => EVENT_SOURCE_SERVICE, + 'eventobject' => EVENT_OBJECT_SERVICE + ], 25, 2); + $this->assertCount(1, $response['result']); + $this->assertEquals('Problem', $response['result'][0]['message']); + $this->assertEquals('Problem', $response['result'][0]['subject']); + $this->assertEquals(0, $response['result'][0]['p_eventid']); + + $response = $this->callUntilDataIsPresent('event.get', [ + 'objectids' => self::$triggerid + ], 25, 2); + $this->assertArrayHasKey(0, $response['result']); + $eventid = $response['result'][0]['eventid']; + + $response = $this->call('event.acknowledge', [ + 'eventids' => $eventid, + 'action' => ZBX_PROBLEM_UPDATE_SEVERITY, + 'message' => 'disaster', + 'severity' => TRIGGER_SEVERITY_DISASTER + ]); + $this->assertArrayHasKey('eventids', $response['result']); + $this->assertArrayHasKey(0, $response['result']['eventids']); + + sleep(12); + + $response = $this->callUntilDataIsPresent('alert.get', [ + 'output' => 'extend', + 'actionsids' => self::$actionid, + 'eventsource' => EVENT_SOURCE_SERVICE, + 'eventobject' => EVENT_OBJECT_SERVICE + ], 25, 2); + $this->assertCount(2, $response['result']); + + // Check if new problem event was added + $response = $this->call('problem.get', [ + 'output' => 'extend', + 'source' => EVENT_SOURCE_SERVICE, + 'object' => EVENT_OBJECT_SERVICE + ] + ); + $this->assertArrayHasKey(0, $response['result']); + $this->assertEquals(TRIGGER_SEVERITY_HIGH, $response['result'][0]['severity']); + $expected_eventname = 'Status of service "' . self::SERVICENAME . '" changed to High'; + $this->assertEquals($expected_eventname, $response['result'][0]['name']); + + $this->sendSenderValue(self::HOSTNAME, self::TRAPPER_KEY, 0); + + $this->waitForLogLineToBePresent(self::COMPONENT_SERVER, 'In escalation_recover()', true, 120); + $this->waitForLogLineToBePresent(self::COMPONENT_SERVER, 'End of escalation_recover()', true); + + $response = $this->callUntilDataIsPresent('alert.get', [ + 'output' => 'extend', + 'actionsids' => self::$actionid, + 'eventsource' => EVENT_SOURCE_SERVICE, + 'eventobject' => EVENT_OBJECT_SERVICE, + 'sortfield' => 'alertid' + ], 25, 3); + $this->assertCount(3, $response['result']); + $this->assertEquals('Recovery', $response['result'][2]['message']); + $this->assertEquals('Recovery', $response['result'][2]['subject']); + $this->assertNotEquals(0, $response['result'][2]['p_eventid']); + + // Check recovery event + $response = $this->callUntilDataIsPresent('event.get', [ + 'output' => 'extend', + 'source' => EVENT_SOURCE_SERVICE, + 'object' => EVENT_OBJECT_SERVICE, + 'value' => 0 + ], 25, 3); + $this->assertArrayHasKey(0, $response['result']); + $this->assertEquals(ZBX_SEVERITY_OK, $response['result'][0]['severity']); + $expected_eventname = 'Status of service "' . self::SERVICENAME . '" changed to OK'; + $this->assertEquals($expected_eventname, $response['result'][0]['name']); + + return true; + } + + /** + * Check alerting based on service action (without update operation, but with updated severity). + * + * @backup actions,alerts,history_uint,events,problem,service_problem,triggers,escalations + */ + public function testAlertingForServices_checkServiceStatusChangeWoUpdate() { + $response = $this->call('action.update', [ + 'actionid' => self::$actionid, + 'esc_period' => '1m', + 'operations' => [ + [ + 'esc_period' => 0, + 'esc_step_from' => 1, + 'esc_step_to' => 1, + 'operationtype' => OPERATION_TYPE_MESSAGE, + 'opmessage' => [ + 'default_msg' => 0, + 'mediatypeid' => 0, + 'message' => 'Problem', + 'subject' => 'Problem' + ], + 'opmessage_grp' => [['usrgrpid' => 7]] + ] + ], + 'recovery_operations' => [ + [ + 'operationtype' => OPERATION_TYPE_MESSAGE, + 'opmessage' => [ + 'default_msg' => 0, + 'mediatypeid' => 0, + 'message' => 'Recovery', + 'subject' => 'Recovery' + ], + 'opmessage_grp' => [['usrgrpid' => 7]] + ] + ], + 'update_operations' => [ + ] + ]); + $this->assertArrayHasKey('actionids', $response['result']); + $this->assertArrayHasKey(0, $response['result']['actionids']); + + $this->reloadConfigurationCache(); + + $this->sendSenderValue(self::HOSTNAME, self::TRAPPER_KEY, 1); + + $response = $this->callUntilDataIsPresent('alert.get', [ + 'output' => 'extend', + 'actionsids' => self::$actionid, + 'eventsource' => EVENT_SOURCE_SERVICE, + 'eventobject' => EVENT_OBJECT_SERVICE + ], 25, 2); + $this->assertCount(1, $response['result']); + $this->assertEquals('Problem', $response['result'][0]['message']); + $this->assertEquals('Problem', $response['result'][0]['subject']); + $this->assertEquals(0, $response['result'][0]['p_eventid']); + + $response = $this->callUntilDataIsPresent('event.get', [ + 'objectids' => self::$triggerid + ], 25, 2); + $this->assertArrayHasKey(0, $response['result']); + $eventid = $response['result'][0]['eventid']; + + $response = $this->call('event.acknowledge', [ + 'eventids' => $eventid, + 'action' => ZBX_PROBLEM_UPDATE_SEVERITY, + 'message' => 'disaster', + 'severity' => TRIGGER_SEVERITY_DISASTER + ]); + $this->assertArrayHasKey('eventids', $response['result']); + $this->assertArrayHasKey(0, $response['result']['eventids']); + + sleep(10); + + $response = $this->callUntilDataIsPresent('alert.get', [ + 'output' => 'extend', + 'actionsids' => self::$actionid, + 'eventsource' => EVENT_SOURCE_SERVICE, + 'eventobject' => EVENT_OBJECT_SERVICE + ], 25, 2); + $this->assertCount(1, $response['result']); + + // Check if new problem event was added + $response = $this->call('problem.get', [ + 'output' => 'extend', + 'source' => EVENT_SOURCE_SERVICE, + 'object' => EVENT_OBJECT_SERVICE + ] + ); + $this->assertArrayHasKey(0, $response['result']); + $this->assertEquals(TRIGGER_SEVERITY_HIGH, $response['result'][0]['severity']); + $expected_eventname = 'Status of service "' . self::SERVICENAME . '" changed to High'; + $this->assertEquals($expected_eventname, $response['result'][0]['name']); + + $this->sendSenderValue(self::HOSTNAME, self::TRAPPER_KEY, 0); + + $this->waitForLogLineToBePresent(self::COMPONENT_SERVER, 'In escalation_recover()', true, 120); + $this->waitForLogLineToBePresent(self::COMPONENT_SERVER, 'End of escalation_recover()', true); + + $response = $this->callUntilDataIsPresent('alert.get', [ + 'output' => 'extend', + 'actionsids' => self::$actionid, + 'eventsource' => EVENT_SOURCE_SERVICE, + 'eventobject' => EVENT_OBJECT_SERVICE, + 'sortfield' => 'alertid' + ], 25, 3); + $this->assertCount(2, $response['result']); + $this->assertEquals('Recovery', $response['result'][1]['message']); + $this->assertEquals('Recovery', $response['result'][1]['subject']); + $this->assertNotEquals(0, $response['result'][1]['p_eventid']); + + // Check recovery event + $response = $this->callUntilDataIsPresent('event.get', [ + 'output' => 'extend', + 'source' => EVENT_SOURCE_SERVICE, + 'object' => EVENT_OBJECT_SERVICE, + 'value' => 0 + ], 25, 3); + $this->assertArrayHasKey(0, $response['result']); + $this->assertEquals(ZBX_SEVERITY_OK, $response['result'][0]['severity']); + $expected_eventname = 'Status of service "' . self::SERVICENAME . '" changed to OK'; + $this->assertEquals($expected_eventname, $response['result'][0]['name']); + + return true; + } + + /** + * Check SERVICE.* macros. + * + * @backup alerts,history,events,triggers,services + */ + public function testAlertingForServices_checkMacros() { + $this->sendSenderValue(self::HOSTNAME, self::TRAPPER_KEY, 0); + $this->reloadConfigurationCache(); + + $response = $this->call('action.update', [ + 'actionid' => self::$actionid, + 'esc_period' => '1m', + 'operations' => [ + [ + 'esc_period' => 0, + 'esc_step_from' => 1, + 'esc_step_to' => 1, + 'operationtype' => OPERATION_TYPE_MESSAGE, + 'opmessage' => [ + 'default_msg' => 0, + 'mediatypeid' => 0, + 'message' => '{SERVICE.NAME}|{SERVICE.TAGS}|{SERVICE.TAGSJSON}|{SERVICE.ROOTCAUSE}', + 'subject' => 'Problem' + ], + 'opmessage_grp' => [['usrgrpid' => 7]] + ] + ] + ]); + $this->assertArrayHasKey('actionids', $response['result']); + $this->assertArrayHasKey(0, $response['result']['actionids']); + + $this->reloadConfigurationCache(); + + $this->sendSenderValue(self::HOSTNAME, self::TRAPPER_KEY, 1); + + $this->waitForLogLineToBePresent(self::COMPONENT_SERVER, 'In escalation_execute()', true, 120); + $this->waitForLogLineToBePresent(self::COMPONENT_SERVER, 'End of escalation_execute()', true); + + $response = $this->call('alert.get', [ + 'output' => 'extend', + 'actionsids' => self::$actionid, + 'eventsource' => EVENT_SOURCE_SERVICE, + 'eventobject' => EVENT_OBJECT_SERVICE + ]); + $this->assertArrayHasKey(0, $response['result']); + + $service_macros = explode('|', $response['result'][0]['message']); + + $rootcause = '/Host: "' . self::HOSTNAME . '" Problem name: "' . self::TRIGGER_DESC .'" Severity: "' . + 'High" Age: [0-9]+s Problem tags: "' . self::$problem_tags . '"/ '; + + $this->assertEquals(self::SERVICENAME, $service_macros[0]); + $this->assertEmpty($service_macros[1]); + $this->assertEquals('[]', $service_macros[2]); + + $this->assertEquals(1, preg_match($rootcause, $service_macros[3], $matches)); + } + + /** + * Check escalation steps. + * + * @backup alerts,history,events,triggers,services + */ + public function testAlertingForServices_checkEscalationSteps() { + $response = $this->call('action.update', [ + 'actionid' => self::$actionid, + 'esc_period' => '1m', + 'operations' => [ + [ + 'esc_period' => 0, + 'esc_step_from' => 1, + 'esc_step_to' => 1, + 'operationtype' => OPERATION_TYPE_MESSAGE, + 'opmessage' => [ + 'default_msg' => 0, + 'mediatypeid' => 0, + 'message' => 'Problem', + 'subject' => 'Problem' + ], + 'opmessage_grp' => [['usrgrpid' => 7]] + ], + [ + 'esc_period' => 0, + 'esc_step_from' => 2, + 'esc_step_to' => 2, + 'operationtype' => OPERATION_TYPE_MESSAGE, + 'opmessage' => [ + 'default_msg' => 0, + 'mediatypeid' => 0, + 'message' => 'Problem', + 'subject' => 'Problem' + ], + 'opmessage_grp' => [['usrgrpid' => 7]] + ] + ] + ]); + $this->assertArrayHasKey('actionids', $response['result']); + $this->assertArrayHasKey(0, $response['result']['actionids']); + + $this->reloadConfigurationCache(); + + $this->sendSenderValue(self::HOSTNAME, self::TRAPPER_KEY, 1); + + $this->waitForLogLineToBePresent(self::COMPONENT_SERVER, 'In escalation_execute()', true, 120); + $this->waitForLogLineToBePresent(self::COMPONENT_SERVER, 'End of escalation_execute()', true); + + $this->waitForLogLineToBePresent(self::COMPONENT_SERVER, 'In escalation_execute()', true, 120); + $this->waitForLogLineToBePresent(self::COMPONENT_SERVER, 'End of escalation_execute()', true); + + $response = $this->call('alert.get', [ + 'output' => 'extend', + 'actionsids' => self::$actionid, + 'eventsource' => EVENT_SOURCE_SERVICE, + 'eventobject' => EVENT_OBJECT_SERVICE, + 'sortfield' => 'alertid' + ] + ); + $this->assertCount(2, $response['result']); + $this->assertEquals(1, $response['result'][0]['esc_step']); + $this->assertEquals(2, $response['result'][1]['esc_step']); + + return true; + } + + /** + * Test suite for alerting for services. + * + * @backup alerts,history,events,triggers,services + */ + public function testAlertingForServices_checkTwoTriggers() { + $this->reloadConfigurationCache(); + // Create trigger + $trigger_desc_2 = self::TRIGGER_DESC . '2'; + $response = $this->call('trigger.create', [ + 'description' => $trigger_desc_2, + 'priority' => TRIGGER_SEVERITY_DISASTER, + 'status' => TRIGGER_STATUS_ENABLED, + 'type' => 0, + 'recovery_mode' => 0, + 'manual_close' => ZBX_TRIGGER_MANUAL_CLOSE_NOT_ALLOWED, + 'expression' => 'last(/' . self::HOSTNAME . '/' . self::TRAPPER_KEY . ')=1' + ]); + $this->assertArrayHasKey('triggerids', $response['result']); + $this->assertArrayHasKey(0, $response['result']['triggerids']); + $trigger_id_2 = $response['result']['triggerids'][0]; + + $response = $this->call('trigger.update', [ + 'triggerid' => $trigger_id_2, + 'tags' => [ + [ + 'tag' => 'ServiceLink', + 'value' => $trigger_id_2 . ':' . $trigger_desc_2 + ] + ] + ]); + + $serviceid_child1 = $this->createServiceWithProblemTags('Child service (disaster)', [[ + 'tag' => 'ServiceLink', + 'operator' => 0, + 'value' => $trigger_id_2 . ':' . $trigger_desc_2 + ]]); + + $serviceid_child2 = $this->createServiceWithProblemTags('Child service (high)', [[ + 'tag' => 'ServiceLink', + 'operator' => 0, + 'value' => self::$triggerid . ':' . self::TRIGGER_DESC + ]]); + + // Update service + $response = $this->call('service.update', [ + 'serviceid' => self::$serviceid, + 'children' => [ + ['serviceid' => $serviceid_child1], + ['serviceid' => $serviceid_child2] + ], + 'problem_tags' => [] + ]); + $this->assertArrayHasKey('serviceids', $response['result']); + $this->assertArrayHasKey(0, $response['result']['serviceids']); + + $this->reloadConfigurationCache(); + + $this->sendSenderValue(self::HOSTNAME, self::TRAPPER_KEY, 1); + + $response = $this->callUntilDataIsPresent('service.get', [ + 'output' => 'extend', + 'serviceids' => self::$serviceid + ], 25, 3); + $this->assertArrayHasKey(0, $response['result']); + $this->assertArrayHasKey('status', $response['result'][0]); + $this->assertEquals(TRIGGER_SEVERITY_DISASTER, $response['result'][0]['status']); + + return true; + } +} diff --git a/ui/tests/selenium/common/testSystemInformation.php b/ui/tests/selenium/common/testSystemInformation.php index f4a966fc7f4..181874c04d4 100644 --- a/ui/tests/selenium/common/testSystemInformation.php +++ b/ui/tests/selenium/common/testSystemInformation.php @@ -77,7 +77,7 @@ class testSystemInformation extends CWebTest { 'ha_nodeid' => 'ckvaw9wlf0001tn7psxgh3wfo', 'name' => 'Active node', 'address' => $DB['SERVER'], - 'port' => $DB['PORT'], + 'port' => 0, 'lastaccess' => self::$active_lastaccess, 'status' => 3, 'ha_sessionid' => 'ckvaw9wjo0000td7p8j66e74x' @@ -174,7 +174,7 @@ class testSystemInformation extends CWebTest { // Check Zabbix server address and port for each record in the HA cluster nodes table. if ($name === 'Active node') { self::$skip_fields[] = $row->getColumn('Address'); - $this->assertEquals($DB['SERVER'].':'.$DB['PORT'], $row->getColumn('Address')->getText()); + $this->assertEquals($DB['SERVER'].':0', $row->getColumn('Address')->getText()); } } @@ -182,7 +182,7 @@ class testSystemInformation extends CWebTest { * Check and hide the active Zabbix server address in widget that is working in System stats mode or in the part * of the report that displays the overall system statistics. */ - $this->assertEquals($DB['SERVER'].':'.$DB['PORT'], $server_address->getText()); + $this->assertEquals($DB['SERVER'].':0', $server_address->getText()); self::$skip_fields[] = $server_address; // Hide the footer of the report as it contains Zabbix version. diff --git a/ui/tests/selenium/testFormAdministrationAuthenticationLdap.php b/ui/tests/selenium/testFormAdministrationAuthenticationLdap.php index d9934a19ebc..2ee9a6f8538 100644 --- a/ui/tests/selenium/testFormAdministrationAuthenticationLdap.php +++ b/ui/tests/selenium/testFormAdministrationAuthenticationLdap.php @@ -44,7 +44,7 @@ class testFormAdministrationAuthenticationLdap extends CWebTest { [ 'ldap_settings' => [ 'Enable LDAP authentication' => true, - 'LDAP host' => 'ldap.forumsys.com' + 'LDAP host' => 'ipa.demo1.freeipa.org' ], 'error' => 'Incorrect value for field "ldap_base_dn": cannot be empty.' ] @@ -53,8 +53,8 @@ class testFormAdministrationAuthenticationLdap extends CWebTest { [ 'ldap_settings' => [ 'Enable LDAP authentication' => true, - 'LDAP host' => 'ldap.forumsys.com', - 'Base DN' => 'dc=example,dc=com' + 'LDAP host' => 'ipa.demo1.freeipa.org', + 'Base DN' => 'cn=users,cn=accounts,dc=demo1,dc=freeipa,dc=org' ], 'error' => 'Incorrect value for field "ldap_search_attribute": cannot be empty.' ] @@ -63,8 +63,8 @@ class testFormAdministrationAuthenticationLdap extends CWebTest { [ 'ldap_settings' => [ 'Enable LDAP authentication' => true, - 'LDAP host' => 'ldap.forumsys.com', - 'Base DN' => 'dc=example,dc=com', + 'LDAP host' => 'ipa.demo1.freeipa.org', + 'Base DN' => 'cn=users,cn=accounts,dc=demo1,dc=freeipa,dc=org', 'Search attribute' => 'uid' ], 'error' => 'Login name or password is incorrect.' @@ -74,10 +74,10 @@ class testFormAdministrationAuthenticationLdap extends CWebTest { [ 'ldap_settings' => [ 'Enable LDAP authentication' => true, - 'LDAP host' => 'ldap.forumsys.com', - 'Base DN' => 'dc=example,dc=com', + 'LDAP host' => 'ipa.demo1.freeipa.org', + 'Base DN' => 'cn=users,cn=accounts,dc=demo1,dc=freeipa,dc=org', 'Search attribute' => 'uid', - 'Login' => 'galieleo' + 'Login' => 'admin' ], 'error' => 'Login name or password is incorrect.' ] @@ -86,10 +86,10 @@ class testFormAdministrationAuthenticationLdap extends CWebTest { [ 'ldap_settings' => [ 'Enable LDAP authentication' => true, - 'LDAP host' => 'ldap.forumsys.com', - 'Base DN' => 'dc=example,dc=com', + 'LDAP host' => 'ipa.demo1.freeipa.org', + 'Base DN' => 'cn=users,cn=accounts,dc=demo1,dc=freeipa,dc=org', 'Search attribute' => 'uid', - 'Bind password' => 'password' + 'Bind password' => 'Secret123' ], 'error' => 'Incorrect value for field "ldap_bind_dn": cannot be empty.' ] @@ -100,23 +100,23 @@ class testFormAdministrationAuthenticationLdap extends CWebTest { 'password' => 'zabbix', 'ldap_settings' => [ 'Enable LDAP authentication' => true, - 'LDAP host' => 'ldap.forumsys.com', + 'LDAP host' => 'ipa.demo1.freeipa.org', 'Port' => '389', - 'Base DN' => 'dc=example,dc=com', + 'Base DN' => 'cn=users,cn=accounts,dc=demo1,dc=freeipa,dc=org', 'Search attribute' => 'uid', - 'Bind DN' => 'cn=read-only-admin,dc=example,dc=com', + 'Bind DN' => 'uid=admin,cn=users,cn=accounts,dc=demo1,dc=freeipa,dc=org', 'Case-sensitive login' => true, - 'Bind password' => 'password', - 'Login' => 'galieleo', - 'User password' => 'password' + 'Bind password' => 'Secret123', + 'Login' => 'admin', + 'User password' => 'Secret123' ], 'db_check' => [ 'authentication_type' => '1', - 'ldap_host' => 'ldap.forumsys.com', + 'ldap_host' => 'ipa.demo1.freeipa.org', 'ldap_port' => '389', - 'ldap_base_dn' => 'dc=example,dc=com', - 'ldap_bind_dn' => 'cn=read-only-admin,dc=example,dc=com', - 'ldap_bind_password' => 'password', + 'ldap_base_dn' => 'cn=users,cn=accounts,dc=demo1,dc=freeipa,dc=org', + 'ldap_bind_dn' => 'uid=admin,cn=users,cn=accounts,dc=demo1,dc=freeipa,dc=org', + 'ldap_bind_password' => 'Secret123', 'ldap_search_attribute' => 'uid', 'http_auth_enabled' => '0', 'http_login_form' => '0', |