diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 166f96a2..69ccaf23 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -161,7 +161,7 @@ lint: test_node4: extends: - .run_unittest - image: ${ARTIFACTORY_DOCKER_HUB}/node:4 + image: ${ARTIFACTORY_DOCKER_HUB}/node:4.8.0 # just in case, unittests only (without coverage check) test_node6: @@ -229,6 +229,7 @@ npm_audit: # run tests and check code coverage coverage: + image: ${ARTIFACTORY_DOCKER_HUB}/node:8.11.1 extends: - .test_job_definition script: diff --git a/CHANGELOG.md b/CHANGELOG.md index 06f5d9cc..2357fd7e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,27 @@ # Changelog Changes to this project are documented in this file. More detail and links can be found in the Telemetry Streaming [Document Revision History](https://clouddocs.f5.com/products/extensions/f5-telemetry-streaming/latest/revision-history.html). +## 1.31.0 +### Added +- TS-676: Add gRPC exporter to OpenTelemetry_Exporter (experimental feature) +- TS-678: Add new performance stats - 'system.connectionsPerformance' +- TS-681: Generic_HTTP consumer should allow to tune transport options (experimental feature) +- TS-682: Add 'compressionType' option to Generic_HTTP consumer +- TS-684: DataDog consumer should support proxy configuration +- TS-686: DataDog consumer should split huge payload into smaller chunks according to API docs +- TS-688: DataDog consumer should allow to tune transport options (experimental feature) +- TS-690: Add OpenTelemetry_Exporter raw JSON output +- TS-693: Add secure connection settings to OpenTelemetry_Exporter (experimental feature) +### Fixed +- TS-687: DataDog consumer should send correct timestamp value +- TS-670: [GitHub #209](https://github.com/F5Networks/f5-telemetry-streaming/issues/209) OpenTelemetry_Exporter should set correct 'timestamp' +### Changed +- TS-669: OpenTelemetry updated to version 0.31.0 +- TS-672: Update npm packages (@grpc/proto-loader from 0.6.12 to 0.7.0, eventemitter2 from 6.4.5 to 6.4.7) +- TS-680: 'system.throughputPerformance' in System Poller's default output should match output example in "examples" directory +- TS-685: DataDog consumer should use API v2 for to send data +### Removed + ## 1.30.0 ### Added ### Fixed diff --git a/SUPPORT.md b/SUPPORT.md index 4f3a91c6..9cf78cce 100644 --- a/SUPPORT.md +++ b/SUPPORT.md @@ -17,9 +17,10 @@ Currently supported versions: | Software Version | Release Type | First Customer Ship | End of Support | |------------------|---------------|---------------------|-----------------| -| TS 1.28.0 | Feature | 19-Apr-2022 | 19-Jul-2022 | +| TS 1.27.1 | LTS | 19-Apr-2022 | 19-Apr-2023 | | TS 1.29.0 | Feature | 31-May-2022 | 31-Aug-2022 | | TS 1.30.0 | Feature | 15-Jul-2022 | 15-Oct-2022 | +| TS 1.31.0 | Feature | 23-Aug-2022 | 23-Nov-2022 | Versions no longer supported: @@ -53,6 +54,6 @@ Versions no longer supported: | TS 1.25.0 | Feature | 14-Dec-2021 | 14-Mar-2022 | | TS 1.26.0 | Feature | 25-Jan-2022 | 25-Apr-2022 | | TS 1.27.0 | Feature | 08-Mar-2022 | 08-Jun-2022 | -| TS 1.27.1 | LTS | 19-Apr-2022 | 19-Apr-2023 | +| TS 1.28.0 | Feature | 19-Apr-2022 | 19-Jul-2022 | See the [Release notes](https://github.com/F5Networks/f5-telemetry-streaming/releases) and [Telemetry Streaming documentation](https://clouddocs.f5.com/products/extensions/f5-telemetry-streaming/latest/revision-history.html) for new features and issues resolved for each release. diff --git a/contributing/README.md b/contributing/README.md index 263ec792..10049907 100644 --- a/contributing/README.md +++ b/contributing/README.md @@ -108,7 +108,7 @@ How does the project handle a typical `POST` request? "trace": false, "format": "default" }, - "schemaVersion": "1.30.0" + "schemaVersion": "1.31.0" } } ``` diff --git a/contributing/process_release.md b/contributing/process_release.md index 73c7097e..41f0a62b 100644 --- a/contributing/process_release.md +++ b/contributing/process_release.md @@ -66,6 +66,7 @@ * 1.28.0 - 17.7 MB * 1.29.0 - 17.8 MB * 1.30.0 - 16.0 MB + * 1.31.0 - 20.5 MB (NOTE: inclusion of OpenTelemetry and grpc-js libraries) * Install build to BIG-IP, navigate to folder `/var/config/rest/iapps/f5-telemetry/` and check following: * Run `du -sh` and check that folder's size (shouldn't be much greater than previous versions): * 1.4.0 - 65 MB @@ -95,6 +96,7 @@ * 1.28.0 - 127 MB * 1.29.0 - 129 MB * 1.30.0 - 116 MB + * 1.31.0 - 153 MB (NOTE: inclusion of OpenTelemetry and grpc-js libraries) * Check `node_modules` folder - if you see `eslint`, `mocha` or something else from [package.json](package.json) `devDependencies` section - something wrong with build process. Probably some `npm` flags are work as not expected and it MUST BE FIXED before publishing. * Ensure that all tests (unit tests and functional tests passed) * Optional: Ensure that your local tags match remote. If not, remove all and re-fetch: diff --git a/detailed_information.md b/detailed_information.md index ddca5830..1061b7ee 100644 --- a/detailed_information.md +++ b/detailed_information.md @@ -969,6 +969,233 @@ Note: available only when `debug` is turned on. "name": "urldb", "level": "none" } + }, + "throughputPerformance": { + "clientBitsIn": { + "average": 0, + "current": 0, + "max": 0, + "name": "clientBitsIn" + }, + "clientBitsOut": { + "average": 0, + "current": 0, + "max": 0, + "name": "clientBitsOut" + }, + "clientIn": { + "average": 0, + "current": 0, + "max": 0, + "name": "clientIn" + }, + "clientOut": { + "average": 0, + "current": 0, + "max": 0, + "name": "clientOut" + }, + "compression": { + "average": 0, + "current": 0, + "max": 0, + "name": "compression" + }, + "inBits": { + "average": 0, + "current": 0, + "max": 0, + "name": "inBits" + }, + "inPackets": { + "average": 0, + "current": 0, + "max": 0, + "name": "inPackets" + }, + "managementBitsIn": { + "average": 2969820, + "current": 846485, + "max": 36591317, + "name": "managementBitsIn" + }, + "managementBitsOut": { + "average": 133, + "current": 0, + "max": 12478, + "name": "managementBitsOut" + }, + "outBits": { + "average": 0, + "current": 0, + "max": 0, + "name": "outBits" + }, + "outPackets": { + "average": 0, + "current": 0, + "max": 0, + "name": "outPackets" + }, + "serverBitsIn": { + "average": 0, + "current": 0, + "max": 0, + "name": "serverBitsIn" + }, + "serverBitsOut": { + "average": 0, + "current": 0, + "max": 0, + "name": "serverBitsOut" + }, + "serverIn": { + "average": 0, + "current": 0, + "max": 0, + "name": "serverIn" + }, + "serverOut": { + "average": 0, + "current": 0, + "max": 0, + "name": "serverOut" + }, + "serviceBits": { + "average": 0, + "current": 0, + "max": 0, + "name": "serviceBits" + }, + "servicePackets": { + "average": 0, + "current": 0, + "max": 0, + "name": "servicePackets" + }, + "sslTps": { + "average": 0, + "current": 0, + "max": 0, + "name": "sslTps" + } + }, + "connectionsPerformance": { + "blade1": { + "average": 0, + "current": 0, + "max": 0, + "name": "blade1" + }, + "blade2": { + "average": 0, + "current": 0, + "max": 0, + "name": "blade2" + }, + "client": { + "average": 0, + "current": 0, + "max": 0, + "name": "client" + }, + "clientAccepts": { + "average": 0, + "current": 0, + "max": 0, + "name": "clientAccepts" + }, + "clientConnections": { + "average": 0, + "current": 0, + "max": 0, + "name": "clientConnections" + }, + "clientConnects": { + "average": 0, + "current": 0, + "max": 0, + "name": "clientConnects" + }, + "connections": { + "average": 0, + "current": 0, + "max": 0, + "name": "connections" + }, + "httpRequests": { + "average": 0, + "current": 0, + "max": 0, + "name": "httpRequests" + }, + "pvaClient": { + "average": 0, + "current": 0, + "max": 0, + "name": "pvaClient" + }, + "pvaServer": { + "average": 0, + "current": 0, + "max": 0, + "name": "pvaServer" + }, + "server": { + "average": 0, + "current": 0, + "max": 0, + "name": "server" + }, + "serverConnections": { + "average": 0, + "current": 0, + "max": 0, + "name": "serverConnections" + }, + "activeSslClientConnections": { + "average": 0, + "current": 0, + "max": 0, + "name": "activeSslClientConnections" + }, + "newSslClientConnections": { + "average": 0, + "current": 0, + "max": 0, + "name": "newSslClientConnections" + }, + "activeSslServerConnections": { + "average": 0, + "current": 0, + "max": 0, + "name": "activeSslServerConnections" + }, + "newSslServerConnections": { + "average": 0, + "current": 0, + "max": 0, + "name": "newSslServerConnections" + }, + "serverNewConnections": { + "average": 0, + "current": 0, + "max": 0, + "name": "serverNewConnections" + }, + "serverNewTcpConnections": { + "average": 0, + "current": 0, + "max": 0, + "name": "serverNewTcpConnections" + } + }, + "asmAttackSignatures": { + "ff8080817a3a4908017a3a490958000e": { + "filename": "ASM-AttackSignatures_20190716_122131.im", + "createDateTime": 1563279691000, + "name": "ff8080817a3a4908017a3a490958000e" + } } }, "virtualServers": { diff --git a/docs/conf.py b/docs/conf.py index 9692c002..0a7624fc 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -79,7 +79,7 @@ # The short X.Y version. version = u'' # The full version, including alpha/beta/rc tags. -release = u'1.30.0' +release = u'1.31.0' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/docs/output-example.rst b/docs/output-example.rst index 8c3dc34b..16c9321d 100644 --- a/docs/output-example.rst +++ b/docs/output-example.rst @@ -52,6 +52,9 @@ The following properties were introduced in recent Telemetry Streaming versions. - System - **asmAttackSignatures**, which shows ASM attack signature information. + * - 1.31 + - System + - **system.connectionsPerformance**, shows performance stats. .. literalinclude:: ../examples/output/system_poller/output.json diff --git a/docs/setting-up-consumer.rst b/docs/setting-up-consumer.rst index 04426a35..d0b0a48e 100644 --- a/docs/setting-up-consumer.rst +++ b/docs/setting-up-consumer.rst @@ -627,8 +627,15 @@ The following items have been added to the Generic HTTP consumer since it was in - **outputMode** - Possible values: **raw**, **processed**. OutputMode provides the options to send data with the Generic HTTP consumer in an "as-is" (**raw**) format instead of the generated JSON payload (**processed**) allowing the data to be sent in Line Protocol format to a raw event listener and have it forwarded through the Generic HTTP consumer. -| + * - 1.31 + - **compressionType** + - Sets the type of compression. The acceptable values are none for no compression (the default), or gzip, where the payload will be compressed using gzip. + + * - + - **customOpts** experimental + - This experimental feature relies on Node.js for each value when the user specifies nothing in **customOpts**. Node.js values may differ based on version used. Refer to node.js documentation for more information. +| **IMPORTANT**: The following declaration includes the additional properties shown in the table. If you attempt to use this declaration on a previous version, it will fail. On previous versions, remove the highlighted line(s), and the comma from the previous line. Example Declaration: @@ -870,6 +877,13 @@ DataDog Required Information: - apiKey: The DataDog API key required to submit metrics and events to DataDog +Optional Properties: + - proxy: Proxy server configuration + +Additional examples for HTTP consumers: + - DataDog with proxy settings in TS 1.31 and later, see :ref:`proxy`. + + Additions to the DataDog consumer ````````````````````````````````` The following items have been added to the DataDog consumer since it was introduced. @@ -906,6 +920,9 @@ The following items have been added to the DataDog consumer since it was introdu - **customTags** - This property allows you to add custom tags that are appended to the dynamically generated telemetry tags. You specify tags as an array of **name** and **value** pairs. You can set more than one tag in a declaration, but if you use this property, you must specify at least one custom tag. + * - 1.31 + - **customOpts** experimental + - This experimental feature relies on Node.js for each value when the user specifies nothing in **customOpts**. Node.js values may differ based on version used. Refer to node.js documentation for more information. **IMPORTANT**: The following declaration includes all of the additional properties shown in the table. If you attempt to use this declaration on a previous version, it will fail. On previous versions, remove the lines highlighted in yellow (and the comma from line 7). @@ -938,6 +955,9 @@ Required Information: Optional Properties: - metricsPath: The URL path to send metrics telemetry to - headers: Any required HTTP headers, required to send metrics telemetry to an OpenTelemetry Protocol compatible API + - Protocol: The protocol of the system. Note: **protocol** is allowed only when **exporter** is **json** or **protobuf**. When **exporter** is **grpc** then **useSSL** can be specified. + **privateKey**, **clientCertificate**, **rootCertificate** allowed for any **exporter** but only when **protocol** is **https** or **useSSL** set to ``true``. + Note: As of Telemetry Streaming 1.23, this consumer: - Only exports OpenTelemetry metrics (logs and traces are not supported) @@ -961,6 +981,29 @@ The following items have been added to the OpenTelemetry consumer since it was i - **convertBooleansToMetrics** - This property allows you to choose whether or not to convert boolean values to metrics (true becomes 1, false (default0) becomes 0). |br| By default, Telemetry Streaming uses Boolean values as tag values that are attached to individual metrics. If **convertBooleansToMetrics** is set to **true**, any Boolean values are instead converted to numeric values, which are then sent to the consumer(s) as a metric. |br| Note: Telemetry Streaming does not send a Boolean as both a tag and a metric; a Boolean value is sent to the consumer(s) as either a tag or as a metric. + * - 1.31 + - **exporter** + - **exporter** allowed values: **grpc**, **json** and **protobuf**. Default is **protobuf**, while **grpc** is experimental. Note: When **exporter** is **grpc**, then **useSSL** can be specified. + + * - + - **privateKey** + - This and the following properties provide the ability to add TLS client authentication using the **TLS** authentication protocol. This protocol configures Telemetry Streaming to provide the required private key and certificate(s) when the consumer is configured to use SSL/TLS Client authentication. |br| |br| **privateKey** is the Private Key for the SSL certificate. Must be formatted as a 1-line string, with literal new line characters. + + * - + - **clientCertificate** + - The client certificate chain. Must be formatted as a 1-line string, with literal new line characters. + + * - + - **rootCertificate** + - The Certificate Authority root certificate, used to validate the client certificate. Certificate verification can be disabled by setting allowSelfSignedCert=true. Must be formatted as a 1-line string, with literal new line characters. + + * - + - **Protocol** + - The protocol of the system. + + * - + - **useSSL** + - To ensure the data that is transferred between a client and a server remains private. **IMPORTANT**: The following declaration includes all of the additional properties shown in the table. If you attempt to use this declaration on a previous version, it will fail. On previous versions, remove the highlighted line. diff --git a/examples/declarations/data_dog.json b/examples/declarations/data_dog.json index 06b3f185..e24ef4b2 100644 --- a/examples/declarations/data_dog.json +++ b/examples/declarations/data_dog.json @@ -1,6 +1,6 @@ { "class": "Telemetry", - "My_Consumer": { + "DataDog": { "class": "Telemetry_Consumer", "type": "DataDog", "apiKey": "api_key", @@ -15,5 +15,74 @@ "value": "instance-1" } ] + }, + "DataDog_With_Proxy_Minimal": { + "class": "Telemetry_Consumer", + "type": "DataDog", + "apiKey": "api_key", + "compressionType": "gzip", + "region": "US1", + "service": "f5-telemetry", + "metricPrefix": ["f5", "bigip"], + "convertBooleansToMetrics": true, + "customTags": [ + { + "name": "instanceId", + "value": "instance-1" + } + ], + "proxy": { + "host": "10.10.14.15", + "port": 5054, + "protocol": "http" + } + }, + "DataDog_With_Proxy_Full": { + "class": "Telemetry_Consumer", + "type": "DataDog", + "apiKey": "api_key", + "compressionType": "gzip", + "region": "US1", + "service": "f5-telemetry", + "metricPrefix": ["f5", "bigip"], + "convertBooleansToMetrics": true, + "customTags": [ + { + "name": "instanceId", + "value": "instance-1" + } + ], + "proxy": { + "host": "10.10.14.14", + "port": 5053, + "protocol": "http", + "username": "someuser", + "passphrase": { + "cipherText": "somepassphrase" + }, + "allowSelfSignedCert": true + } + }, + "DataDog_HTTP_tune": { + "class": "Telemetry_Consumer", + "type": "DataDog", + "apiKey": "api_key", + "compressionType": "gzip", + "region": "US1", + "service": "f5-telemetry", + "metricPrefix": ["f5", "bigip"], + "convertBooleansToMetrics": true, + "customTags": [ + { + "name": "instanceId", + "value": "instance-1" + } + ], + "customOpts": [ + { "name": "keepAlive", "value": true }, + { "name": "keepAliveMsecs", "value": 30000 }, + { "name": "maxSockets", "value": 30 }, + { "name": "maxFreeSockets", "value": 30 } + ] } } diff --git a/examples/declarations/generic_http.json b/examples/declarations/generic_http.json index 0801fa5d..41b5cfaa 100644 --- a/examples/declarations/generic_http.json +++ b/examples/declarations/generic_http.json @@ -21,6 +21,13 @@ "passphrase": { "cipherText": "apikey" }, - "outputMode": "processed" + "outputMode": "processed", + "compressionType": "gzip", + "customOpts": [ + { "name": "keepAlive", "value": true }, + { "name": "keepAliveMsecs", "value": 30000 }, + { "name": "maxSockets", "value": 30 }, + { "name": "maxFreeSockets", "value": 30 } + ] } } diff --git a/examples/declarations/open_telemetry_exporter.json b/examples/declarations/open_telemetry_exporter.json index 9b87f0ac..88938fa6 100644 --- a/examples/declarations/open_telemetry_exporter.json +++ b/examples/declarations/open_telemetry_exporter.json @@ -1,6 +1,6 @@ { "class": "Telemetry", - "My_Consumer": { + "OpenTelemetry_Protobuf_Default": { "class": "Telemetry_Consumer", "type": "OpenTelemetry_Exporter", "host": "192.0.2.1", @@ -13,5 +13,188 @@ } ], "convertBooleansToMetrics": false + }, + "OpenTelemetry_Protobuf": { + "class": "Telemetry_Consumer", + "type": "OpenTelemetry_Exporter", + "host": "192.0.2.1", + "port": 55681, + "metricsPath": "/v1/metrics", + "headers": [ + { + "name": "x-access-token", + "value": "YOUR_TOKEN" + } + ], + "convertBooleansToMetrics": false, + "exporter": "protobuf" + }, + "OpenTelemetry_Protobuf_secure": { + "class": "Telemetry_Consumer", + "type": "OpenTelemetry_Exporter", + "host": "192.0.2.1", + "port": 55681, + "protocol": "https", + "headers": [ + { + "name": "x-access-token", + "value": "YOUR_TOKEN" + } + ], + "convertBooleansToMetrics": false, + "exporter": "protobuf" + }, + "OpenTelemetry_Protobuf_secure_withClientCert_and_rootCert": { + "class": "Telemetry_Consumer", + "type": "OpenTelemetry_Exporter", + "host": "192.0.2.1", + "port": 55681, + "protocol": "https", + "headers": [ + { + "name": "x-access-token", + "value": "YOUR_TOKEN" + } + ], + "convertBooleansToMetrics": false, + "exporter": "protobuf", + "privateKey": { + "cipherText": "-----BEGIN PRIVATE KEY-----\nMIIE...\n-----END PRIVATE KEY-----" + }, + "clientCertificate": { + "cipherText": "-----BEGIN CERTIFICATE-----\nMIID...\n-----END CERTIFICATE-----" + }, + "rootCertificate": { + "cipherText": "-----BEGIN CERTIFICATE-----\nMIID...\n-----END CERTIFICATE-----" + } + }, + "OpenTelemetry_Json": { + "class": "Telemetry_Consumer", + "type": "OpenTelemetry_Exporter", + "host": "192.0.2.1", + "port": 55681, + "metricsPath": "/v1/metrics", + "headers": [ + { + "name": "x-access-token", + "value": "YOUR_TOKEN" + } + ], + "convertBooleansToMetrics": false, + "exporter": "json" + }, + "OpenTelemetry_Json_secure": { + "class": "Telemetry_Consumer", + "type": "OpenTelemetry_Exporter", + "host": "192.0.2.1", + "port": 55681, + "protocol": "https", + "headers": [ + { + "name": "x-access-token", + "value": "YOUR_TOKEN" + } + ], + "convertBooleansToMetrics": false, + "exporter": "json" + }, + "OpenTelemetry_Json_secure_withClientCert_and_rootCert": { + "class": "Telemetry_Consumer", + "type": "OpenTelemetry_Exporter", + "host": "192.0.2.1", + "port": 55681, + "protocol": "https", + "headers": [ + { + "name": "x-access-token", + "value": "YOUR_TOKEN" + } + ], + "convertBooleansToMetrics": false, + "exporter": "json", + "privateKey": { + "cipherText": "-----BEGIN PRIVATE KEY-----\nMIIE...\n-----END PRIVATE KEY-----" + }, + "clientCertificate": { + "cipherText": "-----BEGIN CERTIFICATE-----\nMIID...\n-----END CERTIFICATE-----" + }, + "rootCertificate": { + "cipherText": "-----BEGIN CERTIFICATE-----\nMIID...\n-----END CERTIFICATE-----" + } + }, + "OpenTelemetry_gRPC_insecure": { + "class": "Telemetry_Consumer", + "type": "OpenTelemetry_Exporter", + "host": "192.0.2.1", + "port": 55681, + "headers": [ + { + "name": "x-access-token", + "value": "YOUR_TOKEN" + } + ], + "convertBooleansToMetrics": false, + "exporter": "grpc", + "useSSL": false + }, + "OpenTelemetry_gRPC_secure": { + "class": "Telemetry_Consumer", + "type": "OpenTelemetry_Exporter", + "host": "192.0.2.1", + "port": 55681, + "headers": [ + { + "name": "x-access-token", + "value": "YOUR_TOKEN" + } + ], + "convertBooleansToMetrics": false, + "exporter": "grpc", + "useSSL": true + }, + "OpenTelemetry_gRPC_secure_withClientCert": { + "class": "Telemetry_Consumer", + "type": "OpenTelemetry_Exporter", + "host": "192.0.2.1", + "port": 55681, + "headers": [ + { + "name": "x-access-token", + "value": "YOUR_TOKEN" + } + ], + "convertBooleansToMetrics": false, + "exporter": "grpc", + "useSSL": true, + "privateKey": { + "cipherText": "-----BEGIN PRIVATE KEY-----\nMIIE...\n-----END PRIVATE KEY-----" + }, + "clientCertificate": { + "cipherText": "-----BEGIN CERTIFICATE-----\nMIID...\n-----END CERTIFICATE-----" + } + }, + "OpenTelemetry_gRPC_secure_withClientCert_and_rootCert": { + "class": "Telemetry_Consumer", + "type": "OpenTelemetry_Exporter", + "host": "192.0.2.1", + "port": 55681, + "headers": [ + { + "name": "x-access-token", + "value": "YOUR_TOKEN" + } + ], + "convertBooleansToMetrics": false, + "exporter": "grpc", + "useSSL": true, + "privateKey": { + "cipherText": "-----BEGIN PRIVATE KEY-----\nMIIE...\n-----END PRIVATE KEY-----" + }, + "clientCertificate": { + "cipherText": "-----BEGIN CERTIFICATE-----\nMIID...\n-----END CERTIFICATE-----" + }, + "rootCertificate": { + "cipherText": "-----BEGIN CERTIFICATE-----\nMIID...\n-----END CERTIFICATE-----" + } } } \ No newline at end of file diff --git a/examples/output/system_poller/output.json b/examples/output/system_poller/output.json index 76689789..f2899771 100644 --- a/examples/output/system_poller/output.json +++ b/examples/output/system_poller/output.json @@ -392,6 +392,116 @@ "name": "sslTps" } }, + "connectionsPerformance": { + "blade1": { + "average": 0, + "current": 0, + "max": 0, + "name": "blade1" + }, + "blade2": { + "average": 0, + "current": 0, + "max": 0, + "name": "blade2" + }, + "client": { + "average": 0, + "current": 0, + "max": 0, + "name": "client" + }, + "clientAccepts": { + "average": 0, + "current": 0, + "max": 0, + "name": "clientAccepts" + }, + "clientConnections": { + "average": 0, + "current": 0, + "max": 0, + "name": "clientConnections" + }, + "clientConnects": { + "average": 0, + "current": 0, + "max": 0, + "name": "clientConnects" + }, + "connections": { + "average": 0, + "current": 0, + "max": 0, + "name": "connections" + }, + "httpRequests": { + "average": 0, + "current": 0, + "max": 0, + "name": "httpRequests" + }, + "pvaClient": { + "average": 0, + "current": 0, + "max": 0, + "name": "pvaClient" + }, + "pvaServer": { + "average": 0, + "current": 0, + "max": 0, + "name": "pvaServer" + }, + "server": { + "average": 0, + "current": 0, + "max": 0, + "name": "server" + }, + "serverConnections": { + "average": 0, + "current": 0, + "max": 0, + "name": "serverConnections" + }, + "activeSslClientConnections": { + "average": 0, + "current": 0, + "max": 0, + "name": "activeSslClientConnections" + }, + "newSslClientConnections": { + "average": 0, + "current": 0, + "max": 0, + "name": "newSslClientConnections" + }, + "activeSslServerConnections": { + "average": 0, + "current": 0, + "max": 0, + "name": "activeSslServerConnections" + }, + "newSslServerConnections": { + "average": 0, + "current": 0, + "max": 0, + "name": "newSslServerConnections" + }, + "serverNewConnections": { + "average": 0, + "current": 0, + "max": 0, + "name": "serverNewConnections" + }, + "serverNewTcpConnections": { + "average": 0, + "current": 0, + "max": 0, + "name": "serverNewTcpConnections" + } + }, "asmAttackSignatures": { "ff8080817a3a4908017a3a490958000e": { "filename": "ASM-AttackSignatures_20190716_122131.im", diff --git a/package-lock.json b/package-lock.json index 56fc7303..9dd3742a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "f5-telemetry", - "version": "1.30.0-1", + "version": "1.31.0-2", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -984,9 +984,9 @@ } }, "globals": { - "version": "13.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", - "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -1068,18 +1068,237 @@ "uuid": "^3.4.0" } }, + "@grpc/grpc-js": { + "version": "1.6.9", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.6.9.tgz", + "integrity": "sha512-01Dy1wqXVsuiMI4m4tDoX+IPYAeNI8EsfNFPqAJBX4OiCSs5VU8Gw0pJq5NhGizH6nKUprmHb/QvxTq3d1xL5g==", + "requires": { + "@grpc/proto-loader": "^0.7.0", + "@types/node": ">=12.12.47" + } + }, "@grpc/proto-loader": { - "version": "0.6.12", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.12.tgz", - "integrity": "sha512-filTVbETFnxb9CyRX98zN18ilChTuf/C5scZ2xyaOTp0EHGq0/ufX8rjqXUcSb1Gpv7eZq4M2jDvbh9BogKnrg==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.0.tgz", + "integrity": "sha512-SGPZtVmqOvNfPFOA/nNPn+0Weqa5wubBgQ56+JgTbeLY2VezwtMjwPPFzh0kvQccwWT3a2TXT0ZGK/pJoOTk1A==", "requires": { "@types/long": "^4.0.1", "lodash.camelcase": "^4.3.0", "long": "^4.0.0", - "protobufjs": "^6.10.0", + "protobufjs": "^7.0.0", "yargs": "^16.2.0" }, "dependencies": { + "protobufjs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.0.0.tgz", + "integrity": "sha512-ffNIEm+quOcYtQvHdW406v1NQmZSuqVklxsXk076BtuFnlYZfigLU+JOMrTD8TUOyqHYbRI/fSVNvgd25YeN3w==", + "requires": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.1", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "dependencies": { + "long": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.0.tgz", + "integrity": "sha512-9RTUNjK60eJbx3uz+TEGF7fUr29ZDxR5QzXcyDpeSfeH28S9ycINflOgOlppit5U+4kNTe83KQnMEerw7GmE8w==" + } + } + } + } + }, + "@humanwhocodes/config-array": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", + "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/gitignore-to-minimatch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", + "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@opentelemetry/api": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.1.0.tgz", + "integrity": "sha512-hf+3bwuBwtXsugA2ULBc95qxrOqP2pOekLz34BJhcAKawt94vfeNyUKpYc0lZQ/3sCP6LqRa7UAdHA7i5UODzQ==" + }, + "@opentelemetry/api-metrics": { + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-metrics/-/api-metrics-0.31.0.tgz", + "integrity": "sha512-PcL1x0kZtMie7NsNy67OyMvzLEXqf3xd0TZJKHHPMGTe89oMpNVrD1zJB1kZcwXOxLlHHb6tz21G3vvXPdXyZg==", + "requires": { + "@opentelemetry/api": "^1.0.0" + } + }, + "@opentelemetry/core": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.5.0.tgz", + "integrity": "sha512-B3DIMkQN0DANrr7XrMLS4pR6d2o/jqT09x4nZJz6wSJ9SHr4eQIqeFBNeEUQG1I+AuOcH2UbJtgFm7fKxLqd+w==", + "requires": { + "@opentelemetry/semantic-conventions": "1.5.0" + } + }, + "@opentelemetry/exporter-metrics-otlp-grpc": { + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-grpc/-/exporter-metrics-otlp-grpc-0.31.0.tgz", + "integrity": "sha512-Tw/CDgejZPkbyGNcGGjC71fUBO1d+Ho7LBRkght25E2qWbZCUXXEh/cNkh8aoztbtwnrf7EVSHh6XDP3lcxvGA==", + "requires": { + "@grpc/grpc-js": "^1.5.9", + "@grpc/proto-loader": "^0.6.9", + "@opentelemetry/core": "1.5.0", + "@opentelemetry/exporter-metrics-otlp-http": "0.31.0", + "@opentelemetry/otlp-grpc-exporter-base": "0.31.0", + "@opentelemetry/otlp-transformer": "0.31.0", + "@opentelemetry/resources": "1.5.0", + "@opentelemetry/sdk-metrics-base": "0.31.0" + }, + "dependencies": { + "@grpc/proto-loader": { + "version": "0.6.13", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.13.tgz", + "integrity": "sha512-FjxPYDRTn6Ec3V0arm1FtSpmP6V50wuph2yILpyvTKzjc76oDdoihXqM1DzOW5ubvCC8GivfCnNtfaRE8myJ7g==", + "requires": { + "@types/long": "^4.0.1", + "lodash.camelcase": "^4.3.0", + "long": "^4.0.0", + "protobufjs": "^6.11.3", + "yargs": "^16.2.0" + } + } + } + }, + "@opentelemetry/exporter-metrics-otlp-http": { + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-http/-/exporter-metrics-otlp-http-0.31.0.tgz", + "integrity": "sha512-N8bVdmXwyI9LZUl9LdaKuxK6iQhCHoUeaLrFXvwqeq8y6ZInney+PQohtoguz5IpWRMOrR17IlHtvJp7w6TNFA==", + "requires": { + "@opentelemetry/api-metrics": "0.31.0", + "@opentelemetry/core": "1.5.0", + "@opentelemetry/otlp-exporter-base": "0.31.0", + "@opentelemetry/otlp-transformer": "0.31.0", + "@opentelemetry/resources": "1.5.0", + "@opentelemetry/sdk-metrics-base": "0.31.0" + } + }, + "@opentelemetry/exporter-metrics-otlp-proto": { + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-proto/-/exporter-metrics-otlp-proto-0.31.0.tgz", + "integrity": "sha512-dbsKiH16UY8y2MaHZMLqRUlYmAQvhlywLTYCv08NNECzwL6o3kSAbmeC2rVDLw1kcMANdRzFnX9FVLZucvOYug==", + "requires": { + "@grpc/proto-loader": "0.6.9", + "@opentelemetry/core": "1.5.0", + "@opentelemetry/exporter-metrics-otlp-http": "0.31.0", + "@opentelemetry/otlp-exporter-base": "0.31.0", + "@opentelemetry/otlp-proto-exporter-base": "0.31.0", + "@opentelemetry/otlp-transformer": "0.31.0", + "@opentelemetry/resources": "1.5.0", + "@opentelemetry/sdk-metrics-base": "0.31.0", + "protobufjs": "^6.9.0" + }, + "dependencies": { + "@grpc/proto-loader": { + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.9.tgz", + "integrity": "sha512-UlcCS8VbsU9d3XTXGiEVFonN7hXk+oMXZtoHHG2oSA1/GcDP1q6OUgs20PzHDGizzyi8ufGSUDlk3O2NyY7leg==", + "requires": { + "@types/long": "^4.0.1", + "lodash.camelcase": "^4.3.0", + "long": "^4.0.0", + "protobufjs": "^6.10.0", + "yargs": "^16.2.0" + } + }, + "@opentelemetry/api-metrics": { + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-metrics/-/api-metrics-0.31.0.tgz", + "integrity": "sha512-PcL1x0kZtMie7NsNy67OyMvzLEXqf3xd0TZJKHHPMGTe89oMpNVrD1zJB1kZcwXOxLlHHb6tz21G3vvXPdXyZg==", + "requires": { + "@opentelemetry/api": "^1.0.0" + } + }, + "@opentelemetry/core": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.5.0.tgz", + "integrity": "sha512-B3DIMkQN0DANrr7XrMLS4pR6d2o/jqT09x4nZJz6wSJ9SHr4eQIqeFBNeEUQG1I+AuOcH2UbJtgFm7fKxLqd+w==", + "requires": { + "@opentelemetry/semantic-conventions": "1.5.0" + } + }, + "@opentelemetry/resources": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.5.0.tgz", + "integrity": "sha512-YeEfC6IY54U3xL3P2+UAiom+r50ZF2jM0J47RV5uTFGF19Xjd5zazSwDPgmxtAd6DwLX0/5S5iqrsH4nEXMYoA==", + "requires": { + "@opentelemetry/core": "1.5.0", + "@opentelemetry/semantic-conventions": "1.5.0" + } + }, + "@opentelemetry/sdk-metrics-base": { + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics-base/-/sdk-metrics-base-0.31.0.tgz", + "integrity": "sha512-4R2Bjl3wlqIGcq4bCoI9/pD49ld+tEoM9n85UfFzr/aUe+2huY2jTPq/BP9SVB8d2Zfg7mGTIFeapcEvAdKK7g==", + "requires": { + "@opentelemetry/api-metrics": "0.31.0", + "@opentelemetry/core": "1.5.0", + "@opentelemetry/resources": "1.5.0", + "lodash.merge": "4.6.2" + } + }, + "@opentelemetry/semantic-conventions": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.5.0.tgz", + "integrity": "sha512-wlYG/U6ddW1ilXslnDLLQYJ8nd97W8JJTTfwkGhubx6dzW6SUkd+N4/MzTjjyZlrHQunxHtkHFvVpUKiROvFDw==" + }, "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -1180,125 +1399,204 @@ } } }, - "@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", - "dev": true, + "@opentelemetry/otlp-exporter-base": { + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.31.0.tgz", + "integrity": "sha512-MI+LtGo/ZYL/g7ldWTAY9vMjMqlcWMj2undgcnq8Y5BoDLI8oBwGn//Lizjk4NikF+SkcolKB3+U05nCeT5djg==", "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@opentelemetry/api": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.1.0.tgz", - "integrity": "sha512-hf+3bwuBwtXsugA2ULBc95qxrOqP2pOekLz34BJhcAKawt94vfeNyUKpYc0lZQ/3sCP6LqRa7UAdHA7i5UODzQ==" - }, - "@opentelemetry/api-metrics": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api-metrics/-/api-metrics-0.27.0.tgz", - "integrity": "sha512-tB79288bwjkdhPNpw4UdOEy3bacVwtol6Que7cAu8KEJ9ULjRfSiwpYEwJY/oER3xZ7zNFz0uiJ7N1jSiotpVA==" - }, - "@opentelemetry/core": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.0.1.tgz", - "integrity": "sha512-90nQ2X6b/8X+xjcLDBYKooAcOsIlwLRYm+1VsxcX5cHl6V4CSVmDpBreQSDH/A21SqROzapk6813008SatmPpQ==", - "requires": { - "@opentelemetry/semantic-conventions": "1.0.1" + "@opentelemetry/core": "1.5.0" + }, + "dependencies": { + "@opentelemetry/core": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.5.0.tgz", + "integrity": "sha512-B3DIMkQN0DANrr7XrMLS4pR6d2o/jqT09x4nZJz6wSJ9SHr4eQIqeFBNeEUQG1I+AuOcH2UbJtgFm7fKxLqd+w==", + "requires": { + "@opentelemetry/semantic-conventions": "1.5.0" + } + }, + "@opentelemetry/semantic-conventions": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.5.0.tgz", + "integrity": "sha512-wlYG/U6ddW1ilXslnDLLQYJ8nd97W8JJTTfwkGhubx6dzW6SUkd+N4/MzTjjyZlrHQunxHtkHFvVpUKiROvFDw==" + } } }, - "@opentelemetry/exporter-metrics-otlp-http": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-http/-/exporter-metrics-otlp-http-0.27.0.tgz", - "integrity": "sha512-97eAPtA9po403CpNnd4n8HtEN6HbXwb05eUL5Jxaj70RSKAHBKjAFG4/Bk75DX3G+glHN5Gm/waMmcuBqFW5rA==", + "@opentelemetry/otlp-grpc-exporter-base": { + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.31.0.tgz", + "integrity": "sha512-TfNZsQhWNd05CAaOwgN2lVthC8mkxvoArV6LfSyKyqSZ6srCnYPuW64yS/9buEhNvTkT3y63dzkVSnnv/1b3ow==", "requires": { - "@opentelemetry/api-metrics": "0.27.0", - "@opentelemetry/core": "1.0.1", - "@opentelemetry/exporter-trace-otlp-http": "0.27.0", - "@opentelemetry/resources": "1.0.1", - "@opentelemetry/sdk-metrics-base": "0.27.0" - } - }, - "@opentelemetry/exporter-metrics-otlp-proto": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-proto/-/exporter-metrics-otlp-proto-0.27.0.tgz", - "integrity": "sha512-F0GRVwPtH5rdA17SbVoVn9R2ULuowIdOpih0f93btIGxeRxj2UGE4zwEJaq2PnWL6f/PBR3tM29J9qpc/1cEMw==", - "requires": { - "@grpc/proto-loader": "^0.6.4", - "@opentelemetry/core": "1.0.1", - "@opentelemetry/exporter-metrics-otlp-http": "0.27.0", - "@opentelemetry/exporter-trace-otlp-http": "0.27.0", - "@opentelemetry/exporter-trace-otlp-proto": "0.27.0", - "@opentelemetry/resources": "1.0.1", - "@opentelemetry/sdk-metrics-base": "0.27.0", - "protobufjs": "^6.9.0" + "@grpc/grpc-js": "^1.5.9", + "@grpc/proto-loader": "^0.6.9", + "@opentelemetry/core": "1.5.0", + "@opentelemetry/otlp-exporter-base": "0.31.0" + }, + "dependencies": { + "@grpc/proto-loader": { + "version": "0.6.13", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.13.tgz", + "integrity": "sha512-FjxPYDRTn6Ec3V0arm1FtSpmP6V50wuph2yILpyvTKzjc76oDdoihXqM1DzOW5ubvCC8GivfCnNtfaRE8myJ7g==", + "requires": { + "@types/long": "^4.0.1", + "lodash.camelcase": "^4.3.0", + "long": "^4.0.0", + "protobufjs": "^6.11.3", + "yargs": "^16.2.0" + } + } } }, - "@opentelemetry/exporter-trace-otlp-http": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.27.0.tgz", - "integrity": "sha512-ZE8Ns/GGW83E4igrby69shiqEkVo+cULzbm4DprSEMCWrPAL/NBobETFOiOQyBBBgIfrhi5EG6truUiafB1cMQ==", + "@opentelemetry/otlp-proto-exporter-base": { + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-proto-exporter-base/-/otlp-proto-exporter-base-0.31.0.tgz", + "integrity": "sha512-jb63BsOyR3BzCnePFgYK5gpuQoFnB7nZEbudkd6Q4bZ3fVSFO8xUcKhJ8q13EoOhQXiMEh5MDqEveFeyiy/B9A==", "requires": { - "@opentelemetry/core": "1.0.1", - "@opentelemetry/resources": "1.0.1", - "@opentelemetry/sdk-trace-base": "1.0.1" + "@grpc/proto-loader": "^0.6.9", + "@opentelemetry/core": "1.5.0", + "@opentelemetry/otlp-exporter-base": "0.31.0" + }, + "dependencies": { + "@grpc/proto-loader": { + "version": "0.6.13", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.13.tgz", + "integrity": "sha512-FjxPYDRTn6Ec3V0arm1FtSpmP6V50wuph2yILpyvTKzjc76oDdoihXqM1DzOW5ubvCC8GivfCnNtfaRE8myJ7g==", + "requires": { + "@types/long": "^4.0.1", + "lodash.camelcase": "^4.3.0", + "long": "^4.0.0", + "protobufjs": "^6.11.3", + "yargs": "^16.2.0" + } + }, + "@opentelemetry/core": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.5.0.tgz", + "integrity": "sha512-B3DIMkQN0DANrr7XrMLS4pR6d2o/jqT09x4nZJz6wSJ9SHr4eQIqeFBNeEUQG1I+AuOcH2UbJtgFm7fKxLqd+w==", + "requires": { + "@opentelemetry/semantic-conventions": "1.5.0" + } + }, + "@opentelemetry/semantic-conventions": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.5.0.tgz", + "integrity": "sha512-wlYG/U6ddW1ilXslnDLLQYJ8nd97W8JJTTfwkGhubx6dzW6SUkd+N4/MzTjjyZlrHQunxHtkHFvVpUKiROvFDw==" + } } }, - "@opentelemetry/exporter-trace-otlp-proto": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-proto/-/exporter-trace-otlp-proto-0.27.0.tgz", - "integrity": "sha512-Q1PlH9iR3RUiLDnSbKmaAdXEuquvI0oLIN1WW37tUyTuqK5BArPXMzcquQtX/aG+4T5I6IHzgCpZxiedhW42Wg==", + "@opentelemetry/otlp-transformer": { + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.31.0.tgz", + "integrity": "sha512-xCEsB0gTs7s/FMEv8+DWE6awfHJ5oHkFKSGePr6tT5Mh95rd1845WTefvLc++mYpewY8KnQ7tyo/zEfwywCIhw==", "requires": { - "@grpc/proto-loader": "^0.6.4", - "@opentelemetry/core": "1.0.1", - "@opentelemetry/exporter-trace-otlp-http": "0.27.0", - "@opentelemetry/resources": "1.0.1", - "@opentelemetry/sdk-trace-base": "1.0.1", - "protobufjs": "^6.9.0" + "@opentelemetry/api-metrics": "0.31.0", + "@opentelemetry/core": "1.5.0", + "@opentelemetry/resources": "1.5.0", + "@opentelemetry/sdk-metrics-base": "0.31.0", + "@opentelemetry/sdk-trace-base": "1.5.0" + }, + "dependencies": { + "@opentelemetry/api-metrics": { + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-metrics/-/api-metrics-0.31.0.tgz", + "integrity": "sha512-PcL1x0kZtMie7NsNy67OyMvzLEXqf3xd0TZJKHHPMGTe89oMpNVrD1zJB1kZcwXOxLlHHb6tz21G3vvXPdXyZg==", + "requires": { + "@opentelemetry/api": "^1.0.0" + } + }, + "@opentelemetry/core": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.5.0.tgz", + "integrity": "sha512-B3DIMkQN0DANrr7XrMLS4pR6d2o/jqT09x4nZJz6wSJ9SHr4eQIqeFBNeEUQG1I+AuOcH2UbJtgFm7fKxLqd+w==", + "requires": { + "@opentelemetry/semantic-conventions": "1.5.0" + } + }, + "@opentelemetry/resources": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.5.0.tgz", + "integrity": "sha512-YeEfC6IY54U3xL3P2+UAiom+r50ZF2jM0J47RV5uTFGF19Xjd5zazSwDPgmxtAd6DwLX0/5S5iqrsH4nEXMYoA==", + "requires": { + "@opentelemetry/core": "1.5.0", + "@opentelemetry/semantic-conventions": "1.5.0" + } + }, + "@opentelemetry/sdk-metrics-base": { + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics-base/-/sdk-metrics-base-0.31.0.tgz", + "integrity": "sha512-4R2Bjl3wlqIGcq4bCoI9/pD49ld+tEoM9n85UfFzr/aUe+2huY2jTPq/BP9SVB8d2Zfg7mGTIFeapcEvAdKK7g==", + "requires": { + "@opentelemetry/api-metrics": "0.31.0", + "@opentelemetry/core": "1.5.0", + "@opentelemetry/resources": "1.5.0", + "lodash.merge": "4.6.2" + } + }, + "@opentelemetry/semantic-conventions": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.5.0.tgz", + "integrity": "sha512-wlYG/U6ddW1ilXslnDLLQYJ8nd97W8JJTTfwkGhubx6dzW6SUkd+N4/MzTjjyZlrHQunxHtkHFvVpUKiROvFDw==" + } } }, "@opentelemetry/resources": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.0.1.tgz", - "integrity": "sha512-p8DevOaAEepPucUtImR4cZKHOE2L1jgQAtkdZporV+XnxPA/HqCHPEESyUVuo4f5M0NUlL6k5Pba75KwNJlTRg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.5.0.tgz", + "integrity": "sha512-YeEfC6IY54U3xL3P2+UAiom+r50ZF2jM0J47RV5uTFGF19Xjd5zazSwDPgmxtAd6DwLX0/5S5iqrsH4nEXMYoA==", "requires": { - "@opentelemetry/core": "1.0.1", - "@opentelemetry/semantic-conventions": "1.0.1" + "@opentelemetry/core": "1.5.0", + "@opentelemetry/semantic-conventions": "1.5.0" } }, "@opentelemetry/sdk-metrics-base": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics-base/-/sdk-metrics-base-0.27.0.tgz", - "integrity": "sha512-HpiWI4sVNsjp3FGyUlc24KvUY2Whl4PQVwcbA/gWv2kHaLQrDJrWC+3rjUR+87Mrd0nsiqJ85xhGFU6IK8h7gg==", + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics-base/-/sdk-metrics-base-0.31.0.tgz", + "integrity": "sha512-4R2Bjl3wlqIGcq4bCoI9/pD49ld+tEoM9n85UfFzr/aUe+2huY2jTPq/BP9SVB8d2Zfg7mGTIFeapcEvAdKK7g==", "requires": { - "@opentelemetry/api-metrics": "0.27.0", - "@opentelemetry/core": "1.0.1", - "@opentelemetry/resources": "1.0.1", - "lodash.merge": "^4.6.2" + "@opentelemetry/api-metrics": "0.31.0", + "@opentelemetry/core": "1.5.0", + "@opentelemetry/resources": "1.5.0", + "lodash.merge": "4.6.2" } }, "@opentelemetry/sdk-trace-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.0.1.tgz", - "integrity": "sha512-JVSAepTpW7dnqfV7XFN0zHj1jXGNd5OcvIGQl76buogqffdgJdgJWQNrOuUJaus56zrOtlzqFH+YtMA9RGEg8w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.5.0.tgz", + "integrity": "sha512-6lx7YDf67HSQYuWnvq3XgSrWikDJLiGCbrpUP6UWJ5Z47HLcJvwZPRH+cQGJu1DFS3dT2cV3GpAR75/OofPNHQ==", "requires": { - "@opentelemetry/core": "1.0.1", - "@opentelemetry/resources": "1.0.1", - "@opentelemetry/semantic-conventions": "1.0.1" + "@opentelemetry/core": "1.5.0", + "@opentelemetry/resources": "1.5.0", + "@opentelemetry/semantic-conventions": "1.5.0" + }, + "dependencies": { + "@opentelemetry/core": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.5.0.tgz", + "integrity": "sha512-B3DIMkQN0DANrr7XrMLS4pR6d2o/jqT09x4nZJz6wSJ9SHr4eQIqeFBNeEUQG1I+AuOcH2UbJtgFm7fKxLqd+w==", + "requires": { + "@opentelemetry/semantic-conventions": "1.5.0" + } + }, + "@opentelemetry/resources": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.5.0.tgz", + "integrity": "sha512-YeEfC6IY54U3xL3P2+UAiom+r50ZF2jM0J47RV5uTFGF19Xjd5zazSwDPgmxtAd6DwLX0/5S5iqrsH4nEXMYoA==", + "requires": { + "@opentelemetry/core": "1.5.0", + "@opentelemetry/semantic-conventions": "1.5.0" + } + }, + "@opentelemetry/semantic-conventions": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.5.0.tgz", + "integrity": "sha512-wlYG/U6ddW1ilXslnDLLQYJ8nd97W8JJTTfwkGhubx6dzW6SUkd+N4/MzTjjyZlrHQunxHtkHFvVpUKiROvFDw==" + } } }, "@opentelemetry/semantic-conventions": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.0.1.tgz", - "integrity": "sha512-7XU1sfQ8uCVcXLxtAHA8r3qaLJ2oq7sKtEwzZhzuEXqYmjW+n+J4yM3kNo0HQo3Xp1eUe47UM6Wy6yuAvIyllg==" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.5.0.tgz", + "integrity": "sha512-wlYG/U6ddW1ilXslnDLLQYJ8nd97W8JJTTfwkGhubx6dzW6SUkd+N4/MzTjjyZlrHQunxHtkHFvVpUKiROvFDw==" }, "@protobufjs/aspromise": { "version": "1.1.2", @@ -1794,44 +2092,21 @@ "lodash.flatmap": "~4.5.0" } }, - "@types/bytebuffer": { - "version": "5.0.42", - "resolved": "https://registry.npmjs.org/@types/bytebuffer/-/bytebuffer-5.0.42.tgz", - "integrity": "sha512-lEgKojWUAc/MG2t649oZS5AfYFP2xRNPoDuwDBlBMjHXd8MaGPgFgtCXUK7inZdBOygmVf10qxc1Us8GXC96aw==", - "dev": true, - "requires": { - "@types/long": "*", - "@types/node": "*" - } - }, "@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, - "@types/lodash": { - "version": "4.14.178", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.178.tgz", - "integrity": "sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw==", - "dev": true - }, "@types/long": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" }, "@types/node": { - "version": "9.6.61", - "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.61.tgz", - "integrity": "sha512-/aKAdg5c8n468cYLy2eQrcR5k6chlbNwZNGUj3TboyPa2hcO2QAJcfymlqPzMiRj8B6nYKXjzQz36minFE0RwQ==", - "dev": true - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true + "version": "18.6.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.3.tgz", + "integrity": "sha512-6qKpDtoaYLM+5+AFChLhHermMQxc3TOEFIDzrZLPRGHPrLEwqFkkT5Kx3ju05g6X7uDPazz3jHbKPX0KzCjntg==" }, "abort-controller": { "version": "3.0.0", @@ -1842,9 +2117,9 @@ } }, "acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", "dev": true }, "acorn-jsx": { @@ -1938,7 +2213,8 @@ "aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "optional": true }, "archy": { "version": "1.0.0", @@ -1950,6 +2226,7 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "optional": true, "requires": { "delegates": "^1.0.0", "readable-stream": "^2.0.6" @@ -2138,6 +2415,12 @@ } } }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, "array.prototype.flat": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", @@ -2324,16 +2607,6 @@ "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" }, - "ascli": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ascli/-/ascli-1.0.1.tgz", - "integrity": "sha1-vPpZdKYvGOgcq660lzKrSoj5Brw=", - "dev": true, - "requires": { - "colour": "~0.7.1", - "optjs": "~3.2.2" - } - }, "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", @@ -2586,23 +2859,6 @@ "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=" }, - "bytebuffer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/bytebuffer/-/bytebuffer-5.0.1.tgz", - "integrity": "sha1-WC7qSxqHO20CCkjVjfhfC7ps/d0=", - "dev": true, - "requires": { - "long": "~3" - }, - "dependencies": { - "long": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz", - "integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s=", - "dev": true - } - } - }, "caching-transform": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-3.0.2.tgz", @@ -2630,12 +2886,6 @@ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true - }, "caniuse-lite": { "version": "1.0.30001271", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001271.tgz", @@ -2720,7 +2970,8 @@ "chownr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "optional": true }, "cli-spinners": { "version": "2.6.1", @@ -2729,14 +2980,48 @@ "optional": true }, "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + } } }, "clone": { @@ -2776,13 +3061,7 @@ "colors": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", - "dev": true - }, - "colour": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/colour/-/colour-0.7.1.tgz", - "integrity": "sha1-nLFpkX7F0SwHNtPoaFdG3xyt93g=", + "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==", "dev": true }, "combined-stream": { @@ -2895,7 +3174,7 @@ "cycle": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", - "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=", + "integrity": "sha512-TVF6svNzeQCOpjCqsy0/CSy8VgObG3wXusJ73xW2GbG5rGx7lC8zxDSURicsXI2UsGdi2L0QNRCi745/wUDvsA==", "dev": true }, "dashdash": { @@ -2967,7 +3246,8 @@ "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "optional": true }, "deep-is": { "version": "0.1.4", @@ -3010,12 +3290,14 @@ "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "optional": true }, "detect-libc": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "optional": true }, "diagnostic-channel": { "version": "0.3.1", @@ -3036,6 +3318,23 @@ "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + }, + "dependencies": { + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + } + } + }, "doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -3160,13 +3459,14 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "eslint": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.16.0.tgz", - "integrity": "sha512-MBndsoXY/PeVTDJeWsYj7kLZ5hQpJOfMYLsF6LicLHQWbRDG19lK5jOix4DPl8yY4SUFcE3txy86OzFLWT+yoA==", + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.21.0.tgz", + "integrity": "sha512-/XJ1+Qurf1T9G2M5IHrsjp+xrGT73RZf23xA1z5wB1ZzzEAWSZKvRwhWxTFp1rvkvCfwcvAUNAP31bhKTTGfDA==", "dev": true, "requires": { "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.9.2", + "@humanwhocodes/config-array": "^0.10.4", + "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -3176,14 +3476,17 @@ "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.2", + "espree": "^9.3.3", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", "functional-red-black-tree": "^1.0.1", "glob-parent": "^6.0.1", "globals": "^13.15.0", + "globby": "^11.1.0", + "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", @@ -3272,6 +3575,16 @@ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, "glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -3293,9 +3606,9 @@ } }, "globals": { - "version": "13.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", - "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -3316,6 +3629,15 @@ "argparse": "^2.0.1" } }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -3325,6 +3647,30 @@ "brace-expansion": "^1.1.7" } }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -3529,12 +3875,12 @@ "dev": true }, "espree": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", - "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", + "version": "9.3.3", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz", + "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==", "dev": true, "requires": { - "acorn": "^8.7.1", + "acorn": "^8.8.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.3.0" } @@ -3581,9 +3927,9 @@ "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" }, "eventemitter2": { - "version": "6.4.5", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.5.tgz", - "integrity": "sha512-bXE7Dyc1i6oQElDG0jMRZJrRAn9QR2xyyFGmBdZleNmyQX0FqGYmhZIrIrpPfm/w//LTo4tVQGOGQcGCb5q9uw==" + "version": "6.4.7", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", + "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==" }, "events": { "version": "1.1.1", @@ -3695,7 +4041,7 @@ "eyes": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", - "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=", + "integrity": "sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==", "dev": true }, "fast-deep-equal": { @@ -3703,6 +4049,19 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, + "fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -3719,6 +4078,15 @@ "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz", "integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig==" }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, "file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -3853,9 +4221,9 @@ }, "dependencies": { "flatted": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", - "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", + "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", "dev": true }, "rimraf": { @@ -3945,15 +4313,6 @@ "universalify": "^0.1.0" } }, - "fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", - "dev": true, - "requires": { - "minipass": "^2.6.0" - } - }, "fs-monkey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", @@ -4174,6 +4533,7 @@ "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "optional": true, "requires": { "aproba": "^1.0.3", "console-control-strings": "^1.0.0", @@ -4297,6 +4657,20 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, "google-auth-library": { "version": "6.1.6", "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-6.1.6.tgz", @@ -4326,79 +4700,18 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, "growl": { "version": "1.10.5", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true }, - "grpc": { - "version": "1.24.7", - "resolved": "https://registry.npmjs.org/grpc/-/grpc-1.24.7.tgz", - "integrity": "sha512-AFWychfq60LBUrelOWgT5PWk05n98z7/C8qCgeNAJ4YvK8khVNSlbEHMLaCu7COqbX1JwJxSbzw9B9YhnzKeYQ==", - "dev": true, - "requires": { - "@types/bytebuffer": "^5.0.40", - "lodash.camelcase": "^4.3.0", - "lodash.clone": "^4.5.0", - "nan": "^2.13.2", - "node-pre-gyp": "^0.16.0", - "protobufjs": "^5.0.3" - }, - "dependencies": { - "protobufjs": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-5.0.3.tgz", - "integrity": "sha512-55Kcx1MhPZX0zTbVosMQEO5R6/rikNXd9b6RQK4KSPcrSIIwoXTtebIczUrXlwaSrbz4x8XUVThGPob1n8I4QA==", - "dev": true, - "requires": { - "ascli": "~1", - "bytebuffer": "~5", - "glob": "^7.0.5", - "yargs": "^3.10.0" - } - } - } - }, - "grpc-js-0.2-modified": { - "version": "git+https://github.com/f5devcentral/grpc-js-0.2-modified.git#6f6255887265d359429e14bf1df3075ac0e029b2", - "from": "git+https://github.com/f5devcentral/grpc-js-0.2-modified.git#1.0", - "requires": { - "lodash": "^4.17.4" - } - }, - "grpc-kit": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/grpc-kit/-/grpc-kit-0.2.0.tgz", - "integrity": "sha512-SHUUhBIH2XoFrGff3V+XSCF71ZET2YWAjtRMhZnRW+7s7T+zcI84HWFED4sLPGXMokCY064lgleNgwc6D1cc4Q==", - "dev": true - }, - "grpc-mock": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/grpc-mock/-/grpc-mock-0.7.0.tgz", - "integrity": "sha512-1qKEZ3gSLut9qMLra0e/bQuDNDxOZtcinGjyDnB7NlHU+zuhhHC+jFoj/2Z4pe0zkgLkcTmSq6/YaKr1XExyew==", - "dev": true, - "requires": { - "@grpc/proto-loader": "^0.3.0", - "grpc": "^1.17.0", - "grpc-kit": "^0.2.0", - "partial-compare": "^1.0.1" - }, - "dependencies": { - "@grpc/proto-loader": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.3.0.tgz", - "integrity": "sha512-9b8S/V+3W4Gv7G/JKSZ48zApgyYbfIR7mAC9XNnaSWme3zj57MIESu0ELzm9j5oxNIpFG8DgO00iJMIUZ5luqw==", - "dev": true, - "requires": { - "@types/lodash": "^4.14.104", - "@types/node": "^9.4.6", - "lodash": "^4.17.5", - "protobufjs": "^6.8.6" - } - } - } - }, "gtoken": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.1.tgz", @@ -4468,7 +4781,8 @@ "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "optional": true }, "hasha": { "version": "3.0.0", @@ -4534,6 +4848,7 @@ "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "optional": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" } @@ -4554,15 +4869,6 @@ "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true }, - "ignore-walk": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", - "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", - "dev": true, - "requires": { - "minimatch": "^3.0.4" - } - }, "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -4596,7 +4902,8 @@ "ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "optional": true }, "internal-slot": { "version": "1.0.3", @@ -4609,12 +4916,6 @@ "side-channel": "^1.0.4" } }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true - }, "is-arguments": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", @@ -5093,15 +5394,6 @@ } } }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "^1.0.0" - } - }, "levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -5142,13 +5434,7 @@ "lodash.camelcase": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" - }, - "lodash.clone": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz", - "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y=", - "dev": true + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" }, "lodash.flatmap": { "version": "4.5.0", @@ -5284,12 +5570,12 @@ } }, "memfs": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.4.tgz", - "integrity": "sha512-W4gHNUE++1oSJVn8Y68jPXi+mkx3fXR5ITE/Ubz6EQ3xRpCN5k2CQ4AUR8094Z7211F876TyoBACGsIveqgiGA==", + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.7.tgz", + "integrity": "sha512-ygaiUSNalBX85388uskeCyhSAoOSgzBbtVCr9jA2RROssFL9Q19/ZXFqS+2Th2sr1ewNIWgFdLzLC3Yl1Zv+lw==", "dev": true, "requires": { - "fs-monkey": "1.0.3" + "fs-monkey": "^1.0.3" } }, "merge-descriptors": { @@ -5321,6 +5607,30 @@ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "optional": true }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "dependencies": { + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + } + } + }, "mime-db": { "version": "1.47.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", @@ -5353,33 +5663,6 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, - "minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - }, - "dependencies": { - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, - "minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", - "dev": true, - "requires": { - "minipass": "^2.9.0" - } - }, "mkdirp": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", @@ -5641,7 +5924,8 @@ "nan": { "version": "2.14.2", "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==" + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "optional": true }, "napi-build-utils": { "version": "1.0.2", @@ -5655,34 +5939,6 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "needle": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.6.0.tgz", - "integrity": "sha512-KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg==", - "dev": true, - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - } - } - }, "nested-error-stacks": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz", @@ -5787,24 +6043,6 @@ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" }, - "node-pre-gyp": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.16.0.tgz", - "integrity": "sha512-4efGA+X/YXAHLi1hN8KaPrILULaUn2nWecFrn1k2I+99HpoyvcOGEbtcOxpDiUwPF2ZANMJDh32qwOUPenuR1g==", - "dev": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.3", - "needle": "^2.5.0", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4.4.2" - } - }, "node-releases": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", @@ -5817,7 +6055,7 @@ "integrity": "sha512-V4gVHxzQ42iwhkANpPryzfjmqi3Ql3xeO9E/px7W5Yi774WplU3YtqUpnvcL/eJit4UqcfuLOgZLkpf0BPhHmg==", "requires": { "async": "~0.2.7", - "underscore": "~1.4.4" + "underscore": "~1.13.1" }, "dependencies": { "async": { @@ -5838,16 +6076,6 @@ "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=", "optional": true }, - "nopt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", - "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", - "dev": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -5866,32 +6094,6 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, - "npm-bundled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", - "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", - "dev": true, - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", - "dev": true - }, - "npm-packlist": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", - "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", - "dev": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, "npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -5911,6 +6113,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "optional": true, "requires": { "are-we-there-yet": "~1.1.2", "console-control-strings": "~1.1.0", @@ -6087,7 +6290,8 @@ "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "optional": true }, "object-inspect": { "version": "1.10.3", @@ -6304,12 +6508,6 @@ "word-wrap": "^1.2.3" } }, - "optjs": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/optjs/-/optjs-3.2.2.tgz", - "integrity": "sha1-aabOicRCpEQDFBrS+bNwvVu29O4=", - "dev": true - }, "ora": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", @@ -6468,29 +6666,11 @@ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "requires": { - "lcid": "^1.0.0" - } - }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dev": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "optional": true }, "p-limit": { "version": "1.3.0", @@ -6547,12 +6727,6 @@ "json-parse-better-errors": "^1.0.1" } }, - "partial-compare": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/partial-compare/-/partial-compare-1.0.1.tgz", - "integrity": "sha1-aKwbhk5GO3E+ZZMdIIPBVgYIgzo=", - "dev": true - }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", @@ -6748,10 +6922,17 @@ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, "rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "optional": true, "requires": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -6890,6 +7071,12 @@ "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=" }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, "rfdc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", @@ -6911,6 +7098,15 @@ "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "optional": true }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -7003,6 +7199,12 @@ "supports-color": "^5.5.0" } }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, "snappy": { "version": "6.3.5", "resolved": "https://registry.npmjs.org/snappy/-/snappy-6.3.5.tgz", @@ -7115,7 +7317,7 @@ "stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", "dev": true }, "statsd-client": { @@ -7232,29 +7434,6 @@ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true }, - "tar": { - "version": "4.4.13", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", - "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", - "dev": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - }, - "dependencies": { - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, "tar-fs": { "version": "1.16.3", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz", @@ -7372,7 +7551,7 @@ "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, "through": { @@ -7684,12 +7863,6 @@ "string-width": "^1.0.2 || 2" } }, - "window-size": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", - "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=", - "dev": true - }, "winston": { "version": "2.4.5", "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.5.tgz", @@ -7707,7 +7880,7 @@ "async": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz", - "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=", + "integrity": "sha512-5mO7DX4CbJzp9zjaFXusQQ4tzKJARjNB1Ih1pVBi8wkbmXy/xzIDgEMXxWePLzt2OdFwaxfneIlT1nCiXubrPQ==", "dev": true } } @@ -7719,13 +7892,69 @@ "dev": true }, "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + } } }, "wrappy": { @@ -7765,10 +7994,9 @@ "optional": true }, "y18n": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", - "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", - "dev": true + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" }, "yallist": { "version": "4.0.0", @@ -7776,18 +8004,57 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "yargs": { - "version": "3.32.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", - "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", - "dev": true, + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "requires": { - "camelcase": "^2.0.1", - "cliui": "^3.0.3", - "decamelize": "^1.1.1", - "os-locale": "^1.4.0", - "string-width": "^1.0.1", - "window-size": "^0.1.4", - "y18n": "^3.2.0" + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" + } } }, "yargs-parser": { @@ -7941,6 +8208,12 @@ } } } + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true } } } diff --git a/package.json b/package.json index d791dc83..b2226372 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "f5-telemetry", - "version": "1.30.0-1", + "version": "1.31.0-2", "author": "F5 Networks", "license": "Apache-2.0", "repository": { @@ -40,18 +40,20 @@ }, "dependencies": { "@f5devcentral/f5-teem": "^1.5.0", - "@grpc/proto-loader": "^0.6.12", + "@grpc/grpc-js": "^1.6.9", + "@grpc/proto-loader": "^0.7.0", "@opentelemetry/api": "^1.0.4", - "@opentelemetry/exporter-metrics-otlp-proto": "^0.27.0", - "@opentelemetry/sdk-metrics-base": "^0.27.0", + "@opentelemetry/exporter-metrics-otlp-grpc": "^0.31.0", + "@opentelemetry/exporter-metrics-otlp-http": "^0.31.0", + "@opentelemetry/exporter-metrics-otlp-proto": "^0.31.0", + "@opentelemetry/sdk-metrics-base": "^0.31.0", "ajv": "^6.12.6", "ajv-keywords": "^3.5.2", "applicationinsights": "^1.8.10", "aws-sdk": "2.1018.0", "commander": "^2.20.3", - "eventemitter2": "^6.4.5", + "eventemitter2": "^6.4.7", "google-auth-library": "^6.1.6", - "grpc-js-0.2-modified": "git+https://github.com/f5devcentral/grpc-js-0.2-modified.git#1.0", "jmespath": "^0.16.0", "json-duplicate-key-handle": "file:opensource/json-duplicate-key-handle", "jsonwebtoken": "^8.5.1", @@ -70,18 +72,15 @@ "chai": "^4.3.6", "chai-as-promised": "^7.1.1", "deep-diff": "^1.0.2", - "eslint": "^8.16.0", + "eslint": "^8.21.0", "eslint-config-airbnb-base": "^15.0.0", "eslint-plugin-import": "^2.26.0", - "grpc": "1.24.7", - "grpc-mock": "^0.7.0", "icrdk": "git+https://github.com/f5devcentral/f5-icontrollx-dev-kit.git#master", - "memfs": "^3.4.4", + "memfs": "^3.4.7", "mocha": "^7.2.0", "nock": "10.0.0", "nyc": "^14.1.1", "object.values": "^1.1.5", - "protobufjs": "^6.11.3", "proxyquire": "^2.1.3", "sinon": "^7.5.0", "ssh2": "^0.8.9", @@ -121,14 +120,12 @@ "devDependencies": { "@f5devcentral/eslint-config-f5-atg": "This package is updated on as-needed basis due to the work overhead.", "chai": "This package dropped support for older node versions. Use v4.X.Y for Node v4.", - "grpc-mock": "This package is used for GRPC connection, dependent of grpc lib that supports node v4 and above.", - "grpc": "This package is used for GRPC connection. Pinned to v1.24.7 as later versions do not compile on Node v6.", "mocha": "This package should use v7.X.Y. CI installs node specific mocha version for node 4 and node 6.", "nock": "This package dropped support for older node versions. Use v10.0.0 for Node v4.", "nyc": "This package dropped support for older node versions. Use v14.X.Y for Node v4.", "sinon": "This package dropped support for older node versions. Use v7.X.Y for Node v4.", "ssh2": "This packaged dropped support for older node versions. Use v0.X.Y for Node >= v5.2 and <= v10.16", - "winston": "This package dropped support for older node versions. Use v2.X.Y for Node v4." + "winston": "This package dropped support for older node versions. Use v2.4.5 for Node v4." } }, "optionalDependencies": { diff --git a/shared/output_schemas/system_poller_schema.json b/shared/output_schemas/system_poller_schema.json index 2c160e47..630a135c 100644 --- a/shared/output_schemas/system_poller_schema.json +++ b/shared/output_schemas/system_poller_schema.json @@ -128,6 +128,9 @@ "throughputPerformance": { "type": "object" }, + "connectionsPerformance": { + "type": "object" + }, "asmAttackSignatures": { "type": "object" } diff --git a/src/lib/consumers/DataDog/index.js b/src/lib/consumers/DataDog/index.js index abe46c46..39b48480 100644 --- a/src/lib/consumers/DataDog/index.js +++ b/src/lib/consumers/DataDog/index.js @@ -12,45 +12,151 @@ 'use strict'; +const https = require('https'); const zlib = require('zlib'); const DEFAULT_HOSTNAME = require('../../constants').DEFAULT_HOSTNAME; const EVENT_TYPES = require('../../constants').EVENT_TYPES; +const httpUtil = require('../shared/httpUtil'); const metricsUtil = require('../shared/metricsUtil'); -const requestsUtil = require('../../utils/requests'); +const miscUtil = require('../../utils/misc'); +const promiseUtil = require('../../utils/promise'); -const DATA_DOG_METRIC_TYPE = 'gauge'; +const DATA_DOG_API_ENDPOINTS = { + LOGS: '/api/v2/logs', + METRICS: '/api/v2/series' +}; +const DATA_DOG_MAX_CHUNK_SIZE = 500 * 1000; // 512 KB +const DATA_DOG_MAX_GZIP_CHUNK_SIZE = 5 * 1000 * 1000; // 5 MB +const DATA_DOG_METRIC_TYPE = 3; +const DATA_DOG_PORT = 443; +const DATA_DOG_PROTOCOL = 'https'; const DATA_DOG_REGIONAL_GATEWAYS = { US1: { - LOGS_GATEWAY: 'https://http-intake.logs.datadoghq.com/api/v2/logs', - METRICS_GATEWAY: 'https://api.datadoghq.com/api/v1/series' + LOGS: 'http-intake.logs.datadoghq.com', + METRICS: 'api.datadoghq.com' }, US3: { - LOGS_GATEWAY: 'https://http-intake.logs.us3.datadoghq.com/api/v2/logs', - METRICS_GATEWAY: 'https://api.us3.datadoghq.com/api/v1/series' + LOGS: 'http-intake.logs.us3.datadoghq.com', + METRICS: 'api.us3.datadoghq.com' }, EU1: { - LOGS_GATEWAY: 'https://http-intake.logs.datadoghq.eu/api/v2/logs', - METRICS_GATEWAY: 'https://api.datadoghq.eu/api/v1/series' + LOGS: 'http-intake.logs.datadoghq.eu', + METRICS: 'api.datadoghq.eu' }, 'US1-FED': { - LOGS_GATEWAY: 'https://http-intake.logs.ddog-gov.com/api/v2/logs', - METRICS_GATEWAY: 'https://api.ddog-gov.com/api/v1/series' + LOGS: 'http-intake.logs.ddog-gov.com', + METRICS: 'api.ddog-gov.com' } }; /** - * Get the correct DataDog Gateway URL for the provided DataDog region and telemetry type + * Compress data + * + * @param {string} zlibMethod - method name from 'zlib' + * @param {string} data - data to compress + * + * @returns {Promise} resolved with compressed data + */ +const compressData = (zlibMethod, data) => new Promise((resolve, reject) => { + zlib[zlibMethod](data, (err, buffer) => { + if (err) { + reject(err); + } else { + resolve(buffer); + } + }); +}); + +/** + * Get function to compress data + * + * @param {string} type - DataDog data type + * + * @returns {function(data):Promise} function + */ +const getCompressionFunc = (type) => compressData.bind(null, type === 'log' ? 'gzip' : 'deflate'); + +/** + * Get the correct DataDog Gateway host for the provided DataDog region and telemetry type + * + * @param {string} region - DataDog region + * @param {string} type - Telemetry type (metrics or log) + * + * @returns {string} the correct DataDog Gateway host to send telemetry to + */ +const getDataDogHost = (region, ddType) => DATA_DOG_REGIONAL_GATEWAYS[region][ddType === 'log' ? 'LOGS' : 'METRICS']; + +/** + * Get the correct DataDog API endpoint for the provided telemetry type * - * @param {String} region - DataDog region - * @param {String} type - Telemetry type (metrics or log) + * @param {string} type - Telemetry type (metrics or log) * - * @returns {String} The correct DataDog Gateway URL to send telemetry to + * @returns {string} rhe correct DataDog API endpoint to send telemetry to */ -const getDataDogGateway = (region, type) => ( - type === 'log' ? DATA_DOG_REGIONAL_GATEWAYS[region].LOGS_GATEWAY : DATA_DOG_REGIONAL_GATEWAYS[region].METRICS_GATEWAY +const getDataDogEndpoint = (type) => ( + type === 'log' + ? DATA_DOG_API_ENDPOINTS.LOGS + : DATA_DOG_API_ENDPOINTS.METRICS ); +/** + * Wrap chunks + * + * @param {miscUtil.Chunks} chunks - chunks of data + * @param {string} ddType - DataDog data type + * + * @returns {Array} wrapped chunks of data + */ +const wrapChunks = (chunks, ddType) => { + chunks = chunks.getAll(); + if (ddType === 'log') { + return chunks[0]; + } + return chunks.map((c) => `{"series":[${c.join('')}]}`); +}; + +/** + * Fetch custom options for HTTP transport from config + * + * @param {Array} customOpts - options from config + * + * @returns {Object} + */ +const fetchHttpCustomOpts = (customOpts) => { + const allowedKeys = [ + 'keepAlive', + 'keepAliveMsecs', + 'maxSockets', + 'maxFreeSockets' + ]; + const ret = {}; + customOpts.filter((opt) => allowedKeys.indexOf(opt.name) !== -1) + .forEach((opt) => { + ret[opt.name] = opt.value; + }); + return ret; +}; + +const httpAgentsMap = {}; +const createHttpAgentOptsKey = (opts) => { + const keys = Object.keys(opts); + keys.sort(); + return JSON.stringify(keys.map((k) => [k, opts[k]])); +}; + +const getHttpAgent = (config) => { + const customOpts = fetchHttpCustomOpts(config.customOpts || []); + const optsKey = createHttpAgentOptsKey(customOpts); + if (!httpAgentsMap[config.id] || httpAgentsMap[config.id].key !== optsKey) { + httpAgentsMap[config.id] = { + agent: new https.Agent(Object.assign({}, customOpts)), + key: optsKey + }; + } + return httpAgentsMap[config.id].agent; +}; + /** * See {@link ../README.md#context} for documentation */ @@ -69,31 +175,44 @@ module.exports = function (context) { const ddRegion = context.config.region; const metricPrefix = context.config.metricPrefix ? `${context.config.metricPrefix.join('.')}.` : ''; const boolsToMetrics = context.config.convertBooleansToMetrics || false; + const needGzip = context.config.compressionType === 'gzip'; const customTags = (context.config.customTags || []).reduce((result, tag) => { result[tag.name] = tag.value; return result; }, {}); + const httpAgentOpts = fetchHttpCustomOpts(context.config.customOpts || []); // for now use current time, ideally should try to fetch it from event data - const timestamp = Date.now() / 1000; + const timestamp = Math.floor(Date.now() / 1000); + const maxChunkSize = needGzip ? DATA_DOG_MAX_GZIP_CHUNK_SIZE : DATA_DOG_MAX_CHUNK_SIZE; + const chunks = new miscUtil.Chunks({ + maxChunkSize, + serializer(d) { + d = JSON.stringify(d); + return `${this.currentChunkSize && (this.currentChunkSize + d.length <= maxChunkSize) ? ',' : ''}${d}`; + } + }); + let allowSelfSignedCert = false; + if (!miscUtil.isObjectEmpty(context.config.proxy) && typeof context.config.proxy.allowSelfSignedCert !== 'undefined') { + allowSelfSignedCert = context.config.proxy.allowSelfSignedCert; + } - let ddData; let ddType; if (eventType === EVENT_TYPES.EVENT_LISTENER || eventType === EVENT_TYPES.SYSLOG_EVENT) { ddType = 'log'; - ddData = { + chunks.add({ ddsource: context.event.type, // usually there is nothing along this data that can be used as a tag ddtags: buildTags(Object.assign({ telemetryEventCategory: eventType }, customTags), true), hostname, message: data.data, service: ddService - }; + }); } else { + const defaultTags = Object.assign({}, customTags, { + host: hostname + }); ddType = 'metrics'; - ddData = { - series: [] - }; metricsUtil.findMetricsAndTags(data, { collectTags: true, excludeNameFromPath: true, @@ -103,22 +222,21 @@ module.exports = function (context) { // ignore timestamps and intervals if (metricPath[metricPath.length - 1].indexOf('imestamp') === -1 && metricPath[metricPath.length - 1].indexOf('nterval') === -1) { - ddData.series.push({ - host: hostname, + chunks.add({ interval, metric: buildMetricName(metricPrefix, metricPath), - points: [[timestamp, metricValue]], - tags: buildTags(Object.assign(metricTags, customTags)), + points: [{ + timestamp, + value: metricValue + }], + tags: buildTags(Object.assign(metricTags, defaultTags)), type: DATA_DOG_METRIC_TYPE }); } } }); - if (ddData.series.length === 0) { - ddData = null; - } } - if (!ddData) { + if (chunks.totalSize === 0) { /** * Looks like no metrics were found, then let's * transform this event into log message and attach @@ -135,19 +253,24 @@ module.exports = function (context) { }); ddType = 'log'; - ddData = { + chunks.add({ ddsource: context.event.type, ddtags: buildTags(Object.assign(ddtags, customTags), true), hostname, message: JSON.stringify(data), service: ddService - }; + }); } + const ddData = wrapChunks(chunks, ddType); + if (context.tracer) { context.tracer.write({ - url: getDataDogGateway(ddRegion, ddType), - data: ddData + data: ddData, + host: getDataDogHost(ddRegion), + httpAgentOpts, + type: ddType, + uri: getDataDogEndpoint(ddType) }); } @@ -155,42 +278,40 @@ module.exports = function (context) { 'Content-Type': 'application/json', 'DD-API-KEY': context.config.apiKey }; - const needGzip = context.config.compressionType === 'gzip'; - let gzipPromise = Promise.resolve(ddData); - + let compressDataFn; if (needGzip) { const encoding = ddType === 'log' ? 'gzip' : 'deflate'; - const zlibMeth = ddType === 'log' ? zlib.gzip : zlib.deflate; - + compressDataFn = getCompressionFunc(ddType); Object.assign(headers, { 'Accept-Encoding': encoding, 'Content-Encoding': encoding }); - gzipPromise = gzipPromise.then((payload) => new Promise((resolve, reject) => { - zlibMeth.call(zlib, JSON.stringify(payload), (err, buffer) => { - if (!err) { - resolve(buffer); - } else { - reject(err); - } - }); - })); + } else { + compressDataFn = (d) => Promise.resolve(d); } - return gzipPromise.then((payload) => requestsUtil.makeRequest({ - body: payload, - expectedResponseCode: [200, 202], - fullURI: getDataDogGateway(ddRegion, ddType), - headers, - json: !needGzip, - method: 'POST' - })) + return promiseUtil.loopForEach(ddData, (dataChunk) => compressDataFn(dataChunk) + .then((compressedData) => httpUtil.sendToConsumer({ + agent: getHttpAgent(context.config), + allowSelfSignedCert, + body: compressedData, + expectedResponseCode: [200, 202], + headers: Object.assign({}, headers), + hosts: [getDataDogHost(ddRegion, ddType)], + json: false, + logger: context.logger, + method: 'POST', + port: DATA_DOG_PORT, + protocol: DATA_DOG_PROTOCOL, + proxy: context.config.proxy, + uri: getDataDogEndpoint(ddType) + })) .then(() => { - context.logger.debug('success'); + context.logger.debug(`successfully sent ${dataChunk.length} bytes of data`); }) .catch((err) => { - context.logger.error(`error: ${err.message ? err.message : err}`); - }); + context.logger.error(`Unable to send ${dataChunk.length} bytes of data. Error: ${err.message ? err.message : err}`); + })); }; /** diff --git a/src/lib/consumers/F5_Cloud/index.js b/src/lib/consumers/F5_Cloud/index.js index b599e900..d27f9668 100644 --- a/src/lib/consumers/F5_Cloud/index.js +++ b/src/lib/consumers/F5_Cloud/index.js @@ -8,11 +8,15 @@ 'use strict'; +const grpc = require('@grpc/grpc-js'); const google = require('google-auth-library'); const protoLoader = require('@grpc/proto-loader'); -const grpc = require('grpc-js-0.2-modified'); -const util = require('../../utils/misc'); + const constants = require('../../constants'); +const util = require('../../utils/misc'); + +// required for gRPC +require('../shared/http2patch'); const auth = google.auth; const PROTO_PATH = `${__dirname}/deos.proto`; diff --git a/src/lib/consumers/Generic_HTTP/index.js b/src/lib/consumers/Generic_HTTP/index.js index dd17712a..19b80ed9 100644 --- a/src/lib/consumers/Generic_HTTP/index.js +++ b/src/lib/consumers/Generic_HTTP/index.js @@ -8,9 +8,88 @@ 'use strict'; +const http = require('http'); +const https = require('https'); +const zlib = require('zlib'); + const httpUtil = require('../shared/httpUtil'); const util = require('../../utils/misc'); +/** + * Compress data + * + * @param {string} zlibMethod - method name from 'zlib' + * @param {string} data - data to compress + * + * @returns {Promise} resolved with compressed data + */ +const compressData = (zlibMethod, data) => new Promise((resolve, reject) => { + zlib[zlibMethod](data, (err, buffer) => { + if (err) { + reject(err); + } else { + resolve(buffer); + } + }); +}); + +/** + * Compress data if need + * + * @param {string} compression - compression type + * @param {string} data - data to compress + * + * @returns {Promise} resolved with data or compressed data + */ +const maybeCompress = (compression, data) => { + if (compression === 'none') { + return Promise.resolve(data); + } + data = typeof data !== 'string' ? JSON.stringify(data) : data; + return compressData(compression, data); +}; + +/** + * Fetch custom options for HTTP transport from config + * + * @param {Array} customOpts - options from config + * + * @returns {Object} + */ +const fetchHttpCustomOpts = (customOpts) => { + const allowedKeys = [ + 'keepAlive', + 'keepAliveMsecs', + 'maxSockets', + 'maxFreeSockets' + ]; + const ret = {}; + customOpts.filter((opt) => allowedKeys.indexOf(opt.name) !== -1) + .forEach((opt) => { + ret[opt.name] = opt.value; + }); + return ret; +}; + +const httpAgentsMap = {}; +const createHttpAgentOptsKey = (opts) => { + const keys = Object.keys(opts); + keys.sort(); + return JSON.stringify(keys.map((k) => [k, opts[k]])); +}; + +const getHttpAgent = (config) => { + const customOpts = fetchHttpCustomOpts(config.customOpts || []); + const optsKey = createHttpAgentOptsKey(customOpts); + if (!httpAgentsMap[config.id] || httpAgentsMap[config.id].key !== optsKey) { + httpAgentsMap[config.id] = { + agent: new (config.protocol === 'https' ? https.Agent : http.Agent)(Object.assign({}, customOpts)), + key: optsKey + }; + } + return httpAgentsMap[config.id].agent; +}; + /** * See {@link ../README.md#context} for documentation */ @@ -27,6 +106,7 @@ module.exports = function (context) { const key = context.config.privateKey || undefined; const cert = context.config.clientCertificate || undefined; const ca = context.config.rootCertificate || undefined; + const compressionType = context.config.compressionType || 'none'; let allowSelfSignedCert = context.config.allowSelfSignedCert; if (!util.isObjectEmpty(context.config.proxy) && typeof context.config.proxy.allowSelfSignedCert !== 'undefined') { @@ -58,6 +138,7 @@ module.exports = function (context) { context.tracer.write({ allowSelfSignedCert, body, + compressionType, host, fallbackHosts, headers: tracedHeaders, @@ -71,22 +152,32 @@ module.exports = function (context) { rootCertificate: util.isObjectEmpty(ca) ? undefined : redactString }); } - return httpUtil.sendToConsumer({ - allowSelfSignedCert, - body, - hosts: [host].concat(fallbackHosts), - headers, - json: outputMode !== 'raw', // for 'body' processing - logger: context.logger, - method, - port, - protocol, - proxy, - uri, - key, - cert, - ca - }).catch((err) => { - context.logger.exception(`Unexpected error: ${err}`, err); - }); + + let maybeJson = outputMode !== 'raw'; // for 'body' processing + if (compressionType !== 'none') { + headers['Content-Encoding'] = compressionType; + maybeJson = false; + } + + return maybeCompress(compressionType, body) + .then((data) => httpUtil.sendToConsumer({ + agent: getHttpAgent(context.config), + allowSelfSignedCert, + body: data, + hosts: [host].concat(fallbackHosts), + headers, + json: maybeJson, + logger: context.logger, + method, + port, + protocol, + proxy, + uri, + key, + cert, + ca + })) + .catch((err) => { + context.logger.exception(`Unexpected error: ${err}`, err); + }); }; diff --git a/src/lib/consumers/OpenTelemetry_Exporter/index.js b/src/lib/consumers/OpenTelemetry_Exporter/index.js index 4e56b72b..1d49a194 100644 --- a/src/lib/consumers/OpenTelemetry_Exporter/index.js +++ b/src/lib/consumers/OpenTelemetry_Exporter/index.js @@ -8,19 +8,165 @@ 'use strict'; +const grpc = require('@grpc/grpc-js'); +const GrpcMetricExporter = require('@opentelemetry/exporter-metrics-otlp-grpc').OTLPMetricExporter; +const JsonMetricExporter = require('@opentelemetry/exporter-metrics-otlp-http').OTLPMetricExporter; const MeterProvider = require('@opentelemetry/sdk-metrics-base').MeterProvider; -const OTLPMetricExporter = require('@opentelemetry/exporter-metrics-otlp-proto').OTLPMetricExporter; -const otelApi = require('@opentelemetry/api'); +const MetricReader = require('@opentelemetry/sdk-metrics-base').MetricReader; +const ProtobufMetricExporter = require('@opentelemetry/exporter-metrics-otlp-proto').OTLPMetricExporter; +const OTELApi = require('@opentelemetry/api'); -const metricsUtil = require('../shared/metricsUtil'); const httpUtil = require('../shared/httpUtil'); +const metricsUtil = require('../shared/metricsUtil'); +const miscUtil = require('../../utils/misc'); const EVENT_TYPES = require('../../constants').EVENT_TYPES; +// required for gRPC +require('../shared/http2patch'); + +/** + * REQUIREMENT: min. node.js version - 8.11.1 + */ + +const getSslConfig = (config) => { + if (config.useSSL || config.protocol === 'https') { + return { + ca: config.rootCertificate ? Buffer.from(config.rootCertificate) : null, + key: config.privateKey ? Buffer.from(config.privateKey) : null, + cert: config.clientCertificate ? Buffer.from(config.clientCertificate) : null + }; + } + return {}; +}; + +const getHttpsAgentKeepAlive = (config) => !!(config.allowSelfSignedCert || config.rootCertificate + || config.privateKey || config.clientCertificate); + +const getExporterHttpConfig = (config) => ({ + url: `${config.protocol}://${config.host}:${config.port}${config.metricsPath || ''}`, + headers: httpUtil.processHeaders(config.headers), + // 'httpAgentOptions' ignored when 'keepAlive' set to 'false', will be fixed in future TS versions + keepAlive: getHttpsAgentKeepAlive(config), + httpAgentOptions: Object.assign({ + rejectUnauthorized: !config.allowSelfSignedCert + }, getSslConfig(config)) +}); + +const createGRPCExporter = (config) => { + const sslConf = getSslConfig(config); + const credentials = config.useSSL + ? grpc.credentials.createSsl(sslConf.ca, sslConf.key, sslConf.cert) + : grpc.credentials.createInsecure(); + + if (typeof credentials.connectionOptions === 'object') { + credentials.connectionOptions.rejectUnauthorized = !config.allowSelfSignedCert; + } + return new GrpcMetricExporter({ + credentials, + metadata: grpc.Metadata.fromHttp2Headers(httpUtil.processHeaders(config.headers)), + url: `${config.host}:${config.port}` + }); +}; + +const createJsonExporter = (config) => new JsonMetricExporter(getExporterHttpConfig(config)); +const createProtobufExporter = (config) => new ProtobufMetricExporter(getExporterHttpConfig(config)); + +const createMetricExporter = (config) => { + if (config.exporter === 'grpc') { + return createGRPCExporter(config); + } + if (config.exporter === 'json') { + return createJsonExporter(config); + } + return createProtobufExporter(config); +}; + // OpenTelemetry metics must match regex: /^[a-z][a-z0-9_.-]*$/i // However, the Prometheus exporter will silently convert invalid characters to an '_', so use Prometheus regex const METRIC_NAME_REGEX = /[^a-zA-Z0-9_:]+/g; +// https://github.com/nodejs/node/issues/17893 +const PERF_HOOKS_BUG_EXIST = miscUtil.compareVersionStrings(process.version.substring(1), '<', '8.12.0'); + +const NANOSECOND_DIGITS = 9; +// eslint-disable-next-line no-restricted-properties +const SECOND_TO_NANOSECONDS = Math.pow(10, NANOSECOND_DIGITS); + +/** + * Convert timestamp in milliseconds to HR timestamp + * + * @param {integer} timeMillis - time in milliseconds + * + * @returns {Array} HR timestamp + */ +function toHighResolutionTimestamp(timeMillis) { + const timeSeconds = timeMillis / 1000; + const seconds = Math.trunc(timeSeconds); + // Round sub-nanosecond accuracy to nanosecond. + const nanos = Number((timeSeconds - seconds).toFixed(NANOSECOND_DIGITS)) * SECOND_TO_NANOSECONDS; + return [seconds, nanos]; +} + +/** + * Custom Metric Reader class + */ +class CustomMetricReader extends MetricReader { + /** + * Constructor + * + * @param {object} options - options + * @param {Object} options.exporter - metrics exporter + * @param {Array} [options.timestamp] - high resolution timestamp [seconds, nanoseconds] + */ + constructor(options) { + super(); + this._exporter = options.exporter; + this._metricTimestamp = options.timestamp; + + let fixMetricsTimestamp = () => {}; + if (PERF_HOOKS_BUG_EXIST) { + fixMetricsTimestamp = (metrics) => { + metrics + .scopeMetrics[0] + .metrics.forEach((metric) => metric + .dataPoints.forEach((dataPoint) => { + dataPoint.startTime = this._metricTimestamp.slice(); + dataPoint.endTime = this._metricTimestamp.slice(); + })); + }; + } + Object.defineProperty(this, 'fixMetricsTimestamp', { value: fixMetricsTimestamp }); + } + + _export() { + return this.collect() + .then((ret) => new Promise((resolve, reject) => { + this.fixMetricsTimestamp(ret.resourceMetrics); + this._exporter.export(ret.resourceMetrics, (result) => { + if (result.code !== 0) { + reject(result.error || new Error(`CustomMetricReader: metrics export failed (error ${result.error})`)); + } else { + resolve(); + } + }); + })); + } + + onForceFlush() { + return this._export() + .then(() => this._exporter.forceFlush()); + } + + onShutdown() { + return this._exporter.shutdown(); + } + + selectAggregationTemporality(instrumentType) { + return this._exporter.selectAggregationTemporality(instrumentType); + } +} + /** * Custom Log Handler to pass to the OpenTelemetry API * Implements @opentelemetry/api.DiagLogger interface @@ -61,7 +207,7 @@ class LogHandler { * @param {String} msg - Debug message */ debug(msg) { - if (msg === 'statusCode: 200') { + if (msg === 'statusCode: 200' || msg === 'Objects sent') { this.logger.debug('success'); } } @@ -74,10 +220,6 @@ class LogHandler { */ module.exports = function (context) { const eventType = context.event.type; - const host = context.config.host; - const port = context.config.port; - const metricsPath = context.config.metricsPath || ''; - const headers = httpUtil.processHeaders(context.config.headers); // no defaults - provide all headers needed const boolsToMetrics = context.config.convertBooleansToMetrics || false; // We cannot process ihealth/syslog/raw/event data, so don't even try. @@ -96,18 +238,18 @@ module.exports = function (context) { return Promise.resolve(); } - otelApi.diag.setLogger(new LogHandler(context.logger), otelApi.DiagLogLevel.ALL); + OTELApi.diag.setLogger(new LogHandler(context.logger), OTELApi.DiagLogLevel.ALL); + + const exporter = createMetricExporter(context.config); - const exporter = new OTLPMetricExporter({ - url: `http://${host}:${port}${metricsPath}`, - headers, - keepAlive: false - }); // Register the meter - used to manage/collect/store metrics - const meter = new MeterProvider({ + const meterProvider = new MeterProvider({}); + meterProvider.addMetricReader(new CustomMetricReader({ exporter, - interval: 60 * 1000 // give us 60s to initialize/set metric set - }).getMeter('telemetry-streaming'); + timestamp: toHighResolutionTimestamp(Date.now()) + })); + + const meter = meterProvider.getMeter('telemetry-streaming'); if (context.tracer) { context.tracer.write(metrics); @@ -120,15 +262,16 @@ module.exports = function (context) { const metric = metrics[metricName]; const counter = meter.createUpDownCounter(metricName, { description: metric.description }); metric.measurements.forEach((measurement) => { - counter.bind(measurement.tags).add(measurement.value); + counter.add(measurement.value, measurement.tags); }); }); // Shut down the meter, so it does not publish on its internal interval // Note: The meter.shutdown() function also calls the controller.shutdown() function, // which then calls its own private _collect() function; so don't need to explicitly call .collect() - return meter.shutdown() - .then(() => Promise.resolve()) + return meterProvider.forceFlush() + .catch((err) => context.logger.exception('Error on attempt to send metrics:', err)) + .then(() => meterProvider.shutdown()) .catch(() => Promise.resolve()); }; @@ -149,6 +292,9 @@ function createMetrics(data, opts) { parseMetrics: true, boolsToMetrics: opts.boolsToMetrics, onMetric: (metricPath, value, tags) => { + if (typeof tags.port === 'number') { + tags.port = `${tags.port}`; + } // ignore timestamps and intervals if (metricPath[metricPath.length - 1].indexOf('imestamp') === -1 && metricPath[metricPath.length - 1].indexOf('nterval') === -1) { diff --git a/src/lib/consumers/shared/http2patch.js b/src/lib/consumers/shared/http2patch.js new file mode 100644 index 00000000..4f6668eb --- /dev/null +++ b/src/lib/consumers/shared/http2patch.js @@ -0,0 +1,269 @@ +/* + * Copyright 2022. F5 Networks, Inc. See End User License Agreement ("EULA") for + * license terms. Notwithstanding anything to the contrary in the EULA, Licensee + * may copy and modify this software product for its internal business purposes. + * Further, Licensee may upload, publish and distribute the modified version of + * the software product on devcentral.f5.com. + */ + +'use strict'; + +const miscUtil = require('../../utils/misc'); +const logger = require('../../logger').getChild('http2patch'); + +// returns same Symbol every time +const kPatched = Symbol.for('tsPatchedHttp2'); + +/** + * Patch built-in (internal) http2 library to be on par with node 8.13+ + * Actually, everything @grpc/grpc-js needs is working fine even on node 8.11.2+ + */ +function patchHttp2Lib() { + // eslint-disable-next-line global-require + const http2 = require('http2'); + + /** + * Symbol to access 'state' property of Htt2Session + */ + let Http2SessionStateSymbol; + + /** + * Symbol to access 'state' property of Htt2Stream + */ + let Http2StreamStateSymbol; + + /** + * Fetch hidden classes from 'http2' lib + * + * @returns {Object} with hidden classes + */ + function getHttp2Classes() { + const client = http2.connect('http://localhost'); + client.on('error', () => {}); + client.on('socketError', () => {}); + + const req = client.request({ ':path': '/' }); + req.on('error', () => {}); + + return { + // eslint-disable-next-line no-proto + Http2Session: Object.getPrototypeOf(client.__proto__), + // eslint-disable-next-line no-proto + Http2Stream: Object.getPrototypeOf(req.__proto__) + }; + } + + /** + * Get Http2Session private state + * + * @returns {object} Htt2Session private state + */ + function getPrivateStateForHttp2Session(session) { + if (!Http2SessionStateSymbol) { + if (!Object.getOwnPropertySymbols(session).some((symb) => { + const prop = session[symb]; + if (typeof prop === 'object' && prop && typeof prop.streams !== 'undefined' && typeof prop.pendingAck !== 'undefined') { + Http2SessionStateSymbol = symb; + return true; + } + return false; + })) { + logger.warning('Unable to find "state" symbol for http2session'); + } + } + return session[Http2SessionStateSymbol]; + } + + /** + * Get Htt2Stream private state + * + * @returns {object} Htt2Stream private state + */ + function getPrivateStateForHttp2Stream(stream) { + if (!Http2StreamStateSymbol) { + if (!Object.getOwnPropertySymbols(stream).some((symb) => { + const prop = stream[symb]; + if (typeof prop === 'object' && prop && typeof prop.rstCode !== 'undefined' && typeof prop.writeQueueSize !== 'undefined') { + Http2StreamStateSymbol = symb; + return true; + } + return false; + })) { + logger.warning('Unable to find "state" symbol for http2stream'); + } + } + return stream[Http2StreamStateSymbol]; + } + + if (!http2[kPatched]) { + const sessionLogger = logger.getChild('Http2Session'); + const streamLogger = logger.getChild('Http2Stream'); + + /** + * Connect to HTTP2 server listening on localhost:port + * + * @param {number} port + * + * @returns {Promise} resolved once done + */ + + const classes = getHttp2Classes(); + + if (typeof classes.Http2Session.close === 'undefined') { + sessionLogger.warning('Adding "closed" getter'); + + /** + * @returns {boolean} set to true if the Http2Session instance has been closed. + */ + // eslint-disable-next-line no-restricted-properties + classes.Http2Session.__defineGetter__('closed', function () { + const state = getPrivateStateForHttp2Session(this); + return state.destroyed || state.shutdown; + }); + + sessionLogger.warning('Adding "close" method'); + /** + * Gracefully closes the Http2Session, allowing any existing streams to complete + * on their own and preventing new + * Http2Stream instances from being created. Once closed, http2session.destroy() might be called if + * there are no open Http2Stream instances. + * + * @param {function} [callback] + * + * @returns {void} + */ + classes.Http2Session.close = function (callback) { + const state = getPrivateStateForHttp2Session(this); + if (state.destroyed || state.shutdown || state.shuttingDown) { + return; + } + if (typeof callback === 'function') { + this.once('close', callback); + } + this.shutdown({ graceful: true }, () => { + this.emit('close'); + }); + this.destroy(); + }; + } else { + sessionLogger.warning('"closed" getter - exist!'); + sessionLogger.warning('"close" method - exist!'); + } + + if (typeof classes.Http2Session.encrypted === 'undefined') { + sessionLogger.warning('Adding "encrypted" getter'); + + // eslint-disable-next-line no-restricted-properties + classes.Http2Session.__defineGetter__('encrypted', function () { + return !!(this.socket && this.socket.encrypted); + }); + } else { + sessionLogger.warning('"encrypted" getter - exist!'); + } + + if (typeof classes.Http2Session.ref === 'undefined') { + sessionLogger.warning('Adding "ref" method'); + + /** + * Calls ref() on this Http2Session instance's underlying net.Socket + * + * @returns {void} + */ + classes.Http2Session.ref = function () { + if (this.socket) { + this.socket.ref(); + } + }; + } else { + sessionLogger.warning('"ref" method - exist!'); + } + + if (typeof classes.Http2Session.unref === 'undefined') { + sessionLogger.warning('Adding "unref" method'); + + /** + * Calls unref() on this Http2Session instance's underlying net.Socket + * + * @returns {void} + */ + classes.Http2Session.unref = function () { + if (this.socket) { + this.socket.unref(); + } + }; + } else { + sessionLogger.warning('"unref" method - exist!'); + } + + if (typeof classes.Http2Stream.close === 'undefined') { + streamLogger.warning('Adding "closed" getter'); + + /** + * @returns {boolean} set to true if the Http2Stream instance has been closed. + */ + // eslint-disable-next-line no-restricted-properties + classes.Http2Stream.__defineGetter__('closed', function () { + const state = getPrivateStateForHttp2Stream(this); + return !!state.closed; + }); + + streamLogger.warning('Adding "close" methid'); + + /** + * Closes the Http2Stream instance by sending an RST_STREAM frame to the connected HTTP/2 peer. + * + * @param {number} code - unsigned 32-bit integer identifying the error code. + * Default: http2.constants.NGHTTP2_NO_ERROR (0x00) + * @param {function} callback - an optional function registered to listen for the 'close' event. + * + * @returns {void} + */ + classes.Http2Stream.close = function (code, callback) { + const state = getPrivateStateForHttp2Stream(this); + + this.removeAllListeners('timeout'); + + // Close the writable + if (!state.aborted + && !(this._writableState.ended || this._writableState.ending)) { + this.emit('aborted'); + state.aborted = true; + } + this.end(); + + if (this.closed) { + return; + } + + state.closed = true; + + if (typeof callback === 'function') { + this.once('close', callback); + } + this.once('close', () => { + // need to 'read' data to make the stream to emit 'end' event + if (this._readableState.length === 0) { + this.read(0); + } + }); + this.rstStream.apply(this, Array.from(arguments).slice(0, 1)); + }; + } else { + streamLogger.warning('"closed" getter - exist!'); + streamLogger.warning('"close" method - exist!'); + } + + http2[kPatched] = true; + } + return http2[kPatched]; +} +const nodeVersion = process.version.slice(1); +if (miscUtil.compareVersionStrings(nodeVersion, '<', '8.11.1')) { + logger.debug('Don\'t need to patch "http2" module - minimal node.js version is 8.11.1!'); +} else if (miscUtil.compareVersionStrings(nodeVersion, '>', '8.13')) { + logger.debug('Don\'t need to patch "http2" module - is up-to-date already!'); +} else { + logger.warning('Patching "http2" module'); + patchHttp2Lib(); + logger.warning('"http2" module successfully patched!'); +} diff --git a/src/lib/consumers/shared/httpUtil.js b/src/lib/consumers/shared/httpUtil.js index 3960002f..f58e2bf6 100644 --- a/src/lib/consumers/shared/httpUtil.js +++ b/src/lib/consumers/shared/httpUtil.js @@ -10,6 +10,7 @@ const util = require('../../utils/misc'); const requestsUtil = require('../../utils/requests'); + /** * Process request headers * diff --git a/src/lib/paths.json b/src/lib/paths.json index dc5a4884..2a0bd333 100644 --- a/src/lib/paths.json +++ b/src/lib/paths.json @@ -224,12 +224,17 @@ }, { "name": "throughputPerformance", - "path": "/mgmt/tm/sys/performance/throughput?options=detail", + "path": "/mgmt/tm/sys/performance/throughput/stats?options=detail", "parseDuplicateKeys": true }, { "name": "bashDisabled", "path": "/mgmt/tm/sys/db/systemauth.disablebash" + }, + { + "name": "connectionsPerformance", + "path": "/mgmt/tm/sys/performance/connections/stats?options=detail", + "parseDuplicateKeys": true } ] } diff --git a/src/lib/properties.json b/src/lib/properties.json index 77d04487..e7d33952 100644 --- a/src/lib/properties.json +++ b/src/lib/properties.json @@ -316,13 +316,31 @@ "renameKeys": { "patterns": { "sys/performance/throughput": { "pattern": "sys/performance/throughput\/(.*)/stats", "group": 1 } } } }, { - "runFunctions": [ { "name": "throughputPerformancePreProcessing" } ] + "runFunctions": [ { "name": "sysPerformancePreProcessing" } ] }, { "renameKeys": { "patterns": { "Max(": { "constant": "Max" } } } }, { - "runFunctions": [ { "name": "throughputPerformancePostProcessing" } ] + "runFunctions": [ { "name": "sysPerformancePostProcessing" } ] + } + ] + }, + "connectionsPerformance": { + "structure": { "parentKey": "system" }, + "key": "connectionsPerformance", + "normalization": [ + { + "renameKeys": { "patterns": { "sys/performance/connections": { "pattern": "sys/performance/connections\/(.*)/stats", "group": 1 } } } + }, + { + "runFunctions": [ { "name": "sysPerformancePreProcessing" } ] + }, + { + "renameKeys": { "patterns": { "Max(": { "constant": "Max" } } } + }, + { + "runFunctions": [ { "name": "sysPerformancePostProcessing" } ] } ] }, diff --git a/src/lib/utils/metadata.js b/src/lib/utils/metadata.js index 84f6db5e..0178de0b 100644 --- a/src/lib/utils/metadata.js +++ b/src/lib/utils/metadata.js @@ -31,9 +31,9 @@ function getInstanceMetadata(consumerContext) { const consumerType = consumerContext.config.type; let promise = Promise.resolve(); if (consumerType.indexOf('Azure') > -1) { - promise = retryPromise(() => azureUtil.getInstanceMetadata(consumerContext), { maxTries: 1 }); + promise = retryPromise(() => azureUtil.getInstanceMetadata(consumerContext), { maxTries: 2 }); } else if (consumerType.indexOf('Google') > -1) { - promise = retryPromise(() => gcpUtil.getInstanceMetadata(consumerContext), { maxTries: 1 }); + promise = retryPromise(() => gcpUtil.getInstanceMetadata(consumerContext), { maxTries: 2 }); } return promise diff --git a/src/lib/utils/misc.js b/src/lib/utils/misc.js index 7d2f811b..eb7e6a0c 100644 --- a/src/lib/utils/misc.js +++ b/src/lib/utils/misc.js @@ -529,7 +529,121 @@ function createJSONObjectSecretsMaskFunc(properties, options) { * 'createJSONObjectSecretsMaskFunc' block - END */ +/** + * Chunks - class to manage chunked data + * + * Using JSON.stringify as default serializer and treats any input string as serialized already + * + * @property {integer} currentChunkSize - size of current chunk of data + * @property {integer} maxChunkSize - max chunk size in bytes + * @property {function(any): any} serializer - data serializer, returns object with '.length' property + * @property {integer} totalChunks - number of chunks + * @property {integer} totalSize - total size of data + */ +class Chunks { + /** + * Constructor + * + * @param {object} [options] - options + * @param {integer} [options.maxChunkSize = Number.MAX_SAFE_INTEGER] - max chunk size in bytes + * @param {function(any): any} [options.serializer] - data serializer, + * returns object with '.length' property. If the serializer returns Array then every element will be added + * separately + */ + constructor(options) { + options = assignDefaults(options, { + maxChunkSize: Number.MAX_SAFE_INTEGER, + serializer: (data) => (typeof data !== 'string' ? JSON.stringify(data) : data) + }); + if (typeof options.maxChunkSize !== 'number' || options.maxChunkSize <= 0) { + throw new Error(`'maxChunkSize' should be > 0, got '${options.maxChunkSize}' (${typeof options.maxChunkSize})`); + } + + Object.defineProperties(this, { + currentChunkSize: { + get() { return this._current ? this._current.size : 0; } + }, + maxChunkSize: { + value: options.maxChunkSize + }, + serializer: { + value: options.serializer.bind(this) + }, + totalChunks: { + get() { return this._chunks.length; } + }, + totalSize: { + get() { return this._chunks.reduce((p, c) => p + c.size, 0); } + } + }); + this.clear(); + } + + /** + * Add data to current chunk + * + * @private + * + * @param {any} data - data to add + * + * @returns {void} once data added + */ + _add(data) { + if (!this._current || (this._current.size && this._current.size + data.length > this.maxChunkSize)) { + this._current = { + chunk: [], + size: 0 + }; + this._chunks.push(this._current); + } + this._current.chunk.push(data); + this._current.size += data.length; + } + + /** + * Add data to chunks + * + * @public + * + * @param {any} data - data to add + * + * @returns {void} once data added + */ + add(data) { + data = this.serializer(data); + if (Array.isArray(data)) { + data.forEach((d) => this._add(d)); + } else { + this._add(data); + } + } + + /** + * Get all chunks + * + * @public + * + * @returns {Array>} chunks of data + */ + getAll() { + return this._chunks.map((c) => c.chunk); + } + + /** + * Remove all previously added chunks of data + * + * @public + * + * @returns {void} once state was reset + */ + clear() { + this._chunks = []; + this._current = null; + } +} + module.exports = { + Chunks, createJSONObjectSecretsMaskFunc, createJSONStringSecretsMaskFunc, proxyForNodeCallbackFuncs, @@ -773,7 +887,7 @@ module.exports = { }); }); - options = this.assignDefaults(options, { + options = assignDefaults(options, { period: 100, timeout: 5 * 1000 }); diff --git a/src/lib/utils/normalize.js b/src/lib/utils/normalize.js index dd01176c..c3d58cbb 100644 --- a/src/lib/utils/normalize.js +++ b/src/lib/utils/normalize.js @@ -39,6 +39,30 @@ const iterateMemberReferenceEntries = (data, entryFunc) => { return data; }; +/** + * Name mapping for data from system/performance/*. + * Issue is following: REST API returns JSON output with duplicated keys + * that forces us to: + * - apply additional parsing + * - generate new unique keys for those entries + * + * So, this mapping for duplicated keys only! + */ +const SYS_PERFORMANCE_MAP = { + 'In Throughput(bits)': 'In Bits', + 'In Throughput(packets)': 'In Packets', + 'Out Throughput(bits)': 'Out Bits', + 'Out Throughput(packets)': 'Out Packets', + 'Server Connects New Connections': 'serverNewConnections', + 'Server Connects New TCP Accepts/Connects': 'serverNewTCPConnections', + 'Service Throughput(bits)': 'Service Bits', + 'Service Throughput(packets)': 'Service Packets', + 'SSL Client Active SSL Connections': 'activeSSLClientConnections', + 'SSL Client New ClientSSL Profile Connections': 'newSSLClientConnections', + 'SSL Server Active SSL Connections': 'activeSSLServerConnections', + 'SSL Server New ClientSSL Profile Connections': 'newSSLServerConnections' +}; + module.exports = { /** * Format MAC address @@ -777,7 +801,7 @@ module.exports = { }, /** - * Pre-process Throughput Performance stats + * Pre-process System Performance stats - Throughput, Connections * * - Converts array data into mapping based on 'description' field or assigns unique key * @@ -787,31 +811,32 @@ module.exports = { * * @returns {Object} Returns updated data */ - throughputPerformancePreProcessing(args) { - const throughput = args.data; - Object.keys(throughput).forEach((key) => { - const val = throughput[key]; + sysPerformancePreProcessing(args) { + const statsData = args.data; + Object.keys(statsData).forEach((key) => { + const val = statsData[key]; if (Array.isArray(val)) { // duplicated keys were put in array - delete throughput[key]; + delete statsData[key]; val.forEach((subData) => { let newKey; - if (subData['Throughput(packets)']) { - newKey = util.generateUniquePropName(throughput, `${key} Packets`); - } else if (subData['Throughput(bits)']) { - newKey = util.generateUniquePropName(throughput, `${key} Bits`); - } else { - newKey = util.generateUniquePropName(throughput, key); - } - throughput[newKey] = subData; + const renamed = Object.keys(subData).some((subKey) => { + newKey = SYS_PERFORMANCE_MAP[`${key} ${subKey}`]; + if (typeof newKey !== 'undefined') { + return true; + } + return false; + }); + newKey = util.generateUniquePropName(statsData, renamed ? newKey : key); + statsData[newKey] = subData; }); } }); - return throughput; + return statsData; }, /** - * Post-process Throughput Performance stats + * Post-process System Performance stats * * - Converts keys to camelCase * - Excludes all keys except metric keys @@ -822,12 +847,12 @@ module.exports = { * * @returns {Object} Returns updated data */ - throughputPerformancePostProcessing(args) { + sysPerformancePostProcessing(args) { const allowedKeys = ['average', 'current', 'max']; - const throughput = args.data; + const statsData = args.data; const formatted = {}; - Object.keys(throughput).forEach((key) => { - const val = throughput[key]; + Object.keys(statsData).forEach((key) => { + const val = statsData[key]; const newVal = {}; Object.keys(val).forEach((vkey) => { const lcKey = vkey.toLowerCase(); diff --git a/src/lib/utils/promise.js b/src/lib/utils/promise.js index a034bed8..f40d6897 100644 --- a/src/lib/utils/promise.js +++ b/src/lib/utils/promise.js @@ -8,50 +8,10 @@ 'use strict'; -/** - * Function that will attempt the promise over and over again - * - * @param {Function} fn - function which returns Promise as the result of execution - * @param {Object} [opts] - options object - * @param {Array} [opts.args] - array of arguments to apply to the function. By default 'null'. - * @param {Object} [opts.context] - context to apply to the function (.apply). By default 'null'. - * @param {Number} [opts.maxTries] - max number of re-try attempts. By default '1'. - * @param {Function} [opts.callback] - callback(err) to execute when function failed. - * Should return 'true' to continue 'retry' process. By default 'null'. - * @param {Number} [opts.delay] - a delay to apply between attempts. By default 0. - * @param {Number} [opts.backoff] - a backoff factor to apply between attempts after the second try - * (most errors are resolved immediately by a second try without a delay). By default 0. - * - * @returns {Promise} resolved when 'fn' succeed - */ -function retry(fn, opts) { - opts = opts || {}; - opts.tries = opts.tries || 0; - opts.maxTries = opts.maxTries || 1; - - return fn.apply(opts.context || null, opts.args || null) - .catch((err) => { - if (opts.tries < opts.maxTries && (!opts.callback || opts.callback(err))) { - opts.tries += 1; - let delay = opts.delay || 0; - - // applying backoff after the second try only - if (opts.backoff && opts.tries > 1) { - /* eslint-disable no-restricted-properties */ - delay += opts.backoff * Math.pow(2, opts.tries - 1); - } - if (delay) { - return new Promise((resolve) => { - setTimeout(() => resolve(retry(fn, opts)), delay); - }); - } - return retry(fn, opts); - } - return Promise.reject(err); - }); -} +/** @module utils/promise */ -module.exports = { +// eslint-disable-next-line no-multi-assign +const promiseUtils = module.exports = { /** * Returns a promise that resolves after all of the given promises have either fulfilled or rejected, * with an array of objects that each describes the outcome of each promise. @@ -62,15 +22,24 @@ module.exports = { * you don't want them to be in unknown state like Promise.all do when one of the * promises was rejected. Ideally this function should be used everywhere instead of Promise.all * + * @param {Array} + * * @returns {Promise>} resolved once all of the * given promises have either fulfilled or rejected */ allSettled(promises) { - return Promise.all(promises.map((p) => Promise.resolve(p) - .then( - (val) => ({ status: 'fulfilled', value: val }), - (err) => ({ status: 'rejected', reason: err }) - ))); + return new Promise((resolve, reject) => { + if (!Array.isArray(promises)) { + reject(new Error(`${promises} is not an array`)); + } else { + Promise.all(promises.map((p) => Promise.resolve(p) + .then( + (val) => ({ status: 'fulfilled', value: val }), + (err) => ({ status: 'rejected', reason: err }) + ))) + .then(resolve, reject); + } + }); }, /** @@ -94,16 +63,205 @@ module.exports = { }); }, - /** @see retry */ - retry + /** + * Async 'forEach' + * + * @param {Array} collection - collection of elements + * @param {ForLoopCb} callbackFn - function to execute on each element + * + * @return {Promise} resolved once finished + */ + loopForEach(collection, callbackFn) { + return new Promise((resolve, reject) => { + if (!Array.isArray(collection)) { + reject(new Error(`${collection} is not an array`)); + } else if (typeof callbackFn !== 'function') { + reject(new Error(`${callbackFn} is not a function`)); + } else if (collection.length === 0) { + resolve(); + } else { + // caching it to ignore possible mutations in collection's data that affects it's length + const collectionLength = collection.length; + let idx = 0; + + promiseUtils.loopUntil((breakCb) => { + if (idx >= collectionLength) { + return breakCb(); + } + return Promise.resolve() + .then(() => callbackFn(collection[idx], idx, collection, breakCb)) + .then(() => { idx += 1; }); + }) + .then(resolve, reject); + } + }); + }, + + /** + * Async 'until' loop + * + * Note: + * - 'until' because `callbackFn` will be called at least once due implementation + * + * @param {ForLoopCb} callbackFn - function to execute + * + * @return {Promise} resolved when stopped and with value returned by + * last succeed execution of 'callbackFn' + */ + loopUntil(callbackFn) { + return new Promise((resolve, reject) => { + if (typeof callbackFn !== 'function') { + reject(new Error(`${callbackFn} is not a function`)); + } else { + let lastRet; + let stopRequested = false; + const stopLoop = () => { + stopRequested = true; + }; + Object.defineProperty(stopLoop, 'called', { + get: () => stopRequested + }); + + (function next() { + if (stopLoop.called) { + resolve(lastRet); + } else { + Promise.resolve() + .then(() => callbackFn(stopLoop)) + .then((ret) => { + lastRet = ret; + return next(); + }) + .catch(reject); + } + }()); + } + }); + }, + + /** + * Function that will attempt the promise over and over again + * + * Note: + * - if no 'opts' passed to the function then 'fn' will be executed only once + * - if 'opts.maxTries' set to 1 then 'fn' will be executed only once + * - if 'opts.maxTries' set to 2+ then 'fn' will be executed 2+ times + * - if you want to know how many attempts were made then you can pass '{}' as 'opts' + * - if 'opts.callback' specified then it will be executed 'opts.maxTries - 1' times + * + * @param {function} fn - function to call + * @param {object} [opts] - options object + * @param {number} [opts.maxTries] - max number of re-try attempts. By default '1'. + * @param {function} [opts.callback] - callback(err) to execute when function failed. + * Should return 'true' to continue 'retry' process. By default 'null'. + * @param {number} [opts.delay] - a delay to apply between attempts. By default 0. + * @param {number} [opts.backoff] - a backoff factor to apply between attempts after the second try + * (most errors are resolved immediately by a second try without a delay). By default 0. + * + * @returns {Promise} resolved with value returned by 'fn' when succeed + */ + retry(fn, opts) { + return new Promise((resolve, reject) => { + if (typeof fn !== 'function') { + reject(new Error(`${fn} is not a function`)); + } else { + opts = opts || {}; + opts.tries = 0; + opts.maxTries = Math.abs(opts.maxTries) || 1; + + promiseUtils.loopUntil((breakCb) => Promise.resolve() + .then(() => { + opts.tries += 1; + return fn(); + }) + .then((ret) => { + breakCb(); + return ret; + }) + .catch((error) => { + if (opts.tries < opts.maxTries && (!opts.callback || opts.callback(error))) { + let delay = opts.delay || 0; + + // applying backoff after the second try only + if (opts.backoff && opts.tries > 1) { + /* eslint-disable no-restricted-properties */ + delay += opts.backoff * Math.pow(2, opts.tries - 1); + } + if (delay) { + return promiseUtils.sleep(delay); + } + return Promise.resolve(); + } + return Promise.reject(error); + })) + .then(resolve, reject); + } + }); + }, + + /** + * Sleep for N ms. + * + * @returns {Promise} resolved once N .ms passed or rejected if canceled via .cancel() + */ + sleep(sleepTime) { + /** + * According to http://www.ecma-international.org/ecma-262/6.0/#sec-promise-executor + * executor will be called immediately (synchronously) on attempt to create Promise + */ + let cancelCb; + const promise = new Promise((resolve, reject) => { + const timeoutID = setTimeout(() => { + cancelCb = null; + resolve(); + }, sleepTime); + cancelCb = (reason) => { + cancelCb = null; + clearTimeout(timeoutID); + reject(reason || new Error('canceled')); + }; + }); + /** + * @param {Error} [reason] - cancellation reason + * + * @returns {Boolean} 'true' if cancelCb called else 'false' + */ + promise.cancel = (reason) => { + if (cancelCb) { + cancelCb(reason); + return true; + } + return false; + }; + return promise; + } }; +/** + * "break" callback + * + * @callback BreakCb + * @property {boolean} called - returns true if loop stop was requested + * + * @returns {void} + */ +/** + * "forLoop" callback + * + * @callback ForLoopCb + * @param {any} item - the current element being processed in the array + * @param {number} [index] - the index of element in the array + * @param {Array} [array] - the array forLoop() was called upon + * @param {BreakCb} [breakCb] - callback to stop a loop + * + * @returns {void|Promise} + */ /** * Promise status * * @typedef PromiseResolutionStatus - * @type {Object} - * @property {String} status - fulfilled or rejected - * @property {Any} value - value returned by fulfilled promise + * @type {object} + * @property {string} status - fulfilled or rejected + * @property {any} value - value returned by fulfilled promise * @property {Error} reason - rejection reason (error object) */ diff --git a/src/lib/utils/tracer.js b/src/lib/utils/tracer.js index eb67c590..2165f9c4 100644 --- a/src/lib/utils/tracer.js +++ b/src/lib/utils/tracer.js @@ -353,7 +353,7 @@ const tpm = { if (cache.length >= this.maxRecords) { // write last N messages only const dataLen = cache.length - this.maxRecords; - this.logger.debug(`Writing ${dataLen} out of ${cache.length} messages (limit = ${this.maxRecords} messages)`); + this.logger.debug(`Writing last ${this.maxRecords} out of ${cache.length} messages (limit = ${this.maxRecords} messages)`); data = cache.slice(dataLen); } else { // this.maxRecords - cache.length = X old messages can be carried over diff --git a/src/schema/1.31.0/actions_schema.json b/src/schema/1.31.0/actions_schema.json new file mode 100644 index 00000000..c658439b --- /dev/null +++ b/src/schema/1.31.0/actions_schema.json @@ -0,0 +1,187 @@ +{ + "$id": "actions_schema.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Telemetry Streaming Actions schema", + "description": "", + "type": "object", + "definitions": { + "baseActionsChain": { + "title": "Chain of Actions", + "description": "Actions to be performed on the data.", + "type": "array", + "items": { + "$ref": "#/definitions/baseActionObject" + } + }, + "baseActionObject": { + "title": "Base Action object", + "description": "Base object to build actions.", + "type": "object", + "properties": { + "enable": { + "title": "Enable", + "description": "Whether to enable this action in the declaration or not.", + "type": "boolean", + "default": true + } + } + }, + "baseConditionalActionObject": { + "title": "Base Action object with support for conditional statements", + "description": "Base Action object with support for conditional statements.", + "type": "object", + "allOf": [ + { "$ref": "#/definitions/baseActionObject" }, + { + "anyOf": [ + { + "properties": { + "ifAllMatch": { + "title": "If All Match", + "description": "The conditions that will be checked against. All must be true.", + "type": "object", + "additionalProperties": true + } + }, + "not": { "required": ["ifAnyMatch"] } + }, + { + "properties": { + "ifAnyMatch": { + "title": "If Any Match", + "description": "An array of ifAllMatch objects. Any individual ifAllMatch object may match, but each condition within an ifAllMatch object must be true", + "type": "array" + } + }, + "not": { "required": ["ifAllMatch"] } + } + ] + } + ] + }, + "subLocation": { + "title": "Location", + "description": "Used to specify a location in TS data. Use boolean type with value true to specify the location.", + "oneOf": [ + { + "type": "boolean", + "const": true + }, + { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/subLocation" + } + } + ] + }, + "locations": { + "title": "Location", + "description": "The location(s) to apply the action.", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/subLocation" + } + }, + "setTagAction": { + "title": "setTag Action", + "description": "Action to assign a tag(s) to particular or default location", + "type": "object", + "allOf": [ + { "$ref": "#/definitions/baseConditionalActionObject" }, + { + "properties": { + "setTag": { + "title": "Set Tag", + "description": "The tag values to be added.", + "type": "object", + "additionalProperties": true + }, + "locations": { + "title": "Location", + "description": "The location(s) to apply the action.", + "allOf": [{ "$ref": "#/definitions/locations" }] + }, + "enable": {}, + "ifAllMatch": {}, + "ifAnyMatch": {} + }, + "additionalProperties": false, + "required": ["setTag"] + } + ] + }, + "includeDataAction": { + "title": "includeData Action", + "description": "Action to specify data fields to include in the output", + "type": "object", + "allOf": [ + { "$ref": "#/definitions/baseConditionalActionObject" }, + { + "properties": { + "includeData": { + "title": "Include Data", + "description": "The data fields to include in the output", + "type": "object", + "additionalProperties": false + }, + "locations": { + "title": "Location", + "description": "The location(s) to apply the action.", + "allOf": [{ "$ref": "#/definitions/locations" }] + }, + "enable": {}, + "ifAllMatch": {}, + "ifAnyMatch": {} + }, + "additionalProperties": false, + "required": ["includeData", "locations"] + } + ] + }, + "excludeDataAction": { + "title": "excludeData Action", + "description": "Action to specify data fields to exclude form the output", + "type": "object", + "allOf": [ + { "$ref": "#/definitions/baseConditionalActionObject" }, + { + "properties": { + "excludeData": { + "title": "Exclude Data", + "description": "The data fields to exclude from the output", + "type": "object", + "additionalProperties": false + }, + "locations": { + "title": "Location", + "description": "The location(s) to apply the action.", + "allOf": [{ "$ref": "#/definitions/locations" }] + }, + "enable": {}, + "ifAllMatch": {}, + "ifAnyMatch": {} + }, + "additionalProperties": false, + "required": ["excludeData", "locations"] + } + ] + }, + "inputDataStreamActionsChain": { + "title": "", + "description": "", + "allOf": [ + { "$ref": "#/definitions/baseActionsChain" }, + { + "items": { + "oneOf": [ + { "$ref": "#/definitions/excludeDataAction" }, + { "$ref": "#/definitions/includeDataAction" }, + { "$ref": "#/definitions/setTagAction" } + ] + } + } + ] + } + } +} \ No newline at end of file diff --git a/src/schema/1.31.0/base_schema.json b/src/schema/1.31.0/base_schema.json new file mode 100644 index 00000000..6602711b --- /dev/null +++ b/src/schema/1.31.0/base_schema.json @@ -0,0 +1,310 @@ +{ + "$id": "base_schema.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Telemetry Streaming", + "description": "", + "type": "object", + "definitions": { + "enable": { + "title": "Enable", + "description": "This property can be used to enable/disable the poller/listener" , + "type": "boolean" + }, + "trace": { + "title": "Trace", + "description": "Enables data dumping to file. Boolean uses pre-defined file location, however value could be a string which contains path to a specific file instead" , + "minLength": 1, + "type": ["boolean", "string"] + }, + "traceConfig": { + "title": "Trace (v2)", + "description": "Enables data dumping to file. Boolean uses pre-defined file location, however value could be a string which contains path to a specific file instead", + "type": "object", + "properties": { + "type": { + "title": "Trace type", + "description": "Trace type - output data or input data", + "type": "string", + "enum": ["output", "input"] + }, + "path": { + "title": "Path to trace file", + "description": "Path to trace file to write data to", + "type": "string", + "minLength": 1 + } + }, + "required": ["type"] + }, + "traceV2": { + "title": "Trace (v2)", + "description": "Enables data dumping to file. Boolean uses pre-defined file location, however value could be a string which contains path to a specific file instead", + "oneOf": [ + { "$ref": "#/definitions/traceConfig" }, + { + "type": "array", + "minItems": 1, + "maxItems": 2, + "uniqueItemProperties": ["type"], + "items": { + "allOf": [{ + "$ref": "#/definitions/traceConfig" + }] + } + } + ] + }, + "secret": { + "title": "Passphrase (secret)", + "description": "" , + "type": "object", + "properties": { + "class": { + "title": "Class", + "description": "Telemetry streaming secret class", + "type": "string", + "enum": [ "Secret" ], + "default": "Secret" + }, + "cipherText": { + "title": "Cipher Text: this contains a secret to encrypt", + "type": "string" + }, + "environmentVar": { + "title": "Environment Variable: this contains the named env var where the secret resides", + "type": "string", + "minLength": 1 + }, + "protected": { + "$comment": "Meta property primarily used to determine if 'cipherText' needs to be encrypted", + "title": "Protected", + "type": "string", + "enum": [ "plainText", "plainBase64", "SecureVault" ], + "default": "plainText" + } + }, + "oneOf": [ + { "required": [ "cipherText" ] }, + { "required": [ "environmentVar" ] } + ], + "f5secret": true + }, + "username": { + "$comment": "Common field for username to use everywhere in scheme", + "title": "Username", + "type": "string", + "minLength": 1 + }, + "stringOrSecret": { + "allOf": [ + { + "if": { "type": "string" }, + "then": {}, + "else": {} + }, + { + "if": { "type": "object" }, + "then": { "$ref": "base_schema.json#/definitions/secret" }, + "else": {} + } + ] + }, + "constants": { + "title": "Constants", + "description": "" , + "type": "object", + "properties": { + "class": { + "title": "Class", + "description": "Telemetry streaming constants class", + "type": "string", + "enum": [ "Constants" ] + } + }, + "additionalProperties": true + }, + "tag": { + "$comment": "Defaults do not get applied for $ref objects, so place defaults alongside instead.", + "title": "Tag", + "description": "" , + "type": "object", + "properties": { + "tenant": { + "title": "Tenant tag", + "type": "string", + "minLength": 1 + }, + "application": { + "title": "Application tag", + "type": "string", + "minLength": 1 + } + }, + "additionalProperties": true + }, + "match": { + "$comment": "Defaults do not get applied for $ref objects, so place defaults alongside instead.", + "title": "Pattern to filter data", + "description": "", + "type": "string" + }, + "enableHostConnectivityCheck": { + "$comment": "This property can be used to enable/disable the host connectivity check in configurations where this is in effect", + "title": "Host", + "description": "" , + "type": "boolean" + }, + "allowSelfSignedCert": { + "$comment": "This property can be used by consumers, system pollers to enable/disable SSL Cert check", + "title": "Allow Self-Signed Certificate", + "description": "" , + "type": "boolean" + }, + "host": { + "$comment": "This property can be used by consumers, system pollers", + "title": "Host", + "description": "" , + "type": "string", + "minLength": 1, + "anyOf": [ + { "format": "ipv4" }, + { "format": "ipv6" }, + { "format": "hostname" } + ], + "hostConnectivityCheck": true + }, + "port": { + "title": "Port", + "description": "" , + "type": "integer", + "minimum": 0, + "maximum": 65535 + }, + "protocol": { + "title": "Protocol", + "description": "" , + "type": "string", + "enum": [ "http", "https" ] + }, + "proxy": { + "title": "Proxy Configuration", + "description": "", + "type": "object", + "dependencies": { + "passphrase": [ "username" ] + }, + "required": [ "host" ], + "properties": { + "host": { + "$ref": "#/definitions/host" + }, + "port": { + "default": 80, + "allOf": [ + { + "$ref": "#/definitions/port" + } + ] + }, + "protocol": { + "default": "http", + "allOf": [ + { + "$ref": "#/definitions/protocol" + } + ] + }, + "enableHostConnectivityCheck": { + "$ref": "#/definitions/enableHostConnectivityCheck" + }, + "allowSelfSignedCert": { + "$ref": "#/definitions/allowSelfSignedCert" + }, + "username": { + "$ref": "#/definitions/username" + }, + "passphrase": { + "$ref": "#/definitions/secret" + } + }, + "additionalProperties": false + } + }, + "properties": { + "class": { + "title": "Class", + "description": "Telemetry streaming top level class", + "type": "string", + "enum": [ "Telemetry" ] + }, + "schemaVersion": { + "title": "Schema version", + "description": "Version of ADC Declaration schema this declaration uses", + "type": "string", + "$comment": "IMPORTANT: In enum array, please put current schema version first, oldest-supported version last. Keep enum array sorted most-recent-first.", + "enum": [ "1.31.0", "1.30.0", "1.29.0", "1.28.0", "1.27.1", "1.27.0", "1.26.0", "1.25.0", "1.24.0", "1.23.0", "1.22.0", "1.21.0", "1.20.1", "1.20.0", "1.19.0", "1.18.0", "1.17.0", "1.16.0", "1.15.0", "1.14.0", "1.13.0", "1.12.0", "1.11.0", "1.10.0", "1.9.0", "1.8.0", "1.7.0", "1.6.0", "1.5.0", "1.4.0", "1.3.0", "1.2.0", "1.1.0", "1.0.0", "0.9.0" ], + "default": "1.31.0" + }, + "$schema": { + "title": "Schema", + "description": "", + "type": "string" + } + }, + "additionalProperties": { + "$comment": "AJV does not resolve defaults inside oneOf/anyOf, so instead use allOf. Any schema refs should also use allOf with an if/then/else on class", + "properties": { + "class": { + "title": "Class", + "type": "string", + "enum": [ + "Telemetry_System", + "Telemetry_System_Poller", + "Telemetry_Listener", + "Telemetry_Consumer", + "Telemetry_Pull_Consumer", + "Telemetry_iHealth_Poller", + "Telemetry_Endpoints", + "Telemetry_Namespace", + "Controls", + "Shared" + ] + } + }, + "allOf": [ + { + "$ref": "system_schema.json#" + }, + { + "$ref": "system_poller_schema.json#" + }, + { + "$ref": "listener_schema.json#" + }, + { + "$ref": "consumer_schema.json#" + }, + { + "$ref": "pull_consumer_schema.json#" + }, + { + "$ref": "ihealth_poller_schema.json#" + }, + { + "$ref": "endpoints_schema.json#" + }, + { + "$ref": "controls_schema.json#" + }, + { + "$ref": "shared_schema.json#" + }, + { + "$ref": "namespace_schema.json#" + } + ] + }, + "required": [ + "class" + ] +} diff --git a/src/schema/1.31.0/consumer_schema.json b/src/schema/1.31.0/consumer_schema.json new file mode 100644 index 00000000..31e6eb96 --- /dev/null +++ b/src/schema/1.31.0/consumer_schema.json @@ -0,0 +1,1485 @@ +{ + "$id": "consumer_schema.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Telemetry Streaming Consumer schema", + "description": "", + "type": "object", + "definitions": { + "jmesPathAction": { + "title": "JMESPath Action", + "description": "Will use a JMESPath expression to modify the incoming data payload", + "type": "object", + "allOf": [ + { "$ref": "actions_schema.json#/definitions/baseActionObject" }, + { + "properties": { + "JMESPath": { + "title": "JMESPath", + "description": "Will use a JMESPath expression to modify the incoming data payload", + "type": "object", + "additionalProperties": false + }, + "expression": { + "title": "Expression", + "description": "The JMESPath expression to be applied to the incoming data payload", + "type": "string", + "minLength": 1 + }, + "enable": {} + }, + "additionalProperties": false, + "required": ["JMESPath", "expression"] + } + ] + }, + "autoTaggingStatsd": { + "title": "Statsd auto tagging", + "description": "Will parse incoming payload for values to automatically add as tags.", + "type": "object", + "properties": { + "method": { + "title": "AutoTagging method", + "description": "AutoTagging method to use to fetch tags", + "type": "string", + "enum": ["sibling"] + } + }, + "additionalProperties": false, + "required": ["method"] + }, + "genericHttpActions": { + "title": "Actions", + "description": "Actions to be performed on the Generic HTTP Consumer.", + "allOf": [ + { "$ref": "actions_schema.json#/definitions/baseActionsChain" }, + { + "items": { + "oneOf": [ + { "$ref": "#/definitions/jmesPathAction" } + ] + } + } + ] + }, + "host": { + "$comment": "Required for certain consumers: standard property", + "title": "Host", + "description": "FQDN or IP address" , + "type": "string", + "minLength": 1, + "anyOf": [ + { "format": "ipv4" }, + { "format": "ipv6" }, + { "format": "hostname" } + ], + "hostConnectivityCheck": true + }, + "protocols": { + "$comment": "Required for certain consumers: standard property", + "title": "Protocols (all)", + "description": "" , + "type": "string", + "enum": [ "https", "http", "tcp", "udp", "binaryTcpTls", "binaryTcp" ] + }, + "port": { + "$comment": "Required for certain consumers: standard property", + "title": "Port", + "description": "" , + "type": "integer", + "minimum": 0, + "maximum": 65535 + }, + "path": { + "$comment": "Required for certain consumers: standard property", + "title": "Path", + "description": "Path to post data to", + "type": ["string", "object"], + "minLength": 1, + "f5expand": true, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/stringOrSecret" + } + ] + }, + "method": { + "$comment": "Required for certain consumers: standard property", + "title": "Method", + "description": "HTTP method to use (limited to sensical choices)" , + "type": "string", + "enum": [ "POST", "GET", "PUT" ] + }, + "headers": { + "$comment": "Required for certain consumers: standard property", + "title": "Headers", + "description": "HTTP headers to use" , + "type": "array", + "items": { + "properties": { + "name": { + "description": "Name of this header", + "type": "string", + "f5expand": true, + "minLength": 1 + }, + "value": { + "description": "Value of this header", + "type": ["string", "object"], + "f5expand": true, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/stringOrSecret" + } + ] + } + }, + "required": [ + "name", + "value" + ], + "additionalProperties": false + } + }, + "customOpts": { + "$comment": "Required for certain consumers: standard property", + "title": "Custom Opts (Client Library Dependent)", + "description": "Additional options for use by consumer client library. Refer to corresponding consumer lib documentation for acceptable keys and values." , + "type": "array", + "items": { + "properties": { + "name": { + "description": "Name of the option", + "type": "string", + "f5expand": true, + "minLength": 1 + }, + "value": { + "description": "Value of the option", + "minLength": 1, + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "number" + }, + { + "allOf": [ + { + "f5expand": true + }, + { + "$ref": "base_schema.json#/definitions/stringOrSecret" + } + ] + } + ] + } + }, + "required": [ + "name", + "value" + ], + "additionalProperties": false + }, + "minItems": 1 + }, + "format": { + "$comment": "Required for certain consumers: Splunk and Azure_Log_Analytics", + "title": "Format (informs consumer additional formatting may be required)", + "description": "", + "type": "string" + }, + "username": { + "$comment": "Required for certain consumers: standard property", + "title": "Username", + "description": "" , + "minLength": 1, + "type": "string", + "f5expand": true + }, + "region": { + "$comment": "Required for certain consumers: AWS_CloudWatch, AWS_S3, Azure_Log_Analytics, Azure_App_Insights, DataDog", + "title": "Region", + "description": "" , + "type": "string", + "minLength": 1, + "f5expand": true + }, + "endpointUrl": { + "$comment": "Required for certain consumers: AWS_CloudWatch, AWS_S3", + "title": "endpoint url", + "description": "The full endpoint URL for service requests", + "type": "string", + "minLength": 1, + "f5expand": true + }, + "bucket": { + "$comment": "Required for certain consumers: AWS_S3", + "title": "Bucket", + "description": "" , + "type": "string", + "minLength": 1, + "f5expand": true + }, + "maxAwsLogBatchSize": { + "$comment": "Required for certain consumers: AWS_CloudWatch", + "title": "Maximum Batch Size", + "description": "The maximum number of telemetry items to include in a payload to the ingestion endpoint", + "type": "integer", + "minimum": 1, + "default": 100, + "maximum": 10000 + }, + "logGroup": { + "$comment": "Required for certain consumers: AWS_CloudWatch", + "title": "Log Group", + "description": "" , + "type": "string", + "minLength": 1, + "f5expand": true + }, + "logStream": { + "$comment": "Required for certain consumers: AWS_CloudWatch", + "title": "Log Stream", + "description": "" , + "type": "string", + "minLength": 1, + "f5expand": true + }, + "metricNamespace": { + "$comment": "Required for certain consumers: AWS_CloudWatch", + "title": "Metric Namespace", + "description": "The namespace for the metrics", + "type": "string", + "f5expand": true, + "minLength": 1 + }, + "metricPrefix": { + "$comment": "Required for certain consumers: DataDog", + "title": "Metric Prefix", + "description": "The string value(s) to use as a metric prefix", + "type": "array", + "minItems": 1, + "items": { + "allOf": [{ + "type": "string", + "f5expand": true, + "minLength": 1 + }] + } + }, + "workspaceId": { + "$comment": "Required for certain consumers: Azure_Log_Analytics", + "title": "Workspace ID", + "description": "" , + "type": "string", + "minLength": 1, + "f5expand": true + }, + "useManagedIdentity": { + "$comment": "Required for certain consumers: Azure_Log_Analytics and Azure_Application_Insights", + "title": "Use Managed Identity", + "description": "Determines whether to use Managed Identity to perform authorization for Azure services", + "type": "boolean", + "default": false + }, + "appInsightsResourceName": { + "$comment": "Required for certain consumers: Azure_Application_Insights", + "title": "Application Insights Resource Name (Pattern)", + "description": "Name filter used to determine which App Insights resource to send metrics to. If not provided, TS will send metrics to App Insights in the subscription in which the managed identity has permissions to", + "type": "string", + "minLength": 1 + }, + "instrumentationKey": { + "$comment": "Required for certain consumers: Azure_Application_Insights", + "title": "Instrumentation Key", + "description": "Used to determine which App Insights resource to send metrics to", + "anyOf": [ + { + "type": "string", + "f5expand": true, + "minLength": 1 + }, + { + "type":"array", + "items": { + "type": "string", + "f5expand": true, + "minLength": 1 + }, + "minItems": 1 + } + ] + }, + "maxBatchIntervalMs": { + "$comment": "Required for certain consumers: Azure_Application_Insights", + "title": "Maximum Batch Interval (ms)", + "description": "The maximum amount of time to wait in milliseconds to for payload to reach maxBatchSize", + "type": "integer", + "minimum": 1000, + "default": 5000 + }, + "maxBatchSize": { + "$comment": "Required for certain consumers: Azure_Application_Insights", + "title": "Maximum Batch Size", + "description": "The maximum number of telemetry items to include in a payload to the ingestion endpoint", + "type": "integer", + "minimum": 1, + "default": 250 + }, + "topic": { + "$comment": "Required for certain consumers: Kafka", + "title": "Topic", + "description": "" , + "type": "string", + "f5expand": true + }, + "index": { + "$comment": "Required for certain consumers: ElasticSearch", + "title": "Index Name", + "description": "" , + "type": "string", + "minLength": 1, + "f5expand": true + }, + "apiVersion": { + "$comment": "Required for certain consumers: ElasticSearch", + "title": "API Version", + "description": "" , + "type": "string", + "minLength": 1, + "f5expand": true + }, + "dataType": { + "$comment": "Required for certain consumers: AWS_CloudWatch, ElasticSearch", + "title": "Data type", + "description": "" , + "type": "string", + "f5expand": true + }, + "authenticationProtocol": { + "$comment": "Required for certain consumers: Kafka", + "title": "Authentication Protocol", + "description": "" , + "type": "string", + "f5expand": true, + "enum": [ + "SASL-PLAIN", + "TLS", + "None" + ] + }, + "clientCertificate": { + "$comment": "Required for certain consumers: Kafka, Generic HTTP, OpenTelemetry_Exporter", + "title": "Client Certificate", + "description": "Certificate(s) to use when connecting to a secured endpoint.", + "type": "object", + "f5expand": true, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/secret" + } + ] + }, + "rootCertificate": { + "$comment": "Required for certain consumers: Kafka, Generic HTTP, OpenTelemetry_Exporter", + "title": "Root Certificate", + "description": "Certificate Authority root certificate, used to validate certificate chains.", + "type": "object", + "f5expand": true, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/secret" + } + ] + }, + "outputMode": { + "$comment": "Required for certain consumers: Generic HTTP", + "title": "output raw data flag", + "description": "Flag to request output of the raw data.", + "type": "string", + "enum": [ "processed", "raw" ] + }, + "projectId": { + "$comment": "Required for certain consumers: Google_Cloud_Monitoring", + "title": "Project ID", + "description": "The ID of the relevant project.", + "type": "string", + "minLength": 1, + "f5expand": true + }, + "serviceEmail": { + "$comment": "Required for certain consumers: Google_Cloud_Monitoring, Google_Cloud_Logging", + "title": "Service Email", + "description": "The service email.", + "type": "string", + "minLength": 1, + "f5expand": true + }, + "privateKeyId": { + "$comment": "Required for certain consumers when Service Account Token is not used: Google_Cloud_Monitoring, Google_Cloud_Logging", + "title": "Private Key ID", + "description": "The private key ID.", + "type": "string", + "minLength": 1, + "f5expand": true + }, + "useServiceAccountToken": { + "$comment": "Used by certain consumers: Google_Cloud_Monitoring, Google_Cloud_Logging", + "title": "Use Service Account Token", + "description": "Determines whether to use Service Account Token to perform authorization for Google services", + "type": "boolean", + "default": false + }, + "logScope": { + "$comment": "Required for certain consumers: Google_Cloud_Logging", + "title": "Logging Scope Type", + "description": "" , + "enum": ["projects", "organizations", "billingAccounts", "folders"], + "f5expand": true + }, + "logScopeId": { + "$comment": "Required for certain consumers: Google_Cloud_Logging", + "title": "Logging Scope ID", + "description": "" , + "type": "string", + "minLength": 1, + "f5expand": true + }, + "logId": { + "$comment": "Required for certain consumers: Google_Cloud_Logging", + "title": "Logging ID", + "description": "" , + "type": "string", + "format": "regex", + "pattern": "^[a-zA-z0-9._-]+$", + "minLength": 1, + "f5expand": true + }, + "privateKey": { + "$comment": "Required for certain consumers: Kafka, Generic HTTP, OpenTelemetry_Exporter", + "title": "Private Key", + "description": "Private Key", + "type": "object", + "f5expand": true, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/secret" + } + ] + }, + "eventSchemaVersion": { + "$comment": "Required for certain consumers: F5_Cloud", + "title": "Event Schema Version", + "description": "" , + "type": "string", + "minLength": 1, + "f5expand": true, + "default": "1" + }, + "f5csTenantId": { + "$comment": "Required for certain consumers: F5_Cloud", + "title": "F5CS Tenant ID", + "description": "" , + "type": "string", + "minLength": 1, + "f5expand": true + }, + "f5csSensorId": { + "$comment": "Required for certain consumers: F5_Cloud", + "title": "F5CS Sensor ID", + "description": "" , + "type": "string", + "minLength": 1, + "f5expand": true + }, + "payloadSchemaNid": { + "$comment": "Required for certain consumers: F5_Cloud", + "title": "Namespace ID for payloadSchema", + "description": "" , + "type": "string", + "minLength": 1, + "f5expand": true + }, + "serviceAccount": { + "$comment": "Required for certain consumers: F5_Cloud", + "title": "Service Account", + "description": "Service Account to authentication" , + "type": "object", + "properties": { + "authType": { + "$comment": "Required for certain consumers: F5_Cloud", + "title": "SA Type", + "description": "" , + "type": "string", + "enum": ["google-auth" ] + }, + "type": { + "$comment": "Required for certain consumers: F5_Cloud", + "title": "SA Type", + "description": "" , + "type": "string", + "minLength": 1, + "f5expand": true + }, + "projectId": { + "$comment": "Required for certain consumers: F5_Cloud", + "title": "Project Id", + "description": "" , + "type": "string", + "minLength": 1, + "f5expand": true + }, + "privateKeyId": { + "$comment": "Required for certain consumers: F5_Cloud", + "title": "Private Key Id", + "description": "" , + "type": "string", + "minLength": 1, + "f5expand": true + }, + "privateKey": { + "$ref": "base_schema.json#/definitions/secret" + }, + "clientEmail": { + "$comment": "Required for certain consumers: F5_Cloud", + "title": "Client Email", + "description": "" , + "type": "string", + "minLength": 1, + "f5expand": true + }, + "clientId": { + "$comment": "Required for certain consumers: F5_Cloud", + "title": "Client Id", + "description": "" , + "type": "string", + "minLength": 1, + "f5expand": true + }, + "authUri": { + "$comment": "Required for certain consumers: F5_Cloud", + "title": "Auth Uri", + "description": "" , + "type": "string", + "minLength": 1, + "f5expand": true + }, + "tokenUri": { + "$comment": "Required for certain consumers: F5_Cloud", + "title": "Token Uri", + "description": "" , + "type": "string", + "minLength": 1, + "f5expand": true + }, + "authProviderX509CertUrl": { + "$comment": "Required for certain consumers: F5_Cloud", + "title": "Auth Provider X509 Cert Url", + "description": "" , + "type": "string", + "minLength": 1, + "f5expand": true + }, + "clientX509CertUrl": { + "$comment": "Required for certain consumers: F5_Cloud", + "title": "Client X509 Cert Url", + "description": "" , + "type": "string", + "minLength": 1, + "f5expand": true + } + }, + "additionalProperties": false, + "allOf": [ + { + "if": { "properties": { "authType": { "const": "google-auth" } } }, + "then": { + "required": [ + "type", + "projectId", + "privateKeyId", + "privateKey", + "clientEmail", + "clientId", + "authUri", + "tokenUri", + "authProviderX509CertUrl", + "clientX509CertUrl" + ] + }, + "else": {} + } + ] + }, + "targetAudience": { + "$comment": "Required for certain consumers: F5_Cloud", + "title": "Target Audience", + "description": "" , + "type": "string", + "minLength": 1, + "f5expand": true + }, + "useSSL": { + "$comment": "Required for certain consumers: F5_Cloud, OpenTelemetry_Exporter", + "title": "useSSL", + "description": "To decide if GRPC connection should use SSL and then it is secured" , + "type": "boolean", + "f5expand": true + }, + "compressionType": { + "$comment": "Required for certain consumers: DataDog, Splunk", + "title": "Data compression", + "description": "Whether or not to compress data and what compression to use before sending it to destination", + "type": "string", + "enum": ["none", "gzip"] + }, + "reportInstanceMetadata": { + "$comment": "Required for certain consumers: Google_Cloud_Monitoring, Google_Cloud_Logging", + "title": "Instance metadata reporting", + "description": "Enables instance metadata collection and reporting" , + "type": "boolean", + "f5expand": true + }, + "apiKey": { + "$comment": "Required for certain consumers: DataDog", + "title": "API key to use to push data", + "type": "string", + "minLength": 1, + "f5expand": true + }, + "service": { + "$comment": "Required for certain consumers: DataDog", + "title": "The name of the service generating telemetry data", + "type": "string", + "minLength": 1, + "f5expand": true + }, + "convertBooleansToMetrics": { + "$comment": "Required for certain consumers: DataDog, Statsd, OpenTelemetry_Exporter", + "title": "Convert boolean values to metrics", + "description": "Whether or not to convert boolean values to metrics. True becomes 1, False becomes 0" , + "type": "boolean", + "f5expand": true, + "default": false + }, + "customTags": { + "$comment": "Required for certain consumers: DataDog", + "title": "Custom tags", + "description": "A collection of custom tags that are appended to the dynamically generated telemetry tags", + "type": "array", + "minItems": 1, + "items": { + "properties": { + "name": { + "description": "Name of this tag", + "type": "string", + "f5expand": true, + "minLength": 1 + }, + "value": { + "description": "Value of this tag", + "type": "string", + "f5expand": true, + "minLength": 1 + } + }, + "additionalProperties": false + } + }, + "customHttpOpts": { + "items": { + "allOf": [ + { + "if": { "properties": { "name": { "const": "keepAlive" } } }, + "then": { "properties": { "value": { "type": "boolean" } } } + }, + { + "if": { "properties": { "name": { "const": "keepAliveMsecs" } } }, + "then": { "properties": { "value": { "type": "integer", "minimum": 0 } } } + }, + { + "if": { "properties": { "name": { "const": "maxSockets" } } }, + "then": { "properties": { "value": { "type": "integer", "minimum": 0 } } } + }, + { + "if": { "properties": { "name": { "const": "maxFreeSockets" } } }, + "then": { "properties": { "value": { "type": "integer", "minimum": 0 } } } + } + ] + } + }, + "otelExporter": { + "$comment": "Required for certain consumers: OpenTelemetry_Exporter", + "title": "Open Telemetry Exporter", + "description": "" , + "type": "string", + "enum": ["grpc", "json", "protobuf" ] + } + }, + "allOf": [ + { + "if": { "properties": { "class": { "const": "Telemetry_Consumer" } } }, + "then": { + "required": [ + "class", + "type" + ], + "properties": { + "class": { + "title": "Class", + "description": "Telemetry Streaming Consumer class", + "type": "string", + "enum": [ "Telemetry_Consumer" ] + }, + "enable": { + "default": true, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/enable" + } + ] + }, + "trace": { + "default": false, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/trace" + } + ] + }, + "type": { + "title": "Type", + "description": "" , + "type": "string", + "enum": [ + "AWS_CloudWatch", + "AWS_S3", + "Azure_Log_Analytics", + "Azure_Application_Insights", + "DataDog", + "default", + "ElasticSearch", + "Generic_HTTP", + "Google_Cloud_Logging", + "Google_Cloud_Monitoring", + "Google_StackDriver", + "Graphite", + "Kafka", + "OpenTelemetry_Exporter", + "Splunk", + "Statsd", + "Sumo_Logic", + "F5_Cloud" + ] + }, + "enableHostConnectivityCheck": { + "$ref": "base_schema.json#/definitions/enableHostConnectivityCheck" + }, + "allowSelfSignedCert": { + "default": false, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/allowSelfSignedCert" + } + ] + } + }, + "allOf": [ + { + "$comment": "This allows enforcement of no additional properties in this nested schema - could reuse above properties but prefer a separate block", + "properties": { + "addTags": {}, + "actions": {}, + "apiKey": {}, + "class": {}, + "customTags": {}, + "enable": {}, + "trace": {}, + "type": {}, + "enableHostConnectivityCheck": {}, + "allowSelfSignedCert": {}, + "host": {}, + "protocol": {}, + "port": {}, + "path": {}, + "method": {}, + "headers": {}, + "customOpts": {}, + "username": {}, + "passphrase": {}, + "format": {}, + "workspaceId": {}, + "useManagedIdentity": {}, + "instrumentationKey": {}, + "appInsightsResourceName": {}, + "maxBatchIntervalMs": {}, + "maxBatchSize": {}, + "region": {}, + "endpointUrl": {}, + "maxAwsLogBatchSize": {}, + "logGroup": {}, + "logStream": {}, + "metricNamespace": {}, + "metricPrefix": {}, + "bucket": {}, + "topic": {}, + "apiVersion": {}, + "index": {}, + "dataType": {}, + "authenticationProtocol": {}, + "projectId": {}, + "serviceEmail": {}, + "privateKey": {}, + "privateKeyId": {}, + "useServiceAccountToken": {}, + "clientCertificate": {}, + "rootCertificate": {}, + "outputMode": {}, + "fallbackHosts": {}, + "eventSchemaVersion": {}, + "f5csTenantId": {}, + "f5csSensorId": {}, + "payloadSchemaNid": {}, + "serviceAccount": {}, + "targetAudience": {}, + "useSSL": {}, + "proxy": {}, + "compressionType": {}, + "logScope": {}, + "logScopeId": {}, + "logId": {}, + "reportInstanceMetadata": {}, + "metricsPath": {}, + "service": {}, + "convertBooleansToMetrics": {}, + "exporter": {} + }, + "additionalProperties": false, + "dependencies": { + "actions": { + "allOf": [ + { + "properties": { "type": { "const": "Generic_HTTP" } } + } + ] + } + } + }, + { + "if": { "properties": { "type": { "const": "default" } } }, + "then": { + "required": [], + "properties": {} + }, + "else": {} + }, + { + "if": { "properties": { "type": { "const": "Generic_HTTP" } } }, + "then": { + "required": [ + "host" + ], + "properties": { + "host": { "$ref": "#/definitions/host" }, + "fallbackHosts": { + "type": "array", + "description": "List FQDNs or IP addresses to be used as fallback hosts" , + "minItems": 1, + "items": { + "allOf": [{ + "$ref": "#/definitions/host" + }] + } + }, + "protocol": { "$ref": "#/definitions/protocols", "default": "https" }, + "port": { "$ref": "#/definitions/port", "default": 443 }, + "path": { "$ref": "#/definitions/path", "default": "/" }, + "method": { "$ref": "#/definitions/method", "default": "POST" }, + "headers": { "$ref": "#/definitions/headers" }, + "passphrase": { "$ref": "base_schema.json#/definitions/secret" }, + "proxy": { "$ref": "base_schema.json#/definitions/proxy" }, + "privateKey": { "$ref": "#/definitions/privateKey" }, + "clientCertificate": { "$ref": "#/definitions/clientCertificate" }, + "rootCertificate": { "$ref": "#/definitions/rootCertificate" }, + "outputMode": { "$ref": "#/definitions/outputMode", "default": "processed" }, + "actions": { "$ref": "#/definitions/genericHttpActions" }, + "compressionType": { "$ref": "#/definitions/compressionType", "default": "none" }, + "customOpts": { + "allOf": [ + { "$ref": "#/definitions/customOpts" }, + { "$ref": "#/definitions/customHttpOpts" } + ] + } + }, + "allOf": [ + { + "if": { "required": [ "clientCertificate" ] }, + "then": { "required": [ "privateKey" ] } + }, + { + "if": { "required": [ "privateKey" ] }, + "then": { "required": [ "clientCertificate" ] } + } + ] + }, + "else": {} + }, + { + "if": { "properties": { "type": { "const": "Splunk" } } }, + "then": { + "required": [ + "host", + "passphrase" + ], + "properties": { + "host": { "$ref": "#/definitions/host" }, + "protocol": { "$ref": "#/definitions/protocols", "default": "https" }, + "port": { "$ref": "#/definitions/port", "default": 8088 }, + "passphrase": { "$ref": "base_schema.json#/definitions/secret" }, + "format": { "$ref": "#/definitions/format", "enum": [ "default", "legacy", "multiMetric" ], "default": "default" }, + "proxy": { "$ref": "base_schema.json#/definitions/proxy" }, + "compressionType": { "$ref": "#/definitions/compressionType", "default": "gzip" } + } + }, + "else": {} + }, + { + "if": { "properties": { "type": { "const": "Azure_Log_Analytics" } } }, + "then": { + "required": [ + "workspaceId" + ], + "properties": { + "workspaceId": { "$ref": "#/definitions/workspaceId" }, + "format": { "$ref": "#/definitions/format", "enum": [ "default", "propertyBased" ], "default": "default" }, + "passphrase": { "$ref": "base_schema.json#/definitions/secret" }, + "useManagedIdentity": { "$ref": "#/definitions/useManagedIdentity", "default": false }, + "region": { "$ref": "#/definitions/region" } + }, + "allOf": [ + { + "dependencies": { + "passphrase": { + "anyOf": [ + { "not": {"required": [ "useManagedIdentity" ] } }, + { "properties": { "useManagedIdentity": { "const": false } } } + ] + } + } + }, + { + "if": { "not": { "required" : [ "useManagedIdentity"] } }, + "then": { "required": ["passphrase"] }, + "else": { + "if": { "properties": { "useManagedIdentity": { "const": true } } }, + "then": { "not": { "required": ["passphrase"] } }, + "else": { "required": ["passphrase"]} + } + } + ] + }, + "else": {} + }, + { + "if": { "properties": { "type": { "const": "Azure_Application_Insights" } } }, + "then": { + "properties": { + "instrumentationKey": { "$ref": "#/definitions/instrumentationKey" }, + "maxBatchSize": { "$ref": "#/definitions/maxBatchSize", "default": 250 }, + "maxBatchIntervalMs": { "$ref": "#/definitions/maxBatchIntervalMs", "default": 5000 }, + "customOpts": { "$ref": "#/definitions/customOpts" }, + "useManagedIdentity": { "$ref": "#/definitions/useManagedIdentity", "default": false }, + "appInsightsResourceName": { "$ref": "#/definitions/appInsightsResourceName" }, + "region": { "$ref": "#/definitions/region" } + }, + "allOf": [ + { + "dependencies": { + "instrumentationKey": { + "allOf": [ + { + "anyOf": [ + { "not": { "required": [ "useManagedIdentity" ] } }, + { "properties": { "useManagedIdentity": { "const": false } } } + ] + }, + { + "not": { "required": ["appInsightsResourceName"] } + } + ] + } + } + }, + { + "if": { "not": { "required" : [ "useManagedIdentity"] } }, + "then": { "required": ["instrumentationKey"] }, + "else": { + "if": { "properties": { "useManagedIdentity": { "const": true } } }, + "then": { "not": { "required": ["instrumentationKey"] } }, + "else": { + "allOf": [ + { "required": [ "instrumentationKey" ]}, + { "not": { "required": [ "appInsightsResourceName" ] } } + ] + } + } + }, + { + "if": { "required": [ "appInsightsResourceName" ] }, + "then": { "properties": { "appInsightsResourceName": { "minLength": 1 } }} + } + ] + }, + "else": {} + }, + { + "if": { "properties": { "type": { "const": "AWS_CloudWatch" } } }, + "then": { + "required": [ + "region", + "dataType" + ], + "properties": { + "region": { "$ref": "#/definitions/region" }, + "dataType": { "$ref": "#/definitions/dataType", "default": "logs" }, + "username": { "$ref": "#/definitions/username" }, + "passphrase": { "$ref": "base_schema.json#/definitions/secret" }, + "endpointUrl": { "$ref": "#/definitions/endpointUrl" } + }, + "allOf": [ + { "not": { "required": ["username"], "not": { "required": ["passphrase"] }}}, + { "not": { "required": ["passphrase"], "not": { "required": ["username"] }}}, + { + "if": { "properties": { "dataType": { "enum": ["logs", null] } } }, + "then": { + "properties": { + "maxAwsLogBatchSize": { "$ref": "#/definitions/maxAwsLogBatchSize", "default": 100 } + }, + "required": ["maxAwsLogBatchSize"] + } + }, + { "oneOf": + [ + { + "allOf": [ + { + "properties": { + "logGroup": { "$ref": "#/definitions/logGroup" }, + "logStream": { "$ref": "#/definitions/logStream" }, + "dataType": { + "allOf": + [ + { "$ref": "#/definitions/dataType"}, + { "enum": ["logs", null] } + ] + } + } + }, + { "required":[ "logGroup", "logStream" ] }, + { "not": { "required": ["metricNamespace"] }} + ] + }, + { + "allOf": [ + { + "properties": { + "metricNamespace": { "$ref": "#/definitions/metricNamespace" }, + "dataType": { + "allOf": [ + { "$ref": "#/definitions/dataType"}, + { "enum": ["metrics"] } + ] + } + } + }, + { "required":[ "metricNamespace" ] }, + { "not": { "required":[ "maxAwsLogBatchSize" ] }}, + { "not": { "required":[ "logStream" ] }}, + { "not": { "required":[ "logGroup" ] }} + ] + } + ] + } + ] + }, + "else": {} + }, + { + "if": { "properties": { "type": { "const": "AWS_S3" } } }, + "then": { + "required": [ + "region", + "bucket" + ], + "properties": { + "region": { "$ref": "#/definitions/region" }, + "bucket": { "$ref": "#/definitions/bucket" }, + "username": { "$ref": "#/definitions/username" }, + "passphrase": { "$ref": "base_schema.json#/definitions/secret" }, + "endpointUrl": { "$ref": "#/definitions/endpointUrl" } + }, + "dependencies": { + "passphrase": [ "username" ], + "username":[ "passphrase" ] + } + }, + "else": {} + }, + { + "if": { "properties": { "type": { "const": "Graphite" } } }, + "then": { + "required": [ + "host" + ], + "properties": { + "host": { "$ref": "#/definitions/host" }, + "protocol": { "$ref": "#/definitions/protocols", "default": "https" }, + "port": { "$ref": "#/definitions/port", "default": 443 }, + "path": { "$ref": "#/definitions/path", "default": "/events/" } + } + }, + "else": {} + }, + { + "if": { "properties": { "type": { "const": "Kafka" } } }, + "then": { + "required": [ + "host", + "topic" + ], + "properties": { + "authenticationProtocol": { "$ref": "#/definitions/authenticationProtocol", "default": "None" }, + "host": { "$ref": "#/definitions/host" }, + "protocol": { "$ref": "#/definitions/protocols", "default": "binaryTcpTls" }, + "port": { "$ref": "#/definitions/port", "default": 9092 }, + "topic": { "$ref": "#/definitions/topic" } + }, + "allOf": [ + { + "if": { "properties": { "authenticationProtocol": { "const": "SASL-PLAIN" } } }, + "then": { + "required": [ + "username" + ], + "properties": { + "username": { "$ref": "#/definitions/username" }, + "passphrase": { "$ref": "base_schema.json#/definitions/secret" } + }, + "dependencies": { + "passphrase": [ "username" ] + } + }, + "else": {} + }, + { + "if": { "properties": { "authenticationProtocol": { "const": "TLS" } } }, + "then": { + "required": [ + "privateKey", + "clientCertificate" + ], + "allOf": [ + { "not": { "required": [ "username" ] } }, + { "not": { "required": [ "passphrase" ] } } + ], + "properties": { + "privateKey": { "$ref": "#/definitions/privateKey" }, + "clientCertificate": { "$ref": "#/definitions/clientCertificate" }, + "rootCertificate": { "$ref": "#/definitions/rootCertificate" }, + "protocol": { "const": "binaryTcpTls" } + } + }, + "else": {} + } + ] + }, + "else": {} + }, + { + "if": { "properties": { "type": { "const": "ElasticSearch" } } }, + "then": { + "required": [ + "host", + "index" + ], + "properties": { + "host": { "$ref": "#/definitions/host" }, + "protocol": { "$ref": "#/definitions/protocols", "default": "https" }, + "port": { "$ref": "#/definitions/port", "default": 9200 }, + "path": { "$ref": "#/definitions/path" }, + "username": { "$ref": "#/definitions/username" }, + "passphrase": { "$ref": "base_schema.json#/definitions/secret" }, + "apiVersion": { "$ref": "#/definitions/apiVersion", "default": "6.0" }, + "index": { "$ref": "#/definitions/index" } + }, + "allOf": [ + { + "if": { "properties": { "apiVersion": { "pattern": "^[0-6][.]|^[0-6]$" } } }, + "then": { + "properties": { + "dataType": { + "$ref": "#/definitions/dataType", + "default": "f5.telemetry", + "minLength": 1 + } + } + }, + "else": { + "if": { "properties": { "apiVersion": { "pattern": "^7[.]|^7$" } } }, + "then": { + "properties": { + "dataType": { + "$ref": "#/definitions/dataType", + "default": "_doc", + "minLength": 1 + } + } + }, + "else": { + "allOf": [ + { "not": { "required": [ "dataType" ] } } + ] + } + } + } + ] + }, + "else": {} + }, + { + "if": { "properties": { "type": { "const": "Sumo_Logic" } } }, + "then": { + "required": [ + "host", + "passphrase" + ], + "properties": { + "host": { "$ref": "#/definitions/host" }, + "protocol": { "$ref": "#/definitions/protocols", "default": "https" }, + "port": { "$ref": "#/definitions/port", "default": 443 }, + "path": { "$ref": "#/definitions/path", "default": "/receiver/v1/http/" }, + "passphrase": { "$ref": "base_schema.json#/definitions/secret" } + } + }, + "else": {} + }, + { + "if": { "properties": { "type": { "const": "Statsd" } } }, + "then": { + "required": [ + "host" + ], + "properties": { + "host": { "$ref": "#/definitions/host" }, + "protocol": { + "title": "Protocol", + "type": "string", + "enum": [ "tcp", "udp" ], + "default": "udp" + }, + "port": { "$ref": "#/definitions/port", "default": 8125 }, + "addTags": { "$ref": "#/definitions/autoTaggingStatsd" }, + "convertBooleansToMetrics": { "$ref": "#/definitions/convertBooleansToMetrics", "default": "false" } + } + }, + "else": {} + }, + { + "if": { + "properties": { "type": { "enum": ["Google_Cloud_Monitoring", "Google_StackDriver", "Google_Cloud_Logging"] } } + }, + "then": { + "required": [ + "serviceEmail" + ], + "properties": { + "privateKeyId": { "$ref": "#/definitions/privateKeyId" }, + "serviceEmail": { "$ref": "#/definitions/serviceEmail" }, + "privateKey": { "$ref": "base_schema.json#/definitions/secret" }, + "useServiceAccountToken": { "$ref": "#/definitions/useServiceAccountToken", "default": false }, + "reportInstanceMetadata": { "$ref": "#/definitions/reportInstanceMetadata", "default": false } + }, + "allOf": [ + { + "dependencies": { + "privateKeyId": { + "anyOf": [ + { "not": {"required": [ "useServiceAccountToken" ] } }, + { "properties": { "useServiceAccountToken": { "const": false } } } + ] + } + } + }, + { + "dependencies": { + "privateKey": { + "anyOf": [ + { "not": {"required": [ "useServiceAccountToken" ] } }, + { "properties": { "useServiceAccountToken": { "const": false } } } + ] + } + } + }, + { + "if": { + "anyOf": [ + { "not": { "required" : [ "useServiceAccountToken"] } }, + { "properties": { "useServiceAccountToken": { "const": false } } } + ] + }, + "then": { "required": ["privateKeyId", "privateKey"] }, + "else": { "not": { "required": ["privateKeyId", "privateKey"] } } + }, + { + "if": { "properties": { "type": { "enum": ["Google_Cloud_Monitoring", "Google_StackDriver"] } } }, + "then": { + "properties": { + "projectId": { "$ref": "#/definitions/projectId"} + }, + "required": ["projectId"] + } + }, + { + "if": { "properties": { "type": { "const": "Google_Cloud_Logging" } } }, + "then": { + "properties": { + "logScope": { "$ref": "#/definitions/logScope", "default": "projects" }, + "logScopeId": { "$ref": "#/definitions/logScopeId"}, + "logId": { "$ref": "#/definitions/logId"} + }, + "required": ["logScope", "logScopeId", "logId"] + } + } + ] + }, + "else": {} + }, + { + "if": { "properties": { "type": { "const": "F5_Cloud" } } }, + "then": { + "required": [ + "f5csTenantId", + "f5csSensorId", + "payloadSchemaNid", + "serviceAccount", + "targetAudience" + ], + "properties": { + "port": { "$ref": "#/definitions/port", "default": 443 }, + "eventSchemaVersion": { "$ref": "#/definitions/eventSchemaVersion" }, + "f5csTenantId": { "$ref": "#/definitions/f5csTenantId" }, + "f5csSensorId": { "$ref": "#/definitions/f5csSensorId" }, + "payloadSchemaNid": { "$ref": "#/definitions/payloadSchemaNid" }, + "serviceAccount": { "$ref": "#/definitions/serviceAccount" }, + "targetAudience": { "$ref": "#/definitions/targetAudience" }, + "useSSL": { "$ref": "#/definitions/useSSL", "default": true } + }, + "nodeSupportVersion": "8.11.1" + }, + "else": {} + }, + { + "if": { "properties": { "type": { "const": "DataDog" } } }, + "then": { + "required": [ + "apiKey" + ], + "properties": { + "apiKey": { "$ref": "#/definitions/apiKey" }, + "compressionType": { "$ref": "#/definitions/compressionType", "default": "none" }, + "region": { "$ref": "#/definitions/region", "enum": ["US1", "US3", "EU1", "US1-FED"], "default": "US1" }, + "service": { "$ref": "#/definitions/service", "default": "f5-telemetry" }, + "metricPrefix": { "$ref": "#/definitions/metricPrefix" }, + "convertBooleansToMetrics": { "$ref": "#/definitions/convertBooleansToMetrics", "default": "false" }, + "customTags": { "$ref": "#/definitions/customTags" }, + "customOpts": { + "allOf": [ + { "$ref": "#/definitions/customOpts" }, + { "$ref": "#/definitions/customHttpOpts" } + ] + }, + "proxy": { "$ref": "base_schema.json#/definitions/proxy" } + } + }, + "else": {} + }, + { + "if": { "properties": { "type": { "const": "OpenTelemetry_Exporter" } } }, + "then": { + "required": [ + "host", + "port" + ], + "properties": { + "host": { "$ref": "#/definitions/host" }, + "port": { "$ref": "#/definitions/port" }, + "headers": { "$ref": "#/definitions/headers" }, + "metricsPath": { "$ref": "#/definitions/path" }, + "convertBooleansToMetrics": { "$ref": "#/definitions/convertBooleansToMetrics", "default": "false" }, + "exporter": { "$ref": "#/definitions/otelExporter", "default": "protobuf" }, + "privateKey": { "$ref": "#/definitions/privateKey" }, + "clientCertificate": { "$ref": "#/definitions/clientCertificate" }, + "rootCertificate": { "$ref": "#/definitions/rootCertificate" } + }, + "dependencies": { + "clientCertificate": ["privateKey"], + "privateKey": ["clientCertificate"] + }, + "nodeSupportVersion": "8.11.1", + "allOf": [ + { + "if": { "properties": { "exporter": { "const": "grpc" } } } , + "then": { + "properties": { + "useSSL": { "$ref": "#/definitions/useSSL", "default": true } + }, + "allOf": [ + { + "if": { "properties": { "useSSL": { "const": false } } }, + "then": { + "allOf": [ + { "not": { "required": ["privateKey"] } }, + { "not": { "required": ["clientCertificate"] } }, + { "not": { "required": ["rootCertificate"] } } + ] + } + }, + { + "allOf": [ + { "not": { "required": ["metricsPath"] } }, + { "not": { "required": ["protocol"] } } + ] + } + ] + }, + "else": { + "properties": { + "protocol": { "$ref": "#/definitions/protocols", "default": "http", "enum": ["http", "https"] } + }, + "allOf": [ + { "not": { "required": ["useSSL"] } }, + { + "if": { "properties": { "protocol": { "const": "http" } } }, + "then": { + "allOf": [ + { "not": { "required": ["privateKey"] } }, + { "not": { "required": ["clientCertificate"] } }, + { "not": { "required": ["rootCertificate"] } } + ] + } + } + ] + } + } + ] + }, + "else": {} + } + ] + }, + "else": {} + } + ] +} diff --git a/src/schema/1.31.0/controls_schema.json b/src/schema/1.31.0/controls_schema.json new file mode 100644 index 00000000..2bbfcff8 --- /dev/null +++ b/src/schema/1.31.0/controls_schema.json @@ -0,0 +1,52 @@ +{ + "$id": "controls_schema.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Telemetry Streaming Controls schema", + "description": "", + "type": "object", + "allOf": [ + { + "if": { "properties": { "class": { "const": "Controls" } } }, + "then": { + "required": [ + "class" + ], + "properties": { + "class": { + "title": "Class", + "description": "Telemetry Streaming Controls class", + "type": "string", + "enum": [ "Controls" ] + }, + "logLevel": { + "title": "Logging Level", + "description": "", + "type": "string", + "default": "info", + "enum": [ + "debug", + "info", + "error" + ] + }, + "debug": { + "title": "Enable debug mode", + "description": "", + "type": "boolean", + "default": false + }, + "memoryThresholdPercent": { + "title": "Memory Usage Threshold (Percentage of Available Process Memory)", + "description": "Once memory usage reaches this value, processing may temporarily cease until levels return below threshold. Defaults to 90%", + "type": "integer", + "minimum": 1, + "maximum": 100, + "default": 90 + } + }, + "additionalProperties": false + }, + "else": {} + } + ] +} \ No newline at end of file diff --git a/src/schema/1.31.0/endpoints_schema.json b/src/schema/1.31.0/endpoints_schema.json new file mode 100644 index 00000000..1e12b4b3 --- /dev/null +++ b/src/schema/1.31.0/endpoints_schema.json @@ -0,0 +1,190 @@ +{ + "$id": "endpoints_schema.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Telemetry Streaming Endpoints schema", + "description": "", + "type": "object", + "definitions": { + "endpoint": { + "title": "Telemetry Endpoint", + "description": "", + "type": "object", + "properties": { + "enable": { + "title": "Enable endpoint", + "default": true, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/enable" + } + ] + }, + "name": { + "title": "Endpoint name", + "type": "string", + "minLength": 1 + }, + "numericalEnums": { + "title": "SNMP Options: print enums numerically", + "type": "boolean" + }, + "path": { + "title": "Path to query data from", + "type": "string", + "minLength": 1 + }, + "protocol": { + "title": "Endpoint protocol used to fetch data", + "type": "string", + "enum": ["http", "snmp"], + "default": "http" + } + }, + "allOf": [ + { + "if": { "properties": { "protocol": { "const": "snmp" } } }, + "then": { + "properties": { + "numericalEnums": { + "default": false + }, + "path": { + "pattern": "^[a-zA-Z0-9.]+$" + } + } + }, + "else": { + "not": { + "required": ["numericalEnums"] + } + } + } + ], + "additionalProperties": false + }, + "endpoints": { + "title": "Telemetry Endpoints", + "description": "", + "type": "object", + "properties": { + "enable": { + "title": "Enable endpoints", + "default": true, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/enable" + } + ] + }, + "basePath": { + "title": "Base Path", + "description": "Optional base path value to prepend to each individual endpoint paths", + "type": "string", + "default": "" + }, + "items": { + "title": "Items", + "description": "Object with each property an endpoint with their own properties", + "type": "object", + "additionalProperties": { + "allOf": [ + { + "$ref": "#/definitions/endpoint" + }, + { + "required": [ "path"] + } + ] + }, + "minProperties": 1 + } + } + }, + "endpointsObjectRef": { + "allOf": [ + { + "$ref": "#/definitions/endpoints" + }, + { + "properties": { + "enable": {}, + "basePath": {}, + "items": {} + }, + "required": [ "items" ], + "additionalProperties": false + } + ] + }, + "endpointObjectRef": { + "allOf": [ + { + "$ref": "#/definitions/endpoint" + }, + { + "properties": { + "enable": {}, + "name": {}, + "numericalEnums": {}, + "path": {}, + "protocol": {} + }, + "required": [ "name", "path" ], + "additionalProperties": false + } + ] + }, + "endpointsPointerRef": { + "title": "Telemetry_Endpoints Name", + "description": "Name of the Telemetry_Endpoints object", + "type": "string", + "declarationClass": "Telemetry_Endpoints", + "minLength": 1 + }, + "endpointsItemPointerRef": { + "title": "Telemetry_Endpoints Name and Item Key", + "description": "Name of the Telemetry_Endpoints object and the endpoint item key, e.g endpointsA/item1", + "type": "string", + "declarationClassProp": { + "path" :"Telemetry_Endpoints/items", + "partsNum": 2 + }, + "minLength": 1 + } + }, + "allOf": [ + { + "if": { "properties": { "class": { "const": "Telemetry_Endpoints" } } }, + "then": { + "required": [ + "class", + "items" + ], + "properties": { + "class": { + "title": "Class", + "description": "Telemetry Streaming Endpoints class", + "type": "string", + "enum": [ "Telemetry_Endpoints" ] + } + }, + "allOf": [ + { + "$comment": "This allows enforcement of no additional properties in this nested schema - could reuse above properties but prefer a separate block", + "properties": { + "class": {}, + "enable": {}, + "basePath": {}, + "items": {} + }, + "additionalProperties": false + }, + { + "$ref": "#/definitions/endpoints" + } + ] + }, + "else": {} + } + ] +} \ No newline at end of file diff --git a/src/schema/1.31.0/ihealth_poller_schema.json b/src/schema/1.31.0/ihealth_poller_schema.json new file mode 100644 index 00000000..d5bcb9cf --- /dev/null +++ b/src/schema/1.31.0/ihealth_poller_schema.json @@ -0,0 +1,238 @@ +{ + "$id": "ihealth_poller_schema.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Telemetry Streaming iHealth Poller schema", + "description": "", + "type": "object", + "definitions": { + "time24hr": { + "title": "Time in HH:MM, 24hr", + "description": "", + "type": "string", + "pattern": "^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]?$" + }, + "iHealthPoller": { + "$comment": "system_schema.json should be updated when new property added", + "title": "iHealth Poller", + "description": "", + "type": "object", + "required": [ + "interval", + "username", + "passphrase" + ], + "properties": { + "enable": { + "default": true, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/enable" + } + ] + }, + "trace": { + "default": false, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/trace" + } + ] + }, + "proxy": { + "title": "Proxy configuration", + "properties": { + "port": { + "default": 80 + }, + "protocol": { + "default": "http" + } + }, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/proxy" + } + ] + }, + "username": { + "title": "iHealth Username", + "$ref": "base_schema.json#/definitions/username" + }, + "passphrase": { + "title": "iHealth Passphrase", + "$ref": "base_schema.json#/definitions/secret" + }, + "downloadFolder": { + "title": "Directory to download Qkview to", + "description": "", + "type": "string", + "minLength": 1, + "pathExists": true + }, + "interval": { + "title": "Operating interval", + "description": "" , + "type": "object", + "properties": { + "timeWindow": { + "title": "Two or more hours window in 24hr format that iHealth data can be sent", + "description": "", + "type": "object", + "properties": { + "start": { + "title": "Time when the window starts", + "$ref": "#/definitions/time24hr" + }, + "end": { + "title": "Time when the window ends", + "$ref": "#/definitions/time24hr" + } + }, + "timeWindowMinSize": 120, + "required": [ "start", "end" ], + "additionalProperties": false + }, + "frequency": { + "title": "Interval frequency", + "description": "", + "type": "string", + "default": "daily", + "enum": [ + "daily", + "weekly", + "monthly" + ] + } + + }, + "required": [ + "timeWindow" + ], + "allOf": [ + { + "if": { "properties": { "frequency": { "const": "daily" } } }, + "then": { + "properties": { + "timeWindow": {}, + "frequency": {} + }, + "additionalProperties": false + } + }, + { + "if": { "properties": { "frequency": { "const": "weekly" } } }, + "then": { + "properties": { + "timeWindow": {}, + "frequency": {}, + "day": { + "title": "", + "description": "", + "oneOf": [ + { + "type": "string", + "pattern": "^([mM]onday|[tT]uesday|[wW]ednesday|[tT]hursday|[fF]riday|[sS]aturday|[sS]unday)$" + }, + { + "$comment": "0 and 7 eq. Sunday", + "type": "integer", + "minimum": 0, + "maximum": 7 + } + ] + } + }, + "required": [ "day" ], + "additionalProperties": false + } + }, + { + "if": { "properties": { "frequency": { "const": "monthly" } } }, + "then": { + "properties": { + "timeWindow": {}, + "frequency": {}, + "day": { + "title": "", + "description": "", + "type": "integer", + "minimum": 1, + "maximum": 31 + } + }, + "required": [ "day" ], + "additionalProperties": false + } + } + ] + } + } + }, + "iHealthPollerPointerRef": { + "type": "string", + "minLength": 1, + "declarationClass": "Telemetry_iHealth_Poller" + }, + "iHealthPollerObjectRef": { + "allOf": [ + { + "$comment": "This allows enforcement of no additional properties in this nested schema - could reuse above properties but prefer a separate block", + "properties": { + "enable": {}, + "trace": {}, + "interval": {}, + "proxy": {}, + "username": {}, + "passphrase": {}, + "downloadFolder": {} + }, + "additionalProperties": false + }, + { + "$ref": "ihealth_poller_schema.json#/definitions/iHealthPoller" + } + ] + } + }, + "allOf": [ + { + "if": { "properties": { "class": { "const": "Telemetry_iHealth_Poller" } } }, + "then": { + "required": [ + "class", + "username", + "passphrase" + ], + "properties": { + "class": { + "title": "Class", + "description": "Telemetry Streaming iHealth Poller class", + "type": "string", + "enum": [ "Telemetry_iHealth_Poller" ] + } + }, + "allOf": [ + { + "$comment": "This allows enforcement of no additional properties in this nested schema - could reuse above properties but prefer a separate block", + "properties": { + "class": {}, + "enable": {}, + "trace": {}, + "interval": {}, + "proxy": {}, + "username": {}, + "passphrase": {}, + "downloadFolder": {} + }, + "additionalProperties": false + }, + { + "$ref": "#/definitions/iHealthPoller" + } + ] + }, + "else": {}, + "$comment": "Telemetry_iHealth_Poller should be either built-in within Telemetry_System or referenced by Telemetry_System(s), otherwise it will be treated as disabled" + } + ] +} \ No newline at end of file diff --git a/src/schema/1.31.0/listener_schema.json b/src/schema/1.31.0/listener_schema.json new file mode 100644 index 00000000..d3b9434e --- /dev/null +++ b/src/schema/1.31.0/listener_schema.json @@ -0,0 +1,85 @@ +{ + "$id": "listener_schema.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Telemetry Streaming event listener schema", + "description": "", + "type": "object", + "allOf": [ + { + "if": { "properties": { "class": { "const": "Telemetry_Listener" } } }, + "then": { + "required": [ + "class" + ], + "properties": { + "class": { + "title": "Class", + "description": "Telemetry Streaming Event Listener class", + "type": "string", + "enum": [ "Telemetry_Listener" ] + }, + "enable": { + "default": true, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/enable" + } + ] + }, + "trace": { + "default": false, + "oneOf": [ + { + "$ref": "base_schema.json#/definitions/trace" + }, + { + "$ref": "base_schema.json#/definitions/traceV2" + } + ] + }, + "port": { + "minimum": 1024, + "maximum": 65535, + "default": 6514, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/port" + } + ] + }, + "tag": { + "$comment": "Deprecated! Use actions with a setTag action.", + "allOf": [ + { + "$ref": "base_schema.json#/definitions/tag" + } + ] + }, + "match": { + "default": "", + "allOf": [ + { + "$ref": "base_schema.json#/definitions/match" + } + ] + }, + "actions": { + "title": "Actions", + "description": "Actions to be performed on the listener.", + "default": [ + { + "setTag": { + "tenant": "`T`", + "application": "`A`" + } + } + ], + "allOf": [{ "$ref": "actions_schema.json#/definitions/inputDataStreamActionsChain" }] + } + }, + "additionalProperties": false + }, + "else": {} + } + ] +} \ No newline at end of file diff --git a/src/schema/1.31.0/namespace_schema.json b/src/schema/1.31.0/namespace_schema.json new file mode 100644 index 00000000..f6cb09fc --- /dev/null +++ b/src/schema/1.31.0/namespace_schema.json @@ -0,0 +1,92 @@ +{ + "$id": "namespace_schema.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Telemetry Streaming Namespace schema", + "description": "", + "type": "object", + "definitions": { + "namespace": { + "required": [ + "class" + ], + "type": "object", + "properties": { + "class": { + "title": "Class", + "description": "Telemetry Streaming Namespace class", + "type": "string", + "enum": [ "Telemetry_Namespace" ] + } + }, + "additionalProperties": { + "$comment": "All objects supported under a Telemetry Namespace", + "properties": { + "class": { + "title": "Class", + "type": "string", + "enum": [ + "Telemetry_System", + "Telemetry_System_Poller", + "Telemetry_Listener", + "Telemetry_Consumer", + "Telemetry_Pull_Consumer", + "Telemetry_iHealth_Poller", + "Telemetry_Endpoints", + "Shared" + ] + } + }, + "allOf": [ + { + "$ref": "system_schema.json#" + }, + { + "$ref": "system_poller_schema.json#" + }, + { + "$ref": "listener_schema.json#" + }, + { + "$ref": "consumer_schema.json#" + }, + { + "$ref": "pull_consumer_schema.json#" + }, + { + "$ref": "ihealth_poller_schema.json#" + }, + { + "$ref": "endpoints_schema.json#" + }, + { + "$ref": "shared_schema.json#" + } + ] + } + } + }, + "allOf": [ + { + "if": { "properties": { "class": { "const": "Telemetry_Namespace" } } }, + "then": { + "required": [ + "class" + ], + "properties": { + "class": { + "title": "Class", + "description": "Telemetry Streaming Namespace class", + "type": "string", + "enum": [ "Telemetry_Namespace" ] + } + }, + "allOf": [ + { + "$ref": "#/definitions/namespace" + } + ] + }, + "else": {} + } + ] +} \ No newline at end of file diff --git a/src/schema/1.31.0/pull_consumer_schema.json b/src/schema/1.31.0/pull_consumer_schema.json new file mode 100644 index 00000000..0747cbfd --- /dev/null +++ b/src/schema/1.31.0/pull_consumer_schema.json @@ -0,0 +1,101 @@ +{ + "$id": "pull_consumer_schema.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Telemetry Streaming Pull Consumer schema", + "description": "", + "type": "object", + "allOf": [ + { + "if": { "properties": { "class": { "const": "Telemetry_Pull_Consumer" } } }, + "then": { + "required": [ + "class", + "type", + "systemPoller" + ], + "properties": { + "class": { + "title": "Class", + "description": "Telemetry Streaming Pull Consumer class", + "type": "string", + "enum": [ "Telemetry_Pull_Consumer" ] + }, + "enable": { + "default": true, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/enable" + } + ] + }, + "trace": { + "default": false, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/trace" + } + ] + }, + "type": { + "title": "Type", + "description": "" , + "type": "string", + "enum": [ + "default", + "Prometheus" + ] + }, + "systemPoller": { + "title": "Pointer to System Poller(s)", + "anyOf": [ + { + "$ref": "system_poller_schema.json#/definitions/systemPollerPointerRef" + }, + { + "type": "array", + "items": { + "anyOf": [ + { + "$ref": "system_poller_schema.json#/definitions/systemPollerPointerRef" + } + ] + }, + "minItems": 1 + } + ] + } + }, + "allOf": [ + { + "$comment": "This allows enforcement of no additional properties in this nested schema - could reuse above properties but prefer a separate block", + "properties": { + "class": {}, + "enable": {}, + "trace": {}, + "type": {}, + "systemPoller": {} + }, + "additionalProperties": false + }, + { + "if": { "properties": { "type": { "const": "default" } } }, + "then": { + "required": [], + "properties": {} + }, + "else": {} + }, + { + "if": { "properties": { "type": { "const": "Prometheus" } } }, + "then": { + "required": [], + "properties": {} + }, + "else": {} + } + ] + }, + "else": {} + } + ] +} diff --git a/src/schema/1.31.0/shared_schema.json b/src/schema/1.31.0/shared_schema.json new file mode 100644 index 00000000..aa96cb2e --- /dev/null +++ b/src/schema/1.31.0/shared_schema.json @@ -0,0 +1,50 @@ +{ + "$id": "shared_schema.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Telemetry streaming Shared schema", + "description": "", + "type": "object", + "allOf": [ + { + "if": { "properties": { "class": { "const": "Shared" } } }, + "then": { + "required": [ + "class" + ], + "properties": { + "class": { + "title": "Class", + "description": "Telemetry streaming Shared class", + "type": "string", + "enum": [ "Shared" ] + } + }, + "additionalProperties": { + "properties": { + "class": { + "title": "Class", + "type": "string", + "enum": [ + "Constants", + "Secret" + ] + } + }, + "allOf": [ + { + "if": { "properties": { "class": { "const": "Constants" } } }, + "then": { "$ref": "base_schema.json#/definitions/constants" }, + "else": {} + }, + { + "if": { "properties": { "class": { "const": "Secret" } } }, + "then": { "$ref": "base_schema.json#/definitions/secret" }, + "else": {} + } + ] + } + }, + "else": {} + } + ] +} \ No newline at end of file diff --git a/src/schema/1.31.0/system_poller_schema.json b/src/schema/1.31.0/system_poller_schema.json new file mode 100644 index 00000000..dcb3a454 --- /dev/null +++ b/src/schema/1.31.0/system_poller_schema.json @@ -0,0 +1,242 @@ +{ + "$id": "system_poller_schema.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Telemetry Streaming system poller schema", + "description": "", + "type": "object", + "definitions": { + "systemPoller": { + "$comment": "system_schema.json should be updated when new property added", + "title": "System Poller", + "description": "", + "type": "object", + "properties": { + "enable": { + "default": true, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/enable" + } + ] + }, + "interval": { + "title": "Collection interval (in seconds)", + "description": "If endpointList is specified, minimum=1. Without endpointList, minimum=60 and maximum=60000. Allows setting interval=0 to not poll on an interval.", + "type": "integer", + "default": 300 + }, + "trace": { + "$ref": "base_schema.json#/definitions/trace" + }, + "tag": { + "$comment": "Deprecated! Use actions with a setTag action.", + "allOf": [ + { + "$ref": "base_schema.json#/definitions/tag" + } + ] + }, + "actions": { + "title": "Actions", + "description": "Actions to be performed on the systemPoller.", + "default": [ + { + "setTag": { + "tenant": "`T`", + "application": "`A`" + } + } + ], + "allOf": [{ "$ref": "actions_schema.json#/definitions/inputDataStreamActionsChain" }] + }, + "endpointList": { + "title": "Endpoint List", + "description": "List of endpoints to use in data collection", + "oneOf": [ + { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "endpoints_schema.json#/definitions/endpointsPointerRef" + }, + { + "$ref": "endpoints_schema.json#/definitions/endpointsItemPointerRef" + }, + { + "if": { "required": [ "items" ]}, + "then": { + "$ref": "endpoints_schema.json#/definitions/endpointsObjectRef" + }, + "else": { + "$ref": "endpoints_schema.json#/definitions/endpointObjectRef" + } + } + + ] + }, + "minItems": 1 + }, + { + "$ref": "endpoints_schema.json#/definitions/endpointsPointerRef" + }, + { + "$ref": "endpoints_schema.json#/definitions/endpointsObjectRef" + } + ] + } + }, + "oneOf": [ + { + "allOf": [ + { + "if": { "required": [ "endpointList" ] }, + "then": { + "properties": { + "interval": { + "minimum": 1 + } + } + }, + "else": { + "properties":{ + "interval": { + "minimum": 60, + "maximum": 6000 + } + } + } + } + ] + }, + { + "allOf": [ + { + "properties": { + "interval": { + "enum": [0] + } + } + } + ] + } + ] + }, + "systemPollerPointerRef": { + "type": "string", + "minLength": 1, + "declarationClass": "Telemetry_System_Poller" + }, + "systemPollerObjectRef": { + "allOf": [ + { + "$comment": "This allows enforcement of no additional properties in this nested schema - could reuse above properties but prefer a separate block", + "properties": { + "enable": {}, + "trace": {}, + "interval": {}, + "tag": {}, + "actions": {}, + "endpointList": {} + }, + "additionalProperties": false + }, + { + "$ref": "#/definitions/systemPoller" + } + ] + } + }, + "allOf": [ + { + "if": { "properties": { "class": { "const": "Telemetry_System_Poller" } } }, + "then": { + "required": [ + "class" + ], + "properties": { + "class": { + "title": "Class", + "description": "Telemetry Streaming System Poller class", + "type": "string", + "enum": [ "Telemetry_System_Poller" ] + }, + "host": { + "$comment": "Deprecated! Use Telemetry_System to define target device", + "default": "localhost", + "allOf": [ + { + "$ref": "base_schema.json#/definitions/host" + } + ] + }, + "port": { + "$comment": "Deprecated! Use Telemetry_System to define target device", + "default": 8100, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/port" + } + ] + }, + "protocol": { + "$comment": "Deprecated! Use Telemetry_System to define target device", + "default": "http", + "allOf": [ + { + "$ref": "base_schema.json#/definitions/protocol" + } + ] + }, + "allowSelfSignedCert": { + "$comment": "Deprecated! Use Telemetry_System to define target device", + "title": "Allow Self-Signed Certificate", + "default": false, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/allowSelfSignedCert" + } + ] + }, + "enableHostConnectivityCheck": { + "$comment": "Deprecated! Use Telemetry_System to define target device", + "$ref": "base_schema.json#/definitions/enableHostConnectivityCheck" + }, + "username": { + "$comment": "Deprecated! Use Telemetry_System to define target device", + "$ref": "base_schema.json#/definitions/username" + }, + "passphrase": { + "$comment": "Deprecated! Use Telemetry_System to define target device", + "$ref": "base_schema.json#/definitions/secret" + } + }, + "allOf": [ + { + "$comment": "This allows enforcement of no additional properties in this nested schema - could reuse above properties but prefer a separate block", + "properties": { + "class": {}, + "enable": {}, + "trace": {}, + "interval": {}, + "tag": {}, + "host": {}, + "port": {}, + "protocol": {}, + "allowSelfSignedCert": {}, + "enableHostConnectivityCheck": {}, + "username": {}, + "passphrase": {}, + "actions": {}, + "endpointList": {} + }, + "additionalProperties": false + }, + { + "$ref": "#/definitions/systemPoller" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/src/schema/1.31.0/system_schema.json b/src/schema/1.31.0/system_schema.json new file mode 100644 index 00000000..cba58faa --- /dev/null +++ b/src/schema/1.31.0/system_schema.json @@ -0,0 +1,121 @@ +{ + "$id": "system_schema.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Telemetry Streaming System schema", + "description": "", + "type": "object", + "allOf": [ + { + "if": { "properties": { "class": { "const": "Telemetry_System" } } }, + "then": { + "required": [ + "class" + ], + "properties": { + "class": { + "title": "Class", + "description": "Telemetry Streaming System class", + "type": "string", + "enum": [ "Telemetry_System" ] + }, + "enable": { + "title": "Enable all pollers attached to device", + "default": true, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/enable" + } + ] + }, + "trace": { + "$ref": "base_schema.json#/definitions/trace" + }, + "host": { + "title": "System connection address", + "default": "localhost", + "allOf": [ + { + "$ref": "base_schema.json#/definitions/host" + } + ] + }, + "port": { + "title": "System connection port", + "default": 8100, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/port" + } + ] + }, + "protocol": { + "title": "System connection protocol", + "default": "http", + "allOf": [ + { + "$ref": "base_schema.json#/definitions/protocol" + } + ] + }, + "allowSelfSignedCert": { + "title": "Allow Self-Signed Certificate", + "default": false, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/allowSelfSignedCert" + } + ] + }, + "enableHostConnectivityCheck": { + "$ref": "base_schema.json#/definitions/enableHostConnectivityCheck" + }, + "username": { + "title": "System Username", + "$ref": "base_schema.json#/definitions/username" + }, + "passphrase": { + "title": "System Passphrase", + "$ref": "base_schema.json#/definitions/secret" + }, + "systemPoller": { + "title": "System Poller declaration", + "oneOf": [ + { + "$ref": "system_poller_schema.json#/definitions/systemPollerPointerRef" + }, + { + "$ref": "system_poller_schema.json#/definitions/systemPollerObjectRef" + }, + { + "type": "array", + "items": { + "anyOf": [ + { + "$ref": "system_poller_schema.json#/definitions/systemPollerObjectRef" + }, + { + "$ref": "system_poller_schema.json#/definitions/systemPollerPointerRef" + } + ] + }, + "minItems": 1 + } + ] + }, + "iHealthPoller": { + "title": "iHealth Poller declaration", + "oneOf": [ + { + "$ref": "ihealth_poller_schema.json#/definitions/iHealthPollerPointerRef" + }, + { + "$ref": "ihealth_poller_schema.json#/definitions/iHealthPollerObjectRef" + } + ] + } + }, + "additionalProperties": false + } + } + ] +} \ No newline at end of file diff --git a/src/schema/latest/base_schema.json b/src/schema/latest/base_schema.json index 2b1f9859..6602711b 100644 --- a/src/schema/latest/base_schema.json +++ b/src/schema/latest/base_schema.json @@ -242,8 +242,8 @@ "description": "Version of ADC Declaration schema this declaration uses", "type": "string", "$comment": "IMPORTANT: In enum array, please put current schema version first, oldest-supported version last. Keep enum array sorted most-recent-first.", - "enum": [ "1.30.0", "1.29.0", "1.28.0", "1.27.1", "1.27.0", "1.26.0", "1.25.0", "1.24.0", "1.23.0", "1.22.0", "1.21.0", "1.20.1", "1.20.0", "1.19.0", "1.18.0", "1.17.0", "1.16.0", "1.15.0", "1.14.0", "1.13.0", "1.12.0", "1.11.0", "1.10.0", "1.9.0", "1.8.0", "1.7.0", "1.6.0", "1.5.0", "1.4.0", "1.3.0", "1.2.0", "1.1.0", "1.0.0", "0.9.0" ], - "default": "1.30.0" + "enum": [ "1.31.0", "1.30.0", "1.29.0", "1.28.0", "1.27.1", "1.27.0", "1.26.0", "1.25.0", "1.24.0", "1.23.0", "1.22.0", "1.21.0", "1.20.1", "1.20.0", "1.19.0", "1.18.0", "1.17.0", "1.16.0", "1.15.0", "1.14.0", "1.13.0", "1.12.0", "1.11.0", "1.10.0", "1.9.0", "1.8.0", "1.7.0", "1.6.0", "1.5.0", "1.4.0", "1.3.0", "1.2.0", "1.1.0", "1.0.0", "0.9.0" ], + "default": "1.31.0" }, "$schema": { "title": "Schema", diff --git a/src/schema/latest/consumer_schema.json b/src/schema/latest/consumer_schema.json index 06cc47cf..31e6eb96 100644 --- a/src/schema/latest/consumer_schema.json +++ b/src/schema/latest/consumer_schema.json @@ -371,7 +371,7 @@ ] }, "clientCertificate": { - "$comment": "Required for certain consumers: Kafka, Generic HTTP", + "$comment": "Required for certain consumers: Kafka, Generic HTTP, OpenTelemetry_Exporter", "title": "Client Certificate", "description": "Certificate(s) to use when connecting to a secured endpoint.", "type": "object", @@ -383,7 +383,7 @@ ] }, "rootCertificate": { - "$comment": "Required for certain consumers: Kafka, Generic HTTP", + "$comment": "Required for certain consumers: Kafka, Generic HTTP, OpenTelemetry_Exporter", "title": "Root Certificate", "description": "Certificate Authority root certificate, used to validate certificate chains.", "type": "object", @@ -458,7 +458,7 @@ "f5expand": true }, "privateKey": { - "$comment": "Required for certain consumers: Kafka, Generic HTTP", + "$comment": "Required for certain consumers: Kafka, Generic HTTP, OpenTelemetry_Exporter", "title": "Private Key", "description": "Private Key", "type": "object", @@ -610,7 +610,8 @@ ] }, "else": {} - }] + } + ] }, "targetAudience": { "$comment": "Required for certain consumers: F5_Cloud", @@ -621,7 +622,7 @@ "f5expand": true }, "useSSL": { - "$comment": "Required for certain consumers: F5_Cloud", + "$comment": "Required for certain consumers: F5_Cloud, OpenTelemetry_Exporter", "title": "useSSL", "description": "To decide if GRPC connection should use SSL and then it is secured" , "type": "boolean", @@ -686,6 +687,35 @@ }, "additionalProperties": false } + }, + "customHttpOpts": { + "items": { + "allOf": [ + { + "if": { "properties": { "name": { "const": "keepAlive" } } }, + "then": { "properties": { "value": { "type": "boolean" } } } + }, + { + "if": { "properties": { "name": { "const": "keepAliveMsecs" } } }, + "then": { "properties": { "value": { "type": "integer", "minimum": 0 } } } + }, + { + "if": { "properties": { "name": { "const": "maxSockets" } } }, + "then": { "properties": { "value": { "type": "integer", "minimum": 0 } } } + }, + { + "if": { "properties": { "name": { "const": "maxFreeSockets" } } }, + "then": { "properties": { "value": { "type": "integer", "minimum": 0 } } } + } + ] + } + }, + "otelExporter": { + "$comment": "Required for certain consumers: OpenTelemetry_Exporter", + "title": "Open Telemetry Exporter", + "description": "" , + "type": "string", + "enum": ["grpc", "json", "protobuf" ] } }, "allOf": [ @@ -823,7 +853,8 @@ "reportInstanceMetadata": {}, "metricsPath": {}, "service": {}, - "convertBooleansToMetrics": {} + "convertBooleansToMetrics": {}, + "exporter": {} }, "additionalProperties": false, "dependencies": { @@ -873,7 +904,14 @@ "clientCertificate": { "$ref": "#/definitions/clientCertificate" }, "rootCertificate": { "$ref": "#/definitions/rootCertificate" }, "outputMode": { "$ref": "#/definitions/outputMode", "default": "processed" }, - "actions": { "$ref": "#/definitions/genericHttpActions" } + "actions": { "$ref": "#/definitions/genericHttpActions" }, + "compressionType": { "$ref": "#/definitions/compressionType", "default": "none" }, + "customOpts": { + "allOf": [ + { "$ref": "#/definitions/customOpts" }, + { "$ref": "#/definitions/customHttpOpts" } + ] + } }, "allOf": [ { @@ -1355,7 +1393,14 @@ "service": { "$ref": "#/definitions/service", "default": "f5-telemetry" }, "metricPrefix": { "$ref": "#/definitions/metricPrefix" }, "convertBooleansToMetrics": { "$ref": "#/definitions/convertBooleansToMetrics", "default": "false" }, - "customTags": { "$ref": "#/definitions/customTags" } + "customTags": { "$ref": "#/definitions/customTags" }, + "customOpts": { + "allOf": [ + { "$ref": "#/definitions/customOpts" }, + { "$ref": "#/definitions/customHttpOpts" } + ] + }, + "proxy": { "$ref": "base_schema.json#/definitions/proxy" } } }, "else": {} @@ -1372,9 +1417,63 @@ "port": { "$ref": "#/definitions/port" }, "headers": { "$ref": "#/definitions/headers" }, "metricsPath": { "$ref": "#/definitions/path" }, - "convertBooleansToMetrics": { "$ref": "#/definitions/convertBooleansToMetrics", "default": "false" } + "convertBooleansToMetrics": { "$ref": "#/definitions/convertBooleansToMetrics", "default": "false" }, + "exporter": { "$ref": "#/definitions/otelExporter", "default": "protobuf" }, + "privateKey": { "$ref": "#/definitions/privateKey" }, + "clientCertificate": { "$ref": "#/definitions/clientCertificate" }, + "rootCertificate": { "$ref": "#/definitions/rootCertificate" } }, - "nodeSupportVersion": "8.11.1" + "dependencies": { + "clientCertificate": ["privateKey"], + "privateKey": ["clientCertificate"] + }, + "nodeSupportVersion": "8.11.1", + "allOf": [ + { + "if": { "properties": { "exporter": { "const": "grpc" } } } , + "then": { + "properties": { + "useSSL": { "$ref": "#/definitions/useSSL", "default": true } + }, + "allOf": [ + { + "if": { "properties": { "useSSL": { "const": false } } }, + "then": { + "allOf": [ + { "not": { "required": ["privateKey"] } }, + { "not": { "required": ["clientCertificate"] } }, + { "not": { "required": ["rootCertificate"] } } + ] + } + }, + { + "allOf": [ + { "not": { "required": ["metricsPath"] } }, + { "not": { "required": ["protocol"] } } + ] + } + ] + }, + "else": { + "properties": { + "protocol": { "$ref": "#/definitions/protocols", "default": "http", "enum": ["http", "https"] } + }, + "allOf": [ + { "not": { "required": ["useSSL"] } }, + { + "if": { "properties": { "protocol": { "const": "http" } } }, + "then": { + "allOf": [ + { "not": { "required": ["privateKey"] } }, + { "not": { "required": ["clientCertificate"] } }, + { "not": { "required": ["rootCertificate"] } } + ] + } + } + ] + } + } + ] }, "else": {} } diff --git a/test/functional/consumersTests/f5CloudTests.js b/test/functional/consumersTests/f5CloudTests.js index d922ab9c..b45afcb0 100644 --- a/test/functional/consumersTests/f5CloudTests.js +++ b/test/functional/consumersTests/f5CloudTests.js @@ -222,7 +222,7 @@ function test() { describe('Event Listener data', () => { harness.bigip.forEach((bigip) => LISTENER_PROTOCOLS .forEach((proto) => it( - `should check F5 Cloud GRCP server for event listener data (over ${proto}) for - ${bigip.name}`, + `should check F5 Cloud gRPC server for event listener data (over ${proto}) for - ${bigip.name}`, function () { if (!isValidDut(bigip)) { return this.skip(); diff --git a/test/functional/consumersTests/openTelemetryExporterTests.js b/test/functional/consumersTests/openTelemetryExporterTests.js index c2dc3fb4..5e474625 100644 --- a/test/functional/consumersTests/openTelemetryExporterTests.js +++ b/test/functional/consumersTests/openTelemetryExporterTests.js @@ -30,30 +30,45 @@ const assert = chai.assert; // module requirements const MODULE_REQUIREMENTS = { DOCKER: true }; +const OTEL_EXPORTERS = [ + 'grpc', + 'json', + 'protobuf' +]; const OTEL_METRICS_PATH = '/v1/metrics'; const OTEL_COLLECTOR_FOLDER = 'otel'; const OTEL_COLLECTOR_CONF_FILE = 'config.yaml'; -const OTEL_COLLECTOR_RECEIVER_PORT = 55681; +const OTEL_COLLECTOR_GRPC_RECEIVER_PORT = 55681; +const OTEL_COLLECTOR_HTTP_RECEIVER_PORT = 55682; const OTEL_COLLECTOR_PROMETHEUS_PORT = 9088; const OTEL_COLLECTOR_CONSUMER_NAME = 'OpenTelemetry_Consumer'; const OTEL_COLLECTOR_CONF = `receivers: otlp: protocols: + grpc: + endpoint: ":${OTEL_COLLECTOR_GRPC_RECEIVER_PORT}" http: + endpoint: ":${OTEL_COLLECTOR_HTTP_RECEIVER_PORT}" processors: batch: exporters: prometheus: - endpoint: "0.0.0.0:${OTEL_COLLECTOR_PROMETHEUS_PORT}" + endpoint: ":${OTEL_COLLECTOR_PROMETHEUS_PORT}" + metric_expiration: 1m + send_timestamps: true service: pipelines: metrics: receivers: [otlp] processors: [batch] - exporters: [prometheus]`; + exporters: [prometheus] + telemetry: + logs: + level: "debug" +`; const DOCKER_CONTAINERS = { OTELCollector: { @@ -61,12 +76,13 @@ const DOCKER_CONTAINERS = { image: `${constants.ARTIFACTORY_DOCKER_HUB_PREFIX}otel/opentelemetry-collector-contrib`, name: 'otel-collector', publish: { - [OTEL_COLLECTOR_PROMETHEUS_PORT]: OTEL_COLLECTOR_PROMETHEUS_PORT, - [OTEL_COLLECTOR_RECEIVER_PORT]: OTEL_COLLECTOR_RECEIVER_PORT + [OTEL_COLLECTOR_GRPC_RECEIVER_PORT]: OTEL_COLLECTOR_GRPC_RECEIVER_PORT, + [OTEL_COLLECTOR_HTTP_RECEIVER_PORT]: OTEL_COLLECTOR_HTTP_RECEIVER_PORT, + [OTEL_COLLECTOR_PROMETHEUS_PORT]: OTEL_COLLECTOR_PROMETHEUS_PORT }, restart: 'always', volume: { - [`$(pwd)/${OTEL_COLLECTOR_FOLDER}/${OTEL_COLLECTOR_CONF_FILE}`]: '/etc/otel/config.yaml' + [`$(pwd)/${OTEL_COLLECTOR_FOLDER}/${OTEL_COLLECTOR_CONF_FILE}`]: '/etc/otelcol-contrib/config.yaml' } } }; @@ -159,33 +175,72 @@ function test() { assert.isOk(CONTAINER_STARTED, 'should start OTEL container!'); }); - describe('Configure TS and generate data', () => { - let consumerDeclaration; - - before(() => { - consumerDeclaration = miscUtils.deepCopy(DECLARATION); - consumerDeclaration[OTEL_COLLECTOR_CONSUMER_NAME] = { + function generateTestsForExporter(exporter, last) { + function getConsumerDeclaration() { + return { class: 'Telemetry_Consumer', type: 'OpenTelemetry_Exporter', host: cs.host.host, - port: OTEL_COLLECTOR_RECEIVER_PORT, - metricsPath: `${OTEL_METRICS_PATH}` + port: exporter === 'grpc' ? OTEL_COLLECTOR_GRPC_RECEIVER_PORT : OTEL_COLLECTOR_HTTP_RECEIVER_PORT, + exporter }; - }); + } - testUtils.shouldConfigureTS(harness.bigip, (bigip) => (isValidDut(bigip) - ? miscUtils.deepCopy(consumerDeclaration) - : null)); + describe('Configure TS and generate data', () => { + let consumerDeclaration; - testUtils.shouldSendListenerEvents(harness.bigip, (bigip, proto, port, idx) => (isValidDut(bigip) - ? `functionalTestMetric="147",EOCTimestamp="1231232",hostname="${bigip.hostname}",testDataTimestamp="${testDataTimestamp}",test="true",testType="${OTEL_COLLECTOR_CONSUMER_NAME}",protocol="${proto}",msgID="${idx}"` - : null)); - }); + before(() => { + consumerDeclaration = miscUtils.deepCopy(DECLARATION); + consumerDeclaration[OTEL_COLLECTOR_CONSUMER_NAME] = getConsumerDeclaration(); + if (exporter === 'grpc') { + consumerDeclaration[OTEL_COLLECTOR_CONSUMER_NAME].useSSL = false; + } else { + consumerDeclaration[OTEL_COLLECTOR_CONSUMER_NAME].metricsPath = OTEL_METRICS_PATH; + } + }); + + testUtils.shouldConfigureTS(harness.bigip, (bigip) => (isValidDut(bigip) + ? miscUtils.deepCopy(consumerDeclaration) + : null)); - describe('Event Listener data', () => { - harness.bigip.forEach((bigip) => LISTENER_PROTOCOLS - .forEach((proto) => it( - `should check OTEL for event listener data (over ${proto}) for - ${bigip.name}`, + testUtils.shouldSendListenerEvents(harness.bigip, (bigip, proto, port, idx) => (isValidDut(bigip) + ? `functionalTestMetric="147",EOCTimestamp="1231232",hostname="${bigip.hostname}",testDataTimestamp="${testDataTimestamp}",test="true",testType="${OTEL_COLLECTOR_CONSUMER_NAME}",protocol="${proto}",msgID="${idx}",exporter="${exporter}"` + : null)); + }); + + describe('Event Listener data', () => { + harness.bigip.forEach((bigip) => LISTENER_PROTOCOLS + .forEach((proto) => it( + `should check OTEL for event listener data (over ${proto}) for - ${bigip.name}`, + function () { + if (!isValidDut(bigip)) { + return this.skip(); + } + return cs.http.otel.makeRequest({ + uri: '/metrics' + }) + .then((data) => { + const hostnameRegex = new RegExp(`functionalTestMetric{.*hostname="${bigip.hostname}".*} 147`); + const exporterRegex = new RegExp(`functionalTestMetric{.*exporter="${exporter}".*} 147`); + assert.isOk( + data.split('\n') + .some((line) => hostnameRegex.test(line) + && exporterRegex.test(line) + && line.indexOf(`protocol="${proto}"`) !== -1), + `should have metrics(s) for a data from event listener (over ${proto})` + ); + }) + .catch((err) => { + bigip.logger.info('No event listener data found. Going to wait another 20sec'); + return promiseUtils.sleepAndReject(20000, err); + }); + } + ))); + }); + + describe('System Poller data', () => { + harness.bigip.forEach((bigip) => it( + `should check OTEL for system poller data - ${bigip.name}`, function () { if (!isValidDut(bigip)) { return this.skip(); @@ -194,45 +249,58 @@ function test() { uri: '/metrics' }) .then((data) => { - const mockAVRMetricRegex = new RegExp(`functionalTestMetric{.*hostname="${bigip.hostname}".*} 147`); + const dutSystemMemoryRegex = new RegExp(`system_memory{.*hostname="${bigip.hostname}".*} \\d{1,2}`); assert.isOk( data.split('\n') - .some((line) => mockAVRMetricRegex.test(line) && line.indexOf(`protocol="${proto}"`) !== -1), - `should have metrics(s) for a data from event listener (over ${proto})` + .some((line) => dutSystemMemoryRegex.test(line)), + 'should have metric(s) for a data from system poller' ); }) .catch((err) => { - bigip.logger.info('No event listener data found. Going to wait another 20sec'); + bigip.logger.info('No system poller data found. Going to wait another 20sec'); return promiseUtils.sleepAndReject(20000, err); }); } - ))); - }); + )); + }); - describe('System Poller data', () => { - harness.bigip.forEach((bigip) => it( - `should check OTEL for system poller data - ${bigip.name}`, - function () { - if (!isValidDut(bigip)) { - return this.skip(); - } - return cs.http.otel.makeRequest({ + if (!last) { + describe('Stop TS sending data to Open Telemetry Collector', () => { + let consumerDeclaration; + + before(() => { + consumerDeclaration = miscUtils.deepCopy(DECLARATION); + consumerDeclaration[OTEL_COLLECTOR_CONSUMER_NAME] = getConsumerDeclaration(); + consumerDeclaration[OTEL_COLLECTOR_CONSUMER_NAME].enable = false; + }); + + testUtils.shouldConfigureTS(harness.bigip, (bigip) => (isValidDut(bigip) + ? miscUtils.deepCopy(consumerDeclaration) + : null)); + + it('should wait till metrics expired', () => cs.http.otel.makeRequest({ uri: '/metrics' }) .then((data) => { - const dutSystemMemoryRegex = new RegExp(`system_memory{.*hostname="${bigip.hostname}".*} \\d{1,2}`); - assert.isOk( + const dutSystemMemoryRegex = /system_memory\{.*hostname=.*\}/; + const mockAVRMetricRegex = /functionalTestMetric.*147/; + + assert.isNotOk( data.split('\n') - .some((line) => dutSystemMemoryRegex.test(line)), - 'should have metric(s) for a data from system poller' + .some((line) => dutSystemMemoryRegex.test(line) || mockAVRMetricRegex.test(line)), + 'should have no metric(s) for a data from system poller and event listener' ); }) .catch((err) => { - bigip.logger.info('No system poller data found. Going to wait another 20sec'); + cs.logger.info('Metrics are not expired yet. Going to wait another 20sec'); return promiseUtils.sleepAndReject(20000, err); - }); - } - )); + })); + }); + } + } + + OTEL_EXPORTERS.forEach((exporter, idx) => { + describe(`Exporter = ${exporter}`, () => generateTestsForExporter(exporter, idx === OTEL_EXPORTERS.length - 1)); }); }); } diff --git a/test/functional/consumersTests/statsdTests.js b/test/functional/consumersTests/statsdTests.js index dbd6b218..7779cb21 100644 --- a/test/functional/consumersTests/statsdTests.js +++ b/test/functional/consumersTests/statsdTests.js @@ -36,7 +36,7 @@ const STATSD_DEFAULT_HTTP_TIMEOUT = 10000; const STATSD_DOCKER_CONF = { detach: true, - image: `${constants.ARTIFACTORY_DOCKER_HUB_PREFIX}graphiteapp/graphite-statsd:1.1.9-1`, // change to 'latest' when the bug will be fixed + image: `${constants.ARTIFACTORY_DOCKER_HUB_PREFIX}graphiteapp/graphite-statsd:latest`, restart: 'always' }; diff --git a/test/unit/configTests.js b/test/unit/configTests.js index 934679b3..3c565c03 100644 --- a/test/unit/configTests.js +++ b/test/unit/configTests.js @@ -233,7 +233,8 @@ describe('Config', () => { port: 443, protocol: 'https', trace: false, - allowSelfSignedCert: false + allowSelfSignedCert: false, + compressionType: 'none' } }; return configWorker.processDeclaration(decl) @@ -296,7 +297,8 @@ describe('Config', () => { port: 443, protocol: 'https', trace: false, - allowSelfSignedCert: false + allowSelfSignedCert: false, + compressionType: 'none' } }; return configWorker.processDeclaration(decl) diff --git a/test/unit/consumers/data/azureLogAnalyticsConsumerTestsData.js b/test/unit/consumers/data/azureLogAnalyticsConsumerTestsData.js index ae1f3057..c6afe6be 100644 --- a/test/unit/consumers/data/azureLogAnalyticsConsumerTestsData.js +++ b/test/unit/consumers/data/azureLogAnalyticsConsumerTestsData.js @@ -442,6 +442,116 @@ module.exports = { name: 'sslTps' } }, + connectionsPerformance: { + blade1: { + average: 0, + current: 0, + max: 0, + name: 'blade1' + }, + blade2: { + average: 0, + current: 0, + max: 0, + name: 'blade2' + }, + client: { + average: 0, + current: 0, + max: 0, + name: 'client' + }, + clientAccepts: { + average: 0, + current: 0, + max: 0, + name: 'clientAccepts' + }, + clientConnections: { + average: 0, + current: 0, + max: 0, + name: 'clientConnections' + }, + clientConnects: { + average: 0, + current: 0, + max: 0, + name: 'clientConnects' + }, + connections: { + average: 0, + current: 0, + max: 0, + name: 'connections' + }, + httpRequests: { + average: 0, + current: 0, + max: 0, + name: 'httpRequests' + }, + pvaClient: { + average: 0, + current: 0, + max: 0, + name: 'pvaClient' + }, + pvaServer: { + average: 0, + current: 0, + max: 0, + name: 'pvaServer' + }, + server: { + average: 0, + current: 0, + max: 0, + name: 'server' + }, + serverConnections: { + average: 0, + current: 0, + max: 0, + name: 'serverConnections' + }, + activeSslClientConnections: { + average: 0, + current: 0, + max: 0, + name: 'activeSslClientConnections' + }, + newSslClientConnections: { + average: 0, + current: 0, + max: 0, + name: 'newSslClientConnections' + }, + activeSslServerConnections: { + average: 0, + current: 0, + max: 0, + name: 'activeSslServerConnections' + }, + newSslServerConnections: { + average: 0, + current: 0, + max: 0, + name: 'newSslServerConnections' + }, + serverNewConnections: { + average: 0, + current: 0, + max: 0, + name: 'serverNewConnections' + }, + serverNewTcpConnections: { + average: 0, + current: 0, + max: 0, + name: 'serverNewTcpConnections' + } + }, configSyncSucceeded: true, syncColor: 'green', syncMode: 'standalone', @@ -463,7 +573,7 @@ module.exports = { ], fullURI: 'https://myWorkspace.ods.opinsights.azure.com/api/logs?api-version=2016-04-01', headers: { - Authorization: 'SharedKey myWorkspace:4hO6g0PLWeZAgWdyCllFS4NIks9QD/QGoV6R57TYotg=', + Authorization: 'SharedKey myWorkspace:at7iSOWv+DZSlUxGI7Mi8sPhQ8fcU8xYZuMxbW7YExc=', 'Content-Type': 'application/json', 'Log-Type': 'F5Telemetry_system', 'x-ms-date': 'Thu, 01 Jan 1970 00:00:00 GMT' @@ -2504,6 +2614,117 @@ module.exports = { name: 'sslTps' } }, + + connectionsPerformance: { + blade1: { + average: 0, + current: 0, + max: 0, + name: 'blade1' + }, + blade2: { + average: 0, + current: 0, + max: 0, + name: 'blade2' + }, + client: { + average: 0, + current: 0, + max: 0, + name: 'client' + }, + clientAccepts: { + average: 0, + current: 0, + max: 0, + name: 'clientAccepts' + }, + clientConnections: { + average: 0, + current: 0, + max: 0, + name: 'clientConnections' + }, + clientConnects: { + average: 0, + current: 0, + max: 0, + name: 'clientConnects' + }, + connections: { + average: 0, + current: 0, + max: 0, + name: 'connections' + }, + httpRequests: { + average: 0, + current: 0, + max: 0, + name: 'httpRequests' + }, + pvaClient: { + average: 0, + current: 0, + max: 0, + name: 'pvaClient' + }, + pvaServer: { + average: 0, + current: 0, + max: 0, + name: 'pvaServer' + }, + server: { + average: 0, + current: 0, + max: 0, + name: 'server' + }, + serverConnections: { + average: 0, + current: 0, + max: 0, + name: 'serverConnections' + }, + activeSslClientConnections: { + average: 0, + current: 0, + max: 0, + name: 'activeSslClientConnections' + }, + newSslClientConnections: { + average: 0, + current: 0, + max: 0, + name: 'newSslClientConnections' + }, + activeSslServerConnections: { + average: 0, + current: 0, + max: 0, + name: 'activeSslServerConnections' + }, + newSslServerConnections: { + average: 0, + current: 0, + max: 0, + name: 'newSslServerConnections' + }, + serverNewConnections: { + average: 0, + current: 0, + max: 0, + name: 'serverNewConnections' + }, + serverNewTcpConnections: { + average: 0, + current: 0, + max: 0, + name: 'serverNewTcpConnections' + } + }, configSyncSucceeded: true, syncColor: 'green', syncMode: 'standalone', @@ -2525,7 +2746,7 @@ module.exports = { ], fullURI: 'https://myWorkspace.ods.opinsights.azure.com/api/logs?api-version=2016-04-01', headers: { - Authorization: 'SharedKey myWorkspace:4hO6g0PLWeZAgWdyCllFS4NIks9QD/QGoV6R57TYotg=', + Authorization: 'SharedKey myWorkspace:at7iSOWv+DZSlUxGI7Mi8sPhQ8fcU8xYZuMxbW7YExc=', 'Content-Type': 'application/json', 'Log-Type': 'F5Telemetry_system', 'x-ms-date': 'Thu, 01 Jan 1970 00:00:00 GMT' diff --git a/test/unit/consumers/data/dataDogConsumerTestsData.js b/test/unit/consumers/data/dataDogConsumerTestsData.js new file mode 100644 index 00000000..540b6d37 --- /dev/null +++ b/test/unit/consumers/data/dataDogConsumerTestsData.js @@ -0,0 +1,15346 @@ +/* + * Copyright 2022. F5 Networks, Inc. See End User License Agreement ("EULA") for + * license terms. Notwithstanding anything to the contrary in the EULA, Licensee + * may copy and modify this software product for its internal business purposes. + * Further, Licensee may upload, publish and distribute the modified version of + * the software product on devcentral.f5.com. + */ + +'use strict'; + +module.exports = { + systemData: [ + { + expectedData: { + series: [ + { + metric: 'system.cpu', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'hostname:telemetry.bigip.com', + 'machineId:cd5e51b8-74ef-44c8-985c-7965512c2e87', + 'version:14.0.0.1', + 'versionBuild:0.0.2', + 'location:Seattle', + 'description:Telemetry BIG-IP', + 'marketingName:BIG-IP Virtual Edition', + 'platformId:Z100', + 'chassisId:9c3abad5-513a-1c43-5bc2be62e957', + 'baseMac:00:0d:3a:30:34:51', + 'callBackUrl:https://10.0.1.100', + 'configReady:yes', + 'licenseReady:yes', + 'provisionReady:yes', + 'configSyncSucceeded:true', + 'syncMode:standalone', + 'syncColor:green', + 'syncStatus:Standalone', + 'failoverStatus:ACTIVE', + 'failoverColor:green', + 'asmState:Policies Consistent', + 'apmState:Policies Consistent', + 'afmState:quiescent', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.memory', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'hostname:telemetry.bigip.com', + 'machineId:cd5e51b8-74ef-44c8-985c-7965512c2e87', + 'version:14.0.0.1', + 'versionBuild:0.0.2', + 'location:Seattle', + 'description:Telemetry BIG-IP', + 'marketingName:BIG-IP Virtual Edition', + 'platformId:Z100', + 'chassisId:9c3abad5-513a-1c43-5bc2be62e957', + 'baseMac:00:0d:3a:30:34:51', + 'callBackUrl:https://10.0.1.100', + 'configReady:yes', + 'licenseReady:yes', + 'provisionReady:yes', + 'configSyncSucceeded:true', + 'syncMode:standalone', + 'syncColor:green', + 'syncStatus:Standalone', + 'failoverStatus:ACTIVE', + 'failoverColor:green', + 'asmState:Policies Consistent', + 'apmState:Policies Consistent', + 'afmState:quiescent', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.swap', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'hostname:telemetry.bigip.com', + 'machineId:cd5e51b8-74ef-44c8-985c-7965512c2e87', + 'version:14.0.0.1', + 'versionBuild:0.0.2', + 'location:Seattle', + 'description:Telemetry BIG-IP', + 'marketingName:BIG-IP Virtual Edition', + 'platformId:Z100', + 'chassisId:9c3abad5-513a-1c43-5bc2be62e957', + 'baseMac:00:0d:3a:30:34:51', + 'callBackUrl:https://10.0.1.100', + 'configReady:yes', + 'licenseReady:yes', + 'provisionReady:yes', + 'configSyncSucceeded:true', + 'syncMode:standalone', + 'syncColor:green', + 'syncStatus:Standalone', + 'failoverStatus:ACTIVE', + 'failoverColor:green', + 'asmState:Policies Consistent', + 'apmState:Policies Consistent', + 'afmState:quiescent', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.tmmCpu', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'hostname:telemetry.bigip.com', + 'machineId:cd5e51b8-74ef-44c8-985c-7965512c2e87', + 'version:14.0.0.1', + 'versionBuild:0.0.2', + 'location:Seattle', + 'description:Telemetry BIG-IP', + 'marketingName:BIG-IP Virtual Edition', + 'platformId:Z100', + 'chassisId:9c3abad5-513a-1c43-5bc2be62e957', + 'baseMac:00:0d:3a:30:34:51', + 'callBackUrl:https://10.0.1.100', + 'configReady:yes', + 'licenseReady:yes', + 'provisionReady:yes', + 'configSyncSucceeded:true', + 'syncMode:standalone', + 'syncColor:green', + 'syncStatus:Standalone', + 'failoverStatus:ACTIVE', + 'failoverColor:green', + 'asmState:Policies Consistent', + 'apmState:Policies Consistent', + 'afmState:quiescent', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.tmmMemory', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'hostname:telemetry.bigip.com', + 'machineId:cd5e51b8-74ef-44c8-985c-7965512c2e87', + 'version:14.0.0.1', + 'versionBuild:0.0.2', + 'location:Seattle', + 'description:Telemetry BIG-IP', + 'marketingName:BIG-IP Virtual Edition', + 'platformId:Z100', + 'chassisId:9c3abad5-513a-1c43-5bc2be62e957', + 'baseMac:00:0d:3a:30:34:51', + 'callBackUrl:https://10.0.1.100', + 'configReady:yes', + 'licenseReady:yes', + 'provisionReady:yes', + 'configSyncSucceeded:true', + 'syncMode:standalone', + 'syncColor:green', + 'syncStatus:Standalone', + 'failoverStatus:ACTIVE', + 'failoverColor:green', + 'asmState:Policies Consistent', + 'apmState:Policies Consistent', + 'afmState:quiescent', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.tmmTraffic.clientSideTraffic.bitsIn', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.tmmTraffic.clientSideTraffic.bitsOut', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.tmmTraffic.serverSideTraffic.bitsIn', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.tmmTraffic.serverSideTraffic.bitsOut', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskStorage.1024-blocks', + points: [ + { + timestamp: 1658193069, + value: 436342 + } + ], + tags: [ + 'name:/', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskStorage.Capacity_Float', + points: [ + { + timestamp: 1658193069, + value: 0.55 + } + ], + tags: [ + 'name:/', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskStorage.1024-blocks', + points: [ + { + timestamp: 1658193069, + value: 7181064 + } + ], + tags: [ + 'name:/dev/shm', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskStorage.Capacity_Float', + points: [ + { + timestamp: 1658193069, + value: 0.09 + } + ], + tags: [ + 'name:/dev/shm', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskStorage.1024-blocks', + points: [ + { + timestamp: 1658193069, + value: 3269592 + } + ], + tags: [ + 'name:/config', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskStorage.Capacity_Float', + points: [ + { + timestamp: 1658193069, + value: 0.11 + } + ], + tags: [ + 'name:/config', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskStorage.1024-blocks', + points: [ + { + timestamp: 1658193069, + value: 4136432 + } + ], + tags: [ + 'name:/usr', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskStorage.Capacity_Float', + points: [ + { + timestamp: 1658193069, + value: 0.83 + } + ], + tags: [ + 'name:/usr', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskStorage.1024-blocks', + points: [ + { + timestamp: 1658193069, + value: 3096336 + } + ], + tags: [ + 'name:/var', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskStorage.Capacity_Float', + points: [ + { + timestamp: 1658193069, + value: 0.37 + } + ], + tags: [ + 'name:/var', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskStorage.1024-blocks', + points: [ + { + timestamp: 1658193069, + value: 20642428 + } + ], + tags: [ + 'name:/shared', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskStorage.Capacity_Float', + points: [ + { + timestamp: 1658193069, + value: 0.03 + } + ], + tags: [ + 'name:/shared', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskStorage.1024-blocks', + points: [ + { + timestamp: 1658193069, + value: 3023760 + } + ], + tags: [ + 'name:/var/log', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskStorage.Capacity_Float', + points: [ + { + timestamp: 1658193069, + value: 0.08 + } + ], + tags: [ + 'name:/var/log', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskStorage.1024-blocks', + points: [ + { + timestamp: 1658193069, + value: 51607740 + } + ], + tags: [ + 'name:/appdata', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskStorage.Capacity_Float', + points: [ + { + timestamp: 1658193069, + value: 0.03 + } + ], + tags: [ + 'name:/appdata', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskStorage.1024-blocks', + points: [ + { + timestamp: 1658193069, + value: 7181064 + } + ], + tags: [ + 'name:/shared/rrd.1.2', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskStorage.Capacity_Float', + points: [ + { + timestamp: 1658193069, + value: 0.01 + } + ], + tags: [ + 'name:/shared/rrd.1.2', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskStorage.1024-blocks', + points: [ + { + timestamp: 1658193069, + value: 7181064 + } + ], + tags: [ + 'name:/var/run', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskStorage.Capacity_Float', + points: [ + { + timestamp: 1658193069, + value: 0.01 + } + ], + tags: [ + 'name:/var/run', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskStorage.1024-blocks', + points: [ + { + timestamp: 1658193069, + value: 7181064 + } + ], + tags: [ + 'name:/var/tmstat', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskStorage.Capacity_Float', + points: [ + { + timestamp: 1658193069, + value: 0.01 + } + ], + tags: [ + 'name:/var/tmstat', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskStorage.1024-blocks', + points: [ + { + timestamp: 1658193069, + value: 4096 + } + ], + tags: [ + 'name:/var/prompt', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskStorage.Capacity_Float', + points: [ + { + timestamp: 1658193069, + value: 0.01 + } + ], + tags: [ + 'name:/var/prompt', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskStorage.1024-blocks', + points: [ + { + timestamp: 1658193069, + value: 298004 + } + ], + tags: [ + 'name:/var/apm/mount/apmclients-7170.2018.627.21-3.0.iso', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskStorage.Capacity_Float', + points: [ + { + timestamp: 1658193069, + value: 1 + } + ], + tags: [ + 'name:/var/apm/mount/apmclients-7170.2018.627.21-3.0.iso', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskStorage.1024-blocks', + points: [ + { + timestamp: 1658193069, + value: 7181064 + } + ], + tags: [ + 'name:/var/loipc', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskStorage.Capacity_Float', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/var/loipc', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskStorage.1024-blocks', + points: [ + { + timestamp: 1658193069, + value: 7181064 + } + ], + tags: [ + 'name:/mnt/sshplugin_tempfs', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskStorage.Capacity_Float', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/mnt/sshplugin_tempfs', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskLatency.r/s', + points: [ + { + timestamp: 1658193069, + value: 1.46 + } + ], + tags: [ + 'name:sda', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskLatency.w/s', + points: [ + { + timestamp: 1658193069, + value: 8.25 + } + ], + tags: [ + 'name:sda', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskLatency.%util', + points: [ + { + timestamp: 1658193069, + value: 0.09 + } + ], + tags: [ + 'name:sda', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskLatency.r/s', + points: [ + { + timestamp: 1658193069, + value: 1 + } + ], + tags: [ + 'name:sdb', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskLatency.w/s', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:sdb', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskLatency.%util', + points: [ + { + timestamp: 1658193069, + value: 0.04 + } + ], + tags: [ + 'name:sdb', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskLatency.r/s', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:dm-0', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskLatency.w/s', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:dm-0', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskLatency.%util', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:dm-0', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskLatency.r/s', + points: [ + { + timestamp: 1658193069, + value: 0.01 + } + ], + tags: [ + 'name:dm-1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskLatency.w/s', + points: [ + { + timestamp: 1658193069, + value: 11.01 + } + ], + tags: [ + 'name:dm-1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskLatency.%util', + points: [ + { + timestamp: 1658193069, + value: 0.01 + } + ], + tags: [ + 'name:dm-1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskLatency.r/s', + points: [ + { + timestamp: 1658193069, + value: 0.14 + } + ], + tags: [ + 'name:dm-2', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskLatency.w/s', + points: [ + { + timestamp: 1658193069, + value: 2.56 + } + ], + tags: [ + 'name:dm-2', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskLatency.%util', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:dm-2', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskLatency.r/s', + points: [ + { + timestamp: 1658193069, + value: 0.01 + } + ], + tags: [ + 'name:dm-3', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskLatency.w/s', + points: [ + { + timestamp: 1658193069, + value: 4.28 + } + ], + tags: [ + 'name:dm-3', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskLatency.%util', + points: [ + { + timestamp: 1658193069, + value: 0.01 + } + ], + tags: [ + 'name:dm-3', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskLatency.r/s', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:dm-4', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskLatency.w/s', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:dm-4', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskLatency.%util', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:dm-4', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskLatency.r/s', + points: [ + { + timestamp: 1658193069, + value: 0.04 + } + ], + tags: [ + 'name:dm-5', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskLatency.w/s', + points: [ + { + timestamp: 1658193069, + value: 1.52 + } + ], + tags: [ + 'name:dm-5', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskLatency.%util', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:dm-5', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskLatency.r/s', + points: [ + { + timestamp: 1658193069, + value: 0.13 + } + ], + tags: [ + 'name:dm-6', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskLatency.w/s', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:dm-6', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskLatency.%util', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:dm-6', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskLatency.r/s', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:dm-7', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskLatency.w/s', + points: [ + { + timestamp: 1658193069, + value: 0.05 + } + ], + tags: [ + 'name:dm-7', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskLatency.%util', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:dm-7', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskLatency.r/s', + points: [ + { + timestamp: 1658193069, + value: 0.11 + } + ], + tags: [ + 'name:dm-8', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskLatency.w/s', + points: [ + { + timestamp: 1658193069, + value: 4.72 + } + ], + tags: [ + 'name:dm-8', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.diskLatency.%util', + points: [ + { + timestamp: 1658193069, + value: 0.01 + } + ], + tags: [ + 'name:dm-8', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.networkInterfaces.counters.bitsIn', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status:up', + 'name:1.1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.networkInterfaces.counters.bitsOut', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status:up', + 'name:1.1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.networkInterfaces.counters.bitsIn', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status:up', + 'name:1.2', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.networkInterfaces.counters.bitsOut', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status:up', + 'name:1.2', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.networkInterfaces.counters.bitsIn', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status:up', + 'name:mgmt', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.networkInterfaces.counters.bitsOut', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status:up', + 'name:mgmt', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.average', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:clientBitsIn', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.current', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:clientBitsIn', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.max', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:clientBitsIn', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.average', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:clientBitsOut', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.current', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:clientBitsOut', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.max', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:clientBitsOut', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.average', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:clientIn', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.current', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:clientIn', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.max', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:clientIn', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.average', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:clientOut', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.current', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:clientOut', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.max', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:clientOut', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.average', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:compression', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.current', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:compression', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.max', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:compression', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.average', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:inBits', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.current', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:inBits', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.max', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:inBits', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.average', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:inPackets', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.current', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:inPackets', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.max', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:inPackets', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.average', + points: [ + { + timestamp: 1658193069, + value: 2969820 + } + ], + tags: [ + 'name:managementBitsIn', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.current', + points: [ + { + timestamp: 1658193069, + value: 846485 + } + ], + tags: [ + 'name:managementBitsIn', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.max', + points: [ + { + timestamp: 1658193069, + value: 36591317 + } + ], + tags: [ + 'name:managementBitsIn', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.average', + points: [ + { + timestamp: 1658193069, + value: 133 + } + ], + tags: [ + 'name:managementBitsOut', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.current', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:managementBitsOut', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.max', + points: [ + { + timestamp: 1658193069, + value: 12478 + } + ], + tags: [ + 'name:managementBitsOut', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.average', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:outBits', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.current', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:outBits', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.max', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:outBits', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.average', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:outPackets', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.current', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:outPackets', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.max', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:outPackets', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.average', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:serverBitsIn', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.current', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:serverBitsIn', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.max', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:serverBitsIn', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.average', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:serverBitsOut', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.current', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:serverBitsOut', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.max', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:serverBitsOut', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.average', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:serverIn', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.current', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:serverIn', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.max', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:serverIn', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.average', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:serverOut', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.current', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:serverOut', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.max', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:serverOut', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.average', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:serviceBits', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.current', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:serviceBits', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.max', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:serviceBits', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.average', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:servicePackets', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.current', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:servicePackets', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.max', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:servicePackets', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.average', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:sslTps', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.current', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:sslTps', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.throughputPerformance.max', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:sslTps', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.average', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:blade1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.current', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:blade1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.max', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:blade1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.average', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:blade2', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.current', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:blade2', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.max', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:blade2', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.average', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:client', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.current', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:client', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.max', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:client', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.average', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:clientAccepts', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.current', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:clientAccepts', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.max', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:clientAccepts', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.average', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:clientConnections', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.current', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:clientConnections', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.max', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:clientConnections', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.average', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:clientConnects', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.current', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:clientConnects', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.max', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:clientConnects', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.average', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:connections', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.current', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:connections', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.max', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:connections', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.average', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:httpRequests', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.current', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:httpRequests', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.max', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:httpRequests', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.average', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:pvaClient', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.current', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:pvaClient', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.max', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:pvaClient', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.average', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:pvaServer', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.current', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:pvaServer', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.max', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:pvaServer', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.average', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:server', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.current', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:server', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.max', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:server', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.average', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:serverConnections', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.current', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:serverConnections', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.max', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:serverConnections', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.average', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:activeSslClientConnections', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.current', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:activeSslClientConnections', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.max', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:activeSslClientConnections', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.average', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:newSslClientConnections', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.current', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:newSslClientConnections', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.max', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:newSslClientConnections', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.average', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:activeSslServerConnections', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.current', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:activeSslServerConnections', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.max', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:activeSslServerConnections', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.average', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:newSslServerConnections', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.current', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:newSslServerConnections', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.max', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:newSslServerConnections', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.average', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:serverNewConnections', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.current', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:serverNewConnections', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.max', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:serverNewConnections', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.average', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:serverNewTcpConnections', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.current', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:serverNewTcpConnections', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.connectionsPerformance.max', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:serverNewTcpConnections', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'system.asmAttackSignatures.createDateTime', + points: [ + { + timestamp: 1658193069, + value: 1563279691000 + } + ], + tags: [ + 'filename:ASM-AttackSignatures_20190716_122131.im', + 'name:ff8080817a3a4908017a3a490958000e', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'virtualServers.clientside.bitsIn', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'destination:10.5.6.7:80', + 'availabilityState:offline', + 'enabledState:enabled', + 'isAvailable:false', + 'isEnabled:true', + 'status.statusReason:The virtual server is available', + 'mask:255.255.255.255', + 'name:/Common/foofoo.app/foofoo_vs', + 'appService:/Common/foofoo.app/foofoo', + 'ipProtocol:tcp', + 'tenant:Common', + 'pool:/Common/foofoo.app/foofoo_pool', + 'application:foofoo.app', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'virtualServers.clientside.bitsOut', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'destination:10.5.6.7:80', + 'availabilityState:offline', + 'enabledState:enabled', + 'isAvailable:false', + 'isEnabled:true', + 'status.statusReason:The virtual server is available', + 'mask:255.255.255.255', + 'name:/Common/foofoo.app/foofoo_vs', + 'appService:/Common/foofoo.app/foofoo', + 'ipProtocol:tcp', + 'tenant:Common', + 'pool:/Common/foofoo.app/foofoo_pool', + 'application:foofoo.app', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'virtualServers.clientside.curConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'destination:10.5.6.7:80', + 'availabilityState:offline', + 'enabledState:enabled', + 'isAvailable:false', + 'isEnabled:true', + 'status.statusReason:The virtual server is available', + 'mask:255.255.255.255', + 'name:/Common/foofoo.app/foofoo_vs', + 'appService:/Common/foofoo.app/foofoo', + 'ipProtocol:tcp', + 'tenant:Common', + 'pool:/Common/foofoo.app/foofoo_pool', + 'application:foofoo.app', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'virtualServers.clientside.evictedConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'destination:10.5.6.7:80', + 'availabilityState:offline', + 'enabledState:enabled', + 'isAvailable:false', + 'isEnabled:true', + 'status.statusReason:The virtual server is available', + 'mask:255.255.255.255', + 'name:/Common/foofoo.app/foofoo_vs', + 'appService:/Common/foofoo.app/foofoo', + 'ipProtocol:tcp', + 'tenant:Common', + 'pool:/Common/foofoo.app/foofoo_pool', + 'application:foofoo.app', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'virtualServers.clientside.maxConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'destination:10.5.6.7:80', + 'availabilityState:offline', + 'enabledState:enabled', + 'isAvailable:false', + 'isEnabled:true', + 'status.statusReason:The virtual server is available', + 'mask:255.255.255.255', + 'name:/Common/foofoo.app/foofoo_vs', + 'appService:/Common/foofoo.app/foofoo', + 'ipProtocol:tcp', + 'tenant:Common', + 'pool:/Common/foofoo.app/foofoo_pool', + 'application:foofoo.app', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'virtualServers.clientside.pktsIn', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'destination:10.5.6.7:80', + 'availabilityState:offline', + 'enabledState:enabled', + 'isAvailable:false', + 'isEnabled:true', + 'status.statusReason:The virtual server is available', + 'mask:255.255.255.255', + 'name:/Common/foofoo.app/foofoo_vs', + 'appService:/Common/foofoo.app/foofoo', + 'ipProtocol:tcp', + 'tenant:Common', + 'pool:/Common/foofoo.app/foofoo_pool', + 'application:foofoo.app', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'virtualServers.clientside.pktsOut', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'destination:10.5.6.7:80', + 'availabilityState:offline', + 'enabledState:enabled', + 'isAvailable:false', + 'isEnabled:true', + 'status.statusReason:The virtual server is available', + 'mask:255.255.255.255', + 'name:/Common/foofoo.app/foofoo_vs', + 'appService:/Common/foofoo.app/foofoo', + 'ipProtocol:tcp', + 'tenant:Common', + 'pool:/Common/foofoo.app/foofoo_pool', + 'application:foofoo.app', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'virtualServers.clientside.slowKilled', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'destination:10.5.6.7:80', + 'availabilityState:offline', + 'enabledState:enabled', + 'isAvailable:false', + 'isEnabled:true', + 'status.statusReason:The virtual server is available', + 'mask:255.255.255.255', + 'name:/Common/foofoo.app/foofoo_vs', + 'appService:/Common/foofoo.app/foofoo', + 'ipProtocol:tcp', + 'tenant:Common', + 'pool:/Common/foofoo.app/foofoo_pool', + 'application:foofoo.app', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'virtualServers.clientside.totConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'destination:10.5.6.7:80', + 'availabilityState:offline', + 'enabledState:enabled', + 'isAvailable:false', + 'isEnabled:true', + 'status.statusReason:The virtual server is available', + 'mask:255.255.255.255', + 'name:/Common/foofoo.app/foofoo_vs', + 'appService:/Common/foofoo.app/foofoo', + 'ipProtocol:tcp', + 'tenant:Common', + 'pool:/Common/foofoo.app/foofoo_pool', + 'application:foofoo.app', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'virtualServers.clientside.bitsIn', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'destination:192.0.2.11:443', + 'availabilityState:offline', + 'enabledState:enabled', + 'isAvailable:false', + 'isEnabled:true', + 'status.statusReason:The children pool member(s) either don\'t have service checking enabled, or service check results are not available yet', + 'mask:255.255.255.0', + 'name:/Example_Tenant/A1/serviceMain', + 'ipProtocol:tcp', + 'tenant:Example_Tenant', + 'pool:/Example_Tenant/A1/barbar_pool', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'virtualServers.clientside.bitsOut', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'destination:192.0.2.11:443', + 'availabilityState:offline', + 'enabledState:enabled', + 'isAvailable:false', + 'isEnabled:true', + 'status.statusReason:The children pool member(s) either don\'t have service checking enabled, or service check results are not available yet', + 'mask:255.255.255.0', + 'name:/Example_Tenant/A1/serviceMain', + 'ipProtocol:tcp', + 'tenant:Example_Tenant', + 'pool:/Example_Tenant/A1/barbar_pool', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'virtualServers.clientside.curConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'destination:192.0.2.11:443', + 'availabilityState:offline', + 'enabledState:enabled', + 'isAvailable:false', + 'isEnabled:true', + 'status.statusReason:The children pool member(s) either don\'t have service checking enabled, or service check results are not available yet', + 'mask:255.255.255.0', + 'name:/Example_Tenant/A1/serviceMain', + 'ipProtocol:tcp', + 'tenant:Example_Tenant', + 'pool:/Example_Tenant/A1/barbar_pool', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'virtualServers.clientside.evictedConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'destination:192.0.2.11:443', + 'availabilityState:offline', + 'enabledState:enabled', + 'isAvailable:false', + 'isEnabled:true', + 'status.statusReason:The children pool member(s) either don\'t have service checking enabled, or service check results are not available yet', + 'mask:255.255.255.0', + 'name:/Example_Tenant/A1/serviceMain', + 'ipProtocol:tcp', + 'tenant:Example_Tenant', + 'pool:/Example_Tenant/A1/barbar_pool', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'virtualServers.clientside.maxConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'destination:192.0.2.11:443', + 'availabilityState:offline', + 'enabledState:enabled', + 'isAvailable:false', + 'isEnabled:true', + 'status.statusReason:The children pool member(s) either don\'t have service checking enabled, or service check results are not available yet', + 'mask:255.255.255.0', + 'name:/Example_Tenant/A1/serviceMain', + 'ipProtocol:tcp', + 'tenant:Example_Tenant', + 'pool:/Example_Tenant/A1/barbar_pool', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'virtualServers.clientside.pktsIn', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'destination:192.0.2.11:443', + 'availabilityState:offline', + 'enabledState:enabled', + 'isAvailable:false', + 'isEnabled:true', + 'status.statusReason:The children pool member(s) either don\'t have service checking enabled, or service check results are not available yet', + 'mask:255.255.255.0', + 'name:/Example_Tenant/A1/serviceMain', + 'ipProtocol:tcp', + 'tenant:Example_Tenant', + 'pool:/Example_Tenant/A1/barbar_pool', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'virtualServers.clientside.pktsOut', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'destination:192.0.2.11:443', + 'availabilityState:offline', + 'enabledState:enabled', + 'isAvailable:false', + 'isEnabled:true', + 'status.statusReason:The children pool member(s) either don\'t have service checking enabled, or service check results are not available yet', + 'mask:255.255.255.0', + 'name:/Example_Tenant/A1/serviceMain', + 'ipProtocol:tcp', + 'tenant:Example_Tenant', + 'pool:/Example_Tenant/A1/barbar_pool', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'virtualServers.clientside.slowKilled', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'destination:192.0.2.11:443', + 'availabilityState:offline', + 'enabledState:enabled', + 'isAvailable:false', + 'isEnabled:true', + 'status.statusReason:The children pool member(s) either don\'t have service checking enabled, or service check results are not available yet', + 'mask:255.255.255.0', + 'name:/Example_Tenant/A1/serviceMain', + 'ipProtocol:tcp', + 'tenant:Example_Tenant', + 'pool:/Example_Tenant/A1/barbar_pool', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'virtualServers.clientside.totConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'destination:192.0.2.11:443', + 'availabilityState:offline', + 'enabledState:enabled', + 'isAvailable:false', + 'isEnabled:true', + 'status.statusReason:The children pool member(s) either don\'t have service checking enabled, or service check results are not available yet', + 'mask:255.255.255.0', + 'name:/Example_Tenant/A1/serviceMain', + 'ipProtocol:tcp', + 'tenant:Example_Tenant', + 'pool:/Example_Tenant/A1/barbar_pool', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'virtualServers.clientside.bitsIn', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'destination:192.0.2.11:80', + 'availabilityState:unknown', + 'enabledState:enabled', + 'isAvailable:true', + 'isEnabled:true', + 'status.statusReason:The children pool member(s) either don\'t have service checking enabled, or service check results are not available yet', + 'name:/Example_Tenant/A1/serviceMain-Redirect', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'virtualServers.clientside.bitsOut', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'destination:192.0.2.11:80', + 'availabilityState:unknown', + 'enabledState:enabled', + 'isAvailable:true', + 'isEnabled:true', + 'status.statusReason:The children pool member(s) either don\'t have service checking enabled, or service check results are not available yet', + 'name:/Example_Tenant/A1/serviceMain-Redirect', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'virtualServers.clientside.curConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'destination:192.0.2.11:80', + 'availabilityState:unknown', + 'enabledState:enabled', + 'isAvailable:true', + 'isEnabled:true', + 'status.statusReason:The children pool member(s) either don\'t have service checking enabled, or service check results are not available yet', + 'name:/Example_Tenant/A1/serviceMain-Redirect', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'virtualServers.clientside.evictedConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'destination:192.0.2.11:80', + 'availabilityState:unknown', + 'enabledState:enabled', + 'isAvailable:true', + 'isEnabled:true', + 'status.statusReason:The children pool member(s) either don\'t have service checking enabled, or service check results are not available yet', + 'name:/Example_Tenant/A1/serviceMain-Redirect', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'virtualServers.clientside.maxConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'destination:192.0.2.11:80', + 'availabilityState:unknown', + 'enabledState:enabled', + 'isAvailable:true', + 'isEnabled:true', + 'status.statusReason:The children pool member(s) either don\'t have service checking enabled, or service check results are not available yet', + 'name:/Example_Tenant/A1/serviceMain-Redirect', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'virtualServers.clientside.pktsIn', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'destination:192.0.2.11:80', + 'availabilityState:unknown', + 'enabledState:enabled', + 'isAvailable:true', + 'isEnabled:true', + 'status.statusReason:The children pool member(s) either don\'t have service checking enabled, or service check results are not available yet', + 'name:/Example_Tenant/A1/serviceMain-Redirect', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'virtualServers.clientside.pktsOut', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'destination:192.0.2.11:80', + 'availabilityState:unknown', + 'enabledState:enabled', + 'isAvailable:true', + 'isEnabled:true', + 'status.statusReason:The children pool member(s) either don\'t have service checking enabled, or service check results are not available yet', + 'name:/Example_Tenant/A1/serviceMain-Redirect', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'virtualServers.clientside.slowKilled', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'destination:192.0.2.11:80', + 'availabilityState:unknown', + 'enabledState:enabled', + 'isAvailable:true', + 'isEnabled:true', + 'status.statusReason:The children pool member(s) either don\'t have service checking enabled, or service check results are not available yet', + 'name:/Example_Tenant/A1/serviceMain-Redirect', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'virtualServers.clientside.totConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'destination:192.0.2.11:80', + 'availabilityState:unknown', + 'enabledState:enabled', + 'isAvailable:true', + 'isEnabled:true', + 'status.statusReason:The children pool member(s) either don\'t have service checking enabled, or service check results are not available yet', + 'name:/Example_Tenant/A1/serviceMain-Redirect', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.activeMemberCnt', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'availabilityState:available', + 'enabledState:enabled', + 'status.statusReason:The pool is available', + 'name:/Common/app.app/app_pool', + 'tenant:Common', + 'application:app.app', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.serverside.bitsIn', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'availabilityState:available', + 'enabledState:enabled', + 'status.statusReason:The pool is available', + 'name:/Common/app.app/app_pool', + 'tenant:Common', + 'application:app.app', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.serverside.bitsOut', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'availabilityState:available', + 'enabledState:enabled', + 'status.statusReason:The pool is available', + 'name:/Common/app.app/app_pool', + 'tenant:Common', + 'application:app.app', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.serverside.curConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'availabilityState:available', + 'enabledState:enabled', + 'status.statusReason:The pool is available', + 'name:/Common/app.app/app_pool', + 'tenant:Common', + 'application:app.app', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.serverside.maxConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'availabilityState:available', + 'enabledState:enabled', + 'status.statusReason:The pool is available', + 'name:/Common/app.app/app_pool', + 'tenant:Common', + 'application:app.app', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.serverside.pktsIn', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'availabilityState:available', + 'enabledState:enabled', + 'status.statusReason:The pool is available', + 'name:/Common/app.app/app_pool', + 'tenant:Common', + 'application:app.app', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.serverside.pktsOut', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'availabilityState:available', + 'enabledState:enabled', + 'status.statusReason:The pool is available', + 'name:/Common/app.app/app_pool', + 'tenant:Common', + 'application:app.app', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.serverside.totConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'availabilityState:available', + 'enabledState:enabled', + 'status.statusReason:The pool is available', + 'name:/Common/app.app/app_pool', + 'tenant:Common', + 'application:app.app', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.bitsIn', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:10.0.3.5', + 'monitorStatus:up', + 'poolName:/Common/app.app/app_pool', + 'port:0', + 'availabilityState:available', + 'enabledState:enabled', + 'status.statusReason:Pool member is available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.bitsOut', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:10.0.3.5', + 'monitorStatus:up', + 'poolName:/Common/app.app/app_pool', + 'port:0', + 'availabilityState:available', + 'enabledState:enabled', + 'status.statusReason:Pool member is available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.curConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:10.0.3.5', + 'monitorStatus:up', + 'poolName:/Common/app.app/app_pool', + 'port:0', + 'availabilityState:available', + 'enabledState:enabled', + 'status.statusReason:Pool member is available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.maxConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:10.0.3.5', + 'monitorStatus:up', + 'poolName:/Common/app.app/app_pool', + 'port:0', + 'availabilityState:available', + 'enabledState:enabled', + 'status.statusReason:Pool member is available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.pktsIn', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:10.0.3.5', + 'monitorStatus:up', + 'poolName:/Common/app.app/app_pool', + 'port:0', + 'availabilityState:available', + 'enabledState:enabled', + 'status.statusReason:Pool member is available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.pktsOut', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:10.0.3.5', + 'monitorStatus:up', + 'poolName:/Common/app.app/app_pool', + 'port:0', + 'availabilityState:available', + 'enabledState:enabled', + 'status.statusReason:Pool member is available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.totConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:10.0.3.5', + 'monitorStatus:up', + 'poolName:/Common/app.app/app_pool', + 'port:0', + 'availabilityState:available', + 'enabledState:enabled', + 'status.statusReason:Pool member is available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.activeMemberCnt', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'availabilityState:available', + 'enabledState:enabled', + 'status.statusReason:The pool is available', + 'name:/Common/telemetry-local', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.serverside.bitsIn', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'availabilityState:available', + 'enabledState:enabled', + 'status.statusReason:The pool is available', + 'name:/Common/telemetry-local', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.serverside.bitsOut', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'availabilityState:available', + 'enabledState:enabled', + 'status.statusReason:The pool is available', + 'name:/Common/telemetry-local', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.serverside.curConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'availabilityState:available', + 'enabledState:enabled', + 'status.statusReason:The pool is available', + 'name:/Common/telemetry-local', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.serverside.maxConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'availabilityState:available', + 'enabledState:enabled', + 'status.statusReason:The pool is available', + 'name:/Common/telemetry-local', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.serverside.pktsIn', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'availabilityState:available', + 'enabledState:enabled', + 'status.statusReason:The pool is available', + 'name:/Common/telemetry-local', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.serverside.pktsOut', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'availabilityState:available', + 'enabledState:enabled', + 'status.statusReason:The pool is available', + 'name:/Common/telemetry-local', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.serverside.totConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'availabilityState:available', + 'enabledState:enabled', + 'status.statusReason:The pool is available', + 'name:/Common/telemetry-local', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.bitsIn', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:10.0.1.100', + 'monitorStatus:down', + 'poolName:/Common/telemetry-local', + 'port:0', + 'availabilityState:available', + 'enabledState:enabled', + 'status.statusReason:Pool member has been marked down by a monitor', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.bitsOut', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:10.0.1.100', + 'monitorStatus:down', + 'poolName:/Common/telemetry-local', + 'port:0', + 'availabilityState:available', + 'enabledState:enabled', + 'status.statusReason:Pool member has been marked down by a monitor', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.curConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:10.0.1.100', + 'monitorStatus:down', + 'poolName:/Common/telemetry-local', + 'port:0', + 'availabilityState:available', + 'enabledState:enabled', + 'status.statusReason:Pool member has been marked down by a monitor', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.maxConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:10.0.1.100', + 'monitorStatus:down', + 'poolName:/Common/telemetry-local', + 'port:0', + 'availabilityState:available', + 'enabledState:enabled', + 'status.statusReason:Pool member has been marked down by a monitor', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.pktsIn', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:10.0.1.100', + 'monitorStatus:down', + 'poolName:/Common/telemetry-local', + 'port:0', + 'availabilityState:available', + 'enabledState:enabled', + 'status.statusReason:Pool member has been marked down by a monitor', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.pktsOut', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:10.0.1.100', + 'monitorStatus:down', + 'poolName:/Common/telemetry-local', + 'port:0', + 'availabilityState:available', + 'enabledState:enabled', + 'status.statusReason:Pool member has been marked down by a monitor', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.totConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:10.0.1.100', + 'monitorStatus:down', + 'poolName:/Common/telemetry-local', + 'port:0', + 'availabilityState:available', + 'enabledState:enabled', + 'status.statusReason:Pool member has been marked down by a monitor', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.activeMemberCnt', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:The pool is available', + 'name:/Example_Tenant/A1/hsl_pool', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.serverside.bitsIn', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:The pool is available', + 'name:/Example_Tenant/A1/hsl_pool', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.serverside.bitsOut', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:The pool is available', + 'name:/Example_Tenant/A1/hsl_pool', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.serverside.curConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:The pool is available', + 'name:/Example_Tenant/A1/hsl_pool', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.serverside.maxConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:The pool is available', + 'name:/Example_Tenant/A1/hsl_pool', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.serverside.pktsIn', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:The pool is available', + 'name:/Example_Tenant/A1/hsl_pool', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.serverside.pktsOut', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:The pool is available', + 'name:/Example_Tenant/A1/hsl_pool', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.serverside.totConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:The pool is available', + 'name:/Example_Tenant/A1/hsl_pool', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.bitsIn', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:192.168.120.6', + 'monitorStatus:up', + 'poolName:/Example_Tenant/A1/hsl_pool', + 'port:0', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:Pool member is available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.bitsOut', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:192.168.120.6', + 'monitorStatus:up', + 'poolName:/Example_Tenant/A1/hsl_pool', + 'port:0', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:Pool member is available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.curConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:192.168.120.6', + 'monitorStatus:up', + 'poolName:/Example_Tenant/A1/hsl_pool', + 'port:0', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:Pool member is available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.maxConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:192.168.120.6', + 'monitorStatus:up', + 'poolName:/Example_Tenant/A1/hsl_pool', + 'port:0', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:Pool member is available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.pktsIn', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:192.168.120.6', + 'monitorStatus:up', + 'poolName:/Example_Tenant/A1/hsl_pool', + 'port:0', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:Pool member is available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.pktsOut', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:192.168.120.6', + 'monitorStatus:up', + 'poolName:/Example_Tenant/A1/hsl_pool', + 'port:0', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:Pool member is available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.totConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:192.168.120.6', + 'monitorStatus:up', + 'poolName:/Example_Tenant/A1/hsl_pool', + 'port:0', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:Pool member is available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.activeMemberCnt', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:The pool is available', + 'name:/Example_Tenant/A1/web_pool', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.serverside.bitsIn', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:The pool is available', + 'name:/Example_Tenant/A1/web_pool', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.serverside.bitsOut', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:The pool is available', + 'name:/Example_Tenant/A1/web_pool', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.serverside.curConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:The pool is available', + 'name:/Example_Tenant/A1/web_pool', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.serverside.maxConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:The pool is available', + 'name:/Example_Tenant/A1/web_pool', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.serverside.pktsIn', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:The pool is available', + 'name:/Example_Tenant/A1/web_pool', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.serverside.pktsOut', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:The pool is available', + 'name:/Example_Tenant/A1/web_pool', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.serverside.totConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:The pool is available', + 'name:/Example_Tenant/A1/web_pool', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.bitsIn', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:192.0.2.12', + 'monitorStatus:up', + 'poolName:/Example_Tenant/A1/web_pool', + 'port:0', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:Pool member is available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.bitsOut', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:192.0.2.12', + 'monitorStatus:up', + 'poolName:/Example_Tenant/A1/web_pool', + 'port:0', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:Pool member is available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.curConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:192.0.2.12', + 'monitorStatus:up', + 'poolName:/Example_Tenant/A1/web_pool', + 'port:0', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:Pool member is available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.maxConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:192.0.2.12', + 'monitorStatus:up', + 'poolName:/Example_Tenant/A1/web_pool', + 'port:0', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:Pool member is available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.pktsIn', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:192.0.2.12', + 'monitorStatus:up', + 'poolName:/Example_Tenant/A1/web_pool', + 'port:0', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:Pool member is available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.pktsOut', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:192.0.2.12', + 'monitorStatus:up', + 'poolName:/Example_Tenant/A1/web_pool', + 'port:0', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:Pool member is available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.totConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:192.0.2.12', + 'monitorStatus:up', + 'poolName:/Example_Tenant/A1/web_pool', + 'port:0', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:Pool member is available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.bitsIn', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:192.0.2.13', + 'monitorStatus:up', + 'poolName:/Example_Tenant/A1/web_pool', + 'port:0', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:Pool member is available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.bitsOut', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:192.0.2.13', + 'monitorStatus:up', + 'poolName:/Example_Tenant/A1/web_pool', + 'port:0', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:Pool member is available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.curConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:192.0.2.13', + 'monitorStatus:up', + 'poolName:/Example_Tenant/A1/web_pool', + 'port:0', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:Pool member is available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.maxConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:192.0.2.13', + 'monitorStatus:up', + 'poolName:/Example_Tenant/A1/web_pool', + 'port:0', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:Pool member is available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.pktsIn', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:192.0.2.13', + 'monitorStatus:up', + 'poolName:/Example_Tenant/A1/web_pool', + 'port:0', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:Pool member is available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.pktsOut', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:192.0.2.13', + 'monitorStatus:up', + 'poolName:/Example_Tenant/A1/web_pool', + 'port:0', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:Pool member is available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.totConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:192.0.2.13', + 'monitorStatus:up', + 'poolName:/Example_Tenant/A1/web_pool', + 'port:0', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:Pool member is available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.bitsIn', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:192.0.2.14', + 'monitorStatus:unchecked', + 'poolName:/Example_Tenant/A1/web_pool', + 'port:80', + 'availabilityState:unknown', + 'enabledState:enabled', + 'status.statusReason:Pool member does not have service checking enabled', + 'fqdn:bestwebsite.com', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.bitsOut', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:192.0.2.14', + 'monitorStatus:unchecked', + 'poolName:/Example_Tenant/A1/web_pool', + 'port:80', + 'availabilityState:unknown', + 'enabledState:enabled', + 'status.statusReason:Pool member does not have service checking enabled', + 'fqdn:bestwebsite.com', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.curConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:192.0.2.14', + 'monitorStatus:unchecked', + 'poolName:/Example_Tenant/A1/web_pool', + 'port:80', + 'availabilityState:unknown', + 'enabledState:enabled', + 'status.statusReason:Pool member does not have service checking enabled', + 'fqdn:bestwebsite.com', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.maxConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:192.0.2.14', + 'monitorStatus:unchecked', + 'poolName:/Example_Tenant/A1/web_pool', + 'port:80', + 'availabilityState:unknown', + 'enabledState:enabled', + 'status.statusReason:Pool member does not have service checking enabled', + 'fqdn:bestwebsite.com', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.pktsIn', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:192.0.2.14', + 'monitorStatus:unchecked', + 'poolName:/Example_Tenant/A1/web_pool', + 'port:80', + 'availabilityState:unknown', + 'enabledState:enabled', + 'status.statusReason:Pool member does not have service checking enabled', + 'fqdn:bestwebsite.com', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.pktsOut', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:192.0.2.14', + 'monitorStatus:unchecked', + 'poolName:/Example_Tenant/A1/web_pool', + 'port:80', + 'availabilityState:unknown', + 'enabledState:enabled', + 'status.statusReason:Pool member does not have service checking enabled', + 'fqdn:bestwebsite.com', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.totConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:192.0.2.14', + 'monitorStatus:unchecked', + 'poolName:/Example_Tenant/A1/web_pool', + 'port:80', + 'availabilityState:unknown', + 'enabledState:enabled', + 'status.statusReason:Pool member does not have service checking enabled', + 'fqdn:bestwebsite.com', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.totRequests', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:192.0.2.14', + 'monitorStatus:unchecked', + 'poolName:/Example_Tenant/A1/web_pool', + 'port:80', + 'availabilityState:unknown', + 'enabledState:enabled', + 'status.statusReason:Pool member does not have service checking enabled', + 'fqdn:bestwebsite.com', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.bitsIn', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:::', + 'monitorStatus:fqdn-up', + 'poolName:/Example_Tenant/A1/web_pool', + 'port:80', + 'availabilityState:available', + 'enabledState:enabled', + 'status.statusReason:The DNS server(s) are available', + 'fqdn:bestwebsite.com', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.bitsOut', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:::', + 'monitorStatus:fqdn-up', + 'poolName:/Example_Tenant/A1/web_pool', + 'port:80', + 'availabilityState:available', + 'enabledState:enabled', + 'status.statusReason:The DNS server(s) are available', + 'fqdn:bestwebsite.com', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.curConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:::', + 'monitorStatus:fqdn-up', + 'poolName:/Example_Tenant/A1/web_pool', + 'port:80', + 'availabilityState:available', + 'enabledState:enabled', + 'status.statusReason:The DNS server(s) are available', + 'fqdn:bestwebsite.com', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.maxConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:::', + 'monitorStatus:fqdn-up', + 'poolName:/Example_Tenant/A1/web_pool', + 'port:80', + 'availabilityState:available', + 'enabledState:enabled', + 'status.statusReason:The DNS server(s) are available', + 'fqdn:bestwebsite.com', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.pktsIn', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:::', + 'monitorStatus:fqdn-up', + 'poolName:/Example_Tenant/A1/web_pool', + 'port:80', + 'availabilityState:available', + 'enabledState:enabled', + 'status.statusReason:The DNS server(s) are available', + 'fqdn:bestwebsite.com', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.pktsOut', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:::', + 'monitorStatus:fqdn-up', + 'poolName:/Example_Tenant/A1/web_pool', + 'port:80', + 'availabilityState:available', + 'enabledState:enabled', + 'status.statusReason:The DNS server(s) are available', + 'fqdn:bestwebsite.com', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.serverside.totConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:::', + 'monitorStatus:fqdn-up', + 'poolName:/Example_Tenant/A1/web_pool', + 'port:80', + 'availabilityState:available', + 'enabledState:enabled', + 'status.statusReason:The DNS server(s) are available', + 'fqdn:bestwebsite.com', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'pools.members.totRequests', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'addr:::', + 'monitorStatus:fqdn-up', + 'poolName:/Example_Tenant/A1/web_pool', + 'port:80', + 'availabilityState:available', + 'enabledState:enabled', + 'status.statusReason:The DNS server(s) are available', + 'fqdn:bestwebsite.com', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'ltmPolicies.invoked', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/app.app/app_policy', + 'tenant:Common', + 'application:app.app', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'ltmPolicies.succeeded', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/app.app/app_policy', + 'tenant:Common', + 'application:app.app', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'ltmPolicies.actions.invoked', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'ltmPolicies.actions.succeeded', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'ltmPolicies.invoked', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/telemetry', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'ltmPolicies.succeeded', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/telemetry', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'ltmPolicies.actions.invoked', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'ltmPolicies.actions.succeeded', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.cookiePersistInserts', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/app.app/app_http', + 'tenant:Common', + 'application:app.app', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.getReqs', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/app.app/app_http', + 'tenant:Common', + 'application:app.app', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.maxKeepaliveReq', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/app.app/app_http', + 'tenant:Common', + 'application:app.app', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.numberReqs', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/app.app/app_http', + 'tenant:Common', + 'application:app.app', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.postReqs', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/app.app/app_http', + 'tenant:Common', + 'application:app.app', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.2xxResp', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/app.app/app_http', + 'tenant:Common', + 'application:app.app', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.3xxResp', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/app.app/app_http', + 'tenant:Common', + 'application:app.app', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.4xxResp', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/app.app/app_http', + 'tenant:Common', + 'application:app.app', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.5xxResp', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/app.app/app_http', + 'tenant:Common', + 'application:app.app', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.respLessThan2m', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/app.app/app_http', + 'tenant:Common', + 'application:app.app', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.respGreaterThan2m', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/app.app/app_http', + 'tenant:Common', + 'application:app.app', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.v10Reqs', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/app.app/app_http', + 'tenant:Common', + 'application:app.app', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.v10Resp', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/app.app/app_http', + 'tenant:Common', + 'application:app.app', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.v11Reqs', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/app.app/app_http', + 'tenant:Common', + 'application:app.app', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.v11Resp', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/app.app/app_http', + 'tenant:Common', + 'application:app.app', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.v9Reqs', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/app.app/app_http', + 'tenant:Common', + 'application:app.app', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.v9Resp', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/app.app/app_http', + 'tenant:Common', + 'application:app.app', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.cookiePersistInserts', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/http', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.getReqs', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/http', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.maxKeepaliveReq', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/http', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.numberReqs', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/http', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.postReqs', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/http', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.2xxResp', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/http', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.3xxResp', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/http', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.4xxResp', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/http', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.5xxResp', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/http', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.respLessThan2m', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/http', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.respGreaterThan2m', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/http', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.v10Reqs', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/http', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.v10Resp', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/http', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.v11Reqs', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/http', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.v11Resp', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/http', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.v9Reqs', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/http', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.v9Resp', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/http', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.cookiePersistInserts', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/custom_http_profile', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.getReqs', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/custom_http_profile', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.maxKeepaliveReq', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/custom_http_profile', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.numberReqs', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/custom_http_profile', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.postReqs', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/custom_http_profile', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.2xxResp', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/custom_http_profile', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.3xxResp', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/custom_http_profile', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.4xxResp', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/custom_http_profile', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.5xxResp', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/custom_http_profile', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.respLessThan2m', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/custom_http_profile', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.respGreaterThan2m', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/custom_http_profile', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.v10Reqs', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/custom_http_profile', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.v10Resp', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/custom_http_profile', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.v11Reqs', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/custom_http_profile', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.v11Resp', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/custom_http_profile', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.v9Reqs', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/custom_http_profile', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'httpProfiles.v9Resp', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/custom_http_profile', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.activeHandshakeRejected', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.cipherUses.adhKeyxchg', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.cipherUses.aesBulk', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.cipherUses.aesGcmBulk', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.cipherUses.camelliaBulk', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.cipherUses.chacha20Poly1305Bulk', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.cipherUses.desBulk', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.cipherUses.dhRsaKeyxchg', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.cipherUses.dheDssKeyxchg', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.cipherUses.ecdhEcdsaKeyxchg', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.cipherUses.ecdhRsaKeyxchg', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.cipherUses.ecdheEcdsaKeyxchg', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.cipherUses.ecdheRsaKeyxchg', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.cipherUses.edhRsaKeyxchg', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.cipherUses.ideaBulk', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.cipherUses.md5Digest', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.cipherUses.nullBulk', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.cipherUses.nullDigest', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.cipherUses.rc2Bulk', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.cipherUses.rc4Bulk', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.cipherUses.rsaKeyxchg', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.cipherUses.shaDigest', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.currentCompatibleConnections', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.currentConnections', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.currentNativeConnections', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.currentActiveHandshakes', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.decryptedBytesIn', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.decryptedBytesOut', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.encryptedBytesIn', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.encryptedBytesOut', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.fatalAlerts', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.handshakeFailures', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.peercertInvalid', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.peercertNone', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.peercertValid', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.protocolUses.dtlsv1', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.protocolUses.sslv2', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.protocolUses.sslv3', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.protocolUses.tlsv1', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.protocolUses.tlsv1_1', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.protocolUses.tlsv1_2', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.protocolUses.tlsv1_3', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.recordsIn', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.recordsOut', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.sniRejects', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.totCompatConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.totNativeConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/clientssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.activeHandshakeRejected', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.cipherUses.adhKeyxchg', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.cipherUses.aesBulk', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.cipherUses.aesGcmBulk', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.cipherUses.camelliaBulk', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.cipherUses.chacha20Poly1305Bulk', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.cipherUses.desBulk', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.cipherUses.dhRsaKeyxchg', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.cipherUses.dheDssKeyxchg', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.cipherUses.ecdhEcdsaKeyxchg', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.cipherUses.ecdhRsaKeyxchg', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.cipherUses.ecdheEcdsaKeyxchg', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.cipherUses.ecdheRsaKeyxchg', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.cipherUses.edhRsaKeyxchg', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.cipherUses.ideaBulk', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.cipherUses.md5Digest', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.cipherUses.nullBulk', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.cipherUses.nullDigest', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.cipherUses.rc2Bulk', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.cipherUses.rc4Bulk', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.cipherUses.rsaKeyxchg', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.cipherUses.shaDigest', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.currentCompatibleConnections', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.currentConnections', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.currentNativeConnections', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.currentActiveHandshakes', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.decryptedBytesIn', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.decryptedBytesOut', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.encryptedBytesIn', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.encryptedBytesOut', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.fatalAlerts', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.handshakeFailures', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.peercertInvalid', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.peercertNone', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.peercertValid', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.protocolUses.dtlsv1', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.protocolUses.sslv2', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.protocolUses.sslv3', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.protocolUses.tlsv1', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.protocolUses.tlsv1_1', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.protocolUses.tlsv1_2', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.protocolUses.tlsv1_3', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.recordsIn', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.recordsOut', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.sniRejects', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.totCompatConns', + points: [ + { + timestamp: 1658193069, + value: 100 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'clientSslProfiles.totNativeConns', + points: [ + { + timestamp: 1658193069, + value: 100 + } + ], + tags: [ + 'name:/Example_Tenant/A1/webtls', + 'tenant:Example_Tenant', + 'application:A1', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.activeHandshakeRejected', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.cipherUses.adhKeyxchg', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.cipherUses.aesBulk', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.cipherUses.aesGcmBulk', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.cipherUses.camelliaBulk', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.cipherUses.chacha20Poly1305Bulk', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.cipherUses.desBulk', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.cipherUses.dhRsaKeyxchg', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.cipherUses.dheDssKeyxchg', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.cipherUses.ecdhEcdsaKeyxchg', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.cipherUses.ecdhRsaKeyxchg', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.cipherUses.ecdheEcdsaKeyxchg', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.cipherUses.ecdheRsaKeyxchg', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.cipherUses.edhRsaKeyxchg', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.cipherUses.ideaBulk', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.cipherUses.md5Digest', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.cipherUses.nullBulk', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.cipherUses.nullDigest', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.cipherUses.rc2Bulk', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.cipherUses.rc4Bulk', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.cipherUses.rsaKeyxchg', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.cipherUses.shaDigest', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.currentCompatibleConnections', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.currentConnections', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.currentNativeConnections', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.currentActiveHandshakes', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.decryptedBytesIn', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.decryptedBytesOut', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.encryptedBytesIn', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.encryptedBytesOut', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.fatalAlerts', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.handshakeFailures', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.peercertInvalid', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.peercertNone', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.peercertValid', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.protocolUses.dtlsv1', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.protocolUses.sslv2', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.protocolUses.sslv3', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.protocolUses.tlsv1', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.protocolUses.tlsv1_1', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.protocolUses.tlsv1_2', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.protocolUses.tlsv1_3', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.recordsIn', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.recordsOut', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.totCompatConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'serverSslProfiles.totNativeConns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/serverssl', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'sslCerts.expirationDate', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'issuer:CN=Starfield Services Root Certificate Authority,OU=http://certificates.starfieldtech.com/repository/,O=Starfield Technologies, Inc.,L=Scottsdale,ST=Arizona,C=US', + 'subject:CN=Starfield Services Root Certificate Authority,OU=http://certificates.starfieldtech.com/repository/,O=Starfield Technologies, Inc.,L=Scottsdale,ST=Arizona,C=US', + 'name:ca-bundle.crt', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'sslCerts.expirationDate', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'email:root@localhost.localdomain', + 'issuer:emailAddress=root@localhost.localdomain,CN=localhost.localdomain,OU=IT,O=MyCompany,L=Seattle,ST=WA,C=US', + 'subject:emailAddress=root@localhost.localdomain,CN=localhost.localdomain,OU=IT,O=MyCompany,L=Seattle,ST=WA,C=US', + 'name:default.crt', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'sslCerts.expirationDate', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'issuer:CN=Entrust Root Certification Authority - G2,OU=(c) 2009 Entrust, Inc. - for authorized use only,OU=See www.entrust.net/legal-terms,O=Entrust, Inc.,C=US', + 'subject:CN=Entrust Root Certification Authority - G2,OU=(c) 2009 Entrust, Inc. - for authorized use only,OU=See www.entrust.net/legal-terms,O=Entrust, Inc.,C=US', + 'name:f5-ca-bundle.crt', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'sslCerts.expirationDate', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'email:support@f5.com', + 'issuer:emailAddress=support@f5.com,CN=support.f5.com,OU=Product Development,O=F5 Networks,L=Seattle,ST=Washington,C=US', + 'subject:emailAddress=support@f5.com,CN=support.f5.com,OU=Product Development,O=F5 Networks,L=Seattle,ST=Washington,C=US', + 'name:f5-irule.crt', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'networkTunnels.hcInBroadcastPkts', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/http-tunnel', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'networkTunnels.hcInMulticastPkts', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/http-tunnel', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'networkTunnels.hcInOctets', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/http-tunnel', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'networkTunnels.hcInUcastPkts', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/http-tunnel', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'networkTunnels.hcOutBroadcastPkts', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/http-tunnel', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'networkTunnels.hcOutMulticastPkts', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/http-tunnel', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'networkTunnels.hcOutOctets', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/http-tunnel', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'networkTunnels.hcOutUcastPkts', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/http-tunnel', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'networkTunnels.inDiscards', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/http-tunnel', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'networkTunnels.inErrors', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/http-tunnel', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'networkTunnels.inUnknownProtos', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/http-tunnel', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'networkTunnels.outDiscards', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/http-tunnel', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'networkTunnels.outErrors', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/http-tunnel', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'networkTunnels.hcInBroadcastPkts', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/socks-tunnel', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'networkTunnels.hcInMulticastPkts', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/socks-tunnel', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'networkTunnels.hcInOctets', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/socks-tunnel', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'networkTunnels.hcInUcastPkts', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/socks-tunnel', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'networkTunnels.hcOutBroadcastPkts', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/socks-tunnel', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'networkTunnels.hcOutMulticastPkts', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/socks-tunnel', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'networkTunnels.hcOutOctets', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/socks-tunnel', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'networkTunnels.hcOutUcastPkts', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/socks-tunnel', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'networkTunnels.inDiscards', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/socks-tunnel', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'networkTunnels.inErrors', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/socks-tunnel', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'networkTunnels.inUnknownProtos', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/socks-tunnel', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'networkTunnels.outDiscards', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/socks-tunnel', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'networkTunnels.outErrors', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'name:/Common/socks-tunnel', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'deviceGroups.timeSinceLastSync', + points: [ + { + timestamp: 1658193069, + value: 1221553 + } + ], + tags: [ + 'type:sync-failover', + 'name:/Common/example_device_group', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'iRules.events.aborts', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'iRules.events.avgCycles', + points: [ + { + timestamp: 1658193069, + value: 19014 + } + ], + tags: [ + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'iRules.events.failures', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'iRules.events.maxCycles', + points: [ + { + timestamp: 1658193069, + value: 19014 + } + ], + tags: [ + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'iRules.events.minCycles', + points: [ + { + timestamp: 1658193069, + value: 8804 + } + ], + tags: [ + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'iRules.events.priority', + points: [ + { + timestamp: 1658193069, + value: 500 + } + ], + tags: [ + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'iRules.events.totalExecutions', + points: [ + { + timestamp: 1658193069, + value: 4 + } + ], + tags: [ + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'iRules.events.aborts', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'iRules.events.avgCycles', + points: [ + { + timestamp: 1658193069, + value: 19014 + } + ], + tags: [ + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'iRules.events.failures', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'iRules.events.maxCycles', + points: [ + { + timestamp: 1658193069, + value: 19014 + } + ], + tags: [ + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'iRules.events.minCycles', + points: [ + { + timestamp: 1658193069, + value: 8804 + } + ], + tags: [ + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'iRules.events.priority', + points: [ + { + timestamp: 1658193069, + value: 500 + } + ], + tags: [ + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'iRules.events.totalExecutions', + points: [ + { + timestamp: 1658193069, + value: 4 + } + ], + tags: [ + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'iRules.events.aborts', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'iRules.events.avgCycles', + points: [ + { + timestamp: 1658193069, + value: 28942 + } + ], + tags: [ + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'iRules.events.failures', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'iRules.events.maxCycles', + points: [ + { + timestamp: 1658193069, + value: 28942 + } + ], + tags: [ + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'iRules.events.minCycles', + points: [ + { + timestamp: 1658193069, + value: 20102 + } + ], + tags: [ + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'iRules.events.priority', + points: [ + { + timestamp: 1658193069, + value: 500 + } + ], + tags: [ + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'iRules.events.totalExecutions', + points: [ + { + timestamp: 1658193069, + value: 4 + } + ], + tags: [ + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aWideIps.alternate', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:A', + 'name:/Common/www.aone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aWideIps.cnameResolutions', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:A', + 'name:/Common/www.aone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aWideIps.dropped', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:A', + 'name:/Common/www.aone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aWideIps.fallback', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:A', + 'name:/Common/www.aone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aWideIps.persisted', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:A', + 'name:/Common/www.aone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aWideIps.preferred', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:A', + 'name:/Common/www.aone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aWideIps.rcode', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:A', + 'name:/Common/www.aone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aWideIps.requests', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:A', + 'name:/Common/www.aone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aWideIps.resolutions', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:A', + 'name:/Common/www.aone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aWideIps.returnFromDns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:A', + 'name:/Common/www.aone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aWideIps.returnToDns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:A', + 'name:/Common/www.aone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aWideIps.persistCidrIpv4', + points: [ + { + timestamp: 1658193069, + value: 32 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:A', + 'name:/Common/www.aone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aWideIps.ttlPersistence', + points: [ + { + timestamp: 1658193069, + value: 3600 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:A', + 'name:/Common/www.aone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aWideIps.failureRcodeTtl', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:A', + 'name:/Common/www.aone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aWideIps.persistCidrIpv6', + points: [ + { + timestamp: 1658193069, + value: 128 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:A', + 'name:/Common/www.aone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aaaaWideIps.alternate', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:AAAA', + 'lastResortPool:/Common/ts_aaaa_pool', + 'name:/Common/www.aaaaone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:formerr', + 'minimalResponse:disabled', + 'enabled:true', + 'failureRcodeResponse:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aaaaWideIps.cnameResolutions', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:AAAA', + 'lastResortPool:/Common/ts_aaaa_pool', + 'name:/Common/www.aaaaone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:formerr', + 'minimalResponse:disabled', + 'enabled:true', + 'failureRcodeResponse:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aaaaWideIps.dropped', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:AAAA', + 'lastResortPool:/Common/ts_aaaa_pool', + 'name:/Common/www.aaaaone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:formerr', + 'minimalResponse:disabled', + 'enabled:true', + 'failureRcodeResponse:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aaaaWideIps.fallback', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:AAAA', + 'lastResortPool:/Common/ts_aaaa_pool', + 'name:/Common/www.aaaaone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:formerr', + 'minimalResponse:disabled', + 'enabled:true', + 'failureRcodeResponse:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aaaaWideIps.persisted', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:AAAA', + 'lastResortPool:/Common/ts_aaaa_pool', + 'name:/Common/www.aaaaone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:formerr', + 'minimalResponse:disabled', + 'enabled:true', + 'failureRcodeResponse:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aaaaWideIps.preferred', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:AAAA', + 'lastResortPool:/Common/ts_aaaa_pool', + 'name:/Common/www.aaaaone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:formerr', + 'minimalResponse:disabled', + 'enabled:true', + 'failureRcodeResponse:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aaaaWideIps.rcode', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:AAAA', + 'lastResortPool:/Common/ts_aaaa_pool', + 'name:/Common/www.aaaaone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:formerr', + 'minimalResponse:disabled', + 'enabled:true', + 'failureRcodeResponse:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aaaaWideIps.requests', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:AAAA', + 'lastResortPool:/Common/ts_aaaa_pool', + 'name:/Common/www.aaaaone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:formerr', + 'minimalResponse:disabled', + 'enabled:true', + 'failureRcodeResponse:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aaaaWideIps.resolutions', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:AAAA', + 'lastResortPool:/Common/ts_aaaa_pool', + 'name:/Common/www.aaaaone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:formerr', + 'minimalResponse:disabled', + 'enabled:true', + 'failureRcodeResponse:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aaaaWideIps.returnFromDns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:AAAA', + 'lastResortPool:/Common/ts_aaaa_pool', + 'name:/Common/www.aaaaone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:formerr', + 'minimalResponse:disabled', + 'enabled:true', + 'failureRcodeResponse:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aaaaWideIps.returnToDns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:AAAA', + 'lastResortPool:/Common/ts_aaaa_pool', + 'name:/Common/www.aaaaone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:formerr', + 'minimalResponse:disabled', + 'enabled:true', + 'failureRcodeResponse:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aaaaWideIps.persistCidrIpv4', + points: [ + { + timestamp: 1658193069, + value: 32 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:AAAA', + 'lastResortPool:/Common/ts_aaaa_pool', + 'name:/Common/www.aaaaone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:formerr', + 'minimalResponse:disabled', + 'enabled:true', + 'failureRcodeResponse:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aaaaWideIps.ttlPersistence', + points: [ + { + timestamp: 1658193069, + value: 3600 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:AAAA', + 'lastResortPool:/Common/ts_aaaa_pool', + 'name:/Common/www.aaaaone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:formerr', + 'minimalResponse:disabled', + 'enabled:true', + 'failureRcodeResponse:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aaaaWideIps.failureRcodeTtl', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:AAAA', + 'lastResortPool:/Common/ts_aaaa_pool', + 'name:/Common/www.aaaaone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:formerr', + 'minimalResponse:disabled', + 'enabled:true', + 'failureRcodeResponse:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aaaaWideIps.persistCidrIpv6', + points: [ + { + timestamp: 1658193069, + value: 128 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:AAAA', + 'lastResortPool:/Common/ts_aaaa_pool', + 'name:/Common/www.aaaaone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:formerr', + 'minimalResponse:disabled', + 'enabled:true', + 'failureRcodeResponse:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnameWideIps.alternate', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:unknown', + 'status.enabledState:enabled', + 'status.statusReason:Checking', + 'wipType:CNAME', + 'name:www.cnameone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnameWideIps.cnameResolutions', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:unknown', + 'status.enabledState:enabled', + 'status.statusReason:Checking', + 'wipType:CNAME', + 'name:www.cnameone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnameWideIps.dropped', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:unknown', + 'status.enabledState:enabled', + 'status.statusReason:Checking', + 'wipType:CNAME', + 'name:www.cnameone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnameWideIps.fallback', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:unknown', + 'status.enabledState:enabled', + 'status.statusReason:Checking', + 'wipType:CNAME', + 'name:www.cnameone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnameWideIps.persisted', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:unknown', + 'status.enabledState:enabled', + 'status.statusReason:Checking', + 'wipType:CNAME', + 'name:www.cnameone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnameWideIps.preferred', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:unknown', + 'status.enabledState:enabled', + 'status.statusReason:Checking', + 'wipType:CNAME', + 'name:www.cnameone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnameWideIps.rcode', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:unknown', + 'status.enabledState:enabled', + 'status.statusReason:Checking', + 'wipType:CNAME', + 'name:www.cnameone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnameWideIps.requests', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:unknown', + 'status.enabledState:enabled', + 'status.statusReason:Checking', + 'wipType:CNAME', + 'name:www.cnameone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnameWideIps.resolutions', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:unknown', + 'status.enabledState:enabled', + 'status.statusReason:Checking', + 'wipType:CNAME', + 'name:www.cnameone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnameWideIps.returnFromDns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:unknown', + 'status.enabledState:enabled', + 'status.statusReason:Checking', + 'wipType:CNAME', + 'name:www.cnameone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnameWideIps.returnToDns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:unknown', + 'status.enabledState:enabled', + 'status.statusReason:Checking', + 'wipType:CNAME', + 'name:www.cnameone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnameWideIps.persistCidrIpv4', + points: [ + { + timestamp: 1658193069, + value: 32 + } + ], + tags: [ + 'status.availabilityState:unknown', + 'status.enabledState:enabled', + 'status.statusReason:Checking', + 'wipType:CNAME', + 'name:www.cnameone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnameWideIps.ttlPersistence', + points: [ + { + timestamp: 1658193069, + value: 3600 + } + ], + tags: [ + 'status.availabilityState:unknown', + 'status.enabledState:enabled', + 'status.statusReason:Checking', + 'wipType:CNAME', + 'name:www.cnameone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnameWideIps.failureRcodeTtl', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:unknown', + 'status.enabledState:enabled', + 'status.statusReason:Checking', + 'wipType:CNAME', + 'name:www.cnameone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnameWideIps.persistCidrIpv6', + points: [ + { + timestamp: 1658193069, + value: 128 + } + ], + tags: [ + 'status.availabilityState:unknown', + 'status.enabledState:enabled', + 'status.statusReason:Checking', + 'wipType:CNAME', + 'name:www.cnameone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnameWideIps.alternate', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:unknown', + 'status.enabledState:enabled', + 'status.statusReason:Checking', + 'wipType:CNAME', + 'lastResortPool:/Common/ts_cname_pool', + 'name:www.cnametwo.tstest.com', + 'poolLbMode:topology', + 'persistence:disabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnameWideIps.cnameResolutions', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:unknown', + 'status.enabledState:enabled', + 'status.statusReason:Checking', + 'wipType:CNAME', + 'lastResortPool:/Common/ts_cname_pool', + 'name:www.cnametwo.tstest.com', + 'poolLbMode:topology', + 'persistence:disabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnameWideIps.dropped', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:unknown', + 'status.enabledState:enabled', + 'status.statusReason:Checking', + 'wipType:CNAME', + 'lastResortPool:/Common/ts_cname_pool', + 'name:www.cnametwo.tstest.com', + 'poolLbMode:topology', + 'persistence:disabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnameWideIps.fallback', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:unknown', + 'status.enabledState:enabled', + 'status.statusReason:Checking', + 'wipType:CNAME', + 'lastResortPool:/Common/ts_cname_pool', + 'name:www.cnametwo.tstest.com', + 'poolLbMode:topology', + 'persistence:disabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnameWideIps.persisted', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:unknown', + 'status.enabledState:enabled', + 'status.statusReason:Checking', + 'wipType:CNAME', + 'lastResortPool:/Common/ts_cname_pool', + 'name:www.cnametwo.tstest.com', + 'poolLbMode:topology', + 'persistence:disabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnameWideIps.preferred', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:unknown', + 'status.enabledState:enabled', + 'status.statusReason:Checking', + 'wipType:CNAME', + 'lastResortPool:/Common/ts_cname_pool', + 'name:www.cnametwo.tstest.com', + 'poolLbMode:topology', + 'persistence:disabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnameWideIps.rcode', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:unknown', + 'status.enabledState:enabled', + 'status.statusReason:Checking', + 'wipType:CNAME', + 'lastResortPool:/Common/ts_cname_pool', + 'name:www.cnametwo.tstest.com', + 'poolLbMode:topology', + 'persistence:disabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnameWideIps.requests', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:unknown', + 'status.enabledState:enabled', + 'status.statusReason:Checking', + 'wipType:CNAME', + 'lastResortPool:/Common/ts_cname_pool', + 'name:www.cnametwo.tstest.com', + 'poolLbMode:topology', + 'persistence:disabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnameWideIps.resolutions', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:unknown', + 'status.enabledState:enabled', + 'status.statusReason:Checking', + 'wipType:CNAME', + 'lastResortPool:/Common/ts_cname_pool', + 'name:www.cnametwo.tstest.com', + 'poolLbMode:topology', + 'persistence:disabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnameWideIps.returnFromDns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:unknown', + 'status.enabledState:enabled', + 'status.statusReason:Checking', + 'wipType:CNAME', + 'lastResortPool:/Common/ts_cname_pool', + 'name:www.cnametwo.tstest.com', + 'poolLbMode:topology', + 'persistence:disabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnameWideIps.returnToDns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:unknown', + 'status.enabledState:enabled', + 'status.statusReason:Checking', + 'wipType:CNAME', + 'lastResortPool:/Common/ts_cname_pool', + 'name:www.cnametwo.tstest.com', + 'poolLbMode:topology', + 'persistence:disabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnameWideIps.persistCidrIpv4', + points: [ + { + timestamp: 1658193069, + value: 32 + } + ], + tags: [ + 'status.availabilityState:unknown', + 'status.enabledState:enabled', + 'status.statusReason:Checking', + 'wipType:CNAME', + 'lastResortPool:/Common/ts_cname_pool', + 'name:www.cnametwo.tstest.com', + 'poolLbMode:topology', + 'persistence:disabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnameWideIps.ttlPersistence', + points: [ + { + timestamp: 1658193069, + value: 3600 + } + ], + tags: [ + 'status.availabilityState:unknown', + 'status.enabledState:enabled', + 'status.statusReason:Checking', + 'wipType:CNAME', + 'lastResortPool:/Common/ts_cname_pool', + 'name:www.cnametwo.tstest.com', + 'poolLbMode:topology', + 'persistence:disabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnameWideIps.failureRcodeTtl', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:unknown', + 'status.enabledState:enabled', + 'status.statusReason:Checking', + 'wipType:CNAME', + 'lastResortPool:/Common/ts_cname_pool', + 'name:www.cnametwo.tstest.com', + 'poolLbMode:topology', + 'persistence:disabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnameWideIps.persistCidrIpv6', + points: [ + { + timestamp: 1658193069, + value: 128 + } + ], + tags: [ + 'status.availabilityState:unknown', + 'status.enabledState:enabled', + 'status.statusReason:Checking', + 'wipType:CNAME', + 'lastResortPool:/Common/ts_cname_pool', + 'name:www.cnametwo.tstest.com', + 'poolLbMode:topology', + 'persistence:disabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'mxWideIps.alternate', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:MX', + 'lastResortPool:/Common/ts_mx_pool', + 'name:/Common/www.mxone.tstest.com', + 'poolLbMode:topology', + 'persistence:enabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'mxWideIps.cnameResolutions', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:MX', + 'lastResortPool:/Common/ts_mx_pool', + 'name:/Common/www.mxone.tstest.com', + 'poolLbMode:topology', + 'persistence:enabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'mxWideIps.dropped', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:MX', + 'lastResortPool:/Common/ts_mx_pool', + 'name:/Common/www.mxone.tstest.com', + 'poolLbMode:topology', + 'persistence:enabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'mxWideIps.fallback', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:MX', + 'lastResortPool:/Common/ts_mx_pool', + 'name:/Common/www.mxone.tstest.com', + 'poolLbMode:topology', + 'persistence:enabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'mxWideIps.persisted', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:MX', + 'lastResortPool:/Common/ts_mx_pool', + 'name:/Common/www.mxone.tstest.com', + 'poolLbMode:topology', + 'persistence:enabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'mxWideIps.preferred', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:MX', + 'lastResortPool:/Common/ts_mx_pool', + 'name:/Common/www.mxone.tstest.com', + 'poolLbMode:topology', + 'persistence:enabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'mxWideIps.rcode', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:MX', + 'lastResortPool:/Common/ts_mx_pool', + 'name:/Common/www.mxone.tstest.com', + 'poolLbMode:topology', + 'persistence:enabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'mxWideIps.requests', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:MX', + 'lastResortPool:/Common/ts_mx_pool', + 'name:/Common/www.mxone.tstest.com', + 'poolLbMode:topology', + 'persistence:enabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'mxWideIps.resolutions', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:MX', + 'lastResortPool:/Common/ts_mx_pool', + 'name:/Common/www.mxone.tstest.com', + 'poolLbMode:topology', + 'persistence:enabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'mxWideIps.returnFromDns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:MX', + 'lastResortPool:/Common/ts_mx_pool', + 'name:/Common/www.mxone.tstest.com', + 'poolLbMode:topology', + 'persistence:enabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'mxWideIps.returnToDns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:MX', + 'lastResortPool:/Common/ts_mx_pool', + 'name:/Common/www.mxone.tstest.com', + 'poolLbMode:topology', + 'persistence:enabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'mxWideIps.persistCidrIpv4', + points: [ + { + timestamp: 1658193069, + value: 132 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:MX', + 'lastResortPool:/Common/ts_mx_pool', + 'name:/Common/www.mxone.tstest.com', + 'poolLbMode:topology', + 'persistence:enabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'mxWideIps.ttlPersistence', + points: [ + { + timestamp: 1658193069, + value: 3600 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:MX', + 'lastResortPool:/Common/ts_mx_pool', + 'name:/Common/www.mxone.tstest.com', + 'poolLbMode:topology', + 'persistence:enabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'mxWideIps.failureRcodeTtl', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:MX', + 'lastResortPool:/Common/ts_mx_pool', + 'name:/Common/www.mxone.tstest.com', + 'poolLbMode:topology', + 'persistence:enabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'mxWideIps.persistCidrIpv6', + points: [ + { + timestamp: 1658193069, + value: 128 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:MX', + 'lastResortPool:/Common/ts_mx_pool', + 'name:/Common/www.mxone.tstest.com', + 'poolLbMode:topology', + 'persistence:enabled', + 'failureRcode:noerror', + 'minimalResponse:enabled', + 'enabled:true', + 'failureRcodeResponse:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'naptrWideIps.alternate', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:NAPTR', + 'lastResortPool:/Common/ts_naptr_pool', + 'name:/Common/www.naptrone.tstest.com', + 'poolLbMode:global-availability', + 'persistence:disabled', + 'failureRcode:notimpl', + 'minimalResponse:disabled', + 'enabled:true', + 'failureRcodeResponse:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'naptrWideIps.cnameResolutions', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:NAPTR', + 'lastResortPool:/Common/ts_naptr_pool', + 'name:/Common/www.naptrone.tstest.com', + 'poolLbMode:global-availability', + 'persistence:disabled', + 'failureRcode:notimpl', + 'minimalResponse:disabled', + 'enabled:true', + 'failureRcodeResponse:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'naptrWideIps.dropped', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:NAPTR', + 'lastResortPool:/Common/ts_naptr_pool', + 'name:/Common/www.naptrone.tstest.com', + 'poolLbMode:global-availability', + 'persistence:disabled', + 'failureRcode:notimpl', + 'minimalResponse:disabled', + 'enabled:true', + 'failureRcodeResponse:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'naptrWideIps.fallback', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:NAPTR', + 'lastResortPool:/Common/ts_naptr_pool', + 'name:/Common/www.naptrone.tstest.com', + 'poolLbMode:global-availability', + 'persistence:disabled', + 'failureRcode:notimpl', + 'minimalResponse:disabled', + 'enabled:true', + 'failureRcodeResponse:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'naptrWideIps.persisted', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:NAPTR', + 'lastResortPool:/Common/ts_naptr_pool', + 'name:/Common/www.naptrone.tstest.com', + 'poolLbMode:global-availability', + 'persistence:disabled', + 'failureRcode:notimpl', + 'minimalResponse:disabled', + 'enabled:true', + 'failureRcodeResponse:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'naptrWideIps.preferred', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:NAPTR', + 'lastResortPool:/Common/ts_naptr_pool', + 'name:/Common/www.naptrone.tstest.com', + 'poolLbMode:global-availability', + 'persistence:disabled', + 'failureRcode:notimpl', + 'minimalResponse:disabled', + 'enabled:true', + 'failureRcodeResponse:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'naptrWideIps.rcode', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:NAPTR', + 'lastResortPool:/Common/ts_naptr_pool', + 'name:/Common/www.naptrone.tstest.com', + 'poolLbMode:global-availability', + 'persistence:disabled', + 'failureRcode:notimpl', + 'minimalResponse:disabled', + 'enabled:true', + 'failureRcodeResponse:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'naptrWideIps.requests', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:NAPTR', + 'lastResortPool:/Common/ts_naptr_pool', + 'name:/Common/www.naptrone.tstest.com', + 'poolLbMode:global-availability', + 'persistence:disabled', + 'failureRcode:notimpl', + 'minimalResponse:disabled', + 'enabled:true', + 'failureRcodeResponse:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'naptrWideIps.resolutions', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:NAPTR', + 'lastResortPool:/Common/ts_naptr_pool', + 'name:/Common/www.naptrone.tstest.com', + 'poolLbMode:global-availability', + 'persistence:disabled', + 'failureRcode:notimpl', + 'minimalResponse:disabled', + 'enabled:true', + 'failureRcodeResponse:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'naptrWideIps.returnFromDns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:NAPTR', + 'lastResortPool:/Common/ts_naptr_pool', + 'name:/Common/www.naptrone.tstest.com', + 'poolLbMode:global-availability', + 'persistence:disabled', + 'failureRcode:notimpl', + 'minimalResponse:disabled', + 'enabled:true', + 'failureRcodeResponse:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'naptrWideIps.returnToDns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:NAPTR', + 'lastResortPool:/Common/ts_naptr_pool', + 'name:/Common/www.naptrone.tstest.com', + 'poolLbMode:global-availability', + 'persistence:disabled', + 'failureRcode:notimpl', + 'minimalResponse:disabled', + 'enabled:true', + 'failureRcodeResponse:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'naptrWideIps.persistCidrIpv4', + points: [ + { + timestamp: 1658193069, + value: 32 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:NAPTR', + 'lastResortPool:/Common/ts_naptr_pool', + 'name:/Common/www.naptrone.tstest.com', + 'poolLbMode:global-availability', + 'persistence:disabled', + 'failureRcode:notimpl', + 'minimalResponse:disabled', + 'enabled:true', + 'failureRcodeResponse:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'naptrWideIps.ttlPersistence', + points: [ + { + timestamp: 1658193069, + value: 3600 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:NAPTR', + 'lastResortPool:/Common/ts_naptr_pool', + 'name:/Common/www.naptrone.tstest.com', + 'poolLbMode:global-availability', + 'persistence:disabled', + 'failureRcode:notimpl', + 'minimalResponse:disabled', + 'enabled:true', + 'failureRcodeResponse:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'naptrWideIps.failureRcodeTtl', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:NAPTR', + 'lastResortPool:/Common/ts_naptr_pool', + 'name:/Common/www.naptrone.tstest.com', + 'poolLbMode:global-availability', + 'persistence:disabled', + 'failureRcode:notimpl', + 'minimalResponse:disabled', + 'enabled:true', + 'failureRcodeResponse:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'naptrWideIps.persistCidrIpv6', + points: [ + { + timestamp: 1658193069, + value: 128 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:NAPTR', + 'lastResortPool:/Common/ts_naptr_pool', + 'name:/Common/www.naptrone.tstest.com', + 'poolLbMode:global-availability', + 'persistence:disabled', + 'failureRcode:notimpl', + 'minimalResponse:disabled', + 'enabled:true', + 'failureRcodeResponse:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'srvWideIps.alternate', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:SRV', + 'lastResortPool:/Common/ts_cname_pool', + 'name:/Common/www.srvone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:servfail', + 'minimalResponse:disabled', + 'enabled:true', + 'failureRcodeResponse:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'srvWideIps.cnameResolutions', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:SRV', + 'lastResortPool:/Common/ts_cname_pool', + 'name:/Common/www.srvone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:servfail', + 'minimalResponse:disabled', + 'enabled:true', + 'failureRcodeResponse:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'srvWideIps.dropped', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:SRV', + 'lastResortPool:/Common/ts_cname_pool', + 'name:/Common/www.srvone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:servfail', + 'minimalResponse:disabled', + 'enabled:true', + 'failureRcodeResponse:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'srvWideIps.fallback', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:SRV', + 'lastResortPool:/Common/ts_cname_pool', + 'name:/Common/www.srvone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:servfail', + 'minimalResponse:disabled', + 'enabled:true', + 'failureRcodeResponse:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'srvWideIps.persisted', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:SRV', + 'lastResortPool:/Common/ts_cname_pool', + 'name:/Common/www.srvone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:servfail', + 'minimalResponse:disabled', + 'enabled:true', + 'failureRcodeResponse:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'srvWideIps.preferred', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:SRV', + 'lastResortPool:/Common/ts_cname_pool', + 'name:/Common/www.srvone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:servfail', + 'minimalResponse:disabled', + 'enabled:true', + 'failureRcodeResponse:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'srvWideIps.rcode', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:SRV', + 'lastResortPool:/Common/ts_cname_pool', + 'name:/Common/www.srvone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:servfail', + 'minimalResponse:disabled', + 'enabled:true', + 'failureRcodeResponse:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'srvWideIps.requests', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:SRV', + 'lastResortPool:/Common/ts_cname_pool', + 'name:/Common/www.srvone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:servfail', + 'minimalResponse:disabled', + 'enabled:true', + 'failureRcodeResponse:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'srvWideIps.resolutions', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:SRV', + 'lastResortPool:/Common/ts_cname_pool', + 'name:/Common/www.srvone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:servfail', + 'minimalResponse:disabled', + 'enabled:true', + 'failureRcodeResponse:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'srvWideIps.returnFromDns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:SRV', + 'lastResortPool:/Common/ts_cname_pool', + 'name:/Common/www.srvone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:servfail', + 'minimalResponse:disabled', + 'enabled:true', + 'failureRcodeResponse:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'srvWideIps.returnToDns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:SRV', + 'lastResortPool:/Common/ts_cname_pool', + 'name:/Common/www.srvone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:servfail', + 'minimalResponse:disabled', + 'enabled:true', + 'failureRcodeResponse:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'srvWideIps.persistCidrIpv4', + points: [ + { + timestamp: 1658193069, + value: 32 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:SRV', + 'lastResortPool:/Common/ts_cname_pool', + 'name:/Common/www.srvone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:servfail', + 'minimalResponse:disabled', + 'enabled:true', + 'failureRcodeResponse:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'srvWideIps.ttlPersistence', + points: [ + { + timestamp: 1658193069, + value: 3600 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:SRV', + 'lastResortPool:/Common/ts_cname_pool', + 'name:/Common/www.srvone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:servfail', + 'minimalResponse:disabled', + 'enabled:true', + 'failureRcodeResponse:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'srvWideIps.failureRcodeTtl', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:SRV', + 'lastResortPool:/Common/ts_cname_pool', + 'name:/Common/www.srvone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:servfail', + 'minimalResponse:disabled', + 'enabled:true', + 'failureRcodeResponse:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'srvWideIps.persistCidrIpv6', + points: [ + { + timestamp: 1658193069, + value: 128 + } + ], + tags: [ + 'status.availabilityState:offline', + 'status.enabledState:enabled', + 'status.statusReason:No enabled pools available', + 'wipType:SRV', + 'lastResortPool:/Common/ts_cname_pool', + 'name:/Common/www.srvone.tstest.com', + 'poolLbMode:round-robin', + 'persistence:disabled', + 'failureRcode:servfail', + 'minimalResponse:disabled', + 'enabled:true', + 'failureRcodeResponse:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aPools.alternate', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:A', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackIp:8.8.8.8', + 'fallbackMode:return-to-dns', + 'limitMaxConnectionsStatus:disabled', + 'name:/Common/ts_a_pool', + 'alternateMode:round-robin', + 'verifyMemberAvailability:disabled', + 'limitMaxPpsStatus:disabled', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'loadBalancingMode:ratio', + 'dynamicRatio:disabled', + 'manualResume:disabled', + 'monitor:/Common/gateway_icmp', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aPools.dropped', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:A', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackIp:8.8.8.8', + 'fallbackMode:return-to-dns', + 'limitMaxConnectionsStatus:disabled', + 'name:/Common/ts_a_pool', + 'alternateMode:round-robin', + 'verifyMemberAvailability:disabled', + 'limitMaxPpsStatus:disabled', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'loadBalancingMode:ratio', + 'dynamicRatio:disabled', + 'manualResume:disabled', + 'monitor:/Common/gateway_icmp', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aPools.fallback', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:A', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackIp:8.8.8.8', + 'fallbackMode:return-to-dns', + 'limitMaxConnectionsStatus:disabled', + 'name:/Common/ts_a_pool', + 'alternateMode:round-robin', + 'verifyMemberAvailability:disabled', + 'limitMaxPpsStatus:disabled', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'loadBalancingMode:ratio', + 'dynamicRatio:disabled', + 'manualResume:disabled', + 'monitor:/Common/gateway_icmp', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aPools.preferred', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:A', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackIp:8.8.8.8', + 'fallbackMode:return-to-dns', + 'limitMaxConnectionsStatus:disabled', + 'name:/Common/ts_a_pool', + 'alternateMode:round-robin', + 'verifyMemberAvailability:disabled', + 'limitMaxPpsStatus:disabled', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'loadBalancingMode:ratio', + 'dynamicRatio:disabled', + 'manualResume:disabled', + 'monitor:/Common/gateway_icmp', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aPools.returnFromDns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:A', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackIp:8.8.8.8', + 'fallbackMode:return-to-dns', + 'limitMaxConnectionsStatus:disabled', + 'name:/Common/ts_a_pool', + 'alternateMode:round-robin', + 'verifyMemberAvailability:disabled', + 'limitMaxPpsStatus:disabled', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'loadBalancingMode:ratio', + 'dynamicRatio:disabled', + 'manualResume:disabled', + 'monitor:/Common/gateway_icmp', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aPools.returnToDns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:A', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackIp:8.8.8.8', + 'fallbackMode:return-to-dns', + 'limitMaxConnectionsStatus:disabled', + 'name:/Common/ts_a_pool', + 'alternateMode:round-robin', + 'verifyMemberAvailability:disabled', + 'limitMaxPpsStatus:disabled', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'loadBalancingMode:ratio', + 'dynamicRatio:disabled', + 'manualResume:disabled', + 'monitor:/Common/gateway_icmp', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aPools.limitMaxConnections', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:A', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackIp:8.8.8.8', + 'fallbackMode:return-to-dns', + 'limitMaxConnectionsStatus:disabled', + 'name:/Common/ts_a_pool', + 'alternateMode:round-robin', + 'verifyMemberAvailability:disabled', + 'limitMaxPpsStatus:disabled', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'loadBalancingMode:ratio', + 'dynamicRatio:disabled', + 'manualResume:disabled', + 'monitor:/Common/gateway_icmp', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aPools.ttl', + points: [ + { + timestamp: 1658193069, + value: 30 + } + ], + tags: [ + 'poolType:A', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackIp:8.8.8.8', + 'fallbackMode:return-to-dns', + 'limitMaxConnectionsStatus:disabled', + 'name:/Common/ts_a_pool', + 'alternateMode:round-robin', + 'verifyMemberAvailability:disabled', + 'limitMaxPpsStatus:disabled', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'loadBalancingMode:ratio', + 'dynamicRatio:disabled', + 'manualResume:disabled', + 'monitor:/Common/gateway_icmp', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aPools.limitMaxPps', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:A', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackIp:8.8.8.8', + 'fallbackMode:return-to-dns', + 'limitMaxConnectionsStatus:disabled', + 'name:/Common/ts_a_pool', + 'alternateMode:round-robin', + 'verifyMemberAvailability:disabled', + 'limitMaxPpsStatus:disabled', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'loadBalancingMode:ratio', + 'dynamicRatio:disabled', + 'manualResume:disabled', + 'monitor:/Common/gateway_icmp', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aPools.qosHops', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:A', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackIp:8.8.8.8', + 'fallbackMode:return-to-dns', + 'limitMaxConnectionsStatus:disabled', + 'name:/Common/ts_a_pool', + 'alternateMode:round-robin', + 'verifyMemberAvailability:disabled', + 'limitMaxPpsStatus:disabled', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'loadBalancingMode:ratio', + 'dynamicRatio:disabled', + 'manualResume:disabled', + 'monitor:/Common/gateway_icmp', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aPools.members.alternate', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolName:/Common/ts_a_pool', + 'poolType:A', + 'serverName:/Common/server1', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason: Monitor /Common/gateway_icmp from 172.16.100.17 : no route', + 'vsName:vs1', + 'name:server1:vs1', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'limitMaxConnectionsStatus:disabled', + 'limitMaxPpsStatus:disabled', + 'monitor:default', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aPools.members.fallback', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolName:/Common/ts_a_pool', + 'poolType:A', + 'serverName:/Common/server1', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason: Monitor /Common/gateway_icmp from 172.16.100.17 : no route', + 'vsName:vs1', + 'name:server1:vs1', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'limitMaxConnectionsStatus:disabled', + 'limitMaxPpsStatus:disabled', + 'monitor:default', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aPools.members.preferred', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolName:/Common/ts_a_pool', + 'poolType:A', + 'serverName:/Common/server1', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason: Monitor /Common/gateway_icmp from 172.16.100.17 : no route', + 'vsName:vs1', + 'name:server1:vs1', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'limitMaxConnectionsStatus:disabled', + 'limitMaxPpsStatus:disabled', + 'monitor:default', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aPools.members.limitMaxBps', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolName:/Common/ts_a_pool', + 'poolType:A', + 'serverName:/Common/server1', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason: Monitor /Common/gateway_icmp from 172.16.100.17 : no route', + 'vsName:vs1', + 'name:server1:vs1', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'limitMaxConnectionsStatus:disabled', + 'limitMaxPpsStatus:disabled', + 'monitor:default', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aPools.members.limitMaxConnections', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolName:/Common/ts_a_pool', + 'poolType:A', + 'serverName:/Common/server1', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason: Monitor /Common/gateway_icmp from 172.16.100.17 : no route', + 'vsName:vs1', + 'name:server1:vs1', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'limitMaxConnectionsStatus:disabled', + 'limitMaxPpsStatus:disabled', + 'monitor:default', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aPools.members.limitMaxPps', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolName:/Common/ts_a_pool', + 'poolType:A', + 'serverName:/Common/server1', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason: Monitor /Common/gateway_icmp from 172.16.100.17 : no route', + 'vsName:vs1', + 'name:server1:vs1', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'limitMaxConnectionsStatus:disabled', + 'limitMaxPpsStatus:disabled', + 'monitor:default', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aPools.members.memberOrder', + points: [ + { + timestamp: 1658193069, + value: 2 + } + ], + tags: [ + 'poolName:/Common/ts_a_pool', + 'poolType:A', + 'serverName:/Common/server1', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason: Monitor /Common/gateway_icmp from 172.16.100.17 : no route', + 'vsName:vs1', + 'name:server1:vs1', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'limitMaxConnectionsStatus:disabled', + 'limitMaxPpsStatus:disabled', + 'monitor:default', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aPools.members.ratio', + points: [ + { + timestamp: 1658193069, + value: 1 + } + ], + tags: [ + 'poolName:/Common/ts_a_pool', + 'poolType:A', + 'serverName:/Common/server1', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason: Monitor /Common/gateway_icmp from 172.16.100.17 : no route', + 'vsName:vs1', + 'name:server1:vs1', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'limitMaxConnectionsStatus:disabled', + 'limitMaxPpsStatus:disabled', + 'monitor:default', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aPools.qosPacketRate', + points: [ + { + timestamp: 1658193069, + value: 1 + } + ], + tags: [ + 'poolType:A', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackIp:8.8.8.8', + 'fallbackMode:return-to-dns', + 'limitMaxConnectionsStatus:disabled', + 'name:/Common/ts_a_pool', + 'alternateMode:round-robin', + 'verifyMemberAvailability:disabled', + 'limitMaxPpsStatus:disabled', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'loadBalancingMode:ratio', + 'dynamicRatio:disabled', + 'manualResume:disabled', + 'monitor:/Common/gateway_icmp', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aPools.qosRtt', + points: [ + { + timestamp: 1658193069, + value: 50 + } + ], + tags: [ + 'poolType:A', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackIp:8.8.8.8', + 'fallbackMode:return-to-dns', + 'limitMaxConnectionsStatus:disabled', + 'name:/Common/ts_a_pool', + 'alternateMode:round-robin', + 'verifyMemberAvailability:disabled', + 'limitMaxPpsStatus:disabled', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'loadBalancingMode:ratio', + 'dynamicRatio:disabled', + 'manualResume:disabled', + 'monitor:/Common/gateway_icmp', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aPools.qosLcs', + points: [ + { + timestamp: 1658193069, + value: 30 + } + ], + tags: [ + 'poolType:A', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackIp:8.8.8.8', + 'fallbackMode:return-to-dns', + 'limitMaxConnectionsStatus:disabled', + 'name:/Common/ts_a_pool', + 'alternateMode:round-robin', + 'verifyMemberAvailability:disabled', + 'limitMaxPpsStatus:disabled', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'loadBalancingMode:ratio', + 'dynamicRatio:disabled', + 'manualResume:disabled', + 'monitor:/Common/gateway_icmp', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aPools.qosVsCapacity', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:A', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackIp:8.8.8.8', + 'fallbackMode:return-to-dns', + 'limitMaxConnectionsStatus:disabled', + 'name:/Common/ts_a_pool', + 'alternateMode:round-robin', + 'verifyMemberAvailability:disabled', + 'limitMaxPpsStatus:disabled', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'loadBalancingMode:ratio', + 'dynamicRatio:disabled', + 'manualResume:disabled', + 'monitor:/Common/gateway_icmp', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aPools.qosVsScore', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:A', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackIp:8.8.8.8', + 'fallbackMode:return-to-dns', + 'limitMaxConnectionsStatus:disabled', + 'name:/Common/ts_a_pool', + 'alternateMode:round-robin', + 'verifyMemberAvailability:disabled', + 'limitMaxPpsStatus:disabled', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'loadBalancingMode:ratio', + 'dynamicRatio:disabled', + 'manualResume:disabled', + 'monitor:/Common/gateway_icmp', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aPools.maxAnswersReturned', + points: [ + { + timestamp: 1658193069, + value: 1 + } + ], + tags: [ + 'poolType:A', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackIp:8.8.8.8', + 'fallbackMode:return-to-dns', + 'limitMaxConnectionsStatus:disabled', + 'name:/Common/ts_a_pool', + 'alternateMode:round-robin', + 'verifyMemberAvailability:disabled', + 'limitMaxPpsStatus:disabled', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'loadBalancingMode:ratio', + 'dynamicRatio:disabled', + 'manualResume:disabled', + 'monitor:/Common/gateway_icmp', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aPools.qosHitRatio', + points: [ + { + timestamp: 1658193069, + value: 5 + } + ], + tags: [ + 'poolType:A', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackIp:8.8.8.8', + 'fallbackMode:return-to-dns', + 'limitMaxConnectionsStatus:disabled', + 'name:/Common/ts_a_pool', + 'alternateMode:round-robin', + 'verifyMemberAvailability:disabled', + 'limitMaxPpsStatus:disabled', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'loadBalancingMode:ratio', + 'dynamicRatio:disabled', + 'manualResume:disabled', + 'monitor:/Common/gateway_icmp', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aPools.qosKilobytesSecond', + points: [ + { + timestamp: 1658193069, + value: 3 + } + ], + tags: [ + 'poolType:A', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackIp:8.8.8.8', + 'fallbackMode:return-to-dns', + 'limitMaxConnectionsStatus:disabled', + 'name:/Common/ts_a_pool', + 'alternateMode:round-robin', + 'verifyMemberAvailability:disabled', + 'limitMaxPpsStatus:disabled', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'loadBalancingMode:ratio', + 'dynamicRatio:disabled', + 'manualResume:disabled', + 'monitor:/Common/gateway_icmp', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aPools.qosTopology', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:A', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackIp:8.8.8.8', + 'fallbackMode:return-to-dns', + 'limitMaxConnectionsStatus:disabled', + 'name:/Common/ts_a_pool', + 'alternateMode:round-robin', + 'verifyMemberAvailability:disabled', + 'limitMaxPpsStatus:disabled', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'loadBalancingMode:ratio', + 'dynamicRatio:disabled', + 'manualResume:disabled', + 'monitor:/Common/gateway_icmp', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aPools.limitMaxBps', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:A', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackIp:8.8.8.8', + 'fallbackMode:return-to-dns', + 'limitMaxConnectionsStatus:disabled', + 'name:/Common/ts_a_pool', + 'alternateMode:round-robin', + 'verifyMemberAvailability:disabled', + 'limitMaxPpsStatus:disabled', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'loadBalancingMode:ratio', + 'dynamicRatio:disabled', + 'manualResume:disabled', + 'monitor:/Common/gateway_icmp', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aaaaPools.alternate', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:AAAA', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackIp:any', + 'fallbackMode:return-to-dns', + 'limitMaxConnectionsStatus:enabled', + 'name:/Common/ts_aaaa_pool', + 'alternateMode:topology', + 'verifyMemberAvailability:enabled', + 'limitMaxPpsStatus:disabled', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'loadBalancingMode:round-robin', + 'dynamicRatio:enabled', + 'manualResume:disabled', + 'monitor:min 1 of { /Common/http /Common/tcp }', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aaaaPools.dropped', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:AAAA', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackIp:any', + 'fallbackMode:return-to-dns', + 'limitMaxConnectionsStatus:enabled', + 'name:/Common/ts_aaaa_pool', + 'alternateMode:topology', + 'verifyMemberAvailability:enabled', + 'limitMaxPpsStatus:disabled', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'loadBalancingMode:round-robin', + 'dynamicRatio:enabled', + 'manualResume:disabled', + 'monitor:min 1 of { /Common/http /Common/tcp }', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aaaaPools.fallback', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:AAAA', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackIp:any', + 'fallbackMode:return-to-dns', + 'limitMaxConnectionsStatus:enabled', + 'name:/Common/ts_aaaa_pool', + 'alternateMode:topology', + 'verifyMemberAvailability:enabled', + 'limitMaxPpsStatus:disabled', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'loadBalancingMode:round-robin', + 'dynamicRatio:enabled', + 'manualResume:disabled', + 'monitor:min 1 of { /Common/http /Common/tcp }', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aaaaPools.preferred', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:AAAA', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackIp:any', + 'fallbackMode:return-to-dns', + 'limitMaxConnectionsStatus:enabled', + 'name:/Common/ts_aaaa_pool', + 'alternateMode:topology', + 'verifyMemberAvailability:enabled', + 'limitMaxPpsStatus:disabled', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'loadBalancingMode:round-robin', + 'dynamicRatio:enabled', + 'manualResume:disabled', + 'monitor:min 1 of { /Common/http /Common/tcp }', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aaaaPools.returnFromDns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:AAAA', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackIp:any', + 'fallbackMode:return-to-dns', + 'limitMaxConnectionsStatus:enabled', + 'name:/Common/ts_aaaa_pool', + 'alternateMode:topology', + 'verifyMemberAvailability:enabled', + 'limitMaxPpsStatus:disabled', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'loadBalancingMode:round-robin', + 'dynamicRatio:enabled', + 'manualResume:disabled', + 'monitor:min 1 of { /Common/http /Common/tcp }', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aaaaPools.returnToDns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:AAAA', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackIp:any', + 'fallbackMode:return-to-dns', + 'limitMaxConnectionsStatus:enabled', + 'name:/Common/ts_aaaa_pool', + 'alternateMode:topology', + 'verifyMemberAvailability:enabled', + 'limitMaxPpsStatus:disabled', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'loadBalancingMode:round-robin', + 'dynamicRatio:enabled', + 'manualResume:disabled', + 'monitor:min 1 of { /Common/http /Common/tcp }', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aaaaPools.limitMaxConnections', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:AAAA', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackIp:any', + 'fallbackMode:return-to-dns', + 'limitMaxConnectionsStatus:enabled', + 'name:/Common/ts_aaaa_pool', + 'alternateMode:topology', + 'verifyMemberAvailability:enabled', + 'limitMaxPpsStatus:disabled', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'loadBalancingMode:round-robin', + 'dynamicRatio:enabled', + 'manualResume:disabled', + 'monitor:min 1 of { /Common/http /Common/tcp }', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aaaaPools.ttl', + points: [ + { + timestamp: 1658193069, + value: 30 + } + ], + tags: [ + 'poolType:AAAA', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackIp:any', + 'fallbackMode:return-to-dns', + 'limitMaxConnectionsStatus:enabled', + 'name:/Common/ts_aaaa_pool', + 'alternateMode:topology', + 'verifyMemberAvailability:enabled', + 'limitMaxPpsStatus:disabled', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'loadBalancingMode:round-robin', + 'dynamicRatio:enabled', + 'manualResume:disabled', + 'monitor:min 1 of { /Common/http /Common/tcp }', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aaaaPools.limitMaxPps', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:AAAA', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackIp:any', + 'fallbackMode:return-to-dns', + 'limitMaxConnectionsStatus:enabled', + 'name:/Common/ts_aaaa_pool', + 'alternateMode:topology', + 'verifyMemberAvailability:enabled', + 'limitMaxPpsStatus:disabled', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'loadBalancingMode:round-robin', + 'dynamicRatio:enabled', + 'manualResume:disabled', + 'monitor:min 1 of { /Common/http /Common/tcp }', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aaaaPools.qosHops', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:AAAA', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackIp:any', + 'fallbackMode:return-to-dns', + 'limitMaxConnectionsStatus:enabled', + 'name:/Common/ts_aaaa_pool', + 'alternateMode:topology', + 'verifyMemberAvailability:enabled', + 'limitMaxPpsStatus:disabled', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'loadBalancingMode:round-robin', + 'dynamicRatio:enabled', + 'manualResume:disabled', + 'monitor:min 1 of { /Common/http /Common/tcp }', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aaaaPools.members.alternate', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolName:/Common/ts_aaaa_pool', + 'poolType:AAAA', + 'serverName:/Common/gslb_server1', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason: Monitor /Common/tcp from 172.16.100.17 : state: connect failed', + 'vsName:vs3', + 'name:gslb_server1:vs3', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'limitMaxConnectionsStatus:disabled', + 'limitMaxPpsStatus:disabled', + 'monitor:default', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aaaaPools.members.fallback', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolName:/Common/ts_aaaa_pool', + 'poolType:AAAA', + 'serverName:/Common/gslb_server1', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason: Monitor /Common/tcp from 172.16.100.17 : state: connect failed', + 'vsName:vs3', + 'name:gslb_server1:vs3', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'limitMaxConnectionsStatus:disabled', + 'limitMaxPpsStatus:disabled', + 'monitor:default', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aaaaPools.members.preferred', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolName:/Common/ts_aaaa_pool', + 'poolType:AAAA', + 'serverName:/Common/gslb_server1', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason: Monitor /Common/tcp from 172.16.100.17 : state: connect failed', + 'vsName:vs3', + 'name:gslb_server1:vs3', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'limitMaxConnectionsStatus:disabled', + 'limitMaxPpsStatus:disabled', + 'monitor:default', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aaaaPools.members.limitMaxBps', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolName:/Common/ts_aaaa_pool', + 'poolType:AAAA', + 'serverName:/Common/gslb_server1', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason: Monitor /Common/tcp from 172.16.100.17 : state: connect failed', + 'vsName:vs3', + 'name:gslb_server1:vs3', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'limitMaxConnectionsStatus:disabled', + 'limitMaxPpsStatus:disabled', + 'monitor:default', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aaaaPools.members.limitMaxConnections', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolName:/Common/ts_aaaa_pool', + 'poolType:AAAA', + 'serverName:/Common/gslb_server1', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason: Monitor /Common/tcp from 172.16.100.17 : state: connect failed', + 'vsName:vs3', + 'name:gslb_server1:vs3', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'limitMaxConnectionsStatus:disabled', + 'limitMaxPpsStatus:disabled', + 'monitor:default', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aaaaPools.members.limitMaxPps', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolName:/Common/ts_aaaa_pool', + 'poolType:AAAA', + 'serverName:/Common/gslb_server1', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason: Monitor /Common/tcp from 172.16.100.17 : state: connect failed', + 'vsName:vs3', + 'name:gslb_server1:vs3', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'limitMaxConnectionsStatus:disabled', + 'limitMaxPpsStatus:disabled', + 'monitor:default', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aaaaPools.members.memberOrder', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolName:/Common/ts_aaaa_pool', + 'poolType:AAAA', + 'serverName:/Common/gslb_server1', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason: Monitor /Common/tcp from 172.16.100.17 : state: connect failed', + 'vsName:vs3', + 'name:gslb_server1:vs3', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'limitMaxConnectionsStatus:disabled', + 'limitMaxPpsStatus:disabled', + 'monitor:default', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aaaaPools.members.ratio', + points: [ + { + timestamp: 1658193069, + value: 1 + } + ], + tags: [ + 'poolName:/Common/ts_aaaa_pool', + 'poolType:AAAA', + 'serverName:/Common/gslb_server1', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason: Monitor /Common/tcp from 172.16.100.17 : state: connect failed', + 'vsName:vs3', + 'name:gslb_server1:vs3', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'limitMaxConnectionsStatus:disabled', + 'limitMaxPpsStatus:disabled', + 'monitor:default', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aaaaPools.qosPacketRate', + points: [ + { + timestamp: 1658193069, + value: 1 + } + ], + tags: [ + 'poolType:AAAA', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackIp:any', + 'fallbackMode:return-to-dns', + 'limitMaxConnectionsStatus:enabled', + 'name:/Common/ts_aaaa_pool', + 'alternateMode:topology', + 'verifyMemberAvailability:enabled', + 'limitMaxPpsStatus:disabled', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'loadBalancingMode:round-robin', + 'dynamicRatio:enabled', + 'manualResume:disabled', + 'monitor:min 1 of { /Common/http /Common/tcp }', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aaaaPools.qosRtt', + points: [ + { + timestamp: 1658193069, + value: 50 + } + ], + tags: [ + 'poolType:AAAA', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackIp:any', + 'fallbackMode:return-to-dns', + 'limitMaxConnectionsStatus:enabled', + 'name:/Common/ts_aaaa_pool', + 'alternateMode:topology', + 'verifyMemberAvailability:enabled', + 'limitMaxPpsStatus:disabled', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'loadBalancingMode:round-robin', + 'dynamicRatio:enabled', + 'manualResume:disabled', + 'monitor:min 1 of { /Common/http /Common/tcp }', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aaaaPools.qosLcs', + points: [ + { + timestamp: 1658193069, + value: 30 + } + ], + tags: [ + 'poolType:AAAA', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackIp:any', + 'fallbackMode:return-to-dns', + 'limitMaxConnectionsStatus:enabled', + 'name:/Common/ts_aaaa_pool', + 'alternateMode:topology', + 'verifyMemberAvailability:enabled', + 'limitMaxPpsStatus:disabled', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'loadBalancingMode:round-robin', + 'dynamicRatio:enabled', + 'manualResume:disabled', + 'monitor:min 1 of { /Common/http /Common/tcp }', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aaaaPools.qosVsCapacity', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:AAAA', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackIp:any', + 'fallbackMode:return-to-dns', + 'limitMaxConnectionsStatus:enabled', + 'name:/Common/ts_aaaa_pool', + 'alternateMode:topology', + 'verifyMemberAvailability:enabled', + 'limitMaxPpsStatus:disabled', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'loadBalancingMode:round-robin', + 'dynamicRatio:enabled', + 'manualResume:disabled', + 'monitor:min 1 of { /Common/http /Common/tcp }', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aaaaPools.qosVsScore', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:AAAA', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackIp:any', + 'fallbackMode:return-to-dns', + 'limitMaxConnectionsStatus:enabled', + 'name:/Common/ts_aaaa_pool', + 'alternateMode:topology', + 'verifyMemberAvailability:enabled', + 'limitMaxPpsStatus:disabled', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'loadBalancingMode:round-robin', + 'dynamicRatio:enabled', + 'manualResume:disabled', + 'monitor:min 1 of { /Common/http /Common/tcp }', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aaaaPools.maxAnswersReturned', + points: [ + { + timestamp: 1658193069, + value: 1 + } + ], + tags: [ + 'poolType:AAAA', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackIp:any', + 'fallbackMode:return-to-dns', + 'limitMaxConnectionsStatus:enabled', + 'name:/Common/ts_aaaa_pool', + 'alternateMode:topology', + 'verifyMemberAvailability:enabled', + 'limitMaxPpsStatus:disabled', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'loadBalancingMode:round-robin', + 'dynamicRatio:enabled', + 'manualResume:disabled', + 'monitor:min 1 of { /Common/http /Common/tcp }', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aaaaPools.qosHitRatio', + points: [ + { + timestamp: 1658193069, + value: 5 + } + ], + tags: [ + 'poolType:AAAA', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackIp:any', + 'fallbackMode:return-to-dns', + 'limitMaxConnectionsStatus:enabled', + 'name:/Common/ts_aaaa_pool', + 'alternateMode:topology', + 'verifyMemberAvailability:enabled', + 'limitMaxPpsStatus:disabled', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'loadBalancingMode:round-robin', + 'dynamicRatio:enabled', + 'manualResume:disabled', + 'monitor:min 1 of { /Common/http /Common/tcp }', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aaaaPools.qosKilobytesSecond', + points: [ + { + timestamp: 1658193069, + value: 3 + } + ], + tags: [ + 'poolType:AAAA', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackIp:any', + 'fallbackMode:return-to-dns', + 'limitMaxConnectionsStatus:enabled', + 'name:/Common/ts_aaaa_pool', + 'alternateMode:topology', + 'verifyMemberAvailability:enabled', + 'limitMaxPpsStatus:disabled', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'loadBalancingMode:round-robin', + 'dynamicRatio:enabled', + 'manualResume:disabled', + 'monitor:min 1 of { /Common/http /Common/tcp }', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aaaaPools.qosTopology', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:AAAA', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackIp:any', + 'fallbackMode:return-to-dns', + 'limitMaxConnectionsStatus:enabled', + 'name:/Common/ts_aaaa_pool', + 'alternateMode:topology', + 'verifyMemberAvailability:enabled', + 'limitMaxPpsStatus:disabled', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'loadBalancingMode:round-robin', + 'dynamicRatio:enabled', + 'manualResume:disabled', + 'monitor:min 1 of { /Common/http /Common/tcp }', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'aaaaPools.limitMaxBps', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:AAAA', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackIp:any', + 'fallbackMode:return-to-dns', + 'limitMaxConnectionsStatus:enabled', + 'name:/Common/ts_aaaa_pool', + 'alternateMode:topology', + 'verifyMemberAvailability:enabled', + 'limitMaxPpsStatus:disabled', + 'enabled:true', + 'limitMaxBpsStatus:disabled', + 'loadBalancingMode:round-robin', + 'dynamicRatio:enabled', + 'manualResume:disabled', + 'monitor:min 1 of { /Common/http /Common/tcp }', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnamePools.alternate', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:CNAME', + 'availabilityState:unknown', + 'enabledState:enabled', + 'status.statusReason:Checking', + 'fallbackMode:return-to-dns', + 'name:ts_cname_pool', + 'alternateMode:round-robin', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:round-robin', + 'manualResume:disabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnamePools.dropped', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:CNAME', + 'availabilityState:unknown', + 'enabledState:enabled', + 'status.statusReason:Checking', + 'fallbackMode:return-to-dns', + 'name:ts_cname_pool', + 'alternateMode:round-robin', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:round-robin', + 'manualResume:disabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnamePools.fallback', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:CNAME', + 'availabilityState:unknown', + 'enabledState:enabled', + 'status.statusReason:Checking', + 'fallbackMode:return-to-dns', + 'name:ts_cname_pool', + 'alternateMode:round-robin', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:round-robin', + 'manualResume:disabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnamePools.preferred', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:CNAME', + 'availabilityState:unknown', + 'enabledState:enabled', + 'status.statusReason:Checking', + 'fallbackMode:return-to-dns', + 'name:ts_cname_pool', + 'alternateMode:round-robin', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:round-robin', + 'manualResume:disabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnamePools.returnFromDns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:CNAME', + 'availabilityState:unknown', + 'enabledState:enabled', + 'status.statusReason:Checking', + 'fallbackMode:return-to-dns', + 'name:ts_cname_pool', + 'alternateMode:round-robin', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:round-robin', + 'manualResume:disabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnamePools.returnToDns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:CNAME', + 'availabilityState:unknown', + 'enabledState:enabled', + 'status.statusReason:Checking', + 'fallbackMode:return-to-dns', + 'name:ts_cname_pool', + 'alternateMode:round-robin', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:round-robin', + 'manualResume:disabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnamePools.ttl', + points: [ + { + timestamp: 1658193069, + value: 30 + } + ], + tags: [ + 'poolType:CNAME', + 'availabilityState:unknown', + 'enabledState:enabled', + 'status.statusReason:Checking', + 'fallbackMode:return-to-dns', + 'name:ts_cname_pool', + 'alternateMode:round-robin', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:round-robin', + 'manualResume:disabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnamePools.members.alternate', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolName:/Common/ts_cname_pool', + 'poolType:CNAME', + 'serverName:www.cnameone.tstest.com', + 'availabilityState:unknown', + 'enabledState:enabled', + 'status.statusReason:Checking', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnamePools.members.fallback', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolName:/Common/ts_cname_pool', + 'poolType:CNAME', + 'serverName:www.cnameone.tstest.com', + 'availabilityState:unknown', + 'enabledState:enabled', + 'status.statusReason:Checking', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnamePools.members.preferred', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolName:/Common/ts_cname_pool', + 'poolType:CNAME', + 'serverName:www.cnameone.tstest.com', + 'availabilityState:unknown', + 'enabledState:enabled', + 'status.statusReason:Checking', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnamePools.qosHops', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:CNAME', + 'availabilityState:unknown', + 'enabledState:enabled', + 'status.statusReason:Checking', + 'fallbackMode:return-to-dns', + 'name:ts_cname_pool', + 'alternateMode:round-robin', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:round-robin', + 'manualResume:disabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnamePools.qosPacketRate', + points: [ + { + timestamp: 1658193069, + value: 1 + } + ], + tags: [ + 'poolType:CNAME', + 'availabilityState:unknown', + 'enabledState:enabled', + 'status.statusReason:Checking', + 'fallbackMode:return-to-dns', + 'name:ts_cname_pool', + 'alternateMode:round-robin', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:round-robin', + 'manualResume:disabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnamePools.qosRtt', + points: [ + { + timestamp: 1658193069, + value: 50 + } + ], + tags: [ + 'poolType:CNAME', + 'availabilityState:unknown', + 'enabledState:enabled', + 'status.statusReason:Checking', + 'fallbackMode:return-to-dns', + 'name:ts_cname_pool', + 'alternateMode:round-robin', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:round-robin', + 'manualResume:disabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnamePools.qosLcs', + points: [ + { + timestamp: 1658193069, + value: 30 + } + ], + tags: [ + 'poolType:CNAME', + 'availabilityState:unknown', + 'enabledState:enabled', + 'status.statusReason:Checking', + 'fallbackMode:return-to-dns', + 'name:ts_cname_pool', + 'alternateMode:round-robin', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:round-robin', + 'manualResume:disabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnamePools.qosVsCapacity', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:CNAME', + 'availabilityState:unknown', + 'enabledState:enabled', + 'status.statusReason:Checking', + 'fallbackMode:return-to-dns', + 'name:ts_cname_pool', + 'alternateMode:round-robin', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:round-robin', + 'manualResume:disabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnamePools.qosVsScore', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:CNAME', + 'availabilityState:unknown', + 'enabledState:enabled', + 'status.statusReason:Checking', + 'fallbackMode:return-to-dns', + 'name:ts_cname_pool', + 'alternateMode:round-robin', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:round-robin', + 'manualResume:disabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnamePools.qosHitRatio', + points: [ + { + timestamp: 1658193069, + value: 5 + } + ], + tags: [ + 'poolType:CNAME', + 'availabilityState:unknown', + 'enabledState:enabled', + 'status.statusReason:Checking', + 'fallbackMode:return-to-dns', + 'name:ts_cname_pool', + 'alternateMode:round-robin', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:round-robin', + 'manualResume:disabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnamePools.qosKilobytesSecond', + points: [ + { + timestamp: 1658193069, + value: 3 + } + ], + tags: [ + 'poolType:CNAME', + 'availabilityState:unknown', + 'enabledState:enabled', + 'status.statusReason:Checking', + 'fallbackMode:return-to-dns', + 'name:ts_cname_pool', + 'alternateMode:round-robin', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:round-robin', + 'manualResume:disabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'cnamePools.qosTopology', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:CNAME', + 'availabilityState:unknown', + 'enabledState:enabled', + 'status.statusReason:Checking', + 'fallbackMode:return-to-dns', + 'name:ts_cname_pool', + 'alternateMode:round-robin', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:round-robin', + 'manualResume:disabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'mxPools.alternate', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:MX', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:return-to-dns', + 'name:/Common/ts_mx_pool', + 'alternateMode:topology', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:round-robin', + 'manualResume:enabled', + 'dynamicRatio:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'mxPools.dropped', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:MX', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:return-to-dns', + 'name:/Common/ts_mx_pool', + 'alternateMode:topology', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:round-robin', + 'manualResume:enabled', + 'dynamicRatio:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'mxPools.fallback', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:MX', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:return-to-dns', + 'name:/Common/ts_mx_pool', + 'alternateMode:topology', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:round-robin', + 'manualResume:enabled', + 'dynamicRatio:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'mxPools.preferred', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:MX', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:return-to-dns', + 'name:/Common/ts_mx_pool', + 'alternateMode:topology', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:round-robin', + 'manualResume:enabled', + 'dynamicRatio:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'mxPools.returnFromDns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:MX', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:return-to-dns', + 'name:/Common/ts_mx_pool', + 'alternateMode:topology', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:round-robin', + 'manualResume:enabled', + 'dynamicRatio:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'mxPools.returnToDns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:MX', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:return-to-dns', + 'name:/Common/ts_mx_pool', + 'alternateMode:topology', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:round-robin', + 'manualResume:enabled', + 'dynamicRatio:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'mxPools.ttl', + points: [ + { + timestamp: 1658193069, + value: 30 + } + ], + tags: [ + 'poolType:MX', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:return-to-dns', + 'name:/Common/ts_mx_pool', + 'alternateMode:topology', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:round-robin', + 'manualResume:enabled', + 'dynamicRatio:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'mxPools.members.alternate', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolName:/Common/ts_mx_pool', + 'poolType:MX', + 'serverName:www.aaaaone.tstest.com', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No Wide IPs available: No enabled pools available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'mxPools.members.fallback', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolName:/Common/ts_mx_pool', + 'poolType:MX', + 'serverName:www.aaaaone.tstest.com', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No Wide IPs available: No enabled pools available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'mxPools.members.preferred', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolName:/Common/ts_mx_pool', + 'poolType:MX', + 'serverName:www.aaaaone.tstest.com', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No Wide IPs available: No enabled pools available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'mxPools.members.alternate', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolName:/Common/ts_mx_pool', + 'poolType:MX', + 'serverName:www.aone.tstest.com', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No Wide IPs available: No enabled pools available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'mxPools.members.fallback', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolName:/Common/ts_mx_pool', + 'poolType:MX', + 'serverName:www.aone.tstest.com', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No Wide IPs available: No enabled pools available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'mxPools.members.preferred', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolName:/Common/ts_mx_pool', + 'poolType:MX', + 'serverName:www.aone.tstest.com', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No Wide IPs available: No enabled pools available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'mxPools.qosHops', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:MX', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:return-to-dns', + 'name:/Common/ts_mx_pool', + 'alternateMode:topology', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:round-robin', + 'manualResume:enabled', + 'dynamicRatio:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'mxPools.qosPacketRate', + points: [ + { + timestamp: 1658193069, + value: 1 + } + ], + tags: [ + 'poolType:MX', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:return-to-dns', + 'name:/Common/ts_mx_pool', + 'alternateMode:topology', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:round-robin', + 'manualResume:enabled', + 'dynamicRatio:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'mxPools.qosRtt', + points: [ + { + timestamp: 1658193069, + value: 50 + } + ], + tags: [ + 'poolType:MX', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:return-to-dns', + 'name:/Common/ts_mx_pool', + 'alternateMode:topology', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:round-robin', + 'manualResume:enabled', + 'dynamicRatio:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'mxPools.qosLcs', + points: [ + { + timestamp: 1658193069, + value: 30 + } + ], + tags: [ + 'poolType:MX', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:return-to-dns', + 'name:/Common/ts_mx_pool', + 'alternateMode:topology', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:round-robin', + 'manualResume:enabled', + 'dynamicRatio:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'mxPools.qosVsCapacity', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:MX', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:return-to-dns', + 'name:/Common/ts_mx_pool', + 'alternateMode:topology', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:round-robin', + 'manualResume:enabled', + 'dynamicRatio:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'mxPools.qosVsScore', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:MX', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:return-to-dns', + 'name:/Common/ts_mx_pool', + 'alternateMode:topology', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:round-robin', + 'manualResume:enabled', + 'dynamicRatio:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'mxPools.maxAnswersReturned', + points: [ + { + timestamp: 1658193069, + value: 12 + } + ], + tags: [ + 'poolType:MX', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:return-to-dns', + 'name:/Common/ts_mx_pool', + 'alternateMode:topology', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:round-robin', + 'manualResume:enabled', + 'dynamicRatio:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'mxPools.qosHitRatio', + points: [ + { + timestamp: 1658193069, + value: 5 + } + ], + tags: [ + 'poolType:MX', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:return-to-dns', + 'name:/Common/ts_mx_pool', + 'alternateMode:topology', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:round-robin', + 'manualResume:enabled', + 'dynamicRatio:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'mxPools.qosKilobytesSecond', + points: [ + { + timestamp: 1658193069, + value: 3 + } + ], + tags: [ + 'poolType:MX', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:return-to-dns', + 'name:/Common/ts_mx_pool', + 'alternateMode:topology', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:round-robin', + 'manualResume:enabled', + 'dynamicRatio:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'mxPools.qosTopology', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:MX', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:return-to-dns', + 'name:/Common/ts_mx_pool', + 'alternateMode:topology', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:round-robin', + 'manualResume:enabled', + 'dynamicRatio:enabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'naptrPools.alternate', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:NAPTR', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:ratio', + 'name:/Common/ts_naptr_pool', + 'alternateMode:virtual-server-score', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:static-persistence', + 'manualResume:enabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'naptrPools.dropped', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:NAPTR', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:ratio', + 'name:/Common/ts_naptr_pool', + 'alternateMode:virtual-server-score', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:static-persistence', + 'manualResume:enabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'naptrPools.fallback', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:NAPTR', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:ratio', + 'name:/Common/ts_naptr_pool', + 'alternateMode:virtual-server-score', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:static-persistence', + 'manualResume:enabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'naptrPools.preferred', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:NAPTR', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:ratio', + 'name:/Common/ts_naptr_pool', + 'alternateMode:virtual-server-score', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:static-persistence', + 'manualResume:enabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'naptrPools.returnFromDns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:NAPTR', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:ratio', + 'name:/Common/ts_naptr_pool', + 'alternateMode:virtual-server-score', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:static-persistence', + 'manualResume:enabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'naptrPools.returnToDns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:NAPTR', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:ratio', + 'name:/Common/ts_naptr_pool', + 'alternateMode:virtual-server-score', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:static-persistence', + 'manualResume:enabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'naptrPools.ttl', + points: [ + { + timestamp: 1658193069, + value: 300 + } + ], + tags: [ + 'poolType:NAPTR', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:ratio', + 'name:/Common/ts_naptr_pool', + 'alternateMode:virtual-server-score', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:static-persistence', + 'manualResume:enabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'naptrPools.members.alternate', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolName:/Common/ts_naptr_pool', + 'poolType:NAPTR', + 'serverName:www.aone.tstest.com', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No Wide IPs available: No enabled pools available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'naptrPools.members.fallback', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolName:/Common/ts_naptr_pool', + 'poolType:NAPTR', + 'serverName:www.aone.tstest.com', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No Wide IPs available: No enabled pools available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'naptrPools.members.preferred', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolName:/Common/ts_naptr_pool', + 'poolType:NAPTR', + 'serverName:www.aone.tstest.com', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No Wide IPs available: No enabled pools available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'naptrPools.members.alternate', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolName:/Common/ts_naptr_pool', + 'poolType:NAPTR', + 'serverName:www.srvone.tstest.com', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No Wide IPs available: No enabled pools available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'naptrPools.members.fallback', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolName:/Common/ts_naptr_pool', + 'poolType:NAPTR', + 'serverName:www.srvone.tstest.com', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No Wide IPs available: No enabled pools available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'naptrPools.members.preferred', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolName:/Common/ts_naptr_pool', + 'poolType:NAPTR', + 'serverName:www.srvone.tstest.com', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No Wide IPs available: No enabled pools available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'naptrPools.qosHops', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:NAPTR', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:ratio', + 'name:/Common/ts_naptr_pool', + 'alternateMode:virtual-server-score', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:static-persistence', + 'manualResume:enabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'naptrPools.qosPacketRate', + points: [ + { + timestamp: 1658193069, + value: 1 + } + ], + tags: [ + 'poolType:NAPTR', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:ratio', + 'name:/Common/ts_naptr_pool', + 'alternateMode:virtual-server-score', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:static-persistence', + 'manualResume:enabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'naptrPools.qosRtt', + points: [ + { + timestamp: 1658193069, + value: 50 + } + ], + tags: [ + 'poolType:NAPTR', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:ratio', + 'name:/Common/ts_naptr_pool', + 'alternateMode:virtual-server-score', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:static-persistence', + 'manualResume:enabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'naptrPools.qosLcs', + points: [ + { + timestamp: 1658193069, + value: 30 + } + ], + tags: [ + 'poolType:NAPTR', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:ratio', + 'name:/Common/ts_naptr_pool', + 'alternateMode:virtual-server-score', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:static-persistence', + 'manualResume:enabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'naptrPools.qosVsCapacity', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:NAPTR', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:ratio', + 'name:/Common/ts_naptr_pool', + 'alternateMode:virtual-server-score', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:static-persistence', + 'manualResume:enabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'naptrPools.qosVsScore', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:NAPTR', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:ratio', + 'name:/Common/ts_naptr_pool', + 'alternateMode:virtual-server-score', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:static-persistence', + 'manualResume:enabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'naptrPools.maxAnswersReturned', + points: [ + { + timestamp: 1658193069, + value: 1 + } + ], + tags: [ + 'poolType:NAPTR', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:ratio', + 'name:/Common/ts_naptr_pool', + 'alternateMode:virtual-server-score', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:static-persistence', + 'manualResume:enabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'naptrPools.qosHitRatio', + points: [ + { + timestamp: 1658193069, + value: 5 + } + ], + tags: [ + 'poolType:NAPTR', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:ratio', + 'name:/Common/ts_naptr_pool', + 'alternateMode:virtual-server-score', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:static-persistence', + 'manualResume:enabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'naptrPools.qosKilobytesSecond', + points: [ + { + timestamp: 1658193069, + value: 3 + } + ], + tags: [ + 'poolType:NAPTR', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:ratio', + 'name:/Common/ts_naptr_pool', + 'alternateMode:virtual-server-score', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:static-persistence', + 'manualResume:enabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'naptrPools.qosTopology', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:NAPTR', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:ratio', + 'name:/Common/ts_naptr_pool', + 'alternateMode:virtual-server-score', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:static-persistence', + 'manualResume:enabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'srvPools.alternate', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:SRV', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:quality-of-service', + 'name:/Common/ts_srv_pool', + 'alternateMode:packet-rate', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:virtual-server-capacity', + 'manualResume:disabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'srvPools.dropped', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:SRV', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:quality-of-service', + 'name:/Common/ts_srv_pool', + 'alternateMode:packet-rate', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:virtual-server-capacity', + 'manualResume:disabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'srvPools.fallback', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:SRV', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:quality-of-service', + 'name:/Common/ts_srv_pool', + 'alternateMode:packet-rate', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:virtual-server-capacity', + 'manualResume:disabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'srvPools.preferred', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:SRV', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:quality-of-service', + 'name:/Common/ts_srv_pool', + 'alternateMode:packet-rate', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:virtual-server-capacity', + 'manualResume:disabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'srvPools.returnFromDns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:SRV', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:quality-of-service', + 'name:/Common/ts_srv_pool', + 'alternateMode:packet-rate', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:virtual-server-capacity', + 'manualResume:disabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'srvPools.returnToDns', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:SRV', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:quality-of-service', + 'name:/Common/ts_srv_pool', + 'alternateMode:packet-rate', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:virtual-server-capacity', + 'manualResume:disabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'srvPools.ttl', + points: [ + { + timestamp: 1658193069, + value: 130 + } + ], + tags: [ + 'poolType:SRV', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:quality-of-service', + 'name:/Common/ts_srv_pool', + 'alternateMode:packet-rate', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:virtual-server-capacity', + 'manualResume:disabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'srvPools.members.alternate', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolName:/Common/ts_srv_pool', + 'poolType:SRV', + 'serverName:www.aaaaone.tstest.com', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No Wide IPs available: No enabled pools available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'srvPools.members.fallback', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolName:/Common/ts_srv_pool', + 'poolType:SRV', + 'serverName:www.aaaaone.tstest.com', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No Wide IPs available: No enabled pools available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'srvPools.members.preferred', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolName:/Common/ts_srv_pool', + 'poolType:SRV', + 'serverName:www.aaaaone.tstest.com', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No Wide IPs available: No enabled pools available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'srvPools.members.alternate', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolName:/Common/ts_srv_pool', + 'poolType:SRV', + 'serverName:www.aone.tstest.com', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No Wide IPs available: No enabled pools available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'srvPools.members.fallback', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolName:/Common/ts_srv_pool', + 'poolType:SRV', + 'serverName:www.aone.tstest.com', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No Wide IPs available: No enabled pools available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'srvPools.members.preferred', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolName:/Common/ts_srv_pool', + 'poolType:SRV', + 'serverName:www.aone.tstest.com', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No Wide IPs available: No enabled pools available', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'srvPools.qosHops', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:SRV', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:quality-of-service', + 'name:/Common/ts_srv_pool', + 'alternateMode:packet-rate', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:virtual-server-capacity', + 'manualResume:disabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'srvPools.qosPacketRate', + points: [ + { + timestamp: 1658193069, + value: 1 + } + ], + tags: [ + 'poolType:SRV', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:quality-of-service', + 'name:/Common/ts_srv_pool', + 'alternateMode:packet-rate', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:virtual-server-capacity', + 'manualResume:disabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'srvPools.qosRtt', + points: [ + { + timestamp: 1658193069, + value: 50 + } + ], + tags: [ + 'poolType:SRV', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:quality-of-service', + 'name:/Common/ts_srv_pool', + 'alternateMode:packet-rate', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:virtual-server-capacity', + 'manualResume:disabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'srvPools.qosLcs', + points: [ + { + timestamp: 1658193069, + value: 30 + } + ], + tags: [ + 'poolType:SRV', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:quality-of-service', + 'name:/Common/ts_srv_pool', + 'alternateMode:packet-rate', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:virtual-server-capacity', + 'manualResume:disabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'srvPools.qosVsCapacity', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:SRV', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:quality-of-service', + 'name:/Common/ts_srv_pool', + 'alternateMode:packet-rate', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:virtual-server-capacity', + 'manualResume:disabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'srvPools.qosVsScore', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:SRV', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:quality-of-service', + 'name:/Common/ts_srv_pool', + 'alternateMode:packet-rate', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:virtual-server-capacity', + 'manualResume:disabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'srvPools.maxAnswersReturned', + points: [ + { + timestamp: 1658193069, + value: 10 + } + ], + tags: [ + 'poolType:SRV', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:quality-of-service', + 'name:/Common/ts_srv_pool', + 'alternateMode:packet-rate', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:virtual-server-capacity', + 'manualResume:disabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'srvPools.qosHitRatio', + points: [ + { + timestamp: 1658193069, + value: 5 + } + ], + tags: [ + 'poolType:SRV', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:quality-of-service', + 'name:/Common/ts_srv_pool', + 'alternateMode:packet-rate', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:virtual-server-capacity', + 'manualResume:disabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'srvPools.qosKilobytesSecond', + points: [ + { + timestamp: 1658193069, + value: 3 + } + ], + tags: [ + 'poolType:SRV', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:quality-of-service', + 'name:/Common/ts_srv_pool', + 'alternateMode:packet-rate', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:virtual-server-capacity', + 'manualResume:disabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + }, + { + metric: 'srvPools.qosTopology', + points: [ + { + timestamp: 1658193069, + value: 0 + } + ], + tags: [ + 'poolType:SRV', + 'availabilityState:offline', + 'enabledState:enabled', + 'status.statusReason:No enabled pool members available', + 'fallbackMode:quality-of-service', + 'name:/Common/ts_srv_pool', + 'alternateMode:packet-rate', + 'verifyMemberAvailability:enabled', + 'enabled:true', + 'loadBalancingMode:virtual-server-capacity', + 'manualResume:disabled', + 'dynamicRatio:disabled', + 'tenant:Common', + 'host:telemetry.bigip.com' + ], + type: 3 + } + ] + } + } + ] +}; diff --git a/test/unit/consumers/data/openTelemetryExporterConsumerTestsData.js b/test/unit/consumers/data/openTelemetryExporterConsumerTestsData.js index 86ce846f..536da2fb 100644 --- a/test/unit/consumers/data/openTelemetryExporterConsumerTestsData.js +++ b/test/unit/consumers/data/openTelemetryExporterConsumerTestsData.js @@ -76,7 +76,7 @@ module.exports = { }, { key: 'configSyncSucceeded', - value: 'true' + value: true }, { key: 'syncMode', @@ -179,7 +179,7 @@ module.exports = { }, { key: 'configSyncSucceeded', - value: 'true' + value: true }, { key: 'syncMode', @@ -282,7 +282,7 @@ module.exports = { }, { key: 'configSyncSucceeded', - value: 'true' + value: true }, { key: 'syncMode', @@ -385,7 +385,7 @@ module.exports = { }, { key: 'configSyncSucceeded', - value: 'true' + value: true }, { key: 'syncMode', @@ -488,7 +488,7 @@ module.exports = { }, { key: 'configSyncSucceeded', - value: 'true' + value: true }, { key: 'syncMode', @@ -579,13 +579,7 @@ module.exports = { } ], value: 436342 - } - ] - }, - { - name: 'system_diskStorage_1024_blocks', - description: 'system.diskStorage.1024-blocks', - dataPoints: [ + }, { labels: [ { @@ -594,13 +588,7 @@ module.exports = { } ], value: 7181064 - } - ] - }, - { - name: 'system_diskStorage_1024_blocks', - description: 'system.diskStorage.1024-blocks', - dataPoints: [ + }, { labels: [ { @@ -609,13 +597,7 @@ module.exports = { } ], value: 3269592 - } - ] - }, - { - name: 'system_diskStorage_1024_blocks', - description: 'system.diskStorage.1024-blocks', - dataPoints: [ + }, { labels: [ { @@ -624,13 +606,7 @@ module.exports = { } ], value: 4136432 - } - ] - }, - { - name: 'system_diskStorage_1024_blocks', - description: 'system.diskStorage.1024-blocks', - dataPoints: [ + }, { labels: [ { @@ -639,13 +615,7 @@ module.exports = { } ], value: 3096336 - } - ] - }, - { - name: 'system_diskStorage_1024_blocks', - description: 'system.diskStorage.1024-blocks', - dataPoints: [ + }, { labels: [ { @@ -654,13 +624,7 @@ module.exports = { } ], value: 20642428 - } - ] - }, - { - name: 'system_diskStorage_1024_blocks', - description: 'system.diskStorage.1024-blocks', - dataPoints: [ + }, { labels: [ { @@ -669,13 +633,7 @@ module.exports = { } ], value: 3023760 - } - ] - }, - { - name: 'system_diskStorage_1024_blocks', - description: 'system.diskStorage.1024-blocks', - dataPoints: [ + }, { labels: [ { @@ -684,13 +642,7 @@ module.exports = { } ], value: 51607740 - } - ] - }, - { - name: 'system_diskStorage_1024_blocks', - description: 'system.diskStorage.1024-blocks', - dataPoints: [ + }, { labels: [ { @@ -699,13 +651,7 @@ module.exports = { } ], value: 7181064 - } - ] - }, - { - name: 'system_diskStorage_1024_blocks', - description: 'system.diskStorage.1024-blocks', - dataPoints: [ + }, { labels: [ { @@ -714,13 +660,7 @@ module.exports = { } ], value: 7181064 - } - ] - }, - { - name: 'system_diskStorage_1024_blocks', - description: 'system.diskStorage.1024-blocks', - dataPoints: [ + }, { labels: [ { @@ -729,13 +669,7 @@ module.exports = { } ], value: 7181064 - } - ] - }, - { - name: 'system_diskStorage_1024_blocks', - description: 'system.diskStorage.1024-blocks', - dataPoints: [ + }, { labels: [ { @@ -744,13 +678,7 @@ module.exports = { } ], value: 4096 - } - ] - }, - { - name: 'system_diskStorage_1024_blocks', - description: 'system.diskStorage.1024-blocks', - dataPoints: [ + }, { labels: [ { @@ -759,13 +687,7 @@ module.exports = { } ], value: 298004 - } - ] - }, - { - name: 'system_diskStorage_1024_blocks', - description: 'system.diskStorage.1024-blocks', - dataPoints: [ + }, { labels: [ { @@ -774,13 +696,7 @@ module.exports = { } ], value: 7181064 - } - ] - }, - { - name: 'system_diskStorage_1024_blocks', - description: 'system.diskStorage.1024-blocks', - dataPoints: [ + }, { labels: [ { @@ -804,13 +720,7 @@ module.exports = { } ], value: 0.55 - } - ] - }, - { - name: 'system_diskStorage_Capacity_Float', - description: 'system.diskStorage.Capacity_Float', - dataPoints: [ + }, { labels: [ { @@ -819,13 +729,7 @@ module.exports = { } ], value: 0.09 - } - ] - }, - { - name: 'system_diskStorage_Capacity_Float', - description: 'system.diskStorage.Capacity_Float', - dataPoints: [ + }, { labels: [ { @@ -834,13 +738,7 @@ module.exports = { } ], value: 0.11 - } - ] - }, - { - name: 'system_diskStorage_Capacity_Float', - description: 'system.diskStorage.Capacity_Float', - dataPoints: [ + }, { labels: [ { @@ -849,13 +747,7 @@ module.exports = { } ], value: 0.83 - } - ] - }, - { - name: 'system_diskStorage_Capacity_Float', - description: 'system.diskStorage.Capacity_Float', - dataPoints: [ + }, { labels: [ { @@ -864,13 +756,7 @@ module.exports = { } ], value: 0.37 - } - ] - }, - { - name: 'system_diskStorage_Capacity_Float', - description: 'system.diskStorage.Capacity_Float', - dataPoints: [ + }, { labels: [ { @@ -879,13 +765,7 @@ module.exports = { } ], value: 0.03 - } - ] - }, - { - name: 'system_diskStorage_Capacity_Float', - description: 'system.diskStorage.Capacity_Float', - dataPoints: [ + }, { labels: [ { @@ -894,13 +774,7 @@ module.exports = { } ], value: 0.08 - } - ] - }, - { - name: 'system_diskStorage_Capacity_Float', - description: 'system.diskStorage.Capacity_Float', - dataPoints: [ + }, { labels: [ { @@ -909,13 +783,7 @@ module.exports = { } ], value: 0.03 - } - ] - }, - { - name: 'system_diskStorage_Capacity_Float', - description: 'system.diskStorage.Capacity_Float', - dataPoints: [ + }, { labels: [ { @@ -924,13 +792,7 @@ module.exports = { } ], value: 0.01 - } - ] - }, - { - name: 'system_diskStorage_Capacity_Float', - description: 'system.diskStorage.Capacity_Float', - dataPoints: [ + }, { labels: [ { @@ -939,13 +801,7 @@ module.exports = { } ], value: 0.01 - } - ] - }, - { - name: 'system_diskStorage_Capacity_Float', - description: 'system.diskStorage.Capacity_Float', - dataPoints: [ + }, { labels: [ { @@ -954,13 +810,7 @@ module.exports = { } ], value: 0.01 - } - ] - }, - { - name: 'system_diskStorage_Capacity_Float', - description: 'system.diskStorage.Capacity_Float', - dataPoints: [ + }, { labels: [ { @@ -969,13 +819,7 @@ module.exports = { } ], value: 0.01 - } - ] - }, - { - name: 'system_diskStorage_Capacity_Float', - description: 'system.diskStorage.Capacity_Float', - dataPoints: [ + }, { labels: [ { @@ -984,13 +828,7 @@ module.exports = { } ], value: 1 - } - ] - }, - { - name: 'system_diskStorage_Capacity_Float', - description: 'system.diskStorage.Capacity_Float', - dataPoints: [ + }, { labels: [ { @@ -999,13 +837,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_diskStorage_Capacity_Float', - description: 'system.diskStorage.Capacity_Float', - dataPoints: [ + }, { labels: [ { @@ -1029,13 +861,7 @@ module.exports = { } ], value: 1.46 - } - ] - }, - { - name: 'system_diskLatency_r_s', - description: 'system.diskLatency.r/s', - dataPoints: [ + }, { labels: [ { @@ -1044,13 +870,7 @@ module.exports = { } ], value: 1 - } - ] - }, - { - name: 'system_diskLatency_r_s', - description: 'system.diskLatency.r/s', - dataPoints: [ + }, { labels: [ { @@ -1059,13 +879,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_diskLatency_r_s', - description: 'system.diskLatency.r/s', - dataPoints: [ + }, { labels: [ { @@ -1074,13 +888,7 @@ module.exports = { } ], value: 0.01 - } - ] - }, - { - name: 'system_diskLatency_r_s', - description: 'system.diskLatency.r/s', - dataPoints: [ + }, { labels: [ { @@ -1089,13 +897,7 @@ module.exports = { } ], value: 0.14 - } - ] - }, - { - name: 'system_diskLatency_r_s', - description: 'system.diskLatency.r/s', - dataPoints: [ + }, { labels: [ { @@ -1104,13 +906,7 @@ module.exports = { } ], value: 0.01 - } - ] - }, - { - name: 'system_diskLatency_r_s', - description: 'system.diskLatency.r/s', - dataPoints: [ + }, { labels: [ { @@ -1119,13 +915,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_diskLatency_r_s', - description: 'system.diskLatency.r/s', - dataPoints: [ + }, { labels: [ { @@ -1134,13 +924,7 @@ module.exports = { } ], value: 0.04 - } - ] - }, - { - name: 'system_diskLatency_r_s', - description: 'system.diskLatency.r/s', - dataPoints: [ + }, { labels: [ { @@ -1149,13 +933,7 @@ module.exports = { } ], value: 0.13 - } - ] - }, - { - name: 'system_diskLatency_r_s', - description: 'system.diskLatency.r/s', - dataPoints: [ + }, { labels: [ { @@ -1164,13 +942,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_diskLatency_r_s', - description: 'system.diskLatency.r/s', - dataPoints: [ + }, { labels: [ { @@ -1194,13 +966,7 @@ module.exports = { } ], value: 8.25 - } - ] - }, - { - name: 'system_diskLatency_w_s', - description: 'system.diskLatency.w/s', - dataPoints: [ + }, { labels: [ { @@ -1209,13 +975,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_diskLatency_w_s', - description: 'system.diskLatency.w/s', - dataPoints: [ + }, { labels: [ { @@ -1224,13 +984,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_diskLatency_w_s', - description: 'system.diskLatency.w/s', - dataPoints: [ + }, { labels: [ { @@ -1239,13 +993,7 @@ module.exports = { } ], value: 11.01 - } - ] - }, - { - name: 'system_diskLatency_w_s', - description: 'system.diskLatency.w/s', - dataPoints: [ + }, { labels: [ { @@ -1254,13 +1002,7 @@ module.exports = { } ], value: 2.56 - } - ] - }, - { - name: 'system_diskLatency_w_s', - description: 'system.diskLatency.w/s', - dataPoints: [ + }, { labels: [ { @@ -1269,13 +1011,7 @@ module.exports = { } ], value: 4.28 - } - ] - }, - { - name: 'system_diskLatency_w_s', - description: 'system.diskLatency.w/s', - dataPoints: [ + }, { labels: [ { @@ -1284,13 +1020,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_diskLatency_w_s', - description: 'system.diskLatency.w/s', - dataPoints: [ + }, { labels: [ { @@ -1299,13 +1029,7 @@ module.exports = { } ], value: 1.52 - } - ] - }, - { - name: 'system_diskLatency_w_s', - description: 'system.diskLatency.w/s', - dataPoints: [ + }, { labels: [ { @@ -1314,13 +1038,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_diskLatency_w_s', - description: 'system.diskLatency.w/s', - dataPoints: [ + }, { labels: [ { @@ -1329,13 +1047,7 @@ module.exports = { } ], value: 0.05 - } - ] - }, - { - name: 'system_diskLatency_w_s', - description: 'system.diskLatency.w/s', - dataPoints: [ + }, { labels: [ { @@ -1359,13 +1071,7 @@ module.exports = { } ], value: 0.09 - } - ] - }, - { - name: 'system_diskLatency__util', - description: 'system.diskLatency.%util', - dataPoints: [ + }, { labels: [ { @@ -1374,13 +1080,7 @@ module.exports = { } ], value: 0.04 - } - ] - }, - { - name: 'system_diskLatency__util', - description: 'system.diskLatency.%util', - dataPoints: [ + }, { labels: [ { @@ -1389,13 +1089,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_diskLatency__util', - description: 'system.diskLatency.%util', - dataPoints: [ + }, { labels: [ { @@ -1404,13 +1098,7 @@ module.exports = { } ], value: 0.01 - } - ] - }, - { - name: 'system_diskLatency__util', - description: 'system.diskLatency.%util', - dataPoints: [ + }, { labels: [ { @@ -1419,13 +1107,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_diskLatency__util', - description: 'system.diskLatency.%util', - dataPoints: [ + }, { labels: [ { @@ -1434,13 +1116,7 @@ module.exports = { } ], value: 0.01 - } - ] - }, - { - name: 'system_diskLatency__util', - description: 'system.diskLatency.%util', - dataPoints: [ + }, { labels: [ { @@ -1449,13 +1125,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_diskLatency__util', - description: 'system.diskLatency.%util', - dataPoints: [ + }, { labels: [ { @@ -1464,13 +1134,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_diskLatency__util', - description: 'system.diskLatency.%util', - dataPoints: [ + }, { labels: [ { @@ -1479,13 +1143,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_diskLatency__util', - description: 'system.diskLatency.%util', - dataPoints: [ + }, { labels: [ { @@ -1494,13 +1152,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_diskLatency__util', - description: 'system.diskLatency.%util', - dataPoints: [ + }, { labels: [ { @@ -1528,13 +1180,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_networkInterfaces_counters_bitsIn', - description: 'system.networkInterfaces.counters.bitsIn', - dataPoints: [ + }, { labels: [ { @@ -1547,13 +1193,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_networkInterfaces_counters_bitsIn', - description: 'system.networkInterfaces.counters.bitsIn', - dataPoints: [ + }, { labels: [ { @@ -1585,13 +1225,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_networkInterfaces_counters_bitsOut', - description: 'system.networkInterfaces.counters.bitsOut', - dataPoints: [ + }, { labels: [ { @@ -1604,13 +1238,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_networkInterfaces_counters_bitsOut', - description: 'system.networkInterfaces.counters.bitsOut', - dataPoints: [ + }, { labels: [ { @@ -1638,13 +1266,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_average', - description: 'system.throughputPerformance.average', - dataPoints: [ + }, { labels: [ { @@ -1653,13 +1275,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_average', - description: 'system.throughputPerformance.average', - dataPoints: [ + }, { labels: [ { @@ -1668,13 +1284,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_average', - description: 'system.throughputPerformance.average', - dataPoints: [ + }, { labels: [ { @@ -1683,13 +1293,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_average', - description: 'system.throughputPerformance.average', - dataPoints: [ + }, { labels: [ { @@ -1698,13 +1302,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_average', - description: 'system.throughputPerformance.average', - dataPoints: [ + }, { labels: [ { @@ -1713,13 +1311,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_average', - description: 'system.throughputPerformance.average', - dataPoints: [ + }, { labels: [ { @@ -1728,13 +1320,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_average', - description: 'system.throughputPerformance.average', - dataPoints: [ + }, { labels: [ { @@ -1743,13 +1329,7 @@ module.exports = { } ], value: 2969820 - } - ] - }, - { - name: 'system_throughputPerformance_average', - description: 'system.throughputPerformance.average', - dataPoints: [ + }, { labels: [ { @@ -1758,13 +1338,7 @@ module.exports = { } ], value: 133 - } - ] - }, - { - name: 'system_throughputPerformance_average', - description: 'system.throughputPerformance.average', - dataPoints: [ + }, { labels: [ { @@ -1773,13 +1347,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_average', - description: 'system.throughputPerformance.average', - dataPoints: [ + }, { labels: [ { @@ -1788,13 +1356,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_average', - description: 'system.throughputPerformance.average', - dataPoints: [ + }, { labels: [ { @@ -1803,13 +1365,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_average', - description: 'system.throughputPerformance.average', - dataPoints: [ + }, { labels: [ { @@ -1818,13 +1374,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_average', - description: 'system.throughputPerformance.average', - dataPoints: [ + }, { labels: [ { @@ -1833,13 +1383,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_average', - description: 'system.throughputPerformance.average', - dataPoints: [ + }, { labels: [ { @@ -1848,13 +1392,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_average', - description: 'system.throughputPerformance.average', - dataPoints: [ + }, { labels: [ { @@ -1863,13 +1401,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_average', - description: 'system.throughputPerformance.average', - dataPoints: [ + }, { labels: [ { @@ -1878,13 +1410,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_average', - description: 'system.throughputPerformance.average', - dataPoints: [ + }, { labels: [ { @@ -1908,13 +1434,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_current', - description: 'system.throughputPerformance.current', - dataPoints: [ + }, { labels: [ { @@ -1923,13 +1443,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_current', - description: 'system.throughputPerformance.current', - dataPoints: [ + }, { labels: [ { @@ -1938,13 +1452,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_current', - description: 'system.throughputPerformance.current', - dataPoints: [ + }, { labels: [ { @@ -1953,13 +1461,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_current', - description: 'system.throughputPerformance.current', - dataPoints: [ + }, { labels: [ { @@ -1968,13 +1470,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_current', - description: 'system.throughputPerformance.current', - dataPoints: [ + }, { labels: [ { @@ -1983,13 +1479,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_current', - description: 'system.throughputPerformance.current', - dataPoints: [ + }, { labels: [ { @@ -1998,13 +1488,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_current', - description: 'system.throughputPerformance.current', - dataPoints: [ + }, { labels: [ { @@ -2013,13 +1497,7 @@ module.exports = { } ], value: 846485 - } - ] - }, - { - name: 'system_throughputPerformance_current', - description: 'system.throughputPerformance.current', - dataPoints: [ + }, { labels: [ { @@ -2028,13 +1506,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_current', - description: 'system.throughputPerformance.current', - dataPoints: [ + }, { labels: [ { @@ -2043,13 +1515,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_current', - description: 'system.throughputPerformance.current', - dataPoints: [ + }, { labels: [ { @@ -2058,13 +1524,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_current', - description: 'system.throughputPerformance.current', - dataPoints: [ + }, { labels: [ { @@ -2073,13 +1533,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_current', - description: 'system.throughputPerformance.current', - dataPoints: [ + }, { labels: [ { @@ -2088,13 +1542,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_current', - description: 'system.throughputPerformance.current', - dataPoints: [ + }, { labels: [ { @@ -2103,13 +1551,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_current', - description: 'system.throughputPerformance.current', - dataPoints: [ + }, { labels: [ { @@ -2118,13 +1560,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_current', - description: 'system.throughputPerformance.current', - dataPoints: [ + }, { labels: [ { @@ -2133,13 +1569,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_current', - description: 'system.throughputPerformance.current', - dataPoints: [ + }, { labels: [ { @@ -2148,13 +1578,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_current', - description: 'system.throughputPerformance.current', - dataPoints: [ + }, { labels: [ { @@ -2178,13 +1602,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_max', - description: 'system.throughputPerformance.max', - dataPoints: [ + }, { labels: [ { @@ -2193,13 +1611,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_max', - description: 'system.throughputPerformance.max', - dataPoints: [ + }, { labels: [ { @@ -2208,13 +1620,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_max', - description: 'system.throughputPerformance.max', - dataPoints: [ + }, { labels: [ { @@ -2223,13 +1629,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_max', - description: 'system.throughputPerformance.max', - dataPoints: [ + }, { labels: [ { @@ -2238,13 +1638,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_max', - description: 'system.throughputPerformance.max', - dataPoints: [ + }, { labels: [ { @@ -2253,13 +1647,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_max', - description: 'system.throughputPerformance.max', - dataPoints: [ + }, { labels: [ { @@ -2268,13 +1656,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_max', - description: 'system.throughputPerformance.max', - dataPoints: [ + }, { labels: [ { @@ -2283,13 +1665,7 @@ module.exports = { } ], value: 36591317 - } - ] - }, - { - name: 'system_throughputPerformance_max', - description: 'system.throughputPerformance.max', - dataPoints: [ + }, { labels: [ { @@ -2298,13 +1674,7 @@ module.exports = { } ], value: 12478 - } - ] - }, - { - name: 'system_throughputPerformance_max', - description: 'system.throughputPerformance.max', - dataPoints: [ + }, { labels: [ { @@ -2313,13 +1683,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_max', - description: 'system.throughputPerformance.max', - dataPoints: [ + }, { labels: [ { @@ -2328,108 +1692,570 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_max', - description: 'system.throughputPerformance.max', - dataPoints: [ + }, + { + labels: [ + { + key: 'name', + value: 'serverBitsIn' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'serverBitsOut' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'serverIn' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'serverOut' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'serviceBits' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'servicePackets' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'sslTps' + } + ], + value: 0 + } + ] + }, + { + name: 'system_connectionsPerformance_average', + description: 'system.connectionsPerformance.average', + dataPoints: [ + { + labels: [ + { + key: 'name', + value: 'blade1' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'blade2' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'client' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'clientAccepts' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'clientConnections' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'clientConnects' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'connections' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'httpRequests' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'pvaClient' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'pvaServer' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'server' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'serverConnections' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'activeSslClientConnections' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'newSslClientConnections' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'activeSslServerConnections' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'newSslServerConnections' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'serverNewConnections' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'serverNewTcpConnections' + } + ], + value: 0 + } + ] + }, + { + name: 'system_connectionsPerformance_current', + description: 'system.connectionsPerformance.current', + dataPoints: [ + { + labels: [ + { + key: 'name', + value: 'blade1' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'blade2' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'client' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'clientAccepts' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'clientConnections' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'clientConnects' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'connections' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'httpRequests' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'pvaClient' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'pvaServer' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'server' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'serverConnections' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'activeSslClientConnections' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'newSslClientConnections' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'activeSslServerConnections' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'newSslServerConnections' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'serverNewConnections' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'serverNewTcpConnections' + } + ], + value: 0 + } + ] + }, + { + name: 'system_connectionsPerformance_max', + description: 'system.connectionsPerformance.max', + dataPoints: [ + { + labels: [ + { + key: 'name', + value: 'blade1' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'blade2' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'client' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'clientAccepts' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'clientConnections' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'clientConnects' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'connections' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'httpRequests' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'pvaClient' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'pvaServer' + } + ], + value: 0 + }, + { + labels: [ + { + key: 'name', + value: 'server' + } + ], + value: 0 + }, { labels: [ { key: 'name', - value: 'serverBitsIn' + value: 'serverConnections' } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_max', - description: 'system.throughputPerformance.max', - dataPoints: [ + }, { labels: [ { key: 'name', - value: 'serverBitsOut' + value: 'activeSslClientConnections' } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_max', - description: 'system.throughputPerformance.max', - dataPoints: [ + }, { labels: [ { key: 'name', - value: 'serverIn' + value: 'newSslClientConnections' } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_max', - description: 'system.throughputPerformance.max', - dataPoints: [ + }, { labels: [ { key: 'name', - value: 'serverOut' + value: 'activeSslServerConnections' } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_max', - description: 'system.throughputPerformance.max', - dataPoints: [ + }, { labels: [ { key: 'name', - value: 'serviceBits' + value: 'newSslServerConnections' } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_max', - description: 'system.throughputPerformance.max', - dataPoints: [ + }, { labels: [ { key: 'name', - value: 'servicePackets' + value: 'serverNewConnections' } ], value: 0 - } - ] - }, - { - name: 'system_throughputPerformance_max', - description: 'system.throughputPerformance.max', - dataPoints: [ + }, { labels: [ { key: 'name', - value: 'sslTps' + value: 'serverNewTcpConnections' } ], value: 0 @@ -2475,11 +2301,11 @@ module.exports = { }, { key: 'isAvailable', - value: 'false' + value: false }, { key: 'isEnabled', - value: 'true' + value: true }, { key: 'status.statusReason', @@ -2515,13 +2341,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'virtualServers_clientside_bitsIn', - description: 'virtualServers.clientside.bitsIn', - dataPoints: [ + }, { labels: [ { @@ -2538,11 +2358,11 @@ module.exports = { }, { key: 'isAvailable', - value: 'false' + value: false }, { key: 'isEnabled', - value: 'true' + value: true }, { key: 'status.statusReason', @@ -2574,13 +2394,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'virtualServers_clientside_bitsIn', - description: 'virtualServers.clientside.bitsIn', - dataPoints: [ + }, { labels: [ { @@ -2597,11 +2411,11 @@ module.exports = { }, { key: 'isAvailable', - value: 'true' + value: true }, { key: 'isEnabled', - value: 'true' + value: true }, { key: 'status.statusReason', @@ -2644,11 +2458,11 @@ module.exports = { }, { key: 'isAvailable', - value: 'false' + value: false }, { key: 'isEnabled', - value: 'true' + value: true }, { key: 'status.statusReason', @@ -2684,13 +2498,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'virtualServers_clientside_bitsOut', - description: 'virtualServers.clientside.bitsOut', - dataPoints: [ + }, { labels: [ { @@ -2707,11 +2515,11 @@ module.exports = { }, { key: 'isAvailable', - value: 'false' + value: false }, { key: 'isEnabled', - value: 'true' + value: true }, { key: 'status.statusReason', @@ -2743,13 +2551,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'virtualServers_clientside_bitsOut', - description: 'virtualServers.clientside.bitsOut', - dataPoints: [ + }, { labels: [ { @@ -2766,11 +2568,11 @@ module.exports = { }, { key: 'isAvailable', - value: 'true' + value: true }, { key: 'isEnabled', - value: 'true' + value: true }, { key: 'status.statusReason', @@ -2813,11 +2615,11 @@ module.exports = { }, { key: 'isAvailable', - value: 'false' + value: false }, { key: 'isEnabled', - value: 'true' + value: true }, { key: 'status.statusReason', @@ -2853,13 +2655,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'virtualServers_clientside_curConns', - description: 'virtualServers.clientside.curConns', - dataPoints: [ + }, { labels: [ { @@ -2876,11 +2672,11 @@ module.exports = { }, { key: 'isAvailable', - value: 'false' + value: false }, { key: 'isEnabled', - value: 'true' + value: true }, { key: 'status.statusReason', @@ -2912,13 +2708,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'virtualServers_clientside_curConns', - description: 'virtualServers.clientside.curConns', - dataPoints: [ + }, { labels: [ { @@ -2935,11 +2725,11 @@ module.exports = { }, { key: 'isAvailable', - value: 'true' + value: true }, { key: 'isEnabled', - value: 'true' + value: true }, { key: 'status.statusReason', @@ -2982,11 +2772,11 @@ module.exports = { }, { key: 'isAvailable', - value: 'false' + value: false }, { key: 'isEnabled', - value: 'true' + value: true }, { key: 'status.statusReason', @@ -3022,13 +2812,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'virtualServers_clientside_evictedConns', - description: 'virtualServers.clientside.evictedConns', - dataPoints: [ + }, { labels: [ { @@ -3045,11 +2829,11 @@ module.exports = { }, { key: 'isAvailable', - value: 'false' + value: false }, { key: 'isEnabled', - value: 'true' + value: true }, { key: 'status.statusReason', @@ -3081,13 +2865,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'virtualServers_clientside_evictedConns', - description: 'virtualServers.clientside.evictedConns', - dataPoints: [ + }, { labels: [ { @@ -3104,11 +2882,11 @@ module.exports = { }, { key: 'isAvailable', - value: 'true' + value: true }, { key: 'isEnabled', - value: 'true' + value: true }, { key: 'status.statusReason', @@ -3151,11 +2929,11 @@ module.exports = { }, { key: 'isAvailable', - value: 'false' + value: false }, { key: 'isEnabled', - value: 'true' + value: true }, { key: 'status.statusReason', @@ -3191,13 +2969,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'virtualServers_clientside_maxConns', - description: 'virtualServers.clientside.maxConns', - dataPoints: [ + }, { labels: [ { @@ -3214,11 +2986,11 @@ module.exports = { }, { key: 'isAvailable', - value: 'false' + value: false }, { key: 'isEnabled', - value: 'true' + value: true }, { key: 'status.statusReason', @@ -3250,13 +3022,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'virtualServers_clientside_maxConns', - description: 'virtualServers.clientside.maxConns', - dataPoints: [ + }, { labels: [ { @@ -3273,11 +3039,11 @@ module.exports = { }, { key: 'isAvailable', - value: 'true' + value: true }, { key: 'isEnabled', - value: 'true' + value: true }, { key: 'status.statusReason', @@ -3320,11 +3086,11 @@ module.exports = { }, { key: 'isAvailable', - value: 'false' + value: false }, { key: 'isEnabled', - value: 'true' + value: true }, { key: 'status.statusReason', @@ -3360,13 +3126,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'virtualServers_clientside_pktsIn', - description: 'virtualServers.clientside.pktsIn', - dataPoints: [ + }, { labels: [ { @@ -3383,11 +3143,11 @@ module.exports = { }, { key: 'isAvailable', - value: 'false' + value: false }, { key: 'isEnabled', - value: 'true' + value: true }, { key: 'status.statusReason', @@ -3419,13 +3179,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'virtualServers_clientside_pktsIn', - description: 'virtualServers.clientside.pktsIn', - dataPoints: [ + }, { labels: [ { @@ -3442,11 +3196,11 @@ module.exports = { }, { key: 'isAvailable', - value: 'true' + value: true }, { key: 'isEnabled', - value: 'true' + value: true }, { key: 'status.statusReason', @@ -3489,11 +3243,11 @@ module.exports = { }, { key: 'isAvailable', - value: 'false' + value: false }, { key: 'isEnabled', - value: 'true' + value: true }, { key: 'status.statusReason', @@ -3529,13 +3283,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'virtualServers_clientside_pktsOut', - description: 'virtualServers.clientside.pktsOut', - dataPoints: [ + }, { labels: [ { @@ -3552,11 +3300,11 @@ module.exports = { }, { key: 'isAvailable', - value: 'false' + value: false }, { key: 'isEnabled', - value: 'true' + value: true }, { key: 'status.statusReason', @@ -3588,13 +3336,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'virtualServers_clientside_pktsOut', - description: 'virtualServers.clientside.pktsOut', - dataPoints: [ + }, { labels: [ { @@ -3611,11 +3353,11 @@ module.exports = { }, { key: 'isAvailable', - value: 'true' + value: true }, { key: 'isEnabled', - value: 'true' + value: true }, { key: 'status.statusReason', @@ -3658,11 +3400,11 @@ module.exports = { }, { key: 'isAvailable', - value: 'false' + value: false }, { key: 'isEnabled', - value: 'true' + value: true }, { key: 'status.statusReason', @@ -3698,13 +3440,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'virtualServers_clientside_slowKilled', - description: 'virtualServers.clientside.slowKilled', - dataPoints: [ + }, { labels: [ { @@ -3721,11 +3457,11 @@ module.exports = { }, { key: 'isAvailable', - value: 'false' + value: false }, { key: 'isEnabled', - value: 'true' + value: true }, { key: 'status.statusReason', @@ -3757,13 +3493,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'virtualServers_clientside_slowKilled', - description: 'virtualServers.clientside.slowKilled', - dataPoints: [ + }, { labels: [ { @@ -3780,11 +3510,11 @@ module.exports = { }, { key: 'isAvailable', - value: 'true' + value: true }, { key: 'isEnabled', - value: 'true' + value: true }, { key: 'status.statusReason', @@ -3827,11 +3557,11 @@ module.exports = { }, { key: 'isAvailable', - value: 'false' + value: false }, { key: 'isEnabled', - value: 'true' + value: true }, { key: 'status.statusReason', @@ -3867,13 +3597,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'virtualServers_clientside_totConns', - description: 'virtualServers.clientside.totConns', - dataPoints: [ + }, { labels: [ { @@ -3890,11 +3614,11 @@ module.exports = { }, { key: 'isAvailable', - value: 'false' + value: false }, { key: 'isEnabled', - value: 'true' + value: true }, { key: 'status.statusReason', @@ -3926,13 +3650,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'virtualServers_clientside_totConns', - description: 'virtualServers.clientside.totConns', - dataPoints: [ + }, { labels: [ { @@ -3949,11 +3667,11 @@ module.exports = { }, { key: 'isAvailable', - value: 'true' + value: true }, { key: 'isEnabled', - value: 'true' + value: true }, { key: 'status.statusReason', @@ -4008,13 +3726,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_activeMemberCnt', - description: 'pools.activeMemberCnt', - dataPoints: [ + }, { labels: [ { @@ -4039,13 +3751,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_activeMemberCnt', - description: 'pools.activeMemberCnt', - dataPoints: [ + }, { labels: [ { @@ -4074,13 +3780,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_activeMemberCnt', - description: 'pools.activeMemberCnt', - dataPoints: [ + }, { labels: [ { @@ -4144,13 +3844,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_serverside_bitsIn', - description: 'pools.serverside.bitsIn', - dataPoints: [ + }, { labels: [ { @@ -4175,13 +3869,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_serverside_bitsIn', - description: 'pools.serverside.bitsIn', - dataPoints: [ + }, { labels: [ { @@ -4210,13 +3898,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_serverside_bitsIn', - description: 'pools.serverside.bitsIn', - dataPoints: [ + }, { labels: [ { @@ -4280,13 +3962,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_serverside_bitsOut', - description: 'pools.serverside.bitsOut', - dataPoints: [ + }, { labels: [ { @@ -4311,13 +3987,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_serverside_bitsOut', - description: 'pools.serverside.bitsOut', - dataPoints: [ + }, { labels: [ { @@ -4346,13 +4016,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_serverside_bitsOut', - description: 'pools.serverside.bitsOut', - dataPoints: [ + }, { labels: [ { @@ -4412,17 +4076,11 @@ module.exports = { }, { key: 'application', - value: 'app.app' - } - ], - value: 0 - } - ] - }, - { - name: 'pools_serverside_curConns', - description: 'pools.serverside.curConns', - dataPoints: [ + value: 'app.app' + } + ], + value: 0 + }, { labels: [ { @@ -4447,13 +4105,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_serverside_curConns', - description: 'pools.serverside.curConns', - dataPoints: [ + }, { labels: [ { @@ -4482,13 +4134,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_serverside_curConns', - description: 'pools.serverside.curConns', - dataPoints: [ + }, { labels: [ { @@ -4552,13 +4198,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_serverside_maxConns', - description: 'pools.serverside.maxConns', - dataPoints: [ + }, { labels: [ { @@ -4583,13 +4223,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_serverside_maxConns', - description: 'pools.serverside.maxConns', - dataPoints: [ + }, { labels: [ { @@ -4618,13 +4252,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_serverside_maxConns', - description: 'pools.serverside.maxConns', - dataPoints: [ + }, { labels: [ { @@ -4688,13 +4316,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_serverside_pktsIn', - description: 'pools.serverside.pktsIn', - dataPoints: [ + }, { labels: [ { @@ -4719,13 +4341,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_serverside_pktsIn', - description: 'pools.serverside.pktsIn', - dataPoints: [ + }, { labels: [ { @@ -4754,13 +4370,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_serverside_pktsIn', - description: 'pools.serverside.pktsIn', - dataPoints: [ + }, { labels: [ { @@ -4824,13 +4434,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_serverside_pktsOut', - description: 'pools.serverside.pktsOut', - dataPoints: [ + }, { labels: [ { @@ -4855,13 +4459,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_serverside_pktsOut', - description: 'pools.serverside.pktsOut', - dataPoints: [ + }, { labels: [ { @@ -4890,13 +4488,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_serverside_pktsOut', - description: 'pools.serverside.pktsOut', - dataPoints: [ + }, { labels: [ { @@ -4960,13 +4552,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_serverside_totConns', - description: 'pools.serverside.totConns', - dataPoints: [ + }, { labels: [ { @@ -4991,13 +4577,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_serverside_totConns', - description: 'pools.serverside.totConns', - dataPoints: [ + }, { labels: [ { @@ -5026,13 +4606,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_serverside_totConns', - description: 'pools.serverside.totConns', - dataPoints: [ + }, { labels: [ { @@ -5100,13 +4674,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_members_serverside_bitsIn', - description: 'pools.members.serverside.bitsIn', - dataPoints: [ + }, { labels: [ { @@ -5139,13 +4707,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_members_serverside_bitsIn', - description: 'pools.members.serverside.bitsIn', - dataPoints: [ + }, { labels: [ { @@ -5178,13 +4740,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_members_serverside_bitsIn', - description: 'pools.members.serverside.bitsIn', - dataPoints: [ + }, { labels: [ { @@ -5217,13 +4773,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_members_serverside_bitsIn', - description: 'pools.members.serverside.bitsIn', - dataPoints: [ + }, { labels: [ { @@ -5256,13 +4806,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_members_serverside_bitsIn', - description: 'pools.members.serverside.bitsIn', - dataPoints: [ + }, { labels: [ { @@ -5299,13 +4843,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_members_serverside_bitsIn', - description: 'pools.members.serverside.bitsIn', - dataPoints: [ + }, { labels: [ { @@ -5381,13 +4919,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_members_serverside_bitsOut', - description: 'pools.members.serverside.bitsOut', - dataPoints: [ + }, { labels: [ { @@ -5420,13 +4952,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_members_serverside_bitsOut', - description: 'pools.members.serverside.bitsOut', - dataPoints: [ + }, { labels: [ { @@ -5459,13 +4985,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_members_serverside_bitsOut', - description: 'pools.members.serverside.bitsOut', - dataPoints: [ + }, { labels: [ { @@ -5498,13 +5018,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_members_serverside_bitsOut', - description: 'pools.members.serverside.bitsOut', - dataPoints: [ + }, { labels: [ { @@ -5537,13 +5051,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_members_serverside_bitsOut', - description: 'pools.members.serverside.bitsOut', - dataPoints: [ + }, { labels: [ { @@ -5580,13 +5088,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_members_serverside_bitsOut', - description: 'pools.members.serverside.bitsOut', - dataPoints: [ + }, { labels: [ { @@ -5662,13 +5164,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_members_serverside_curConns', - description: 'pools.members.serverside.curConns', - dataPoints: [ + }, { labels: [ { @@ -5701,13 +5197,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_members_serverside_curConns', - description: 'pools.members.serverside.curConns', - dataPoints: [ + }, { labels: [ { @@ -5740,13 +5230,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_members_serverside_curConns', - description: 'pools.members.serverside.curConns', - dataPoints: [ + }, { labels: [ { @@ -5779,13 +5263,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_members_serverside_curConns', - description: 'pools.members.serverside.curConns', - dataPoints: [ + }, { labels: [ { @@ -5818,13 +5296,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_members_serverside_curConns', - description: 'pools.members.serverside.curConns', - dataPoints: [ + }, { labels: [ { @@ -5861,13 +5333,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_members_serverside_curConns', - description: 'pools.members.serverside.curConns', - dataPoints: [ + }, { labels: [ { @@ -5943,13 +5409,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_members_serverside_maxConns', - description: 'pools.members.serverside.maxConns', - dataPoints: [ + }, { labels: [ { @@ -5982,13 +5442,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_members_serverside_maxConns', - description: 'pools.members.serverside.maxConns', - dataPoints: [ + }, { labels: [ { @@ -6021,13 +5475,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_members_serverside_maxConns', - description: 'pools.members.serverside.maxConns', - dataPoints: [ + }, { labels: [ { @@ -6060,13 +5508,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_members_serverside_maxConns', - description: 'pools.members.serverside.maxConns', - dataPoints: [ + }, { labels: [ { @@ -6099,13 +5541,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_members_serverside_maxConns', - description: 'pools.members.serverside.maxConns', - dataPoints: [ + }, { labels: [ { @@ -6142,13 +5578,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_members_serverside_maxConns', - description: 'pools.members.serverside.maxConns', - dataPoints: [ + }, { labels: [ { @@ -6224,13 +5654,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_members_serverside_pktsIn', - description: 'pools.members.serverside.pktsIn', - dataPoints: [ + }, { labels: [ { @@ -6263,13 +5687,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_members_serverside_pktsIn', - description: 'pools.members.serverside.pktsIn', - dataPoints: [ + }, { labels: [ { @@ -6302,13 +5720,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_members_serverside_pktsIn', - description: 'pools.members.serverside.pktsIn', - dataPoints: [ + }, { labels: [ { @@ -6341,13 +5753,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_members_serverside_pktsIn', - description: 'pools.members.serverside.pktsIn', - dataPoints: [ + }, { labels: [ { @@ -6380,13 +5786,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_members_serverside_pktsIn', - description: 'pools.members.serverside.pktsIn', - dataPoints: [ + }, { labels: [ { @@ -6423,13 +5823,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_members_serverside_pktsIn', - description: 'pools.members.serverside.pktsIn', - dataPoints: [ + }, { labels: [ { @@ -6505,13 +5899,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_members_serverside_pktsOut', - description: 'pools.members.serverside.pktsOut', - dataPoints: [ + }, { labels: [ { @@ -6544,13 +5932,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_members_serverside_pktsOut', - description: 'pools.members.serverside.pktsOut', - dataPoints: [ + }, { labels: [ { @@ -6583,13 +5965,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_members_serverside_pktsOut', - description: 'pools.members.serverside.pktsOut', - dataPoints: [ + }, { labels: [ { @@ -6622,13 +5998,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_members_serverside_pktsOut', - description: 'pools.members.serverside.pktsOut', - dataPoints: [ + }, { labels: [ { @@ -6661,13 +6031,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_members_serverside_pktsOut', - description: 'pools.members.serverside.pktsOut', - dataPoints: [ + }, { labels: [ { @@ -6704,13 +6068,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_members_serverside_pktsOut', - description: 'pools.members.serverside.pktsOut', - dataPoints: [ + }, { labels: [ { @@ -6786,13 +6144,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_members_serverside_totConns', - description: 'pools.members.serverside.totConns', - dataPoints: [ + }, { labels: [ { @@ -6825,13 +6177,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_members_serverside_totConns', - description: 'pools.members.serverside.totConns', - dataPoints: [ + }, { labels: [ { @@ -6864,13 +6210,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_members_serverside_totConns', - description: 'pools.members.serverside.totConns', - dataPoints: [ + }, { labels: [ { @@ -6903,13 +6243,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_members_serverside_totConns', - description: 'pools.members.serverside.totConns', - dataPoints: [ + }, { labels: [ { @@ -6942,13 +6276,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_members_serverside_totConns', - description: 'pools.members.serverside.totConns', - dataPoints: [ + }, { labels: [ { @@ -6985,13 +6313,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_members_serverside_totConns', - description: 'pools.members.serverside.totConns', - dataPoints: [ + }, { labels: [ { @@ -7071,13 +6393,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'pools_members_totRequests', - description: 'pools.members.totRequests', - dataPoints: [ + }, { labels: [ { @@ -7137,13 +6453,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'ltmPolicies_invoked', - description: 'ltmPolicies.invoked', - dataPoints: [ + }, { labels: [ { @@ -7179,13 +6489,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'ltmPolicies_succeeded', - description: 'ltmPolicies.succeeded', - dataPoints: [ + }, { labels: [ { @@ -7241,13 +6545,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'httpProfiles_cookiePersistInserts', - description: 'httpProfiles.cookiePersistInserts', - dataPoints: [ + }, { labels: [ { @@ -7260,13 +6558,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'httpProfiles_cookiePersistInserts', - description: 'httpProfiles.cookiePersistInserts', - dataPoints: [ + }, { labels: [ { @@ -7306,13 +6598,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'httpProfiles_getReqs', - description: 'httpProfiles.getReqs', - dataPoints: [ + }, { labels: [ { @@ -7325,13 +6611,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'httpProfiles_getReqs', - description: 'httpProfiles.getReqs', - dataPoints: [ + }, { labels: [ { @@ -7371,13 +6651,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'httpProfiles_maxKeepaliveReq', - description: 'httpProfiles.maxKeepaliveReq', - dataPoints: [ + }, { labels: [ { @@ -7390,13 +6664,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'httpProfiles_maxKeepaliveReq', - description: 'httpProfiles.maxKeepaliveReq', - dataPoints: [ + }, { labels: [ { @@ -7436,13 +6704,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'httpProfiles_numberReqs', - description: 'httpProfiles.numberReqs', - dataPoints: [ + }, { labels: [ { @@ -7455,13 +6717,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'httpProfiles_numberReqs', - description: 'httpProfiles.numberReqs', - dataPoints: [ + }, { labels: [ { @@ -7501,13 +6757,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'httpProfiles_postReqs', - description: 'httpProfiles.postReqs', - dataPoints: [ + }, { labels: [ { @@ -7520,13 +6770,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'httpProfiles_postReqs', - description: 'httpProfiles.postReqs', - dataPoints: [ + }, { labels: [ { @@ -7566,13 +6810,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'httpProfiles_2xxResp', - description: 'httpProfiles.2xxResp', - dataPoints: [ + }, { labels: [ { @@ -7585,13 +6823,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'httpProfiles_2xxResp', - description: 'httpProfiles.2xxResp', - dataPoints: [ + }, { labels: [ { @@ -7627,17 +6859,11 @@ module.exports = { }, { key: 'application', - value: 'app.app' - } - ], - value: 0 - } - ] - }, - { - name: 'httpProfiles_3xxResp', - description: 'httpProfiles.3xxResp', - dataPoints: [ + value: 'app.app' + } + ], + value: 0 + }, { labels: [ { @@ -7650,13 +6876,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'httpProfiles_3xxResp', - description: 'httpProfiles.3xxResp', - dataPoints: [ + }, { labels: [ { @@ -7696,13 +6916,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'httpProfiles_4xxResp', - description: 'httpProfiles.4xxResp', - dataPoints: [ + }, { labels: [ { @@ -7715,13 +6929,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'httpProfiles_4xxResp', - description: 'httpProfiles.4xxResp', - dataPoints: [ + }, { labels: [ { @@ -7761,13 +6969,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'httpProfiles_5xxResp', - description: 'httpProfiles.5xxResp', - dataPoints: [ + }, { labels: [ { @@ -7780,13 +6982,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'httpProfiles_5xxResp', - description: 'httpProfiles.5xxResp', - dataPoints: [ + }, { labels: [ { @@ -7826,13 +7022,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'httpProfiles_respLessThan2m', - description: 'httpProfiles.respLessThan2m', - dataPoints: [ + }, { labels: [ { @@ -7845,13 +7035,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'httpProfiles_respLessThan2m', - description: 'httpProfiles.respLessThan2m', - dataPoints: [ + }, { labels: [ { @@ -7891,13 +7075,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'httpProfiles_respGreaterThan2m', - description: 'httpProfiles.respGreaterThan2m', - dataPoints: [ + }, { labels: [ { @@ -7910,13 +7088,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'httpProfiles_respGreaterThan2m', - description: 'httpProfiles.respGreaterThan2m', - dataPoints: [ + }, { labels: [ { @@ -7956,13 +7128,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'httpProfiles_v10Reqs', - description: 'httpProfiles.v10Reqs', - dataPoints: [ + }, { labels: [ { @@ -7975,13 +7141,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'httpProfiles_v10Reqs', - description: 'httpProfiles.v10Reqs', - dataPoints: [ + }, { labels: [ { @@ -8021,13 +7181,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'httpProfiles_v10Resp', - description: 'httpProfiles.v10Resp', - dataPoints: [ + }, { labels: [ { @@ -8040,13 +7194,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'httpProfiles_v10Resp', - description: 'httpProfiles.v10Resp', - dataPoints: [ + }, { labels: [ { @@ -8086,13 +7234,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'httpProfiles_v11Reqs', - description: 'httpProfiles.v11Reqs', - dataPoints: [ + }, { labels: [ { @@ -8105,13 +7247,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'httpProfiles_v11Reqs', - description: 'httpProfiles.v11Reqs', - dataPoints: [ + }, { labels: [ { @@ -8151,13 +7287,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'httpProfiles_v11Resp', - description: 'httpProfiles.v11Resp', - dataPoints: [ + }, { labels: [ { @@ -8170,13 +7300,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'httpProfiles_v11Resp', - description: 'httpProfiles.v11Resp', - dataPoints: [ + }, { labels: [ { @@ -8216,13 +7340,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'httpProfiles_v9Reqs', - description: 'httpProfiles.v9Reqs', - dataPoints: [ + }, { labels: [ { @@ -8235,13 +7353,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'httpProfiles_v9Reqs', - description: 'httpProfiles.v9Reqs', - dataPoints: [ + }, { labels: [ { @@ -8281,13 +7393,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'httpProfiles_v9Resp', - description: 'httpProfiles.v9Resp', - dataPoints: [ + }, { labels: [ { @@ -8300,13 +7406,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'httpProfiles_v9Resp', - description: 'httpProfiles.v9Resp', - dataPoints: [ + }, { labels: [ { @@ -8342,13 +7442,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_activeHandshakeRejected', - description: 'clientSslProfiles.activeHandshakeRejected', - dataPoints: [ + }, { labels: [ { @@ -8384,13 +7478,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_cipherUses_adhKeyxchg', - description: 'clientSslProfiles.cipherUses.adhKeyxchg', - dataPoints: [ + }, { labels: [ { @@ -8426,13 +7514,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_cipherUses_aesBulk', - description: 'clientSslProfiles.cipherUses.aesBulk', - dataPoints: [ + }, { labels: [ { @@ -8468,13 +7550,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_cipherUses_aesGcmBulk', - description: 'clientSslProfiles.cipherUses.aesGcmBulk', - dataPoints: [ + }, { labels: [ { @@ -8510,13 +7586,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_cipherUses_camelliaBulk', - description: 'clientSslProfiles.cipherUses.camelliaBulk', - dataPoints: [ + }, { labels: [ { @@ -8552,13 +7622,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_cipherUses_chacha20Poly1305Bulk', - description: 'clientSslProfiles.cipherUses.chacha20Poly1305Bulk', - dataPoints: [ + }, { labels: [ { @@ -8594,13 +7658,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_cipherUses_desBulk', - description: 'clientSslProfiles.cipherUses.desBulk', - dataPoints: [ + }, { labels: [ { @@ -8636,13 +7694,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_cipherUses_dhRsaKeyxchg', - description: 'clientSslProfiles.cipherUses.dhRsaKeyxchg', - dataPoints: [ + }, { labels: [ { @@ -8678,13 +7730,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_cipherUses_dheDssKeyxchg', - description: 'clientSslProfiles.cipherUses.dheDssKeyxchg', - dataPoints: [ + }, { labels: [ { @@ -8720,13 +7766,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_cipherUses_ecdhEcdsaKeyxchg', - description: 'clientSslProfiles.cipherUses.ecdhEcdsaKeyxchg', - dataPoints: [ + }, { labels: [ { @@ -8762,13 +7802,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_cipherUses_ecdhRsaKeyxchg', - description: 'clientSslProfiles.cipherUses.ecdhRsaKeyxchg', - dataPoints: [ + }, { labels: [ { @@ -8804,13 +7838,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_cipherUses_ecdheEcdsaKeyxchg', - description: 'clientSslProfiles.cipherUses.ecdheEcdsaKeyxchg', - dataPoints: [ + }, { labels: [ { @@ -8846,13 +7874,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_cipherUses_ecdheRsaKeyxchg', - description: 'clientSslProfiles.cipherUses.ecdheRsaKeyxchg', - dataPoints: [ + }, { labels: [ { @@ -8888,13 +7910,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_cipherUses_edhRsaKeyxchg', - description: 'clientSslProfiles.cipherUses.edhRsaKeyxchg', - dataPoints: [ + }, { labels: [ { @@ -8930,13 +7946,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_cipherUses_ideaBulk', - description: 'clientSslProfiles.cipherUses.ideaBulk', - dataPoints: [ + }, { labels: [ { @@ -8972,13 +7982,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_cipherUses_md5Digest', - description: 'clientSslProfiles.cipherUses.md5Digest', - dataPoints: [ + }, { labels: [ { @@ -9014,13 +8018,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_cipherUses_nullBulk', - description: 'clientSslProfiles.cipherUses.nullBulk', - dataPoints: [ + }, { labels: [ { @@ -9056,13 +8054,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_cipherUses_nullDigest', - description: 'clientSslProfiles.cipherUses.nullDigest', - dataPoints: [ + }, { labels: [ { @@ -9098,13 +8090,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_cipherUses_rc2Bulk', - description: 'clientSslProfiles.cipherUses.rc2Bulk', - dataPoints: [ + }, { labels: [ { @@ -9140,13 +8126,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_cipherUses_rc4Bulk', - description: 'clientSslProfiles.cipherUses.rc4Bulk', - dataPoints: [ + }, { labels: [ { @@ -9182,13 +8162,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_cipherUses_rsaKeyxchg', - description: 'clientSslProfiles.cipherUses.rsaKeyxchg', - dataPoints: [ + }, { labels: [ { @@ -9224,13 +8198,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_cipherUses_shaDigest', - description: 'clientSslProfiles.cipherUses.shaDigest', - dataPoints: [ + }, { labels: [ { @@ -9266,13 +8234,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_currentCompatibleConnections', - description: 'clientSslProfiles.currentCompatibleConnections', - dataPoints: [ + }, { labels: [ { @@ -9308,13 +8270,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_currentConnections', - description: 'clientSslProfiles.currentConnections', - dataPoints: [ + }, { labels: [ { @@ -9350,13 +8306,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_currentNativeConnections', - description: 'clientSslProfiles.currentNativeConnections', - dataPoints: [ + }, { labels: [ { @@ -9392,13 +8342,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_currentActiveHandshakes', - description: 'clientSslProfiles.currentActiveHandshakes', - dataPoints: [ + }, { labels: [ { @@ -9434,13 +8378,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_decryptedBytesIn', - description: 'clientSslProfiles.decryptedBytesIn', - dataPoints: [ + }, { labels: [ { @@ -9476,13 +8414,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_decryptedBytesOut', - description: 'clientSslProfiles.decryptedBytesOut', - dataPoints: [ + }, { labels: [ { @@ -9518,13 +8450,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_encryptedBytesIn', - description: 'clientSslProfiles.encryptedBytesIn', - dataPoints: [ + }, { labels: [ { @@ -9560,13 +8486,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_encryptedBytesOut', - description: 'clientSslProfiles.encryptedBytesOut', - dataPoints: [ + }, { labels: [ { @@ -9602,13 +8522,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_fatalAlerts', - description: 'clientSslProfiles.fatalAlerts', - dataPoints: [ + }, { labels: [ { @@ -9644,13 +8558,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_handshakeFailures', - description: 'clientSslProfiles.handshakeFailures', - dataPoints: [ + }, { labels: [ { @@ -9686,13 +8594,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_peercertInvalid', - description: 'clientSslProfiles.peercertInvalid', - dataPoints: [ + }, { labels: [ { @@ -9728,13 +8630,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_peercertNone', - description: 'clientSslProfiles.peercertNone', - dataPoints: [ + }, { labels: [ { @@ -9770,13 +8666,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_peercertValid', - description: 'clientSslProfiles.peercertValid', - dataPoints: [ + }, { labels: [ { @@ -9812,13 +8702,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_protocolUses_dtlsv1', - description: 'clientSslProfiles.protocolUses.dtlsv1', - dataPoints: [ + }, { labels: [ { @@ -9854,13 +8738,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_protocolUses_sslv2', - description: 'clientSslProfiles.protocolUses.sslv2', - dataPoints: [ + }, { labels: [ { @@ -9896,13 +8774,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_protocolUses_sslv3', - description: 'clientSslProfiles.protocolUses.sslv3', - dataPoints: [ + }, { labels: [ { @@ -9938,13 +8810,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_protocolUses_tlsv1', - description: 'clientSslProfiles.protocolUses.tlsv1', - dataPoints: [ + }, { labels: [ { @@ -9980,13 +8846,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_protocolUses_tlsv1_1', - description: 'clientSslProfiles.protocolUses.tlsv1_1', - dataPoints: [ + }, { labels: [ { @@ -10022,13 +8882,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_protocolUses_tlsv1_2', - description: 'clientSslProfiles.protocolUses.tlsv1_2', - dataPoints: [ + }, { labels: [ { @@ -10064,13 +8918,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_protocolUses_tlsv1_3', - description: 'clientSslProfiles.protocolUses.tlsv1_3', - dataPoints: [ + }, { labels: [ { @@ -10106,13 +8954,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_recordsIn', - description: 'clientSslProfiles.recordsIn', - dataPoints: [ + }, { labels: [ { @@ -10148,13 +8990,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_recordsOut', - description: 'clientSslProfiles.recordsOut', - dataPoints: [ + }, { labels: [ { @@ -10190,13 +9026,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_sniRejects', - description: 'clientSslProfiles.sniRejects', - dataPoints: [ + }, { labels: [ { @@ -10232,13 +9062,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_totCompatConns', - description: 'clientSslProfiles.totCompatConns', - dataPoints: [ + }, { labels: [ { @@ -10274,13 +9098,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'clientSslProfiles_totNativeConns', - description: 'clientSslProfiles.totNativeConns', - dataPoints: [ + }, { labels: [ { @@ -11194,13 +10012,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'sslCerts_expirationDate', - description: 'sslCerts.expirationDate', - dataPoints: [ + }, { labels: [ { @@ -11221,13 +10033,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'sslCerts_expirationDate', - description: 'sslCerts.expirationDate', - dataPoints: [ + }, { labels: [ { @@ -11244,13 +10050,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'sslCerts_expirationDate', - description: 'sslCerts.expirationDate', - dataPoints: [ + }, { labels: [ { @@ -11286,17 +10086,11 @@ module.exports = { }, { key: 'tenant', - value: 'Common' - } - ], - value: 0 - } - ] - }, - { - name: 'networkTunnels_hcInBroadcastPkts', - description: 'networkTunnels.hcInBroadcastPkts', - dataPoints: [ + value: 'Common' + } + ], + value: 0 + }, { labels: [ { @@ -11328,13 +10122,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'networkTunnels_hcInMulticastPkts', - description: 'networkTunnels.hcInMulticastPkts', - dataPoints: [ + }, { labels: [ { @@ -11366,13 +10154,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'networkTunnels_hcInOctets', - description: 'networkTunnels.hcInOctets', - dataPoints: [ + }, { labels: [ { @@ -11404,13 +10186,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'networkTunnels_hcInUcastPkts', - description: 'networkTunnels.hcInUcastPkts', - dataPoints: [ + }, { labels: [ { @@ -11442,13 +10218,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'networkTunnels_hcOutBroadcastPkts', - description: 'networkTunnels.hcOutBroadcastPkts', - dataPoints: [ + }, { labels: [ { @@ -11480,13 +10250,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'networkTunnels_hcOutMulticastPkts', - description: 'networkTunnels.hcOutMulticastPkts', - dataPoints: [ + }, { labels: [ { @@ -11518,13 +10282,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'networkTunnels_hcOutOctets', - description: 'networkTunnels.hcOutOctets', - dataPoints: [ + }, { labels: [ { @@ -11556,13 +10314,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'networkTunnels_hcOutUcastPkts', - description: 'networkTunnels.hcOutUcastPkts', - dataPoints: [ + }, { labels: [ { @@ -11594,13 +10346,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'networkTunnels_inDiscards', - description: 'networkTunnels.inDiscards', - dataPoints: [ + }, { labels: [ { @@ -11632,13 +10378,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'networkTunnels_inErrors', - description: 'networkTunnels.inErrors', - dataPoints: [ + }, { labels: [ { @@ -11670,13 +10410,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'networkTunnels_inUnknownProtos', - description: 'networkTunnels.inUnknownProtos', - dataPoints: [ + }, { labels: [ { @@ -11708,13 +10442,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'networkTunnels_outDiscards', - description: 'networkTunnels.outDiscards', - dataPoints: [ + }, { labels: [ { @@ -11746,13 +10474,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'networkTunnels_outErrors', - description: 'networkTunnels.outErrors', - dataPoints: [ + }, { labels: [ { @@ -11905,7 +10627,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -11964,7 +10686,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -12023,7 +10745,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -12082,7 +10804,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -12141,7 +10863,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -12200,7 +10922,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -12259,7 +10981,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -12318,7 +11040,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -12377,7 +11099,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -12436,7 +11158,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -12495,7 +11217,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -12554,7 +11276,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -12613,7 +11335,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -12672,7 +11394,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -12731,7 +11453,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -12794,7 +11516,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -12857,7 +11579,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -12920,7 +11642,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -12983,7 +11705,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -13046,7 +11768,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -13109,7 +11831,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -13172,7 +11894,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -13235,7 +11957,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -13298,7 +12020,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -13361,7 +12083,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -13424,7 +12146,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -13487,7 +12209,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -13550,7 +12272,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -13613,7 +12335,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -13676,7 +12398,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -13735,7 +12457,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -13747,13 +12469,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'cnameWideIps_alternate', - description: 'cnameWideIps.alternate', - dataPoints: [ + }, { labels: [ { @@ -13798,7 +12514,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -13857,7 +12573,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -13869,13 +12585,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'cnameWideIps_cnameResolutions', - description: 'cnameWideIps.cnameResolutions', - dataPoints: [ + }, { labels: [ { @@ -13920,7 +12630,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -13979,7 +12689,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -13991,13 +12701,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'cnameWideIps_dropped', - description: 'cnameWideIps.dropped', - dataPoints: [ + }, { labels: [ { @@ -14042,7 +12746,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -14101,7 +12805,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -14113,13 +12817,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'cnameWideIps_fallback', - description: 'cnameWideIps.fallback', - dataPoints: [ + }, { labels: [ { @@ -14164,7 +12862,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -14223,7 +12921,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -14235,13 +12933,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'cnameWideIps_persisted', - description: 'cnameWideIps.persisted', - dataPoints: [ + }, { labels: [ { @@ -14286,7 +12978,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -14345,7 +13037,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -14357,13 +13049,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'cnameWideIps_preferred', - description: 'cnameWideIps.preferred', - dataPoints: [ + }, { labels: [ { @@ -14408,7 +13094,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -14467,7 +13153,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -14479,13 +13165,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'cnameWideIps_rcode', - description: 'cnameWideIps.rcode', - dataPoints: [ + }, { labels: [ { @@ -14530,7 +13210,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -14589,7 +13269,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -14601,13 +13281,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'cnameWideIps_requests', - description: 'cnameWideIps.requests', - dataPoints: [ + }, { labels: [ { @@ -14652,7 +13326,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -14711,7 +13385,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -14723,13 +13397,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'cnameWideIps_resolutions', - description: 'cnameWideIps.resolutions', - dataPoints: [ + }, { labels: [ { @@ -14774,7 +13442,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -14833,7 +13501,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -14845,13 +13513,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'cnameWideIps_returnFromDns', - description: 'cnameWideIps.returnFromDns', - dataPoints: [ + }, { labels: [ { @@ -14896,7 +13558,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -14955,7 +13617,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -14967,13 +13629,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'cnameWideIps_returnToDns', - description: 'cnameWideIps.returnToDns', - dataPoints: [ + }, { labels: [ { @@ -15018,7 +13674,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -15077,7 +13733,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -15089,13 +13745,7 @@ module.exports = { } ], value: 32 - } - ] - }, - { - name: 'cnameWideIps_persistCidrIpv4', - description: 'cnameWideIps.persistCidrIpv4', - dataPoints: [ + }, { labels: [ { @@ -15140,7 +13790,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -15199,7 +13849,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -15211,13 +13861,7 @@ module.exports = { } ], value: 3600 - } - ] - }, - { - name: 'cnameWideIps_ttlPersistence', - description: 'cnameWideIps.ttlPersistence', - dataPoints: [ + }, { labels: [ { @@ -15262,7 +13906,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -15321,7 +13965,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -15333,13 +13977,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'cnameWideIps_failureRcodeTtl', - description: 'cnameWideIps.failureRcodeTtl', - dataPoints: [ + }, { labels: [ { @@ -15384,7 +14022,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -15443,7 +14081,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -15455,13 +14093,7 @@ module.exports = { } ], value: 128 - } - ] - }, - { - name: 'cnameWideIps_persistCidrIpv6', - description: 'cnameWideIps.persistCidrIpv6', - dataPoints: [ + }, { labels: [ { @@ -15506,7 +14138,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -15569,7 +14201,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -15632,7 +14264,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -15695,7 +14327,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -15758,7 +14390,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -15821,7 +14453,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -15884,7 +14516,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -15947,7 +14579,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -16010,7 +14642,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -16073,7 +14705,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -16136,7 +14768,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -16199,7 +14831,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -16262,7 +14894,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -16325,7 +14957,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -16388,7 +15020,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -16451,7 +15083,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -16514,7 +15146,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -16577,7 +15209,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -16640,7 +15272,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -16703,7 +15335,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -16766,7 +15398,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -16829,7 +15461,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -16892,7 +15524,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -16955,7 +15587,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -17018,7 +15650,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -17081,7 +15713,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -17144,7 +15776,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -17207,7 +15839,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -17270,7 +15902,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -17333,7 +15965,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -17396,7 +16028,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -17459,7 +16091,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -17522,7 +16154,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -17585,7 +16217,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -17648,7 +16280,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -17711,7 +16343,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -17774,7 +16406,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -17837,7 +16469,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -17900,7 +16532,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -17963,7 +16595,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -18026,7 +16658,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -18089,7 +16721,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -18152,7 +16784,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -18215,7 +16847,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -18278,7 +16910,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -18341,7 +16973,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'failureRcodeResponse', @@ -18408,7 +17040,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -18491,7 +17123,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -18574,7 +17206,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -18657,7 +17289,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -18740,7 +17372,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -18823,7 +17455,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -18906,7 +17538,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -18989,7 +17621,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -19072,7 +17704,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -19155,7 +17787,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -19226,7 +17858,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -19289,7 +17921,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -19352,7 +17984,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -19415,7 +18047,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -19478,7 +18110,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -19541,7 +18173,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -19604,7 +18236,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -19667,7 +18299,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -19742,7 +18374,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -19825,7 +18457,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -19908,7 +18540,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -19991,7 +18623,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -20074,7 +18706,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -20157,7 +18789,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -20240,7 +18872,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -20323,7 +18955,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -20406,7 +19038,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -20489,7 +19121,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -20572,7 +19204,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -20655,7 +19287,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -20738,7 +19370,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -20821,7 +19453,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -20904,7 +19536,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -20987,7 +19619,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -21070,7 +19702,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -21153,7 +19785,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -21236,7 +19868,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -21319,7 +19951,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -21390,7 +20022,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -21453,7 +20085,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -21516,7 +20148,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -21579,7 +20211,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -21642,7 +20274,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -21705,7 +20337,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -21768,7 +20400,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -21831,7 +20463,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -21906,7 +20538,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -21989,7 +20621,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -22072,7 +20704,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -22155,7 +20787,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -22238,7 +20870,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -22321,7 +20953,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -22404,7 +21036,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -22487,7 +21119,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -22570,7 +21202,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -22653,7 +21285,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'limitMaxBpsStatus', @@ -22724,7 +21356,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -22787,7 +21419,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -22850,7 +21482,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -22913,7 +21545,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -22976,7 +21608,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -23039,7 +21671,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -23102,7 +21734,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -23270,7 +21902,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -23333,7 +21965,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -23396,7 +22028,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -23459,7 +22091,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -23522,7 +22154,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -23585,7 +22217,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -23648,7 +22280,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -23711,7 +22343,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -23774,7 +22406,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -23837,7 +22469,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -23900,7 +22532,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -23963,7 +22595,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -24026,7 +22658,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -24089,7 +22721,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -24152,7 +22784,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -24215,7 +22847,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -24270,13 +22902,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'mxPools_members_alternate', - description: 'mxPools.members.alternate', - dataPoints: [ + }, { labels: [ { @@ -24340,13 +22966,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'mxPools_members_fallback', - description: 'mxPools.members.fallback', - dataPoints: [ + }, { labels: [ { @@ -24410,13 +23030,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'mxPools_members_preferred', - description: 'mxPools.members.preferred', - dataPoints: [ + }, { labels: [ { @@ -24488,7 +23102,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -24551,7 +23165,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -24614,7 +23228,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -24677,7 +23291,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -24740,7 +23354,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -24803,7 +23417,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -24866,7 +23480,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -24929,7 +23543,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -24992,7 +23606,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -25055,7 +23669,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -25118,7 +23732,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -25181,7 +23795,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -25244,7 +23858,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -25307,7 +23921,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -25370,7 +23984,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -25433,7 +24047,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -25496,7 +24110,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -25551,13 +24165,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'naptrPools_members_alternate', - description: 'naptrPools.members.alternate', - dataPoints: [ + }, { labels: [ { @@ -25621,13 +24229,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'naptrPools_members_fallback', - description: 'naptrPools.members.fallback', - dataPoints: [ + }, { labels: [ { @@ -25691,13 +24293,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'naptrPools_members_preferred', - description: 'naptrPools.members.preferred', - dataPoints: [ + }, { labels: [ { @@ -25769,7 +24365,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -25832,7 +24428,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -25895,7 +24491,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -25958,7 +24554,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -26021,7 +24617,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -26084,7 +24680,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -26147,7 +24743,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -26210,7 +24806,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -26273,7 +24869,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -26336,7 +24932,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -26399,7 +24995,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -26462,7 +25058,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -26525,7 +25121,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -26588,7 +25184,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -26651,7 +25247,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -26714,7 +25310,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -26777,7 +25373,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -26832,13 +25428,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'srvPools_members_alternate', - description: 'srvPools.members.alternate', - dataPoints: [ + }, { labels: [ { @@ -26902,13 +25492,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'srvPools_members_fallback', - description: 'srvPools.members.fallback', - dataPoints: [ + }, { labels: [ { @@ -26972,13 +25556,7 @@ module.exports = { } ], value: 0 - } - ] - }, - { - name: 'srvPools_members_preferred', - description: 'srvPools.members.preferred', - dataPoints: [ + }, { labels: [ { @@ -27050,7 +25628,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -27113,7 +25691,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -27176,7 +25754,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -27239,7 +25817,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -27302,7 +25880,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -27365,7 +25943,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -27428,7 +26006,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -27491,7 +26069,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -27554,7 +26132,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', @@ -27617,7 +26195,7 @@ module.exports = { }, { key: 'enabled', - value: 'true' + value: true }, { key: 'loadBalancingMode', diff --git a/test/unit/consumers/data/splunkConsumerTestsData.js b/test/unit/consumers/data/splunkConsumerTestsData.js index a2b9998b..edcfee25 100644 --- a/test/unit/consumers/data/splunkConsumerTestsData.js +++ b/test/unit/consumers/data/splunkConsumerTestsData.js @@ -3761,6 +3761,240 @@ module.exports = { sourcetype: 'f5:telemetry', time: 1546304461000 }, + { + time: 1546304461000, + source: 'f5-telemetry', + sourcetype: 'f5:telemetry', + host: 'telemetry.bigip.com', + fields: { + 'metric_name:average': 0, + 'metric_name:current': 0, + 'metric_name:max': 0, + name: 'blade1', + telemetryStreamingStatisticSet: 'system.connectionsPerformance' + } + }, + { + time: 1546304461000, + source: 'f5-telemetry', + sourcetype: 'f5:telemetry', + host: 'telemetry.bigip.com', + fields: { + 'metric_name:average': 0, + 'metric_name:current': 0, + 'metric_name:max': 0, + name: 'blade2', + telemetryStreamingStatisticSet: 'system.connectionsPerformance' + } + }, + { + time: 1546304461000, + source: 'f5-telemetry', + sourcetype: 'f5:telemetry', + host: 'telemetry.bigip.com', + fields: { + 'metric_name:average': 0, + 'metric_name:current': 0, + 'metric_name:max': 0, + name: 'client', + telemetryStreamingStatisticSet: 'system.connectionsPerformance' + } + }, + { + time: 1546304461000, + source: 'f5-telemetry', + sourcetype: 'f5:telemetry', + host: 'telemetry.bigip.com', + fields: { + 'metric_name:average': 0, + 'metric_name:current': 0, + 'metric_name:max': 0, + name: 'clientAccepts', + telemetryStreamingStatisticSet: 'system.connectionsPerformance' + } + }, + { + time: 1546304461000, + source: 'f5-telemetry', + sourcetype: 'f5:telemetry', + host: 'telemetry.bigip.com', + fields: { + 'metric_name:average': 0, + 'metric_name:current': 0, + 'metric_name:max': 0, + name: 'clientConnections', + telemetryStreamingStatisticSet: 'system.connectionsPerformance' + } + }, + { + time: 1546304461000, + source: 'f5-telemetry', + sourcetype: 'f5:telemetry', + host: 'telemetry.bigip.com', + fields: { + 'metric_name:average': 0, + 'metric_name:current': 0, + 'metric_name:max': 0, + name: 'clientConnects', + telemetryStreamingStatisticSet: 'system.connectionsPerformance' + } + }, + { + time: 1546304461000, + source: 'f5-telemetry', + sourcetype: 'f5:telemetry', + host: 'telemetry.bigip.com', + fields: { + 'metric_name:average': 0, + 'metric_name:current': 0, + 'metric_name:max': 0, + name: 'connections', + telemetryStreamingStatisticSet: 'system.connectionsPerformance' + } + }, + { + time: 1546304461000, + source: 'f5-telemetry', + sourcetype: 'f5:telemetry', + host: 'telemetry.bigip.com', + fields: { + 'metric_name:average': 0, + 'metric_name:current': 0, + 'metric_name:max': 0, + name: 'httpRequests', + telemetryStreamingStatisticSet: 'system.connectionsPerformance' + } + }, + { + time: 1546304461000, + source: 'f5-telemetry', + sourcetype: 'f5:telemetry', + host: 'telemetry.bigip.com', + fields: { + 'metric_name:average': 0, + 'metric_name:current': 0, + 'metric_name:max': 0, + name: 'pvaClient', + telemetryStreamingStatisticSet: 'system.connectionsPerformance' + } + }, + { + time: 1546304461000, + source: 'f5-telemetry', + sourcetype: 'f5:telemetry', + host: 'telemetry.bigip.com', + fields: { + 'metric_name:average': 0, + 'metric_name:current': 0, + 'metric_name:max': 0, + name: 'pvaServer', + telemetryStreamingStatisticSet: 'system.connectionsPerformance' + } + }, + { + time: 1546304461000, + source: 'f5-telemetry', + sourcetype: 'f5:telemetry', + host: 'telemetry.bigip.com', + fields: { + 'metric_name:average': 0, + 'metric_name:current': 0, + 'metric_name:max': 0, + name: 'server', + telemetryStreamingStatisticSet: 'system.connectionsPerformance' + } + }, + { + time: 1546304461000, + source: 'f5-telemetry', + sourcetype: 'f5:telemetry', + host: 'telemetry.bigip.com', + fields: { + 'metric_name:average': 0, + 'metric_name:current': 0, + 'metric_name:max': 0, + name: 'serverConnections', + telemetryStreamingStatisticSet: 'system.connectionsPerformance' + } + }, + { + time: 1546304461000, + source: 'f5-telemetry', + sourcetype: 'f5:telemetry', + host: 'telemetry.bigip.com', + fields: { + 'metric_name:average': 0, + 'metric_name:current': 0, + 'metric_name:max': 0, + name: 'activeSslClientConnections', + telemetryStreamingStatisticSet: 'system.connectionsPerformance' + } + }, + { + time: 1546304461000, + source: 'f5-telemetry', + sourcetype: 'f5:telemetry', + host: 'telemetry.bigip.com', + fields: { + 'metric_name:average': 0, + 'metric_name:current': 0, + 'metric_name:max': 0, + name: 'newSslClientConnections', + telemetryStreamingStatisticSet: 'system.connectionsPerformance' + } + }, + { + time: 1546304461000, + source: 'f5-telemetry', + sourcetype: 'f5:telemetry', + host: 'telemetry.bigip.com', + fields: { + 'metric_name:average': 0, + 'metric_name:current': 0, + 'metric_name:max': 0, + name: 'activeSslServerConnections', + telemetryStreamingStatisticSet: 'system.connectionsPerformance' + } + }, + { + time: 1546304461000, + source: 'f5-telemetry', + sourcetype: 'f5:telemetry', + host: 'telemetry.bigip.com', + fields: { + 'metric_name:average': 0, + 'metric_name:current': 0, + 'metric_name:max': 0, + name: 'newSslServerConnections', + telemetryStreamingStatisticSet: 'system.connectionsPerformance' + } + }, + { + time: 1546304461000, + source: 'f5-telemetry', + sourcetype: 'f5:telemetry', + host: 'telemetry.bigip.com', + fields: { + 'metric_name:average': 0, + 'metric_name:current': 0, + 'metric_name:max': 0, + name: 'serverNewConnections', + telemetryStreamingStatisticSet: 'system.connectionsPerformance' + } + }, + { + time: 1546304461000, + source: 'f5-telemetry', + sourcetype: 'f5:telemetry', + host: 'telemetry.bigip.com', + fields: { + 'metric_name:average': 0, + 'metric_name:current': 0, + 'metric_name:max': 0, + name: 'serverNewTcpConnections', + telemetryStreamingStatisticSet: 'system.connectionsPerformance' + } + }, { fields: { filename: 'ASM-AttackSignatures_20190716_122131.im', diff --git a/test/unit/consumers/data/statsdConsumerTestsData.js b/test/unit/consumers/data/statsdConsumerTestsData.js index bb051d2e..5bfe55e2 100644 --- a/test/unit/consumers/data/statsdConsumerTestsData.js +++ b/test/unit/consumers/data/statsdConsumerTestsData.js @@ -9349,6 +9349,384 @@ module.exports = { }, metricValue: 0 }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.blade1.average', + metricValue: 0, + metricTags: { + name: 'blade1' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.blade1.current', + metricValue: 0, + metricTags: { + name: 'blade1' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.blade1.max', + metricValue: 0, + metricTags: { + name: 'blade1' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.blade2.average', + metricValue: 0, + metricTags: { + name: 'blade2' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.blade2.current', + metricValue: 0, + metricTags: { + name: 'blade2' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.blade2.max', + metricValue: 0, + metricTags: { + name: 'blade2' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.client.average', + metricValue: 0, + metricTags: { + name: 'client' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.client.current', + metricValue: 0, + metricTags: { + name: 'client' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.client.max', + metricValue: 0, + metricTags: { + name: 'client' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.clientAccepts.average', + metricValue: 0, + metricTags: { + name: 'clientAccepts' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.clientAccepts.current', + metricValue: 0, + metricTags: { + name: 'clientAccepts' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.clientAccepts.max', + metricValue: 0, + metricTags: { + name: 'clientAccepts' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.clientConnections.average', + metricValue: 0, + metricTags: { + name: 'clientConnections' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.clientConnections.current', + metricValue: 0, + metricTags: { + name: 'clientConnections' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.clientConnections.max', + metricValue: 0, + metricTags: { + name: 'clientConnections' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.clientConnects.average', + metricValue: 0, + metricTags: { + name: 'clientConnects' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.clientConnects.current', + metricValue: 0, + metricTags: { + name: 'clientConnects' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.clientConnects.max', + metricValue: 0, + metricTags: { + name: 'clientConnects' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.connections.average', + metricValue: 0, + metricTags: { + name: 'connections' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.connections.current', + metricValue: 0, + metricTags: { + name: 'connections' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.connections.max', + metricValue: 0, + metricTags: { + name: 'connections' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.httpRequests.average', + metricValue: 0, + metricTags: { + name: 'httpRequests' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.httpRequests.current', + metricValue: 0, + metricTags: { + name: 'httpRequests' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.httpRequests.max', + metricValue: 0, + metricTags: { + name: 'httpRequests' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.pvaClient.average', + metricValue: 0, + metricTags: { + name: 'pvaClient' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.pvaClient.current', + metricValue: 0, + metricTags: { + name: 'pvaClient' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.pvaClient.max', + metricValue: 0, + metricTags: { + name: 'pvaClient' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.pvaServer.average', + metricValue: 0, + metricTags: { + name: 'pvaServer' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.pvaServer.current', + metricValue: 0, + metricTags: { + name: 'pvaServer' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.pvaServer.max', + metricValue: 0, + metricTags: { + name: 'pvaServer' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.server.average', + metricValue: 0, + metricTags: { + name: 'server' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.server.current', + metricValue: 0, + metricTags: { + name: 'server' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.server.max', + metricValue: 0, + metricTags: { + name: 'server' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.serverConnections.average', + metricValue: 0, + metricTags: { + name: 'serverConnections' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.serverConnections.current', + metricValue: 0, + metricTags: { + name: 'serverConnections' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.serverConnections.max', + metricValue: 0, + metricTags: { + name: 'serverConnections' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.activeSslClientConnections.average', + metricValue: 0, + metricTags: { + name: 'activeSslClientConnections' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.activeSslClientConnections.current', + metricValue: 0, + metricTags: { + name: 'activeSslClientConnections' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.activeSslClientConnections.max', + metricValue: 0, + metricTags: { + name: 'activeSslClientConnections' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.newSslClientConnections.average', + metricValue: 0, + metricTags: { + name: 'newSslClientConnections' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.newSslClientConnections.current', + metricValue: 0, + metricTags: { + name: 'newSslClientConnections' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.newSslClientConnections.max', + metricValue: 0, + metricTags: { + name: 'newSslClientConnections' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.activeSslServerConnections.average', + metricValue: 0, + metricTags: { + name: 'activeSslServerConnections' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.activeSslServerConnections.current', + metricValue: 0, + metricTags: { + name: 'activeSslServerConnections' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.activeSslServerConnections.max', + metricValue: 0, + metricTags: { + name: 'activeSslServerConnections' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.newSslServerConnections.average', + metricValue: 0, + metricTags: { + name: 'newSslServerConnections' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.newSslServerConnections.current', + metricValue: 0, + metricTags: { + name: 'newSslServerConnections' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.newSslServerConnections.max', + metricValue: 0, + metricTags: { + name: 'newSslServerConnections' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.serverNewConnections.average', + metricValue: 0, + metricTags: { + name: 'serverNewConnections' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.serverNewConnections.current', + metricValue: 0, + metricTags: { + name: 'serverNewConnections' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.serverNewConnections.max', + metricValue: 0, + metricTags: { + name: 'serverNewConnections' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.serverNewTcpConnections.average', + metricValue: 0, + metricTags: { + name: 'serverNewTcpConnections' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.serverNewTcpConnections.current', + metricValue: 0, + metricTags: { + name: 'serverNewTcpConnections' + } + }, + { + metricName: 'f5telemetry.telemetry-bigip-com.system.connectionsPerformance.serverNewTcpConnections.max', + metricValue: 0, + metricTags: { + name: 'serverNewTcpConnections' + } + }, { metricName: 'f5telemetry.telemetry-bigip-com.system.asmAttackSignatures.ff8080817a3a4908017a3a490958000e.createDateTime', metricTags: { diff --git a/test/unit/consumers/dataDogConsumerTests.js b/test/unit/consumers/dataDogConsumerTests.js index 7cbee3a5..a84ef306 100644 --- a/test/unit/consumers/dataDogConsumerTests.js +++ b/test/unit/consumers/dataDogConsumerTests.js @@ -18,6 +18,9 @@ const sinon = require('sinon'); const zlib = require('zlib'); const dataDogIndex = require('../../../src/lib/consumers/DataDog/index'); +const dataDogData = require('./data/dataDogConsumerTestsData'); +const httpUtil = require('../../../src/lib/consumers/shared/httpUtil'); +const stubs = require('../shared/stubs'); const testUtil = require('../shared/util'); chai.use(chaiAsPromised); @@ -74,13 +77,13 @@ describe('DataDog', () => { responseData: '{}' }, metrics: { - path: '/api/v1/series', + path: '/api/v2/series', requestHeaders: { 'Content-Type': 'application/json', 'DD-API-KEY': DATA_DOG_API_KEY }, responseCode: 202, - responseData: '{"status":"ok"}' + responseData: '{"errors":[]}' } }; const DATA_DOG_TYPES = { @@ -88,6 +91,7 @@ describe('DataDog', () => { METRICS: 'metrics' }; let dataDogRequestData; + let datadogTimestamp; let defaultConsumerConfig; function addGzipReqHeadersIfNeed(reqConf, compressionConfig, compressionType) { @@ -99,6 +103,7 @@ describe('DataDog', () => { } return reqConf; } + function addGzipConfigIfNeed(config, compressionType) { if (compressionType === 'gzip') { Object.assign(config, { compressionType: 'gzip' }); @@ -106,6 +111,27 @@ describe('DataDog', () => { return config; } + function mutateTestsData(originData, options) { + options = options || {}; + originData = testUtil.deepCopy(originData); + + let prefix = ''; + if (Array.isArray(options.prefix) && options.prefix.length > 0) { + prefix = `${options.prefix.join('.')}.`; + } + originData.series.forEach((metric) => { + metric.metric = `${prefix}${metric.metric}`; + + if (typeof options.timestamp !== 'undefined') { + metric.points[0].timestamp = options.timestamp; + } + if (Array.isArray(options.tags)) { + metric.tags = metric.tags.concat(options.tags); + } + }); + return originData; + } + function checkGzipReqHeadersIfNeeded(request, compressionConfig, compressionType) { if (compressionConfig !== 'none') { assert.deepInclude(request.headers, { 'accept-encoding': compressionType }, 'should send request with Accept-Encoding: gzip header'); @@ -166,17 +192,24 @@ describe('DataDog', () => { testUtil.deepCopy(DATA_DOG_MOCK_ENDPOINTS[type]), { host: DATA_DOG_GATEWAYS[region || 'US1'][type].host } ); + before(() => { moduleCache.restore(); }); beforeEach(() => { + const defaultTimestamp = Date.now(); + datadogTimestamp = Math.floor(defaultTimestamp / 1000.0); dataDogRequestData = []; defaultConsumerConfig = testUtil.deepCopy({ apiKey: DATA_DOG_API_KEY, region: 'US1', service: 'f5-telemetry' }); + + stubs.clock({ + fakeTimersOpts: defaultTimestamp + }); }); afterEach(() => { @@ -191,21 +224,15 @@ describe('DataDog', () => { describe(`compressionType === "${compressionType}"`, () => { const metricPrefixTests = [ { - testName: 'no metricPrefix', - isDefined: 'system.cpu', - isUndefined: 'f5.bigip.system.cpu' + testName: 'no metricPrefix' }, { testName: 'custom metricPrefix, length = 1', - metricPrefix: ['f5'], - isDefined: 'f5.system.cpu', - isUndefined: 'system.cpu' + metricPrefix: ['f5'] }, { testName: 'custom metricPrefix, length = 3', - metricPrefix: ['f5', 'bigip', 'device'], - isDefined: 'f5.bigip.device.system.cpu', - isUndefined: 'system.cpu' + metricPrefix: ['f5', 'bigip', 'device'] } ]; @@ -222,31 +249,64 @@ describe('DataDog', () => { setupDataDogMockEndpoint(addGzipReqHeadersIfNeed(reqConfig, compressionType, 'deflate')); return dataDogIndex(context) .then(() => { - const timeSeries = dataDogRequestData[0].request.series; - const systemCpu = timeSeries.find( - (series) => series.metric === metricPrefixTest.isDefined - ); - - assert.lengthOf(dataDogRequestData, 1, 'should log 1 request'); - assert.isNotEmpty(timeSeries, 'should have some metric data'); - assert.isDefined( - timeSeries.find((series) => series.metric === metricPrefixTest.isDefined), - `should have found '${metricPrefixTest.isDefined}' metric name` - ); - assert.isUndefined( - timeSeries.find((series) => series.metric === metricPrefixTest.isUndefined), - `should have found '${metricPrefixTest.isDefined}' metric name` + const expectedData = mutateTestsData( + dataDogData.systemData[0].expectedData, + { + prefix: metricPrefixTest.metricPrefix, + timestamp: datadogTimestamp + } ); - assert.includeMembers( - systemCpu.tags, - ['configSyncSucceeded:true'], - 'should have configSyncSucceeded boolean tag on \'system.cpu\' metric' + assert.sameDeepMembers( + testUtil.sortAllArrays(dataDogRequestData[0].request.series), + testUtil.sortAllArrays(expectedData.series), + 'should match expected output data' ); checkGzipReqHeadersIfNeeded(dataDogRequestData[0], compressionType, 'deflate'); }); }); }); + it('should split huge payloads into smaller chunks', () => { + // tune if needed + const numberOfObjects = compressionType === 'gzip' ? 4 * 1000 * 10 : 5000; + const context = testUtil.buildConsumerContext({ + eventType: 'systemInfo', + config: addGzipConfigIfNeed(defaultConsumerConfig, compressionType) + }); + context.event.isCustom = true; + context.event.data = { + virtualServers: {} + }; + for (let i = 0; i < numberOfObjects; i += 1) { + context.event.data.virtualServers[`virtualServer_${i}`] = { + name: `virtualServer_${i}`, + metric: i + }; + } + context.config.region = region; + const reqConfig = getRequestConfig(DATA_DOG_TYPES.METRICS, region); + + setupDataDogMockEndpoint(addGzipReqHeadersIfNeed(reqConfig, compressionType, 'deflate')); + return dataDogIndex(context) + .then(() => { + assert.isAbove(dataDogRequestData.length, 1, 'should log more than 1 request'); + checkGzipReqHeadersIfNeeded(dataDogRequestData[0], compressionType, 'deflate'); + + const tags = {}; + const values = {}; + dataDogRequestData.forEach((r) => { + r.request.series.forEach((metricData) => { + const nameTag = metricData.tags.find((t) => t.startsWith('name')); + tags[nameTag] = metricData.points[0].value; + values[metricData.points[0].value] = nameTag; + }); + }); + + assert.lengthOf(Object.keys(tags), numberOfObjects, 'should send all generated tags'); + assert.lengthOf(Object.keys(values), numberOfObjects, 'should send all generated metrics'); + }); + }); + it('should process systemInfo data, and append custom tags', () => { const context = testUtil.buildConsumerContext({ eventType: 'systemInfo', @@ -262,13 +322,18 @@ describe('DataDog', () => { setupDataDogMockEndpoint(addGzipReqHeadersIfNeed(reqConfig, compressionType, 'deflate')); return dataDogIndex(context) .then(() => { - const timeSeriesTagsSample = dataDogRequestData[0].request.series - .filter((_, index) => index % 10 === 0); // Sample 10% - - assert.isAbove(timeSeriesTagsSample.length, 1, 'should have multiple time series'); - timeSeriesTagsSample.forEach((tagSet) => { - assert.includeMembers(tagSet.tags, ['deploymentName:best version', 'instanceId:instance1']); - }); + const expectedData = mutateTestsData( + dataDogData.systemData[0].expectedData, + { + tags: ['deploymentName:best version', 'instanceId:instance1'], + timestamp: datadogTimestamp + } + ); + assert.sameDeepMembers( + testUtil.sortAllArrays(dataDogRequestData[0].request.series), + testUtil.sortAllArrays(expectedData.series), + 'should match expected output data' + ); checkGzipReqHeadersIfNeeded(dataDogRequestData[0], compressionType, 'deflate'); }); }); @@ -293,7 +358,6 @@ describe('DataDog', () => { (series) => series.metric === 'system.cpu' ); - assert.lengthOf(dataDogRequestData, 1, 'should log 1 request'); assert.isNotEmpty(timeSeries, 'should have some metric data'); assert.isDefined(configSyncSucceeded, 'should include \'system.configSyncSucceeded\' as a metric'); assert.notIncludeMembers( @@ -490,7 +554,7 @@ describe('DataDog', () => { return dataDogIndex(context) .then(() => { const traceData = context.tracer.write.firstCall.args[0]; - assert.deepStrictEqual(traceData.data.ddsource, 'syslog'); + assert.deepStrictEqual(JSON.parse(traceData.data[0]).ddsource, 'syslog'); }); }); @@ -534,4 +598,61 @@ describe('DataDog', () => { }); }); }); + + describe('proxy options', () => { + let requestUtilSpy; + + beforeEach(() => { + requestUtilSpy = sinon.spy(httpUtil, 'sendToConsumer'); + }); + + it('should pass basic proxy options', () => { + const context = testUtil.buildConsumerContext({ + config: defaultConsumerConfig + }); + context.config.proxy = { + host: 'proxyServer', + port: 8080 + }; + context.event.type = 'syslog'; + context.event.data = { + data: 'plain data', + telemetryEventCategory: 'event' + }; + setupDataDogMockEndpoint(getRequestConfig(DATA_DOG_TYPES.LOGS)); + return dataDogIndex(context) + .then(() => { + const reqOpt = requestUtilSpy.firstCall.args[0]; + assert.deepStrictEqual(reqOpt.proxy, { host: 'proxyServer', port: 8080 }); + assert.deepStrictEqual(reqOpt.allowSelfSignedCert, false); + }); + }); + + it('should pass proxy options with allowSelfSignedCert', () => { + const context = testUtil.buildConsumerContext({ + config: defaultConsumerConfig + }); + context.config.proxy = { + host: 'proxyServer', + port: 8080, + username: 'test', + passphrase: 'test', + allowSelfSignedCert: true + }; + context.event.type = 'syslog'; + context.event.data = { + data: 'plain data', + telemetryEventCategory: 'event' + }; + setupDataDogMockEndpoint(getRequestConfig(DATA_DOG_TYPES.LOGS)); + return dataDogIndex(context) + .then(() => { + const reqOpt = requestUtilSpy.firstCall.args[0]; + assert.deepStrictEqual(reqOpt.proxy, { + host: 'proxyServer', port: 8080, username: 'test', passphrase: 'test', allowSelfSignedCert: true + }); + assert.deepStrictEqual(reqOpt.allowSelfSignedCert, true); + }); + }); + }); }); diff --git a/test/unit/consumers/f5CloudConsumerTests.js b/test/unit/consumers/f5CloudConsumerTests.js index d2bcc68d..8799de73 100644 --- a/test/unit/consumers/f5CloudConsumerTests.js +++ b/test/unit/consumers/f5CloudConsumerTests.js @@ -18,24 +18,38 @@ const chaiAsPromised = require('chai-as-promised'); const testUtil = require('../shared/util'); const util = require('../../../src/lib/utils/misc'); -const assert = chai.assert; -const F5_CLOUD_NODE_SUPPORTED_VERSION = '8.11.1'; +// min supported version for F5_Cloud +const IS_8_11_1_PLUS = util.compareVersionStrings(process.version.substring(1), '>=', '8.11.1'); const PROTO_PATH = `${__dirname}/../../../src/lib/consumers/F5_Cloud/deos.proto`; +let f5CloudIndex; +let grpc; +let googleAuthMock; +let protoLoader; + +if (IS_8_11_1_PLUS) { + // eslint-disable-next-line global-require + f5CloudIndex = require('../../../src/lib/consumers/F5_Cloud/index'); + // eslint-disable-next-line global-require + grpc = require('@grpc/grpc-js'); + // eslint-disable-next-line global-require + googleAuthMock = require('google-auth-library').auth; + // eslint-disable-next-line global-require + protoLoader = require('@grpc/proto-loader'); +} + +const assert = chai.assert; chai.use(chaiAsPromised); moduleCache.remember(); -describe('F5_Cloud', () => { - if (util.compareVersionStrings(process.version.substring(1), '<', F5_CLOUD_NODE_SUPPORTED_VERSION)) { +(IS_8_11_1_PLUS ? describe : describe.skip)('F5_Cloud', () => { + if (!IS_8_11_1_PLUS) { return; } - // Require libraries that need later versions of Node after Node version check - /* eslint-disable global-require */ - const f5CloudIndex = require('../../../src/lib/consumers/F5_Cloud/index'); - const grpcMock = require('grpc-mock'); - const googleAuthMock = require('google-auth-library').auth; - /* eslint-enable global-require */ + + let mockServer; + let postRequests; const DEFAULT_CONSUMER_CONFIG = { allowSelfSignedCert: true, @@ -79,21 +93,32 @@ describe('F5_Cloud', () => { } }; - const mockServer = grpcMock.createMockServer({ - protoPath: PROTO_PATH, - packageName: 'deos.ingestion.v1alpa1', - serviceName: 'Ingestion', - rules: [ - { method: 'Post', input: '.*', output: '{}' } - ] - }); - before(() => { moduleCache.restore(); - mockServer.listen('0.0.0.0:50051'); + + const protoDescriptor = grpc.loadPackageDefinition(protoLoader.loadSync(PROTO_PATH)); + mockServer = new grpc.Server(); + mockServer.addService(protoDescriptor.deos.ingestion.v1alpa1.Ingestion.service, { + Post: (call, callback) => { + postRequests.push(call.request); + callback(null); + } + }); + + return new Promise((resolve, reject) => { + mockServer.bindAsync('0.0.0.0:50051', grpc.ServerCredentials.createInsecure(), (err) => { + if (err) { + reject(err); + } else { + mockServer.start(); + resolve(); + } + }); + }); }); beforeEach(() => { + postRequests = []; sinon.stub(googleAuthMock, 'fromJSON').callsFake((serviceAccount) => { if (serviceAccount.auth_type) { return mockGoodAuthClient; @@ -104,11 +129,10 @@ describe('F5_Cloud', () => { afterEach(() => { sinon.restore(); - mockServer.clearInteractions(); }); - after(() => { - mockServer.close(true); + after((done) => { + mockServer.tryShutdown(done); }); describe('process', () => { @@ -120,7 +144,7 @@ describe('F5_Cloud', () => { return f5CloudIndex(context) .then((client) => { client.close(); - assert.isFalse(context.logger.exception.called, 'should not have logged an exception'); + // assert.isFalse(context.logger.exception.called, 'should not have logged an exception'); }); }); @@ -132,11 +156,10 @@ describe('F5_Cloud', () => { const expectedData = JSON.stringify(context.event.data); return f5CloudIndex(context) .then((client) => { - const mockResponses = mockServer.getInteractionsOn('Post'); - assert.lengthOf(mockResponses, 1); - assert.strictEqual(mockResponses[0].accountId, 'urn:f5_cs::account:a-blabla-a'); - assert.strictEqual(mockResponses[0].payloadSchema, 'urn:f5:big-ip:event-schema:systeminfo-event:v1'); - assert.strictEqual(mockResponses[0].payload.toString('utf8'), expectedData); + assert.lengthOf(postRequests, 1); + assert.strictEqual(postRequests[0].accountId, 'urn:f5_cs::account:a-blabla-a'); + assert.strictEqual(postRequests[0].payloadSchema, 'urn:f5:big-ip:event-schema:systeminfo-event:v1'); + assert.strictEqual(postRequests[0].payload.toString('utf8'), expectedData); client.close(); }); }); @@ -163,11 +186,10 @@ describe('F5_Cloud', () => { context.event.isCustom = true; return f5CloudIndex(context) .then((client) => { - const mockResponses = mockServer.getInteractionsOn('Post'); - const decodedData = JSON.parse(mockResponses[0].payload.toString('utf8')); - assert.lengthOf(mockResponses, 1); + const decodedData = JSON.parse(postRequests[0].payload.toString('utf8')); + assert.lengthOf(postRequests, 1); assert.deepStrictEqual(decodedData, expectedData); - assert.strictEqual(mockResponses[0].payloadSchema, 'urn:f5:big-ip:event-schema:custom:v1'); + assert.strictEqual(postRequests[0].payloadSchema, 'urn:f5:big-ip:event-schema:custom:v1'); client.close(); }); }); @@ -183,11 +205,10 @@ describe('F5_Cloud', () => { const expectedData = testUtil.deepCopy(context.event.data.data); return f5CloudIndex(context) .then((client) => { - const mockResponses = mockServer.getInteractionsOn('Post'); - assert.lengthOf(mockResponses, 1); - assert.strictEqual(mockResponses[0].accountId, 'urn:f5_cs::account:a-blabla-a'); - assert.strictEqual(mockResponses[0].payloadSchema, 'urn:f5:big-ip:event-schema:raw-event:v1'); - assert.strictEqual(mockResponses[0].payload.toString('utf8'), expectedData); + assert.lengthOf(postRequests, 1); + assert.strictEqual(postRequests[0].accountId, 'urn:f5_cs::account:a-blabla-a'); + assert.strictEqual(postRequests[0].payloadSchema, 'urn:f5:big-ip:event-schema:raw-event:v1'); + assert.strictEqual(postRequests[0].payload.toString('utf8'), expectedData); client.close(); }); }); diff --git a/test/unit/consumers/genericHTTPConsumerTests.js b/test/unit/consumers/genericHTTPConsumerTests.js index e59b2999..3c5e6eaa 100644 --- a/test/unit/consumers/genericHTTPConsumerTests.js +++ b/test/unit/consumers/genericHTTPConsumerTests.js @@ -15,6 +15,7 @@ const chai = require('chai'); const chaiAsPromised = require('chai-as-promised'); const nock = require('nock'); const sinon = require('sinon'); +const zlib = require('zlib'); const genericHttpIndex = require('../../../src/lib/consumers/Generic_HTTP/index'); const testUtil = require('../shared/util'); @@ -189,6 +190,55 @@ describe('Generic_HTTP', () => { return genericHttpIndex(context); }); + + it('should compress data', () => { + const context = testUtil.buildConsumerContext({ + eventType: 'AVR', + config: { + port: 80, + host: 'localhost', + compressionType: 'gzip', + headers: [ + { name: 'Content-Type', value: 'application/json' } + ] + } + }); + nock('https://localhost:80', { + reqheaders: { + 'Content-Encoding': 'gzip', + 'Content-Type': 'application/json' + } + }) + .post('/') + .reply(200, (_, requestBody) => { + assert.isObject(requestBody); + assert.deepStrictEqual(requestBody.Entity, 'SystemMonitor'); + }); + + return genericHttpIndex(context); + }); + + it('should not fail when unable to compress data (gzip)', () => { + const context = testUtil.buildConsumerContext({ + eventType: 'AVR', + config: { + port: 80, + host: 'localhost', + compressionType: 'gzip' + } + }); + sinon.stub(zlib, 'gzip').onFirstCall().callsFake((data, cb) => { + cb(new Error('zlib.gzip expected error')); + }); + return genericHttpIndex(context) + .then(() => { + assert.match( + context.logger.exception.firstCall.args[0], + /zlib.gzip expected error/, + 'should log error message' + ); + }); + }); }); describe('fallback', () => { diff --git a/test/unit/consumers/openTelemetryExporterTests.js b/test/unit/consumers/openTelemetryExporterTests.js index 5c7561cd..cd51c503 100644 --- a/test/unit/consumers/openTelemetryExporterTests.js +++ b/test/unit/consumers/openTelemetryExporterTests.js @@ -15,123 +15,286 @@ const chai = require('chai'); const chaiAsPromised = require('chai-as-promised'); const nock = require('nock'); const sinon = require('sinon'); -const protobufjs = require('protobufjs'); const path = require('path'); -let openTelemetryExporter; // later on: require('../../../src/lib/consumers/OpenTelemetry_Exporter/index'); const openTelemetryExpectedData = require('./data/openTelemetryExporterConsumerTestsData'); const testUtil = require('../shared/util'); const util = require('../../../src/lib/utils/misc'); -const F5_CLOUD_NODE_SUPPORTED_VERSION = '8.11.1'; +// min supported version for OpenTelemetry_Exporter +const IS_8_11_1_PLUS = util.compareVersionStrings(process.version.substring(1), '>=', '8.11.1'); +// on 8.11.1 gRPC server returns "Received RST_STREAM with code 0" - http2 bug on 8.11.1 +const IS_8_13_PLUS = util.compareVersionStrings(process.version.substring(1), '>=', '8.13.0'); + +const OTLP_PROTOS_PATH = path.resolve(__dirname, '../../../', 'node_modules/@opentelemetry/otlp-grpc-exporter-base/build/protos/'); +const METRICS_SERVICE_PROTO_PATH = path.resolve(OTLP_PROTOS_PATH, 'opentelemetry/proto/collector/metrics/v1/metrics_service.proto'); +const OTLP_PROTO_GEN_PATH = path.resolve( + __dirname, '../../../', 'node_modules/@opentelemetry/otlp-proto-exporter-base/build/src/generated/root' +); + +let grpc; +let openTelemetryExporter; +let openTelemetryProtoGen; +let protoLoader; + +if (IS_8_11_1_PLUS) { + // eslint-disable-next-line global-require + grpc = require('@grpc/grpc-js'); + // eslint-disable-next-line global-require + openTelemetryExporter = require('../../../src/lib/consumers/OpenTelemetry_Exporter/index'); + // eslint-disable-next-line global-require, import/no-dynamic-require + openTelemetryProtoGen = require(OTLP_PROTO_GEN_PATH); + // eslint-disable-next-line global-require + protoLoader = require('@grpc/proto-loader'); +} chai.use(chaiAsPromised); const assert = chai.assert; moduleCache.remember(); -describe('OpenTelemetry_Exporter', () => { - if (util.compareVersionStrings(process.version.substring(1), '<', F5_CLOUD_NODE_SUPPORTED_VERSION)) { +(IS_8_11_1_PLUS ? describe : describe.skip)('OpenTelemetry_Exporter', () => { + if (!IS_8_11_1_PLUS) { return; } - // eslint-disable-next-line global-require - openTelemetryExporter = require('../../../src/lib/consumers/OpenTelemetry_Exporter/index'); - // Note: if a test has no explicit assertions then it relies on 'checkNockActiveMocks' in 'afterEach' - let defaultConsumerConfig; - let ExportRequestProto; + function getNanoSecTime() { + return Date.now() / 0.000001; // to nano + } + + function verifyMetricTimestamps(timestampsToVerify, currentTimestamp) { + timestampsToVerify.forEach((metric) => { + assert.isTrue( + metric.timestamps.every((tarr) => tarr.every((t) => t >= currentTimestamp)), + `should have correct timestamps for '${metric.name}'. got '${JSON.stringify(metric.timestamps)}' (time in nano before test started - ${currentTimestamp})` + ); + }); + } before(() => { moduleCache.restore(); - const dir = path.resolve(__dirname, '../../../', 'node_modules/@opentelemetry/exporter-metrics-otlp-proto/build/protos'); - const root = new protobufjs.Root(); - root.resolvePath = function (_, target) { - return `${dir}/${target}`; - }; - - const proto = root.loadSync([ - 'opentelemetry/proto/common/v1/common.proto', - 'opentelemetry/proto/resource/v1/resource.proto', - 'opentelemetry/proto/metrics/v1/metrics.proto', - 'opentelemetry/proto/collector/metrics/v1/metrics_service.proto' - ]); - ExportRequestProto = proto.lookupType('ExportMetricsServiceRequest'); }); - beforeEach(() => { - defaultConsumerConfig = { - port: 80, - host: 'localhost', - metricsPath: '/v1/metrics' - }; - }); - - afterEach(() => { - testUtil.checkNockActiveMocks(nock); - sinon.restore(); - nock.cleanAll(); - }); + function generateTests(testConf) { + let currentTimestampUnixNano; + let defaultConsumerConfig; + let ExportRequestProto; + let fetchLabelValue; + let grpcServer; + let mockHost; + let mockPath; + let mockPort; + let mockProtocol; + let nockMock; + let onDataReceivedCallback; + let requestHeaders; + let requestMetrics; + let requestTimestamps; + + function convertExportedMetrics(requestBody) { + const metrics = []; + const timestamps = []; + + if (testConf.exporter === 'protobuf') { + requestBody = ExportRequestProto.decode(Buffer.from(requestBody, 'hex')); + } + + requestBody.resourceMetrics[0] + .scopeMetrics[0] + .metrics.forEach((metric) => { + metrics.push({ + name: metric.name, + description: metric.description, + dataPoints: metric.sum.dataPoints.map((p) => ({ + labels: p.attributes.map((l) => ({ key: l.key, value: fetchLabelValue(l) })), + value: p.asDouble + })) + }); + timestamps.push({ + name: metric.name, + timestamps: metric.sum.dataPoints.map((p) => [ + Number(p.startTimeUnixNano), + Number(p.timeUnixNano) + ]) + }); + }); + return { + metrics, + timestamps + }; + } + + function getMockNock(options) { + if (!nockMock) { + nockMock = nock(`${mockProtocol}://${mockHost}:${mockPort}`, options).post(mockPath); + } + return nockMock; + } + + function initDefaultNockMock(options) { + getMockNock(options).reply(function (_, requestBody) { + if (onDataReceivedCallback) { + onDataReceivedCallback(requestBody); + } + requestHeaders = this.req.headers; + return 200; + }); + } + + function isGRPCExporter() { + return testConf.exporter === 'grpc'; + } + + function isProtobufExporter() { + return testConf.exporter === 'protobuf'; + } + + function resetNockMock() { + if (nockMock) { + nock.removeInterceptor(nockMock); + } + } + + function verifyTimestamps() { + verifyMetricTimestamps(requestTimestamps, currentTimestampUnixNano); + } + + before((done) => { + grpcServer = null; + mockHost = 'localhost'; + mockPath = '/v1/metrics'; + mockPort = 55681; + mockProtocol = testConf.secure ? 'https' : 'http'; + + if (isGRPCExporter()) { + const protoDescriptor = grpc.loadPackageDefinition(protoLoader.loadSync(METRICS_SERVICE_PROTO_PATH, { + keepCase: false, + longs: String, + enums: String, + defaults: true, + oneofs: true, + includeDirs: [OTLP_PROTOS_PATH] + })); + + grpcServer = new grpc.Server(); + grpcServer.addService(protoDescriptor.opentelemetry.proto.collector.metrics.v1.MetricsService.service, { + Export: (call, callback) => { + const metadata = new grpc.Metadata(); + metadata.merge(call.metadata); + requestHeaders = metadata.toHttp2Headers(); + + let error = null; + if (onDataReceivedCallback) { + error = onDataReceivedCallback(call.request); + } + callback(error); + } + }); + } else { + ExportRequestProto = openTelemetryProtoGen + .opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceRequest; + } + + if (isProtobufExporter()) { + fetchLabelValue = (label) => label.value[label.value.value]; + } else { + fetchLabelValue = (label) => { + if (typeof label.value.boolValue !== 'undefined') { + return label.value.boolValue; + } + return label.value.stringValue; + }; + } + + if (isGRPCExporter()) { + grpcServer.bindAsync(`${mockHost}:${mockPort}`, grpc.ServerCredentials.createInsecure(), (err) => { + if (err) { + done(err); + } else { + grpcServer.start(); + done(); + } + }); + } else { + done(); + } + }); - describe('process', () => { - it('should process event', () => assert.isFulfilled(openTelemetryExporter(testUtil.buildConsumerContext({ - eventType: 'event' - })))); + after((done) => { + if (grpcServer) { + grpcServer.tryShutdown(done); + } else { + done(); + } + }); - it('should log an error if error encountered', () => { - const context = testUtil.buildConsumerContext({ - eventType: 'systemInfo', - config: defaultConsumerConfig - }); + beforeEach(() => { + currentTimestampUnixNano = getNanoSecTime(); + defaultConsumerConfig = { + exporter: testConf.exporter, + host: mockHost, + metricsPath: mockPath, + port: mockPort, + protocol: mockProtocol, + useSSL: testConf.secure + }; + nockMock = null; + onDataReceivedCallback = (requestBody) => { + const parsed = convertExportedMetrics(requestBody); + requestMetrics = parsed.metrics; + requestTimestamps = parsed.timestamps; + return null; + }; + requestHeaders = null; + requestMetrics = null; + requestTimestamps = null; - nock('http://localhost:80') - .post('/v1/metrics') - .replyWithError('error sending!'); + if (!isGRPCExporter()) { + initDefaultNockMock(); + } + }); - return openTelemetryExporter(context) - .then(() => { - assert.deepStrictEqual(context.logger.error.firstCall.args, ['error: error sending!'], 'should log an error'); - assert.isFalse(context.logger.debug.called, 'should not have logged a debug message'); - }); + afterEach(() => { + testUtil.checkNockActiveMocks(nock); + sinon.restore(); + nock.cleanAll(); }); describe('OpenTelemetry metrics', () => { - const convertExportedMetrics = (requestBody) => { - const results = []; - const ExportMetricsServiceRequest = ExportRequestProto.decode(Buffer.from(requestBody, 'hex')); - const exportedMetrics = ExportMetricsServiceRequest - .resourceMetrics[0] - .instrumentationLibraryMetrics[0] - .metrics; - - exportedMetrics.forEach((metric) => { - results.push({ - name: metric.name, - description: metric.description, - dataPoints: metric.doubleSum.dataPoints.map((p) => ({ - labels: p.labels.map((l) => ({ key: l.key, value: l.value })), - value: p.value - })) - }); + it('should log an error if error encountered', () => { + const context = testUtil.buildConsumerContext({ + eventType: 'systemInfo', + config: defaultConsumerConfig }); - return results; - }; + + if (isGRPCExporter()) { + onDataReceivedCallback = () => new Error('error sending!'); + } else { + resetNockMock(); + getMockNock().replyWithError('error sending!'); + } + + return openTelemetryExporter(context) + .then(() => { + assert.includeDeepMembers(context.logger.exception.firstCall.args, ['Error on attempt to send metrics:'], 'should log an error'); + }); + }); it('should log and trace data', () => { const context = testUtil.buildConsumerContext({ eventType: 'systemInfo', config: defaultConsumerConfig }); - - nock('http://localhost:80') - .post('/v1/metrics') - .reply(); return openTelemetryExporter(context) .then(() => { - assert.deepStrictEqual(context.logger.debug.args, [['success']], 'should log a success'); - assert.isFalse(context.logger.error.called, 'should not have logged an error'); - const traceData = context.tracer.write.firstCall.args[0]; + // on 8.11.1 server returns "Received RST_STREAM with code 0" - http2 bug on 8.11.1 + if (IS_8_13_PLUS) { + assert.deepStrictEqual(context.logger.debug.args, [['success']], 'should log a success'); + assert.isFalse(context.logger.error.called, 'should not have logged an error'); + } - assert.strictEqual(Object.keys(traceData).length, 406, 'should have trace record for each metric'); + const traceData = context.tracer.write.firstCall.args[0]; + assert.deepStrictEqual(Object.keys(traceData).length, 409, 'should have trace record for each metric'); assert.deepStrictEqual(traceData.system_diskLatency__util, { description: 'system.diskLatency.%util', measurements: [ @@ -148,6 +311,12 @@ describe('OpenTelemetry_Exporter', () => { { tags: { name: 'dm-8' }, value: 0.01 } ] }, 'should include measurements array for specific metric in trace data'); + + assert.sameDeepMembers( + requestMetrics, + openTelemetryExpectedData.systemData[0].expectedData + ); + verifyTimestamps(); }); }); @@ -156,16 +325,18 @@ describe('OpenTelemetry_Exporter', () => { eventType: 'systemInfo', config: defaultConsumerConfig }); + return openTelemetryExporter(context) + .then(() => { + if (!isGRPCExporter()) { + const expectedHeader = isProtobufExporter() + ? 'application/x-protobuf' + : 'application/json'; - nock('http://localhost:80') - .post('/v1/metrics') - .reply(function (_, requestBody) { - const metrics = convertExportedMetrics(requestBody); - - assert.strictEqual(this.req.headers['content-type'], 'application/x-protobuf', 'should send protobuf data'); - assert.strictEqual(metrics.length, 727, 'should export correct number of metrics'); + assert.deepStrictEqual(requestHeaders['content-type'], expectedHeader, 'should use correct Content-Type header'); + } + assert.deepStrictEqual(requestMetrics.length, 409, 'should export correct number of metrics'); + verifyTimestamps(); }); - return openTelemetryExporter(context); }); it('should label metrics and export the correct values (systemInfo)', () => { @@ -173,20 +344,20 @@ describe('OpenTelemetry_Exporter', () => { eventType: 'systemInfo', config: defaultConsumerConfig }); - - nock('http://localhost:80') - .post('/v1/metrics') - .reply(200, (_, requestBody) => { - const metrics = convertExportedMetrics(requestBody); - const systemCpuLabels = metrics.find((metric) => metric.name === 'system_cpu').dataPoints[0].labels; - - assert.deepStrictEqual(metrics, openTelemetryExpectedData.systemData[0].expectedData); + return openTelemetryExporter(context) + .then(() => { + const systemCpuLabels = requestMetrics.find((metric) => metric.name === 'system_cpu') + .dataPoints[0].labels; + assert.sameDeepMembers( + requestMetrics, + openTelemetryExpectedData.systemData[0].expectedData + ); assert.isDefined( systemCpuLabels.find((label) => label.key === 'configSyncSucceeded'), 'should find configSyncSucceeded as a label' ); + verifyTimestamps(); }); - return openTelemetryExporter(context); }); it('should process systemInfo data, and convert booleans to metrics', () => { @@ -194,21 +365,18 @@ describe('OpenTelemetry_Exporter', () => { eventType: 'systemInfo', config: Object.assign(defaultConsumerConfig, { convertBooleansToMetrics: true }) }); - - nock('http://localhost:80') - .post('/v1/metrics') - .reply(200, (_, requestBody) => { - const metrics = convertExportedMetrics(requestBody); - const systemCpuLabels = metrics.find((metric) => metric.name === 'system_cpu').dataPoints[0].labels; - const configSyncSucceeded = metrics.find((metric) => metric.name === 'system_configSyncSucceeded'); + return openTelemetryExporter(context) + .then(() => { + const systemCpuLabels = requestMetrics.find((metric) => metric.name === 'system_cpu').dataPoints[0].labels; + const configSyncSucceeded = requestMetrics.find((metric) => metric.name === 'system_configSyncSucceeded'); assert.isDefined(configSyncSucceeded, 'should include \'system_configSyncSucceeded\' as a metric'); assert.isUndefined( systemCpuLabels.find((label) => label.key === 'configSyncSucceeded'), 'should not include configSyncSucceeded as a label' ); + verifyTimestamps(); }); - return openTelemetryExporter(context); }); it('should process event listener event with metrics (AVR)', () => { @@ -216,13 +384,11 @@ describe('OpenTelemetry_Exporter', () => { eventType: 'AVR', config: defaultConsumerConfig }); - nock('http://localhost:80') - .post('/v1/metrics') - .reply(200, (_, requestBody) => { - const metrics = convertExportedMetrics(requestBody); - assert.deepStrictEqual(metrics, openTelemetryExpectedData.avrData[0].expectedData); + return openTelemetryExporter(context) + .then(() => { + assert.deepStrictEqual(requestMetrics, openTelemetryExpectedData.avrData[0].expectedData); + verifyTimestamps(); }); - return openTelemetryExporter(context); }); it('should not send event listener event without metrics (LTM)', () => { @@ -232,6 +398,8 @@ describe('OpenTelemetry_Exporter', () => { }); return openTelemetryExporter(context) .then(() => { + resetNockMock(); + assert.isNull(requestMetrics, 'should not send metrics'); assert.deepStrictEqual( context.logger.debug.args, [['Event did not contain any metrics, skipping']], @@ -249,6 +417,8 @@ describe('OpenTelemetry_Exporter', () => { context.event.data = 'just some random string data'; return openTelemetryExporter(context) .then(() => { + resetNockMock(); + assert.isNull(requestMetrics, 'should not send metrics'); assert.deepStrictEqual( context.logger.debug.args, [['Event known to not contain metrics, skipping']], @@ -276,16 +446,47 @@ describe('OpenTelemetry_Exporter', () => { config: configWithHeaders }); - nock('http://localhost:80', { - reqheaders: { - 'x-api-key': 'superSecret', - 'x-data-set': 'data-set-key' - } - }) - .post('/v1/metrics') - .reply(200); - return openTelemetryExporter(context); + if (!isGRPCExporter()) { + resetNockMock(); + initDefaultNockMock({ + reqheaders: { + 'x-api-key': 'superSecret', + 'x-data-set': 'data-set-key' + } + }); + } + return openTelemetryExporter(context) + .then(() => { + if (isGRPCExporter()) { + assert.deepNestedInclude(requestHeaders, { + 'x-api-key': ['superSecret'], + 'x-data-set': ['data-set-key'] + }, 'should pass headers to gRPC metadata'); + } + }); }); }); + } + + testUtil.product( + [ // exporter + 'grpc', + 'json', + 'protobuf' + ], + [ // secure + true, + false + ] + ).forEach((row) => { + const testConf = { + exporter: row[0], + secure: row[1] + }; + // skip tests for secure gRPC + if (testConf.exporter === 'grpc' && testConf.secure === true) { + return; + } + describe((`Exporter = ${testConf.exporter}, Secure = ${testConf.secure}`), () => generateTests(testConf)); }); }); diff --git a/test/unit/data/configTestsData.js b/test/unit/data/configTestsData.js index 4c03e778..2704dc7f 100644 --- a/test/unit/data/configTestsData.js +++ b/test/unit/data/configTestsData.js @@ -147,7 +147,8 @@ module.exports = { class: 'Secret', protected: 'SecureVault', cipherText: '$M$passphrase' - } + }, + compressionType: 'none' }, My_Namespace: { class: 'Telemetry_Namespace', @@ -170,6 +171,7 @@ module.exports = { protocol: 'https', outputMode: 'processed', trace: false, + compressionType: 'none', passphrase: { class: 'Secret', protected: 'SecureVault', @@ -204,7 +206,8 @@ module.exports = { class: 'Secret', protected: 'SecureVault', cipherText: '$M$passphrase' - } + }, + compressionType: 'none' }, My_Namespace: { class: 'Telemetry_Namespace', @@ -227,6 +230,7 @@ module.exports = { protocol: 'https', outputMode: 'processed', trace: false, + compressionType: 'none', passphrase: { class: 'Secret', protected: 'SecureVault', @@ -270,7 +274,8 @@ module.exports = { }, allowSelfSignedCert: false, namespace: 'f5telemetry_default', - passphrase: 'passphrase' // decrypted secret + passphrase: 'passphrase', // decrypted secret + compressionType: 'none' }, { name: 'Shared', @@ -304,7 +309,8 @@ module.exports = { }, allowSelfSignedCert: false, namespace: 'My_Namespace', - passphrase: 'passphrase' // decrypted secret + passphrase: 'passphrase', // decrypted secret + compressionType: 'none' } ] }, @@ -347,7 +353,8 @@ module.exports = { class: 'Secret', protected: 'SecureVault', cipherText: '$M$passphrase' - } + }, + compressionType: 'none' }, { name: 'Shared', @@ -385,7 +392,8 @@ module.exports = { class: 'Secret', protected: 'SecureVault', cipherText: '$M$passphrase' - } + }, + compressionType: 'none' } ] } @@ -470,7 +478,8 @@ module.exports = { class: 'Secret', protected: 'SecureVault', cipherText: '$M$passphrase' - } + }, + compressionType: 'none' } }, expectedFullDeclaration: { @@ -501,7 +510,8 @@ module.exports = { class: 'Secret', protected: 'SecureVault', cipherText: '$M$passphrase' - } + }, + compressionType: 'none' } } }, @@ -530,7 +540,8 @@ module.exports = { class: 'Secret', protected: 'SecureVault', cipherText: '$M$passphrase' - } + }, + compressionType: 'none' } }, expectedEmittedConfiguration: { @@ -568,6 +579,7 @@ module.exports = { }, allowSelfSignedCert: false, namespace: 'My_Namespace', + compressionType: 'none', passphrase: 'passphrase' // decrypted secret } ] @@ -606,6 +618,7 @@ module.exports = { type: 'output' }, allowSelfSignedCert: false, + compressionType: 'none', namespace: 'My_Namespace', passphrase: { class: 'Secret', @@ -679,6 +692,7 @@ module.exports = { protocol: 'https', outputMode: 'processed', trace: false, + compressionType: 'none', passphrase: { class: 'Secret', protected: 'SecureVault', @@ -708,6 +722,7 @@ module.exports = { protocol: 'https', outputMode: 'processed', trace: false, + compressionType: 'none', passphrase: { class: 'Secret', protected: 'SecureVault', @@ -735,6 +750,7 @@ module.exports = { protocol: 'https', outputMode: 'processed', trace: false, + compressionType: 'none', passphrase: { class: 'Secret', protected: 'SecureVault', @@ -764,6 +780,7 @@ module.exports = { protocol: 'https', outputMode: 'processed', trace: false, + compressionType: 'none', passphrase: { class: 'Secret', protected: 'SecureVault', @@ -805,6 +822,7 @@ module.exports = { path: '/var/tmp/telemetry/Telemetry_Consumer.f5telemetry_default::My_Consumer', type: 'output' }, + compressionType: 'none', allowSelfSignedCert: false, namespace: 'f5telemetry_default', passphrase: 'passphrase', // decrypted secret @@ -840,6 +858,7 @@ module.exports = { path: '/var/tmp/telemetry/Telemetry_Consumer.My_Namespace::My_Consumer', type: 'output' }, + compressionType: 'none', allowSelfSignedCert: false, namespace: 'My_Namespace', passphrase: 'passphrase' // decrypted secret @@ -879,6 +898,7 @@ module.exports = { path: '/var/tmp/telemetry/Telemetry_Consumer.f5telemetry_default::My_Consumer', type: 'output' }, + compressionType: 'none', allowSelfSignedCert: false, namespace: 'f5telemetry_default', passphrase: { @@ -917,6 +937,7 @@ module.exports = { path: '/var/tmp/telemetry/Telemetry_Consumer.My_Namespace::My_Consumer', type: 'output' }, + compressionType: 'none', allowSelfSignedCert: false, namespace: 'My_Namespace', passphrase: { @@ -993,6 +1014,7 @@ module.exports = { protocol: 'https', outputMode: 'processed', trace: false, + compressionType: 'none', passphrase: { class: 'Secret', protected: 'SecureVault', @@ -1024,6 +1046,7 @@ module.exports = { protocol: 'https', outputMode: 'processed', trace: false, + compressionType: 'none', passphrase: { class: 'Secret', protected: 'SecureVault', @@ -1052,6 +1075,7 @@ module.exports = { protocol: 'https', outputMode: 'processed', trace: false, + compressionType: 'none', passphrase: { class: 'Secret', protected: 'SecureVault', @@ -1081,6 +1105,7 @@ module.exports = { protocol: 'https', outputMode: 'processed', trace: false, + compressionType: 'none', passphrase: { class: 'Secret', protected: 'SecureVault', @@ -1122,6 +1147,7 @@ module.exports = { path: '/var/tmp/telemetry/Telemetry_Consumer.ExistingNameSpace::My_Consumer', type: 'output' }, + compressionType: 'none', allowSelfSignedCert: false, namespace: 'ExistingNameSpace', passphrase: 'passphrase', // decrypted secret @@ -1157,6 +1183,7 @@ module.exports = { path: '/var/tmp/telemetry/Telemetry_Consumer.My_Namespace::My_Consumer', type: 'output' }, + compressionType: 'none', allowSelfSignedCert: false, namespace: 'My_Namespace', passphrase: 'passphrase' // decrypted secret @@ -1196,6 +1223,7 @@ module.exports = { path: '/var/tmp/telemetry/Telemetry_Consumer.ExistingNameSpace::My_Consumer', type: 'output' }, + compressionType: 'none', allowSelfSignedCert: false, namespace: 'ExistingNameSpace', passphrase: { @@ -1234,6 +1262,7 @@ module.exports = { path: '/var/tmp/telemetry/Telemetry_Consumer.My_Namespace::My_Consumer', type: 'output' }, + compressionType: 'none', allowSelfSignedCert: false, namespace: 'My_Namespace', passphrase: { @@ -1298,6 +1327,7 @@ module.exports = { protocol: 'https', outputMode: 'processed', trace: false, + compressionType: 'none', passphrase: { class: 'Secret', protected: 'SecureVault', @@ -1329,6 +1359,7 @@ module.exports = { protocol: 'https', outputMode: 'processed', trace: false, + compressionType: 'none', passphrase: { class: 'Secret', protected: 'SecureVault', @@ -1350,6 +1381,7 @@ module.exports = { protocol: 'https', outputMode: 'processed', trace: false, + compressionType: 'none', passphrase: { class: 'Secret', protected: 'SecureVault', @@ -1372,6 +1404,7 @@ module.exports = { protocol: 'https', outputMode: 'processed', trace: false, + compressionType: 'none', passphrase: { class: 'Secret', protected: 'SecureVault', @@ -1413,6 +1446,7 @@ module.exports = { path: '/var/tmp/telemetry/Telemetry_Consumer.ExistingNameSpace::My_Consumer', type: 'output' }, + compressionType: 'none', allowSelfSignedCert: false, namespace: 'ExistingNameSpace', passphrase: 'passphrase', // decrypted secret @@ -1438,6 +1472,7 @@ module.exports = { path: '/var/tmp/telemetry/Telemetry_Consumer.My_Namespace::My_Consumer', type: 'output' }, + compressionType: 'none', allowSelfSignedCert: false, namespace: 'My_Namespace', passphrase: 'passphrase' // decrypted secret @@ -1477,6 +1512,7 @@ module.exports = { path: '/var/tmp/telemetry/Telemetry_Consumer.ExistingNameSpace::My_Consumer', type: 'output' }, + compressionType: 'none', allowSelfSignedCert: false, namespace: 'ExistingNameSpace', passphrase: { @@ -1505,6 +1541,7 @@ module.exports = { path: '/var/tmp/telemetry/Telemetry_Consumer.My_Namespace::My_Consumer', type: 'output' }, + compressionType: 'none', allowSelfSignedCert: false, namespace: 'My_Namespace', passphrase: { @@ -1585,6 +1622,7 @@ module.exports = { protocol: 'https', outputMode: 'processed', trace: false, + compressionType: 'none', passphrase: { class: 'Secret', protected: 'SecureVault', @@ -1616,6 +1654,7 @@ module.exports = { protocol: 'https', outputMode: 'processed', trace: false, + compressionType: 'none', passphrase: { class: 'Secret', protected: 'SecureVault', @@ -1637,6 +1676,7 @@ module.exports = { protocol: 'https', outputMode: 'processed', trace: false, + compressionType: 'none', passphrase: { class: 'Secret', protected: 'SecureVault', @@ -1659,6 +1699,7 @@ module.exports = { protocol: 'https', outputMode: 'processed', trace: false, + compressionType: 'none', passphrase: { class: 'Secret', protected: 'SecureVault', @@ -1700,6 +1741,7 @@ module.exports = { path: '/var/tmp/telemetry/Telemetry_Consumer.ExistingNameSpace::My_Consumer', type: 'output' }, + compressionType: 'none', allowSelfSignedCert: false, namespace: 'ExistingNameSpace', passphrase: 'passphrase', // decrypted secret @@ -1725,6 +1767,7 @@ module.exports = { path: '/var/tmp/telemetry/Telemetry_Consumer.My_Namespace::My_Consumer', type: 'output' }, + compressionType: 'none', allowSelfSignedCert: false, namespace: 'My_Namespace', passphrase: 'passphrase' // decrypted secret @@ -1764,6 +1807,7 @@ module.exports = { path: '/var/tmp/telemetry/Telemetry_Consumer.ExistingNameSpace::My_Consumer', type: 'output' }, + compressionType: 'none', allowSelfSignedCert: false, namespace: 'ExistingNameSpace', passphrase: { @@ -1792,6 +1836,7 @@ module.exports = { path: '/var/tmp/telemetry/Telemetry_Consumer.My_Namespace::My_Consumer', type: 'output' }, + compressionType: 'none', allowSelfSignedCert: false, namespace: 'My_Namespace', passphrase: { @@ -1887,6 +1932,7 @@ module.exports = { protocol: 'https', outputMode: 'processed', trace: false, + compressionType: 'none', passphrase: { class: 'Secret', protected: 'SecureVault', @@ -1918,6 +1964,7 @@ module.exports = { protocol: 'https', outputMode: 'processed', trace: false, + compressionType: 'none', passphrase: { class: 'Secret', protected: 'SecureVault', @@ -1946,6 +1993,7 @@ module.exports = { protocol: 'https', outputMode: 'processed', trace: false, + compressionType: 'none', passphrase: { class: 'Secret', protected: 'SecureVault', @@ -1975,6 +2023,7 @@ module.exports = { protocol: 'https', outputMode: 'processed', trace: false, + compressionType: 'none', passphrase: { class: 'Secret', protected: 'SecureVault', @@ -2016,6 +2065,7 @@ module.exports = { path: '/var/tmp/telemetry/Telemetry_Consumer.ExistingNameSpace::My_Consumer', type: 'output' }, + compressionType: 'none', allowSelfSignedCert: false, namespace: 'ExistingNameSpace', passphrase: 'passphrase', // decrypted secret @@ -2051,6 +2101,7 @@ module.exports = { path: '/var/tmp/telemetry/Telemetry_Consumer.My_Namespace::My_Consumer', type: 'output' }, + compressionType: 'none', allowSelfSignedCert: false, namespace: 'My_Namespace', passphrase: 'passphrase' // decrypted secret @@ -2090,6 +2141,7 @@ module.exports = { path: '/var/tmp/telemetry/Telemetry_Consumer.ExistingNameSpace::My_Consumer', type: 'output' }, + compressionType: 'none', allowSelfSignedCert: false, namespace: 'ExistingNameSpace', passphrase: { @@ -2128,6 +2180,7 @@ module.exports = { path: '/var/tmp/telemetry/Telemetry_Consumer.My_Namespace::My_Consumer', type: 'output' }, + compressionType: 'none', allowSelfSignedCert: false, namespace: 'My_Namespace', passphrase: { @@ -2213,6 +2266,7 @@ module.exports = { protocol: 'https', outputMode: 'processed', trace: false, + compressionType: 'none', passphrase: { class: 'Secret', protected: 'SecureVault', @@ -2261,6 +2315,7 @@ module.exports = { path: '/var/tmp/telemetry/Telemetry_Consumer.ExistingNameSpace::My_Consumer', type: 'output' }, + compressionType: 'none', allowSelfSignedCert: false, namespace: 'ExistingNameSpace', passphrase: 'passphrase', // decrypted secret @@ -2301,6 +2356,7 @@ module.exports = { path: '/var/tmp/telemetry/Telemetry_Consumer.ExistingNameSpace::My_Consumer', type: 'output' }, + compressionType: 'none', allowSelfSignedCert: false, namespace: 'ExistingNameSpace', passphrase: { diff --git a/test/unit/data/propertiesJsonTests/collectSystemStats.js b/test/unit/data/propertiesJsonTests/collectSystemStats.js index 9a630f64..cd0ad5c2 100644 --- a/test/unit/data/propertiesJsonTests/collectSystemStats.js +++ b/test/unit/data/propertiesJsonTests/collectSystemStats.js @@ -366,6 +366,116 @@ module.exports = { name: 'sslTps' } }, + connectionsPerformance: { + blade1: { + average: 0, + current: 0, + max: 0, + name: 'blade1' + }, + blade2: { + average: 0, + current: 0, + max: 0, + name: 'blade2' + }, + client: { + average: 0, + current: 0, + max: 0, + name: 'client' + }, + clientAccepts: { + average: 0, + current: 0, + max: 1, + name: 'clientAccepts' + }, + clientConnections: { + average: 0, + current: 0, + max: 0, + name: 'clientConnections' + }, + clientConnects: { + average: 0, + current: 0, + max: 0, + name: 'clientConnects' + }, + connections: { + average: 0, + current: 0, + max: 0, + name: 'connections' + }, + httpRequests: { + average: 0, + current: 0, + max: 0, + name: 'httpRequests' + }, + pvaClient: { + average: 0, + current: 0, + max: 0, + name: 'pvaClient' + }, + pvaServer: { + average: 0, + current: 0, + max: 0, + name: 'pvaServer' + }, + server: { + average: 0, + current: 0, + max: 0, + name: 'server' + }, + serverConnections: { + average: 0, + current: 0, + max: 0, + name: 'serverConnections' + }, + activeSslClientConnections: { + average: 0, + current: 0, + max: 0, + name: 'activeSslClientConnections' + }, + newSslClientConnections: { + average: 0, + current: 0, + max: 0, + name: 'newSslClientConnections' + }, + activeSslServerConnections: { + average: 0, + current: 0, + max: 0, + name: 'activeSslServerConnections' + }, + newSslServerConnections: { + average: 0, + current: 0, + max: 0, + name: 'newSslServerConnections' + }, + serverNewConnections: { + average: 0, + current: 0, + max: 0, + name: 'serverNewConnections' + }, + serverNewTcpConnections: { + average: 0, + current: 0, + max: 0, + name: 'serverNewTcpConnections' + } + }, asmAttackSignatures: { ff8080817a3a4908017a3a490958000e: { filename: 'ASM-AttackSignatures_20190716_122131.im', @@ -995,10 +1105,10 @@ module.exports = { } }, { - endpoint: '/mgmt/tm/sys/performance/throughput?options=detail', + endpoint: '/mgmt/tm/sys/performance/throughput/stats?options=detail', response: `{ "kind": "tm:sys:performance:throughput:throughputstats", - "selfLink": "https://localhost/mgmt/tm/sys/performance/throughput/stats?options=detail&ver=13.1.0", + "selfLink": "https://localhost/mgmt/tm/sys/performance/throughput/stats?options=detail&ver=14.1.0", "entries": { "https://localhost/mgmt/tm/sys/performance/throughput/Client%20Bits%20In/stats": { "nestedStats": { @@ -1327,6 +1437,339 @@ module.exports = { } }` }, + { + endpoint: '/mgmt/tm/sys/performance/connections/stats?options=detail', + response: `{ + "kind": "tm:sys:performance:connections:connectionsstats", + "selfLink": "https://localhost/mgmt/tm/sys/performance/connections/stats?options=detail&ver=15.1.6.1", + "entries": { + "https://localhost/mgmt/tm/sys/performance/connections/Blade%201/stats": { + "nestedStats": { + "entries": { + "Active Connections per Blade": { + "description": "Blade 1" + }, + "Average": { + "description": "0" + }, + "Current": { + "description": "0" + }, + "Max(since 2022_07_08T20:28:51Z)": { + "description": "0" + } + } + } + }, + "https://localhost/mgmt/tm/sys/performance/connections/Blade%202/stats": { + "nestedStats": { + "entries": { + "Active Connections per Blade": { + "description": "Blade 2" + }, + "Average": { + "description": "0" + }, + "Current": { + "description": "0" + }, + "Max(since 2022_07_08T20:28:51Z)": { + "description": "0" + } + } + } + }, + "https://localhost/mgmt/tm/sys/performance/connections/Client/stats": { + "nestedStats": { + "entries": { + "Active Connections": { + "description": "Client" + }, + "Average": { + "description": "0" + }, + "Current": { + "description": "0" + }, + "Max(since 2022_07_08T20:28:51Z)": { + "description": "0" + } + } + } + }, + "https://localhost/mgmt/tm/sys/performance/connections/Client%20Accepts/stats": { + "nestedStats": { + "entries": { + "Average": { + "description": "0" + }, + "Current": { + "description": "0" + }, + "Max(since 2022_07_08T20:28:51Z)": { + "description": "1" + }, + "New TCP Accepts/Connects": { + "description": "Client Accepts" + } + } + } + }, + "https://localhost/mgmt/tm/sys/performance/connections/Client%20Connections/stats": { + "nestedStats": { + "entries": { + "Average": { + "description": "0" + }, + "Current": { + "description": "0" + }, + "Max(since 2022_07_08T20:28:51Z)": { + "description": "0" + }, + "Total New Connections": { + "description": "Client Connections" + } + } + } + }, + "https://localhost/mgmt/tm/sys/performance/connections/Client%20Connects/stats": { + "nestedStats": { + "entries": { + "Average": { + "description": "0" + }, + "Current": { + "description": "0" + }, + "Max(since 2022_07_08T20:28:51Z)": { + "description": "0" + }, + "New Connections": { + "description": "Client Connects" + } + } + } + }, + "https://localhost/mgmt/tm/sys/performance/connections/Connections/stats": { + "nestedStats": { + "entries": { + "Active Connections": { + "description": "Connections" + }, + "Average": { + "description": "0" + }, + "Current": { + "description": "0" + }, + "Max(since 2022_07_08T20:28:51Z)": { + "description": "0" + } + } + } + }, + "https://localhost/mgmt/tm/sys/performance/connections/HTTP%20Requests/stats": { + "nestedStats": { + "entries": { + "Average": { + "description": "0" + }, + "Current": { + "description": "0" + }, + "HTTP Requests": { + "description": "HTTP Requests" + }, + "Max(since 2022_07_08T20:28:51Z)": { + "description": "0" + } + } + } + }, + "https://localhost/mgmt/tm/sys/performance/connections/PVA%20Client/stats": { + "nestedStats": { + "entries": { + "Average": { + "description": "0" + }, + "Current": { + "description": "0" + }, + "Max(since 2022_07_08T20:28:51Z)": { + "description": "0" + }, + "New PVA Connections": { + "description": "PVA Client" + } + } + } + }, + "https://localhost/mgmt/tm/sys/performance/connections/PVA%20Server/stats": { + "nestedStats": { + "entries": { + "Average": { + "description": "0" + }, + "Current": { + "description": "0" + }, + "Max(since 2022_07_08T20:28:51Z)": { + "description": "0" + }, + "New PVA Connections": { + "description": "PVA Server" + } + } + } + }, + "https://localhost/mgmt/tm/sys/performance/connections/SSL%20Client/stats": { + "nestedStats": { + "entries": { + "Active SSL Connections": { + "description": "SSL Client" + }, + "Average": { + "description": "0" + }, + "Current": { + "description": "0" + }, + "Max(since 2022_07_08T20:28:51Z)": { + "description": "0" + } + } + } + }, + "https://localhost/mgmt/tm/sys/performance/connections/SSL%20Client/stats": { + "nestedStats": { + "entries": { + "Average": { + "description": "0" + }, + "Current": { + "description": "0" + }, + "Max(since 2022_07_08T20:28:51Z)": { + "description": "0" + }, + "New ClientSSL Profile Connections": { + "description": "SSL Client" + } + } + } + }, + "https://localhost/mgmt/tm/sys/performance/connections/SSL%20Server/stats": { + "nestedStats": { + "entries": { + "Active SSL Connections": { + "description": "SSL Server" + }, + "Average": { + "description": "0" + }, + "Current": { + "description": "0" + }, + "Max(since 2022_07_08T20:28:51Z)": { + "description": "0" + } + } + } + }, + "https://localhost/mgmt/tm/sys/performance/connections/SSL%20Server/stats": { + "nestedStats": { + "entries": { + "Average": { + "description": "0" + }, + "Current": { + "description": "0" + }, + "Max(since 2022_07_08T20:28:51Z)": { + "description": "0" + }, + "New ClientSSL Profile Connections": { + "description": "SSL Server" + } + } + } + }, + "https://localhost/mgmt/tm/sys/performance/connections/Server/stats": { + "nestedStats": { + "entries": { + "Active Connections": { + "description": "Server" + }, + "Average": { + "description": "0" + }, + "Current": { + "description": "0" + }, + "Max(since 2022_07_08T20:28:51Z)": { + "description": "0" + } + } + } + }, + "https://localhost/mgmt/tm/sys/performance/connections/Server%20Connections/stats": { + "nestedStats": { + "entries": { + "Average": { + "description": "0" + }, + "Current": { + "description": "0" + }, + "Max(since 2022_07_08T20:28:51Z)": { + "description": "0" + }, + "Total New Connections": { + "description": "Server Connections" + } + } + } + }, + "https://localhost/mgmt/tm/sys/performance/connections/Server%20Connects/stats": { + "nestedStats": { + "entries": { + "Average": { + "description": "0" + }, + "Current": { + "description": "0" + }, + "Max(since 2022_07_08T20:28:51Z)": { + "description": "0" + }, + "New Connections": { + "description": "Server Connects" + } + } + } + }, + "https://localhost/mgmt/tm/sys/performance/connections/Server%20Connects/stats": { + "nestedStats": { + "entries": { + "Average": { + "description": "0" + }, + "Current": { + "description": "0" + }, + "Max(since 2022_07_08T20:28:51Z)": { + "description": "0" + }, + "New TCP Accepts/Connects": { + "description": "Server Connects" + } + } + } + } + } + }` + }, { endpoint: '/mgmt/tm/live-update/asm-attack-signatures/installations', response: { @@ -1780,6 +2223,7 @@ module.exports = { networkInterfaces: {}, provisioning: {}, throughputPerformance: {}, + connectionsPerformance: {}, diskLatency: {}, diskStorage: {} } @@ -1965,10 +2409,17 @@ module.exports = { } }, { - endpoint: '/mgmt/tm/sys/performance/throughput?options=detail', + endpoint: '/mgmt/tm/sys/performance/throughput/stats?options=detail', response: { kind: 'tm:sys:performance:throughput:throughputstats', - selfLink: 'https://localhost/mgmt/tm/sys/performance/throughput?options=detail&ver=14.1.0' + selfLink: 'https://localhost/mgmt/tm/sys/performance/throughput/stats?options=detail&ver=14.1.0' + } + }, + { + endpoint: '/mgmt/tm/sys/performance/connections/stats?options=detail', + response: { + kind: 'tm:sys:performance:connections:connectionsstats', + selfLink: 'https://localhost/mgmt/tm/sys/performance/connections/stats?options=detail&ver=14.1.0' } } ] @@ -2021,6 +2472,7 @@ module.exports = { networkInterfaces: {}, provisioning: {}, throughputPerformance: {}, + connectionsPerformance: {}, diskLatency: {}, diskStorage: {} } @@ -2203,10 +2655,17 @@ module.exports = { } }, { - endpoint: '/mgmt/tm/sys/performance/throughput?options=detail', + endpoint: '/mgmt/tm/sys/performance/throughput/stats?options=detail', response: { kind: 'tm:sys:performance:throughput:throughputstats', - selfLink: 'https://localhost/mgmt/tm/sys/performance/throughput?options=detail&ver=14.1.0' + selfLink: 'https://localhost/mgmt/tm/sys/performance/throughput/stats?options=detail&ver=14.1.0' + } + }, + { + endpoint: '/mgmt/tm/sys/performance/connections/stats?options=detail', + response: { + kind: 'tm:sys:performance:connections:connectionsstats', + selfLink: 'https://localhost/mgmt/tm/sys/performance/connections/stats?options=detail&ver=14.1.0' } } ] diff --git a/test/unit/declarationTests.js b/test/unit/declarationTests.js index 581d3c01..eb6a9077 100644 --- a/test/unit/declarationTests.js +++ b/test/unit/declarationTests.js @@ -4775,7 +4775,25 @@ describe('Declarations', () => { service: 'my-great-application', metricPrefix: ['f5', 'bigip'], convertBooleansToMetrics: true, - customTags: [{ name: 'deploymentName', value: 'best version' }] + customTags: [{ name: 'deploymentName', value: 'best version' }], + customOpts: [ + { name: 'keepAlive', value: true }, + { name: 'keepAliveMsecs', value: 0 }, + { name: 'maxSockets', value: 0 }, + { name: 'maxFreeSockets', value: 0 }, + { name: 'anotherFeatureOption', value: 'test' } + ], + proxy: { + host: 'localhost', + protocol: 'http', + port: 80, + allowSelfSignedCert: true, + enableHostConnectivityCheck: false, + username: 'username', + passphrase: { + cipherText: 'proxyPassphrase' + } + } }, { type: 'DataDog', @@ -4785,7 +4803,27 @@ describe('Declarations', () => { service: 'my-great-application', metricPrefix: ['f5', 'bigip'], convertBooleansToMetrics: true, - customTags: [{ name: 'deploymentName', value: 'best version' }] + customTags: [{ name: 'deploymentName', value: 'best version' }], + customOpts: [ + { name: 'keepAlive', value: true }, + { name: 'keepAliveMsecs', value: 0 }, + { name: 'maxSockets', value: 0 }, + { name: 'maxFreeSockets', value: 0 }, + { name: 'anotherFeatureOption', value: 'test' } + ], + proxy: { + host: 'localhost', + protocol: 'http', + port: 80, + allowSelfSignedCert: true, + enableHostConnectivityCheck: false, + username: 'username', + passphrase: { + class: 'Secret', + protected: 'SecureVault', + cipherText: '$M$proxyPassphrase' + } + } } )); @@ -4796,7 +4834,13 @@ describe('Declarations', () => { apiKey: 'test', index: 'index', metricPrefix: ['f5', 'bigip'], - customTags: [{ name: 'deploymentName', value: 'best version' }] + customTags: [{ name: 'deploymentName', value: 'best version' }], + customOpts: [ + { name: 'keepAlive', value: true }, + { name: 'keepAliveMsecs', value: 0 }, + { name: 'maxSockets', value: 0 }, + { name: 'maxFreeSockets', value: 0 } + ] }, [ { property: 'apiKey', requiredTests: true, stringLengthTests: true }, @@ -4828,6 +4872,48 @@ describe('Declarations', () => { arrayLengthTests: { minItems: 1 } + }, + { + property: 'customOpts', + ignoreOther: true, + arrayLengthTests: { + minItems: 1 + } + }, + { + property: 'customOpts.0.value', + ignoreOther: true, + booleanTests: true + }, + { + property: 'customOpts.1.value', + ignoreOther: true, + numberRangeTests: { + minimum: 0 + }, + valueTests: { + invalid: 'invalid' + } + }, + { + property: 'customOpts.2.value', + ignoreOther: true, + numberRangeTests: { + minimum: 0 + }, + valueTests: { + invalid: 'invalid' + } + }, + { + property: 'customOpts.3.value', + ignoreOther: true, + numberRangeTests: { + minimum: 0 + }, + valueTests: { + invalid: 'invalid' + } } ] ); @@ -4986,7 +5072,8 @@ describe('Declarations', () => { port: 443, path: '/', method: 'POST', - outputMode: 'processed' + outputMode: 'processed', + compressionType: 'none' } )); @@ -5018,7 +5105,8 @@ describe('Declarations', () => { class: 'Secret', protected: 'SecureVault' }, - outputMode: 'processed' + outputMode: 'processed', + compressionType: 'none' } )); @@ -5072,7 +5160,15 @@ describe('Declarations', () => { expression: '{ message: @ }' } ], - outputMode: 'raw' + outputMode: 'raw', + compressionType: 'gzip', + customOpts: [ + { name: 'keepAlive', value: true }, + { name: 'keepAliveMsecs', value: 0 }, + { name: 'maxSockets', value: 0 }, + { name: 'maxFreeSockets', value: 0 }, + { name: 'anotherFeatureOption', value: 'test' } + ] }, { type: 'Generic_HTTP', @@ -5133,7 +5229,15 @@ describe('Declarations', () => { expression: '{ message: @ }' } ], - outputMode: 'raw' + outputMode: 'raw', + compressionType: 'gzip', + customOpts: [ + { name: 'keepAlive', value: true }, + { name: 'keepAliveMsecs', value: 0 }, + { name: 'maxSockets', value: 0 }, + { name: 'maxFreeSockets', value: 0 }, + { name: 'anotherFeatureOption', value: 'test' } + ] } )); @@ -5154,7 +5258,13 @@ describe('Declarations', () => { privateKey: { cipherText: 'myKey' }, - type: 'Generic_HTTP' + type: 'Generic_HTTP', + customOpts: [ + { name: 'keepAlive', value: true }, + { name: 'keepAliveMsecs', value: 0 }, + { name: 'maxSockets', value: 0 }, + { name: 'maxFreeSockets', value: 0 } + ] }, [ 'actions.0.expression', @@ -5209,6 +5319,56 @@ describe('Declarations', () => { subTitle: 'allow empty array', valid: [] } + }, + { + property: 'compressionType', + ignoreOther: true, + enumTests: { + allowed: ['none', 'gzip'], + notAllowed: ['compressionType'] + } + }, + { + property: 'customOpts', + ignoreOther: true, + arrayLengthTests: { + minItems: 1 + } + }, + { + property: 'customOpts.0.value', + ignoreOther: true, + booleanTests: true + }, + { + property: 'customOpts.1.value', + ignoreOther: true, + numberRangeTests: { + minimum: 0 + }, + valueTests: { + invalid: 'invalid' + } + }, + { + property: 'customOpts.2.value', + ignoreOther: true, + numberRangeTests: { + minimum: 0 + }, + valueTests: { + invalid: 'invalid' + } + }, + { + property: 'customOpts.3.value', + ignoreOther: true, + numberRangeTests: { + minimum: 0 + }, + valueTests: { + invalid: 'invalid' + } } ], { stringLengthTests: true } @@ -6147,7 +6307,9 @@ describe('Declarations', () => { type: 'OpenTelemetry_Exporter', host: 'host', port: 55681, - convertBooleansToMetrics: false + convertBooleansToMetrics: false, + exporter: 'protobuf', + protocol: 'http' } )); @@ -6156,7 +6318,7 @@ describe('Declarations', () => { type: 'OpenTelemetry_Exporter', host: 'host', port: 55681, - path: '/v1/metrics', + metricsPath: '/v1/metrics', headers: [ { name: 'headerName', @@ -6169,14 +6331,16 @@ describe('Declarations', () => { type: 'OpenTelemetry_Exporter', host: 'host', port: 55681, - path: '/v1/metrics', + metricsPath: '/v1/metrics', headers: [ { name: 'headerName', value: 'headerValue' } ], - convertBooleansToMetrics: true + convertBooleansToMetrics: true, + exporter: 'protobuf', + protocol: 'http' } )); @@ -6189,11 +6353,58 @@ describe('Declarations', () => { }, [ 'host', - 'metricsPath' + 'metricsPath', + { + property: 'exporter', + enumTests: { + allowed: ['grpc', 'json', 'protobuf'], + notAllowed: ['', 'not-grpc', 'not-json', 'not-protobuf'] + }, + ignoreOther: true + }, + { + property: 'protocol', + enumTests: { + allowed: ['http', 'https'], + notAllowed: ['', 'not-http', 'not-https'] + }, + ignoreOther: true + } ], { stringLengthTests: true } ); + schemaValidationUtil.generateSchemaBasicTests( + basicSchemaTestsValidator, + { + host: 'host', + type: 'OpenTelemetry_Exporter', + port: 80, + protocol: 'https', + exporter: 'json', + clientCertificate: { + cipherText: '$M$myCert', + class: 'Secret', + protected: 'SecureVault' + }, + privateKey: { + cipherText: '$M$myKey', + class: 'Secret', + protected: 'SecureVault' + }, + rootCertificate: { + cipherText: '$M$myCA', + class: 'Secret', + protected: 'SecureVault' + } + }, + [ + { property: 'rootCertificate', optionalPropTests: true }, + { property: 'privateKey', dependenciesTests: 'clientCertificate', ignoreOther: true }, + { property: 'clientCertificate', dependenciesTests: 'privateKey', ignoreOther: true } + ] + ); + it('should fail when invalid \'convertBooleansToMetrics\' value specified', () => assert.isRejected( validateMinimal({ type: 'OpenTelemetry_Exporter', @@ -6203,6 +6414,228 @@ describe('Declarations', () => { }), /convertBooleansToMetrics\/type.*should be boolean/ )); + + it('should fail when protocol === https and privateKey and clientCertificate specified', () => assert.isRejected( + validateMinimal({ + type: 'OpenTelemetry_Exporter', + host: 'host', + port: 55681, + exporter: 'json', + protocol: 'http', + clientCertificate: { + cipherText: '$M$myCert', + class: 'Secret', + protected: 'SecureVault' + }, + privateKey: { + cipherText: '$M$myKey', + class: 'Secret', + protected: 'SecureVault' + }, + rootCertificate: { + cipherText: '$M$myCA', + class: 'Secret', + protected: 'SecureVault' + } + }), + /should NOT be valid/ + )); + + describe('gRPC exporter', () => { + it('should pass minimal declaration', () => validateMinimal( + { + type: 'OpenTelemetry_Exporter', + host: 'host', + port: 55681, + exporter: 'grpc' + }, + { + type: 'OpenTelemetry_Exporter', + host: 'host', + port: 55681, + convertBooleansToMetrics: false, + exporter: 'grpc', + useSSL: true + } + )); + + it('should allow full declaration', () => validateFull( + { + type: 'OpenTelemetry_Exporter', + host: 'host', + port: 55681, + headers: [ + { + name: 'headerName', + value: 'headerValue' + } + ], + convertBooleansToMetrics: true, + exporter: 'grpc', + useSSL: true, + privateKey: { + cipherText: 'myKey' + }, + clientCertificate: { + cipherText: 'myCert' + }, + rootCertificate: { + cipherText: 'myCA' + } + }, + { + type: 'OpenTelemetry_Exporter', + host: 'host', + port: 55681, + headers: [ + { + name: 'headerName', + value: 'headerValue' + } + ], + convertBooleansToMetrics: true, + exporter: 'grpc', + useSSL: true, + clientCertificate: { + cipherText: '$M$myCert', + class: 'Secret', + protected: 'SecureVault' + }, + privateKey: { + cipherText: '$M$myKey', + class: 'Secret', + protected: 'SecureVault' + }, + rootCertificate: { + cipherText: '$M$myCA', + class: 'Secret', + protected: 'SecureVault' + } + } + )); + + schemaValidationUtil.generateSchemaBasicTests( + basicSchemaTestsValidator, + { + host: 'host', + type: 'OpenTelemetry_Exporter', + port: 80, + exporter: 'grpc', + useSSL: true, + clientCertificate: { + cipherText: '$M$myCert', + class: 'Secret', + protected: 'SecureVault' + }, + privateKey: { + cipherText: '$M$myKey', + class: 'Secret', + protected: 'SecureVault' + }, + rootCertificate: { + cipherText: '$M$myCA', + class: 'Secret', + protected: 'SecureVault' + } + }, + [ + { property: 'rootCertificate', optionalPropTests: true }, + { property: 'privateKey', dependenciesTests: 'clientCertificate', ignoreOther: true }, + { property: 'clientCertificate', dependenciesTests: 'privateKey', ignoreOther: true } + ] + ); + + it('should fail when gRPC options used for non-gRPC exporter', () => assert.isRejected( + validateMinimal({ + type: 'OpenTelemetry_Exporter', + host: 'host', + port: 55681, + exporter: 'json', + useSSL: true, + clientCertificate: { + cipherText: '$M$myCert', + class: 'Secret', + protected: 'SecureVault' + }, + privateKey: { + cipherText: '$M$myKey', + class: 'Secret', + protected: 'SecureVault' + } + }), + /should NOT be valid/ + )); + + it('should fail when non-gRPC options used for gRPC exporter (metricPath)', () => assert.isRejected( + validateMinimal({ + type: 'OpenTelemetry_Exporter', + host: 'host', + port: 55681, + exporter: 'grpc', + useSSL: true, + clientCertificate: { + cipherText: '$M$myCert', + class: 'Secret', + protected: 'SecureVault' + }, + privateKey: { + cipherText: '$M$myKey', + class: 'Secret', + protected: 'SecureVault' + }, + metricsPath: '/v1/metrics' + }), + /should NOT be valid/ + )); + + it('should fail when non-gRPC options used for gRPC exporter (protocol)', () => assert.isRejected( + validateMinimal({ + type: 'OpenTelemetry_Exporter', + host: 'host', + port: 55681, + exporter: 'grpc', + useSSL: true, + clientCertificate: { + cipherText: '$M$myCert', + class: 'Secret', + protected: 'SecureVault' + }, + privateKey: { + cipherText: '$M$myKey', + class: 'Secret', + protected: 'SecureVault' + }, + protocol: 'https' + }), + /should NOT be valid/ + )); + + it('should fail when useSSL === false and privateKey and clientCertificate specified', () => assert.isRejected( + validateMinimal({ + type: 'OpenTelemetry_Exporter', + host: 'host', + port: 55681, + exporter: 'grpc', + useSSL: false, + clientCertificate: { + cipherText: '$M$myCert', + class: 'Secret', + protected: 'SecureVault' + }, + privateKey: { + cipherText: '$M$myKey', + class: 'Secret', + protected: 'SecureVault' + }, + rootCertificate: { + cipherText: '$M$myCA', + class: 'Secret', + protected: 'SecureVault' + } + }), + /should NOT be valid/ + )); + }); }); }); @@ -6459,7 +6892,8 @@ describe('Declarations', () => { host: '1.2.3.4', protocol: 'http', port: 8080, - outputMode: 'processed' + outputMode: 'processed', + compressionType: 'none' } }; }); diff --git a/test/unit/pullConsumers/data/prometheusPullConsumerTestsData.js b/test/unit/pullConsumers/data/prometheusPullConsumerTestsData.js index cc2364b1..68b7917c 100644 --- a/test/unit/pullConsumers/data/prometheusPullConsumerTestsData.js +++ b/test/unit/pullConsumers/data/prometheusPullConsumerTestsData.js @@ -1204,6 +1204,226 @@ f5_system_throughputPerformance_sslTps_current 7100 # TYPE f5_system_throughputPerformance_sslTps_max gauge f5_system_throughputPerformance_sslTps_max 7700 +# HELP f5_system_connectionsPerformance_blade1_average system_connectionsPerformance_blade1_average +# TYPE f5_system_connectionsPerformance_blade1_average gauge +f5_system_connectionsPerformance_blade1_average 0 + +# HELP f5_system_connectionsPerformance_blade1_current system_connectionsPerformance_blade1_current +# TYPE f5_system_connectionsPerformance_blade1_current gauge +f5_system_connectionsPerformance_blade1_current 0 + +# HELP f5_system_connectionsPerformance_blade1_max system_connectionsPerformance_blade1_max +# TYPE f5_system_connectionsPerformance_blade1_max gauge +f5_system_connectionsPerformance_blade1_max 0 + +# HELP f5_system_connectionsPerformance_blade2_average system_connectionsPerformance_blade2_average +# TYPE f5_system_connectionsPerformance_blade2_average gauge +f5_system_connectionsPerformance_blade2_average 0 + +# HELP f5_system_connectionsPerformance_blade2_current system_connectionsPerformance_blade2_current +# TYPE f5_system_connectionsPerformance_blade2_current gauge +f5_system_connectionsPerformance_blade2_current 0 + +# HELP f5_system_connectionsPerformance_blade2_max system_connectionsPerformance_blade2_max +# TYPE f5_system_connectionsPerformance_blade2_max gauge +f5_system_connectionsPerformance_blade2_max 0 + +# HELP f5_system_connectionsPerformance_client_average system_connectionsPerformance_client_average +# TYPE f5_system_connectionsPerformance_client_average gauge +f5_system_connectionsPerformance_client_average 0 + +# HELP f5_system_connectionsPerformance_client_current system_connectionsPerformance_client_current +# TYPE f5_system_connectionsPerformance_client_current gauge +f5_system_connectionsPerformance_client_current 0 + +# HELP f5_system_connectionsPerformance_client_max system_connectionsPerformance_client_max +# TYPE f5_system_connectionsPerformance_client_max gauge +f5_system_connectionsPerformance_client_max 0 + +# HELP f5_system_connectionsPerformance_clientAccepts_average system_connectionsPerformance_clientAccepts_average +# TYPE f5_system_connectionsPerformance_clientAccepts_average gauge +f5_system_connectionsPerformance_clientAccepts_average 0 + +# HELP f5_system_connectionsPerformance_clientAccepts_current system_connectionsPerformance_clientAccepts_current +# TYPE f5_system_connectionsPerformance_clientAccepts_current gauge +f5_system_connectionsPerformance_clientAccepts_current 0 + +# HELP f5_system_connectionsPerformance_clientAccepts_max system_connectionsPerformance_clientAccepts_max +# TYPE f5_system_connectionsPerformance_clientAccepts_max gauge +f5_system_connectionsPerformance_clientAccepts_max 0 + +# HELP f5_system_connectionsPerformance_clientConnections_average system_connectionsPerformance_clientConnections_average +# TYPE f5_system_connectionsPerformance_clientConnections_average gauge +f5_system_connectionsPerformance_clientConnections_average 0 + +# HELP f5_system_connectionsPerformance_clientConnections_current system_connectionsPerformance_clientConnections_current +# TYPE f5_system_connectionsPerformance_clientConnections_current gauge +f5_system_connectionsPerformance_clientConnections_current 0 + +# HELP f5_system_connectionsPerformance_clientConnections_max system_connectionsPerformance_clientConnections_max +# TYPE f5_system_connectionsPerformance_clientConnections_max gauge +f5_system_connectionsPerformance_clientConnections_max 0 + +# HELP f5_system_connectionsPerformance_clientConnects_average system_connectionsPerformance_clientConnects_average +# TYPE f5_system_connectionsPerformance_clientConnects_average gauge +f5_system_connectionsPerformance_clientConnects_average 0 + +# HELP f5_system_connectionsPerformance_clientConnects_current system_connectionsPerformance_clientConnects_current +# TYPE f5_system_connectionsPerformance_clientConnects_current gauge +f5_system_connectionsPerformance_clientConnects_current 0 + +# HELP f5_system_connectionsPerformance_clientConnects_max system_connectionsPerformance_clientConnects_max +# TYPE f5_system_connectionsPerformance_clientConnects_max gauge +f5_system_connectionsPerformance_clientConnects_max 0 + +# HELP f5_system_connectionsPerformance_connections_average system_connectionsPerformance_connections_average +# TYPE f5_system_connectionsPerformance_connections_average gauge +f5_system_connectionsPerformance_connections_average 0 + +# HELP f5_system_connectionsPerformance_connections_current system_connectionsPerformance_connections_current +# TYPE f5_system_connectionsPerformance_connections_current gauge +f5_system_connectionsPerformance_connections_current 0 + +# HELP f5_system_connectionsPerformance_connections_max system_connectionsPerformance_connections_max +# TYPE f5_system_connectionsPerformance_connections_max gauge +f5_system_connectionsPerformance_connections_max 0 + +# HELP f5_system_connectionsPerformance_httpRequests_average system_connectionsPerformance_httpRequests_average +# TYPE f5_system_connectionsPerformance_httpRequests_average gauge +f5_system_connectionsPerformance_httpRequests_average 0 + +# HELP f5_system_connectionsPerformance_httpRequests_current system_connectionsPerformance_httpRequests_current +# TYPE f5_system_connectionsPerformance_httpRequests_current gauge +f5_system_connectionsPerformance_httpRequests_current 0 + +# HELP f5_system_connectionsPerformance_httpRequests_max system_connectionsPerformance_httpRequests_max +# TYPE f5_system_connectionsPerformance_httpRequests_max gauge +f5_system_connectionsPerformance_httpRequests_max 0 + +# HELP f5_system_connectionsPerformance_pvaClient_average system_connectionsPerformance_pvaClient_average +# TYPE f5_system_connectionsPerformance_pvaClient_average gauge +f5_system_connectionsPerformance_pvaClient_average 0 + +# HELP f5_system_connectionsPerformance_pvaClient_current system_connectionsPerformance_pvaClient_current +# TYPE f5_system_connectionsPerformance_pvaClient_current gauge +f5_system_connectionsPerformance_pvaClient_current 0 + +# HELP f5_system_connectionsPerformance_pvaClient_max system_connectionsPerformance_pvaClient_max +# TYPE f5_system_connectionsPerformance_pvaClient_max gauge +f5_system_connectionsPerformance_pvaClient_max 0 + +# HELP f5_system_connectionsPerformance_pvaServer_average system_connectionsPerformance_pvaServer_average +# TYPE f5_system_connectionsPerformance_pvaServer_average gauge +f5_system_connectionsPerformance_pvaServer_average 0 + +# HELP f5_system_connectionsPerformance_pvaServer_current system_connectionsPerformance_pvaServer_current +# TYPE f5_system_connectionsPerformance_pvaServer_current gauge +f5_system_connectionsPerformance_pvaServer_current 0 + +# HELP f5_system_connectionsPerformance_pvaServer_max system_connectionsPerformance_pvaServer_max +# TYPE f5_system_connectionsPerformance_pvaServer_max gauge +f5_system_connectionsPerformance_pvaServer_max 0 + +# HELP f5_system_connectionsPerformance_server_average system_connectionsPerformance_server_average +# TYPE f5_system_connectionsPerformance_server_average gauge +f5_system_connectionsPerformance_server_average 0 + +# HELP f5_system_connectionsPerformance_server_current system_connectionsPerformance_server_current +# TYPE f5_system_connectionsPerformance_server_current gauge +f5_system_connectionsPerformance_server_current 0 + +# HELP f5_system_connectionsPerformance_server_max system_connectionsPerformance_server_max +# TYPE f5_system_connectionsPerformance_server_max gauge +f5_system_connectionsPerformance_server_max 0 + +# HELP f5_system_connectionsPerformance_serverConnections_average system_connectionsPerformance_serverConnections_average +# TYPE f5_system_connectionsPerformance_serverConnections_average gauge +f5_system_connectionsPerformance_serverConnections_average 0 + +# HELP f5_system_connectionsPerformance_serverConnections_current system_connectionsPerformance_serverConnections_current +# TYPE f5_system_connectionsPerformance_serverConnections_current gauge +f5_system_connectionsPerformance_serverConnections_current 0 + +# HELP f5_system_connectionsPerformance_serverConnections_max system_connectionsPerformance_serverConnections_max +# TYPE f5_system_connectionsPerformance_serverConnections_max gauge +f5_system_connectionsPerformance_serverConnections_max 0 + +# HELP f5_system_connectionsPerformance_activeSslClientConnections_average system_connectionsPerformance_activeSslClientConnections_average +# TYPE f5_system_connectionsPerformance_activeSslClientConnections_average gauge +f5_system_connectionsPerformance_activeSslClientConnections_average 0 + +# HELP f5_system_connectionsPerformance_activeSslClientConnections_current system_connectionsPerformance_activeSslClientConnections_current +# TYPE f5_system_connectionsPerformance_activeSslClientConnections_current gauge +f5_system_connectionsPerformance_activeSslClientConnections_current 0 + +# HELP f5_system_connectionsPerformance_activeSslClientConnections_max system_connectionsPerformance_activeSslClientConnections_max +# TYPE f5_system_connectionsPerformance_activeSslClientConnections_max gauge +f5_system_connectionsPerformance_activeSslClientConnections_max 0 + +# HELP f5_system_connectionsPerformance_newSslClientConnections_average system_connectionsPerformance_newSslClientConnections_average +# TYPE f5_system_connectionsPerformance_newSslClientConnections_average gauge +f5_system_connectionsPerformance_newSslClientConnections_average 0 + +# HELP f5_system_connectionsPerformance_newSslClientConnections_current system_connectionsPerformance_newSslClientConnections_current +# TYPE f5_system_connectionsPerformance_newSslClientConnections_current gauge +f5_system_connectionsPerformance_newSslClientConnections_current 0 + +# HELP f5_system_connectionsPerformance_newSslClientConnections_max system_connectionsPerformance_newSslClientConnections_max +# TYPE f5_system_connectionsPerformance_newSslClientConnections_max gauge +f5_system_connectionsPerformance_newSslClientConnections_max 0 + +# HELP f5_system_connectionsPerformance_activeSslServerConnections_average system_connectionsPerformance_activeSslServerConnections_average +# TYPE f5_system_connectionsPerformance_activeSslServerConnections_average gauge +f5_system_connectionsPerformance_activeSslServerConnections_average 0 + +# HELP f5_system_connectionsPerformance_activeSslServerConnections_current system_connectionsPerformance_activeSslServerConnections_current +# TYPE f5_system_connectionsPerformance_activeSslServerConnections_current gauge +f5_system_connectionsPerformance_activeSslServerConnections_current 0 + +# HELP f5_system_connectionsPerformance_activeSslServerConnections_max system_connectionsPerformance_activeSslServerConnections_max +# TYPE f5_system_connectionsPerformance_activeSslServerConnections_max gauge +f5_system_connectionsPerformance_activeSslServerConnections_max 0 + +# HELP f5_system_connectionsPerformance_newSslServerConnections_average system_connectionsPerformance_newSslServerConnections_average +# TYPE f5_system_connectionsPerformance_newSslServerConnections_average gauge +f5_system_connectionsPerformance_newSslServerConnections_average 0 + +# HELP f5_system_connectionsPerformance_newSslServerConnections_current system_connectionsPerformance_newSslServerConnections_current +# TYPE f5_system_connectionsPerformance_newSslServerConnections_current gauge +f5_system_connectionsPerformance_newSslServerConnections_current 0 + +# HELP f5_system_connectionsPerformance_newSslServerConnections_max system_connectionsPerformance_newSslServerConnections_max +# TYPE f5_system_connectionsPerformance_newSslServerConnections_max gauge +f5_system_connectionsPerformance_newSslServerConnections_max 0 + +# HELP f5_system_connectionsPerformance_serverNewConnections_average system_connectionsPerformance_serverNewConnections_average +# TYPE f5_system_connectionsPerformance_serverNewConnections_average gauge +f5_system_connectionsPerformance_serverNewConnections_average 0 + +# HELP f5_system_connectionsPerformance_serverNewConnections_current system_connectionsPerformance_serverNewConnections_current +# TYPE f5_system_connectionsPerformance_serverNewConnections_current gauge +f5_system_connectionsPerformance_serverNewConnections_current 0 + +# HELP f5_system_connectionsPerformance_serverNewConnections_max system_connectionsPerformance_serverNewConnections_max +# TYPE f5_system_connectionsPerformance_serverNewConnections_max gauge +f5_system_connectionsPerformance_serverNewConnections_max 0 + +# HELP f5_system_connectionsPerformance_serverNewTcpConnections_average system_connectionsPerformance_serverNewTcpConnections_average +# TYPE f5_system_connectionsPerformance_serverNewTcpConnections_average gauge +f5_system_connectionsPerformance_serverNewTcpConnections_average 0 + +# HELP f5_system_connectionsPerformance_serverNewTcpConnections_current system_connectionsPerformance_serverNewTcpConnections_current +# TYPE f5_system_connectionsPerformance_serverNewTcpConnections_current gauge +f5_system_connectionsPerformance_serverNewTcpConnections_current 0 + +# HELP f5_system_connectionsPerformance_serverNewTcpConnections_max system_connectionsPerformance_serverNewTcpConnections_max +# TYPE f5_system_connectionsPerformance_serverNewTcpConnections_max gauge +f5_system_connectionsPerformance_serverNewTcpConnections_max 0 + +# HELP f5_system_asmAttackSignatures_ff8080817a3a4908017a3a490958000e_createDateTime system_asmAttackSignatures_ff8080817a3a4908017a3a490958000e_createDateTime +# TYPE f5_system_asmAttackSignatures_ff8080817a3a4908017a3a490958000e_createDateTime gauge +f5_system_asmAttackSignatures_ff8080817a3a4908017a3a490958000e_createDateTime 1563279691000 + # HELP f5_telemetryServiceInfo_pollingInterval telemetryServiceInfo_pollingInterval # TYPE f5_telemetryServiceInfo_pollingInterval gauge f5_telemetryServiceInfo_pollingInterval 0 diff --git a/test/unit/pullConsumers/data/system_poller_datasets.json b/test/unit/pullConsumers/data/system_poller_datasets.json index 8b5ad47e..82b65fd1 100644 --- a/test/unit/pullConsumers/data/system_poller_datasets.json +++ b/test/unit/pullConsumers/data/system_poller_datasets.json @@ -392,6 +392,123 @@ "name": "sslTps" } }, + "connectionsPerformance": { + "blade1": { + "average": 0, + "current": 0, + "max": 0, + "name": "blade1" + }, + "blade2": { + "average": 0, + "current": 0, + "max": 0, + "name": "blade2" + }, + "client": { + "average": 0, + "current": 0, + "max": 0, + "name": "client" + }, + "clientAccepts": { + "average": 0, + "current": 0, + "max": 0, + "name": "clientAccepts" + }, + "clientConnections": { + "average": 0, + "current": 0, + "max": 0, + "name": "clientConnections" + }, + "clientConnects": { + "average": 0, + "current": 0, + "max": 0, + "name": "clientConnects" + }, + "connections": { + "average": 0, + "current": 0, + "max": 0, + "name": "connections" + }, + "httpRequests": { + "average": 0, + "current": 0, + "max": 0, + "name": "httpRequests" + }, + "pvaClient": { + "average": 0, + "current": 0, + "max": 0, + "name": "pvaClient" + }, + "pvaServer": { + "average": 0, + "current": 0, + "max": 0, + "name": "pvaServer" + }, + "server": { + "average": 0, + "current": 0, + "max": 0, + "name": "server" + }, + "serverConnections": { + "average": 0, + "current": 0, + "max": 0, + "name": "serverConnections" + }, + "activeSslClientConnections": { + "average": 0, + "current": 0, + "max": 0, + "name": "activeSslClientConnections" + }, + "newSslClientConnections": { + "average": 0, + "current": 0, + "max": 0, + "name": "newSslClientConnections" + }, + "activeSslServerConnections": { + "average": 0, + "current": 0, + "max": 0, + "name": "activeSslServerConnections" + }, + "newSslServerConnections": { + "average": 0, + "current": 0, + "max": 0, + "name": "newSslServerConnections" + }, + "serverNewConnections": { + "average": 0, + "current": 0, + "max": 0, + "name": "serverNewConnections" + }, + "serverNewTcpConnections": { + "average": 0, + "current": 0, + "max": 0, + "name": "serverNewTcpConnections" + } + }, + "asmAttackSignatures": { + "ff8080817a3a4908017a3a490958000e": { + "filename": "ASM-AttackSignatures_20190716_122131.im", + "createDateTime": 1563279691000, + "name": "ff8080817a3a4908017a3a490958000e" + } + }, "asmState": "Policies Consistent", "afmState": "quiescent", "lastAfmDeploy": "2020-03-12T16:27:58.000Z", @@ -1071,6 +1188,123 @@ "name": "sslTps" } }, + "connectionsPerformance": { + "blade1": { + "average": 0, + "current": 0, + "max": 0, + "name": "blade1" + }, + "blade2": { + "average": 0, + "current": 0, + "max": 0, + "name": "blade2" + }, + "client": { + "average": 0, + "current": 0, + "max": 0, + "name": "client" + }, + "clientAccepts": { + "average": 0, + "current": 0, + "max": 0, + "name": "clientAccepts" + }, + "clientConnections": { + "average": 0, + "current": 0, + "max": 0, + "name": "clientConnections" + }, + "clientConnects": { + "average": 0, + "current": 0, + "max": 0, + "name": "clientConnects" + }, + "connections": { + "average": 0, + "current": 0, + "max": 0, + "name": "connections" + }, + "httpRequests": { + "average": 0, + "current": 0, + "max": 0, + "name": "httpRequests" + }, + "pvaClient": { + "average": 0, + "current": 0, + "max": 0, + "name": "pvaClient" + }, + "pvaServer": { + "average": 0, + "current": 0, + "max": 0, + "name": "pvaServer" + }, + "server": { + "average": 0, + "current": 0, + "max": 0, + "name": "server" + }, + "serverConnections": { + "average": 0, + "current": 0, + "max": 0, + "name": "serverConnections" + }, + "activeSslClientConnections": { + "average": 0, + "current": 0, + "max": 0, + "name": "activeSslClientConnections" + }, + "newSslClientConnections": { + "average": 0, + "current": 0, + "max": 0, + "name": "newSslClientConnections" + }, + "activeSslServerConnections": { + "average": 0, + "current": 0, + "max": 0, + "name": "activeSslServerConnections" + }, + "newSslServerConnections": { + "average": 0, + "current": 0, + "max": 0, + "name": "newSslServerConnections" + }, + "serverNewConnections": { + "average": 0, + "current": 0, + "max": 0, + "name": "serverNewConnections" + }, + "serverNewTcpConnections": { + "average": 0, + "current": 0, + "max": 0, + "name": "serverNewTcpConnections" + } + }, + "asmAttackSignatures": { + "ff8080817a3a4908017a3a490958000e": { + "filename": "ASM-AttackSignatures_20190716_122131.im", + "createDateTime": 1563279691000, + "name": "ff8080817a3a4908017a3a490958000e" + } + }, "asmState": "Policies Consistent", "afmState": "quiescent", "lastAfmDeploy": "2020-03-12T16:27:58.000Z", diff --git a/test/unit/shared/schemaValidation/propertyTests/booleanTests.js b/test/unit/shared/schemaValidation/propertyTests/booleanTests.js new file mode 100644 index 00000000..e42765e3 --- /dev/null +++ b/test/unit/shared/schemaValidation/propertyTests/booleanTests.js @@ -0,0 +1,79 @@ +/* + * Copyright 2022. F5 Networks, Inc. See End User License Agreement ("EULA") for + * license terms. Notwithstanding anything to the contrary in the EULA, Licensee + * may copy and modify this software product for its internal business purposes. + * Further, Licensee may upload, publish and distribute the modified version of + * the software product on devcentral.f5.com. + */ + +'use strict'; + +const chai = require('chai'); +const chaiAsPromised = require('chai-as-promised'); +const lodash = require('lodash'); + +const utils = require('../utils'); + +chai.use(chaiAsPromised); +const assert = chai.assert; + +module.exports = { + /** + * @returns {string} name to use to configure tests + */ + name() { + return 'booleanTests'; + }, + + /** + * Generate tests to verify property' value + * + * @param {PropertyTestCtx} ctx - context + * @param {BooleanTestConf} testConf - test config + * + * @returns {void} once tests were generated + */ + tests(ctx, testConf) { + const subTitle = utils.testControls.fmtSubTitle(testConf); + utils.testControls.getSubTestDescribe(testConf)(`"boolean" type tests${subTitle}`, () => { + [true, false].forEach((val) => it(`should allow to set "${val}" as value`, () => { + const testDecl = lodash.cloneDeep(ctx.declaration); + lodash.set(testDecl, ctx.property, val); + return ctx.validator(testDecl) + .then((validated) => { + if (testConf.checkValue) { + assert.deepStrictEqual( + lodash.get(validated, ctx.property), + val, + `should allow to set "${val}" to property "${ctx.propFullName}"` + ); + } + }); + })); + }); + }, + + /** + * Process and normalize test options + * + * @param {BooleanTestConf} options + * + * @returns {BooleanTestConf} processed and normalized options + */ + options(options) { + if (!lodash.isUndefined(options)) { + if (lodash.isBoolean(options)) { + options = { checkValue: options }; + } + } + return options; + } +}; + +/** + * @typedef BooleanTestConf + * @type {BaseTestConf} + * @property {boolean} checkValue - verify value + * + * Config to test boolean type + */ diff --git a/test/unit/shared/util.js b/test/unit/shared/util.js index 28ddd19e..ac3c2df8 100644 --- a/test/unit/shared/util.js +++ b/test/unit/shared/util.js @@ -79,7 +79,8 @@ function MockTracer() { this.write = sinon.stub(); } -module.exports = { +// eslint-disable-next-line no-multi-assign +const _module = module.exports = { MockRestOperation, MockLogger, MockTracer, @@ -281,6 +282,40 @@ module.exports = { return (url) => new urllib.URL(url); }()), + /** + * Cartesian product of input iterables + * + * @returns {Array} + */ + product() { + const results = []; + // ignore empty arrays + const args = Array.from(arguments); + // even 1 empty array results in empty output + if (args.length === 0 || !args.every((arr) => arr.length)) { + return results; + } + // list of indexes for each input iterable + const indexes = args.map(() => 0); + const firstArrLength = args[0].length; + // when index for first array exceed its length then we are done + while (indexes[0] < firstArrLength) { + // create 'product' based on index for each iterable + results.push(indexes.map((idx, argIdx) => args[argIdx][idx])); + // calculate next index for each iterable + for (let i = indexes.length - 1; i >= 0; i -= 1) { + indexes[i] += 1; + if (indexes[i] < args[i].length) { + break; + } + if (i !== 0) { // ignore index for first iterable - see 'while' above + indexes[i] = 0; + } + } + } + return results; + }, + /** * Load modules from folder (or file) * @@ -333,5 +368,20 @@ module.exports = { */ sleep(sleepTime) { return new Promise((resolve) => { setTimeout(resolve, sleepTime); }); + }, + + /** + * Sort all arrays in data + * + * @param {any} data + */ + sortAllArrays(data) { + if (typeof data === 'object') { + if (Array.isArray(data)) { + data.sort(); + } + Object.keys(data).forEach((k) => _module.sortAllArrays(data[k])); + } + return data; } }; diff --git a/test/unit/utils/miscTests.js b/test/unit/utils/miscTests.js index a2bfd9de..3f82b45c 100644 --- a/test/unit/utils/miscTests.js +++ b/test/unit/utils/miscTests.js @@ -1977,4 +1977,264 @@ describe('Misc Util', () => { ); }); }); + + describe('Chunks', () => { + describe('constructor', () => { + it('should not throw error on missing maxChunkSize value', () => { + let chunks = new util.Chunks(); + assert.deepStrictEqual(chunks.maxChunkSize, Number.MAX_SAFE_INTEGER, 'should set default value for maxChunkSize'); + + chunks = new util.Chunks({}); + assert.deepStrictEqual(chunks.maxChunkSize, Number.MAX_SAFE_INTEGER, 'should set default value for maxChunkSize'); + }); + + it('should throw error on invalid maxChunkSize value', () => { + assert.throws( + () => new util.Chunks({ maxChunkSize: 'not a number' }), + '\'maxChunkSize\' should be > 0, got \'not a number\' (string)', + 'should throw error on invalid maxChunkSize value' + ); + assert.throws( + () => new util.Chunks({ maxChunkSize: -1 }), + '\'maxChunkSize\' should be > 0, got \'-1\' (number)', + 'should throw error on invalid maxChunkSize value' + ); + assert.throws( + () => new util.Chunks({ maxChunkSize: 0 }), + '\'maxChunkSize\' should be > 0, got \'0\' (number)', + 'should throw error on invalid maxChunkSize value' + ); + }); + + it('should use default serializer', () => { + const chunks = new util.Chunks(); + chunks.add([1, 2, 3]); + assert.deepStrictEqual(chunks.getAll(), [['[1,2,3]']], 'should return expected data'); + }); + + it('should use non-default serializer', () => { + const chunks = new util.Chunks({ serializer: (data) => JSON.stringify(data, null, 4) }); + chunks.add([1, 2, 3]); + assert.deepStrictEqual(chunks.getAll(), [['[\n 1,\n 2,\n 3\n]']], 'should return expected data'); + }); + + it('should use "this" as context for serializer', () => { + const chunks = new util.Chunks({ + serializer(data) { + assert.instanceOf(this, util.Chunks); + assert.deepStrictEqual(this.currentChunkSize, 0, 'should return expected value'); + return JSON.stringify(data, null, 4); + } + }); + chunks.add('test'); + }); + }); + + describe('.add()', () => { + it('should add data', () => { + const chunks = new util.Chunks({ maxChunkSize: 10 }); + assert.deepStrictEqual(chunks.getAll(), [], 'should return expected value'); + assert.deepStrictEqual(chunks.totalChunks, 0, 'should return expected value'); + assert.deepStrictEqual(chunks.totalSize, 0, 'should return expected value'); + + chunks.add('test1test'); + assert.deepStrictEqual(chunks.getAll(), [['test1test']], 'should return expected data'); + assert.deepStrictEqual(chunks.totalChunks, 1, 'should return expected value'); + assert.deepStrictEqual(chunks.totalSize, 9, 'should return expected value'); + + chunks.add('test2test'); + assert.deepStrictEqual(chunks.getAll(), [['test1test'], ['test2test']], 'should return expected data'); + assert.deepStrictEqual(chunks.totalChunks, 2, 'should return expected value'); + assert.deepStrictEqual(chunks.totalSize, 18, 'should return expected value'); + + chunks.add('t'); + assert.deepStrictEqual(chunks.getAll(), [['test1test'], ['test2test', 't']], 'should return expected data'); + assert.deepStrictEqual(chunks.totalChunks, 2, 'should return expected value'); + assert.deepStrictEqual(chunks.totalSize, 19, 'should return expected value'); + + chunks.add('est'); + assert.deepStrictEqual(chunks.getAll(), [['test1test'], ['test2test', 't'], ['est']], 'should return expected data'); + assert.deepStrictEqual(chunks.totalChunks, 3, 'should return expected value'); + assert.deepStrictEqual(chunks.totalSize, 22, 'should return expected value'); + + chunks.add('3test'); + assert.deepStrictEqual(chunks.getAll(), [['test1test'], ['test2test', 't'], ['est', '3test']], 'should return expected data'); + assert.deepStrictEqual(chunks.totalChunks, 3, 'should return expected value'); + assert.deepStrictEqual(chunks.totalSize, 27, 'should return expected value'); + }); + + it('should convert data to JSON', () => { + const chunks = new util.Chunks({ maxChunkSize: 10 }); + assert.deepStrictEqual(chunks.getAll(), [], 'should return expected value'); + assert.deepStrictEqual(chunks.totalChunks, 0, 'should return expected value'); + assert.deepStrictEqual(chunks.totalSize, 0, 'should return expected value'); + + chunks.add(10); + assert.deepStrictEqual(chunks.getAll(), [['10']], 'should return expected data'); + assert.deepStrictEqual(chunks.totalChunks, 1, 'should return expected value'); + assert.deepStrictEqual(chunks.totalSize, 2, 'should return expected value'); + + chunks.add({ test: 10 }); + assert.deepStrictEqual(chunks.getAll(), [['10'], ['{"test":10}']], 'should return expected data'); + assert.deepStrictEqual(chunks.totalChunks, 2, 'should return expected value'); + assert.deepStrictEqual(chunks.totalSize, 13, 'should return expected value'); + }); + + it('should add data when serializer returns Array', () => { + const chunks = new util.Chunks({ + maxChunkSize: 10, + serializer: (data) => [data.slice(0, 2), data.slice(2)] + }); + chunks.add('message'); + assert.deepStrictEqual(chunks.getAll(), [['me', 'ssage']], 'should return expected data'); + assert.deepStrictEqual(chunks.totalChunks, 1, 'should return expected value'); + assert.deepStrictEqual(chunks.totalSize, 7, 'should return expected value'); + + chunks.add('messageB'); + assert.deepStrictEqual(chunks.getAll(), [['me', 'ssage', 'me'], ['ssageB']], 'should return expected data'); + assert.deepStrictEqual(chunks.totalChunks, 2, 'should return expected value'); + assert.deepStrictEqual(chunks.totalSize, 15, 'should return expected value'); + }); + }); + + describe('.clear()', () => { + it('should reset state', () => { + const chunks = new util.Chunks({ maxChunkSize: 10 }); + assert.deepStrictEqual(chunks.totalSize, 0, 'should return expected value'); + + chunks.add('test1test'); + chunks.add('test2test'); + assert.deepStrictEqual(chunks.totalChunks, 2, 'should return expected value'); + assert.deepStrictEqual(chunks.totalSize, 18, 'should return expected value'); + assert.deepStrictEqual(chunks.getAll(), [['test1test'], ['test2test']], 'should return expected data'); + + chunks.clear(); + assert.deepStrictEqual(chunks.totalChunks, 0, 'should return expected value'); + assert.deepStrictEqual(chunks.totalSize, 0, 'should return expected value'); + assert.deepStrictEqual(chunks.getAll(), [], 'should return expected data'); + + chunks.add('test3test'); + chunks.add('test4test'); + assert.deepStrictEqual(chunks.totalChunks, 2, 'should return expected value'); + assert.deepStrictEqual(chunks.totalSize, 18, 'should return expected value'); + assert.deepStrictEqual(chunks.getAll(), [['test3test'], ['test4test']], 'should return expected data'); + }); + }); + + describe('.currentChunkSize', () => { + it('should return size of current chunk', () => { + const chunks = new util.Chunks({ maxChunkSize: 10 }); + assert.deepStrictEqual(chunks.currentChunkSize, 0, 'should return expected value'); + + chunks.add('test1test'); + assert.deepStrictEqual(chunks.currentChunkSize, 9, 'should return expected value'); + assert.deepStrictEqual(chunks.totalChunks, 1, 'should return expected value'); + + chunks.add('t'); + assert.deepStrictEqual(chunks.currentChunkSize, 10, 'should return expected value'); + assert.deepStrictEqual(chunks.totalChunks, 1, 'should return expected value'); + + chunks.add('e'); + assert.deepStrictEqual(chunks.currentChunkSize, 1, 'should return expected value'); + assert.deepStrictEqual(chunks.totalChunks, 2, 'should return expected value'); + }); + }); + + describe('.getAll()', () => { + it('should return all data', () => { + const chunks = new util.Chunks({ maxChunkSize: 10 }); + assert.deepStrictEqual(chunks.getAll(), [], 'should return expected value'); + + chunks.add('test1test'); + chunks.add('test2test'); + assert.deepStrictEqual(chunks.getAll(), [['test1test'], ['test2test']], 'should return expected data'); + }); + }); + + describe('.maxChunkSize', () => { + it('should be read-only property', () => { + const chunks = new util.Chunks(); + const origin = chunks.maxChunkSize; + assert.throws(() => { + chunks.maxChunkSize = 10; + }); + assert.isTrue(origin === chunks.maxChunkSize, 'should not be able to update read-only property'); + }); + + it('should set property value', () => { + let chunks = new util.Chunks(); + assert.deepStrictEqual(chunks.maxChunkSize, Number.MAX_SAFE_INTEGER, 'should set default value for maxChunkSize'); + + chunks = new util.Chunks({ maxChunkSize: 10 }); + assert.deepStrictEqual(chunks.maxChunkSize, 10, 'should set provided value for maxChunkSize'); + }); + }); + + describe('.serializer', () => { + it('should be read-only property', () => { + const chunks = new util.Chunks(); + const origin = chunks.serializer; + assert.throws(() => { + chunks.serializer = 10; + }); + assert.isTrue(origin === chunks.serializer, 'should not be able to update read-only property'); + }); + + it('should use default serializer', () => { + const chunks = new util.Chunks(); + assert.deepStrictEqual(chunks.serializer([1, 2, 3]), '[1,2,3]', 'should return expected data'); + }); + + it('should use non-default serializer', () => { + const chunks = new util.Chunks({ serializer: (data) => JSON.stringify(data, null, 4) }); + assert.deepStrictEqual(chunks.serializer([1, 2, 3]), '[\n 1,\n 2,\n 3\n]', 'should return expected data'); + }); + }); + + describe('.totalChunks', () => { + it('should be read-only property', () => { + const chunks = new util.Chunks(); + const origin = chunks.totalChunks; + assert.throws(() => { + chunks.totalChunks = 10; + }); + assert.isTrue(origin === chunks.totalChunks, 'should not be able to update read-only property'); + }); + + it('should return number of chunks', () => { + const chunks = new util.Chunks({ maxChunkSize: 10 }); + assert.deepStrictEqual(chunks.totalChunks, 0, 'should return expected value'); + + chunks.add('test'); + assert.deepStrictEqual(chunks.totalChunks, 1, 'should return expected value'); + chunks.add('test'); + assert.deepStrictEqual(chunks.totalChunks, 1, 'should return expected value'); + chunks.add('test'); + assert.deepStrictEqual(chunks.totalChunks, 2, 'should return expected value'); + }); + }); + + describe('.totalSize', () => { + it('should be read-only property', () => { + const chunks = new util.Chunks(); + const origin = chunks.totalSize; + assert.throws(() => { + chunks.totalSize = 10; + }); + assert.isTrue(origin === chunks.totalSize, 'should not be able to update read-only property'); + }); + + it('should return number of bytes', () => { + const chunks = new util.Chunks({ maxChunkSize: 10 }); + assert.deepStrictEqual(chunks.totalSize, 0, 'should return expected value'); + + chunks.add('test'); + assert.deepStrictEqual(chunks.totalSize, 4, 'should return expected value'); + chunks.add('test'); + assert.deepStrictEqual(chunks.totalSize, 8, 'should return expected value'); + chunks.add('test'); + assert.deepStrictEqual(chunks.totalSize, 12, 'should return expected value'); + }); + }); + }); }); diff --git a/test/unit/utils/normalizeTests.js b/test/unit/utils/normalizeTests.js index 6b3bcca8..1fd9d3c6 100644 --- a/test/unit/utils/normalizeTests.js +++ b/test/unit/utils/normalizeTests.js @@ -1261,11 +1261,11 @@ describe('Normalize Util', () => { }); }); - describe('.throughputPerformancePreProcessing()', () => { + describe('.sysPerformancePreProcessing()', () => { it('should convert array to mapping and set appropriate keys according to description', () => { - const actual = normalizeUtil.throughputPerformancePreProcessing({ + const actual = normalizeUtil.sysPerformancePreProcessing({ data: { - statsArray: [ + In: [ { val: 20, 'Throughput(packets)': 'stats' }, { val: 30, 'Throughput(bits)': 'stats' }, { val: 40 }, @@ -1278,11 +1278,11 @@ describe('Normalize Util', () => { } }); assert.deepStrictEqual(actual, { - 'statsArray Packets': { val: 20, 'Throughput(packets)': 'stats' }, - 'statsArray Bits': { val: 30, 'Throughput(bits)': 'stats' }, - statsArray: { val: 40 }, - statsArray1: { val: 50 }, - 'statsArray Bits1': { val: 60, 'Throughput(bits)': 'stats' }, + In: { val: 40 }, + In0: { val: 50 }, + 'In Packets': { val: 20, 'Throughput(packets)': 'stats' }, + 'In Bits': { val: 30, 'Throughput(bits)': 'stats' }, + 'In Bits0': { val: 60, 'Throughput(bits)': 'stats' }, stats: { val: 40 }, statsArray0: { val: 70 }, 'statsArray Bits0': { val: 80 } @@ -1290,9 +1290,9 @@ describe('Normalize Util', () => { }); }); - describe('.throughputPerformancePostProcessing()', () => { + describe('.sysPerformancePostProcessing()', () => { it('should convert keys to camelCase and include only average, current and max properties', () => { - const actual = normalizeUtil.throughputPerformancePostProcessing({ + const actual = normalizeUtil.sysPerformancePostProcessing({ data: { 'statsArray Packets': { average: '100', diff --git a/test/unit/utils/promiseTests.js b/test/unit/utils/promiseTests.js index 15f30c51..9bce00b9 100644 --- a/test/unit/utils/promiseTests.js +++ b/test/unit/utils/promiseTests.js @@ -13,6 +13,7 @@ const moduleCache = require('../shared/restoreCache')(); const chai = require('chai'); const chaiAsPromised = require('chai-as-promised'); +const sinon = require('sinon'); const promiseUtil = require('../../../src/lib/utils/promise'); @@ -26,7 +27,14 @@ describe('Promise Util', () => { moduleCache.restore(); }); + afterEach(() => { + sinon.restore(); + }); + describe('.allSettled()', () => { + it('should reject when no array passed (no args)', () => assert.isRejected(promiseUtil.allSettled(), /is not an array/)); + it('should reject when no array passed (wrong type)', () => assert.isRejected(promiseUtil.allSettled('not a func'), /is not an array/)); + it('should resolve when all settled', () => assert.becomes( promiseUtil.allSettled([ Promise.resolve(1), @@ -104,50 +112,310 @@ describe('Promise Util', () => { }); }); - describe('.retry()', () => { - it('should retry at least once', () => { + describe('.loopForEach()', () => { + it('should reject when no array passed (no args)', () => assert.isRejected(promiseUtil.loopForEach(), /is not an array/)); + it('should reject when no array passed (wrong type)', () => assert.isRejected(promiseUtil.loopForEach('not a func'), /is not an array/)); + it('should reject when no function passed (no args)', () => assert.isRejected(promiseUtil.loopForEach([]), /is not a function/)); + it('should reject when no function passed (wrong type)', () => assert.isRejected(promiseUtil.loopForEach([], 'not a func'), /is not a function/)); + + it('should resolve without calling a callback when array has no elements', () => { + const spy = sinon.spy(); + return promiseUtil.loopForEach([], spy) + .then(() => { + assert.isFalse(spy.called, 'should not call a callback'); + }); + }); + + it('should iterate over all elements (sync)', () => { + const stack = []; + const array = [1, 2, 3, 4, 5]; + return promiseUtil.loopForEach(array, (elem, idx, arr, breakCb) => { + assert.isFunction(breakCb, 'should be function'); + assert.isNumber(idx, 'should be number'); + assert.deepStrictEqual(arr, [1, 2, 3, 4, 5], 'should be the same array'); + assert.isTrue(arr === array, 'should be the same array'); + + stack.push([elem, idx]); + }) + .then(() => { + assert.deepStrictEqual( + stack, + [ + [1, 0], + [2, 1], + [3, 2], + [4, 3], + [5, 4] + ], + 'should pass expected arguments to callback' + ); + }); + }); + + it('should iterate over all elements (async)', () => { + const stack = []; + const array = [1, 2, 3, 4, 5]; + return promiseUtil.loopForEach(array, (elem, idx, arr, breakCb) => Promise.resolve() + .then(() => { + assert.isFunction(breakCb, 'should be function'); + assert.isNumber(idx, 'should be number'); + assert.deepStrictEqual(arr, [1, 2, 3, 4, 5], 'should be the same array'); + assert.isTrue(arr === array, 'should be the same array'); + + stack.push([elem, idx]); + })) + .then(() => { + assert.deepStrictEqual( + stack, + [ + [1, 0], + [2, 1], + [3, 2], + [4, 3], + [5, 4] + ], + 'should pass expected arguments to callback' + ); + }); + }); + + it('should stop loop via callback', () => { + const stack = []; + const array = [1, 2, 3, 4, 5]; + return promiseUtil.loopForEach(array, (elem, idx, arr, breakCb) => Promise.resolve() + .then(() => { + stack.push([elem, idx]); + if (stack.length === 2) { + breakCb(); + } + })) + .then(() => { + assert.deepStrictEqual( + stack, + [ + [1, 0], + [2, 1] + ], + 'should pass expected arguments to callback' + ); + }); + }); + + it('should stop loop when rejected (async)', () => { + const stack = []; + const array = [1, 2, 3, 4, 5]; + return assert.isRejected(promiseUtil.loopForEach(array, (elem, idx) => Promise.resolve() + .then(() => { + stack.push([elem, idx]); + if (stack.length === 2) { + return Promise.reject(new Error('expected error')); + } + return Promise.resolve(); + })), 'expected error') + .then(() => { + assert.deepStrictEqual( + stack, + [ + [1, 0], + [2, 1] + ], + 'should pass expected arguments to callback' + ); + }); + }); + + it('should stop loop when failed (sync)', () => { + const stack = []; + const array = [1, 2, 3, 4, 5]; + return assert.isRejected(promiseUtil.loopForEach(array, (elem, idx) => { + stack.push([elem, idx]); + if (stack.length === 2) { + throw new Error('expected error'); + } + }), 'expected error') + .then(() => { + assert.deepStrictEqual( + stack, + [ + [1, 0], + [2, 1] + ], + 'should pass expected arguments to callback' + ); + }); + }); + }); + + describe('.loopUntil()', () => { + it('should reject when no function passed (no args)', () => assert.isRejected(promiseUtil.loopUntil(), /is not a function/)); + it('should reject when no function passed (wrong type)', () => assert.isRejected(promiseUtil.loopUntil('not a func'), /is not a function/)); + + it('should call target func at least once (sync)', () => { let tries = 0; - // first call + re-try = 2 - const expectedTries = 2; + return promiseUtil.loopUntil((breakCb) => { + tries += 1; + breakCb(); + return tries; + }) + .then((ret) => { + assert.strictEqual(ret, 1, 'should return expected data'); + assert.strictEqual(tries, 1, 'should call target function at least once'); + }); + }); - const promiseFunc = () => { + it('should call target func at least once (async)', () => { + let tries = 0; + return promiseUtil.loopUntil((breakCb) => Promise.resolve() + .then(() => { + tries += 1; + breakCb(); + return tries; + })) + .then((ret) => { + assert.strictEqual(ret, 1, 'should return expected data'); + assert.strictEqual(tries, 1, 'should call target function at least once'); + }); + }); + + it('should return value from last successful call', () => { + let tries = 0; + return promiseUtil.loopUntil((breakCb) => { tries += 1; - return Promise.reject(new Error('expected error')); - }; + if (tries === 3) { + breakCb(); + assert.isTrue(breakCb.called, 'should stop the loop'); + } else { + assert.isFalse(breakCb.called, 'should not stop the loop yet'); + } + return tries; + }) + .then((ret) => { + assert.strictEqual(ret, 3, 'should return expected data'); + assert.strictEqual(tries, 3, 'should call target function 3 times'); + }); + }); - return promiseUtil.retry(promiseFunc) + it('should stop loop when target func failed (sync)', () => { + let tries = 0; + return assert.isRejected(promiseUtil.loopUntil(() => { + tries += 1; + if (tries === 3) { + throw new Error('expected error'); + } + return tries; + }), /expected error/) + .then(() => { + assert.strictEqual(tries, 3, 'should call target function 3 times'); + }); + }); + + it('should stop loop when target func rejected (async)', () => { + let tries = 0; + return assert.isRejected(promiseUtil.loopUntil(() => { + tries += 1; + if (tries === 3) { + return Promise.reject(new Error('expected error')); + } + return tries; + }), /expected error/) + .then(() => { + assert.strictEqual(tries, 3, 'should call target function 3 times'); + }); + }); + + it('should be able to call func at least 101 times', () => { + let tries = 0; + return promiseUtil.loopUntil((breakCb) => { + tries += 1; + if (tries === 101) { + breakCb(); + } + return tries; + }) + .then((ret) => { + assert.strictEqual(ret, 101, 'should return expected data'); + assert.strictEqual(tries, 101, 'should call target function 100 times'); + }); + }); + }); + + describe('.retry()', () => { + it('should reject when no function passed (no args)', () => assert.isRejected(promiseUtil.retry(), /is not a function/)); + it('should reject when no function passed (wrong type)', () => assert.isRejected(promiseUtil.retry('not a func'), /is not a function/)); + + it('should report number of tries via options', () => { + const opts = { maxTries: 3 }; + return promiseUtil.retry(() => Promise.reject(new Error('expected error')), opts) .catch((err) => { - // in total should be 2 tries - 1 call + 1 re-try - assert.strictEqual(tries, expectedTries); + assert.strictEqual(opts.tries, 3, 'expected 3 attempts'); assert.ok(/expected error/.test(err)); }); }); - it('should retry rejected promise', () => { + it('should run target func at least once (default options)', () => { let tries = 0; - const maxTries = 3; - const expectedTries = maxTries + 1; - const promiseFunc = () => { tries += 1; return Promise.reject(new Error('expected error')); }; - return promiseUtil.retry(promiseFunc, { maxTries }) + return promiseUtil.retry(promiseFunc) .catch((err) => { - // in total should be 4 tries - 1 call + 3 re-try - assert.strictEqual(tries, expectedTries); + assert.strictEqual(tries, 1, 'expected 1 attempt only'); assert.ok(/expected error/.test(err)); }); }); + it('should run target func at least once (empty options)', () => { + const opts = {}; + return promiseUtil.retry(() => Promise.reject(new Error('expected error')), opts) + .catch((err) => { + assert.strictEqual(opts.tries, 1, 'expected 1 attempt only'); + assert.ok(/expected error/.test(err)); + }); + }); + + it('should retry rejected promise (async)', () => { + const opts = { maxTries: 3 }; + return promiseUtil.retry(() => Promise.reject(new Error('expected error')), opts) + .catch((err) => { + assert.strictEqual(opts.tries, 3, 'expected 3 attempts'); + assert.ok(/expected error/.test(err)); + }); + }); + + it('should retry failed func (sync)', () => { + const opts = { maxTries: 3 }; + return promiseUtil.retry(() => { throw new Error('expected error'); }, opts) + .catch((err) => { + assert.strictEqual(opts.tries, 3, 'expected 3 attempts'); + assert.ok(/expected error/.test(err)); + }); + }); + + it('should not retry fulfilled promise (async)', () => { + const opts = { maxTries: 3 }; + return promiseUtil.retry(() => Promise.resolve('success'), opts) + .then((ret) => { + assert.strictEqual(ret, 'success', 'should return expected data'); + assert.strictEqual(opts.tries, 1, 'expected 1 attempt only'); + }); + }); + + it('should not retry when target func not failed (sync)', () => { + const opts = { maxTries: 3 }; + return promiseUtil.retry(() => 'success', opts) + .then((ret) => { + assert.strictEqual(ret, 'success', 'should return expected data'); + assert.strictEqual(opts.tries, 1, 'expected 1 attempt only'); + }); + }); + it('should call callback on retry', () => { let callbackFlag = false; let callbackErrFlag = false; let tries = 0; let cbTries = 0; - const maxTries = 3; - const expectedTries = maxTries + 1; const callback = (err) => { cbTries += 1; @@ -160,11 +428,11 @@ describe('Promise Util', () => { return Promise.reject(new Error('expected error')); }; - return promiseUtil.retry(promiseFunc, { maxTries, callback }) + return promiseUtil.retry(promiseFunc, { maxTries: 3, callback }) .catch((err) => { - // in total should be 4 tries - 1 call + 3 re-try - assert.strictEqual(tries, expectedTries); - assert.strictEqual(cbTries, maxTries); + assert.strictEqual(tries, 3, 'expected 3 attempts'); + // less than 'expectedTries' because 'maxTries' check goes first + assert.strictEqual(cbTries, 2, 'expected 2 attempts for callback too'); assert.ok(/expected error/.test(err)); assert.ok(callbackErrFlag); assert.ok(callbackFlag); @@ -173,7 +441,6 @@ describe('Promise Util', () => { it('should stop retry on success', () => { let tries = 0; - const maxTries = 3; const expectedTries = 2; const promiseFunc = () => { @@ -184,71 +451,110 @@ describe('Promise Util', () => { return Promise.reject(new Error('expected error')); }; - return promiseUtil.retry(promiseFunc, { maxTries }) + return promiseUtil.retry(promiseFunc, { maxTries: 3 }) .then((data) => { - assert.strictEqual(tries, expectedTries); + assert.strictEqual(tries, expectedTries, 'expected 2 attempts only'); assert.strictEqual(data, 'success'); }); }); it('should retry with delay', () => { const timestamps = []; - const maxTries = 3; - const expectedTries = maxTries + 1; - const delay = 200; - const promiseFunc = () => { timestamps.push(Date.now()); return Promise.reject(new Error('expected error')); }; - return promiseUtil.retry(promiseFunc, { maxTries, delay }) + return promiseUtil.retry(promiseFunc, { maxTries: 3, delay: 60 }) .catch((err) => { assert.ok(/expected error/.test(err)); - assert.lengthOf(timestamps, expectedTries, `Expected ${expectedTries} timestamps, got ${timestamps.length}`); + assert.lengthOf(timestamps, 3, 'Expected 3 records only'); for (let i = 1; i < timestamps.length; i += 1) { const actualDelay = timestamps[i] - timestamps[i - 1]; // sometimes it is less than expected - assert.ok( - actualDelay >= delay * 0.9, - `Actual delay (${actualDelay}) is less than expected (${delay})` - ); + assert.approximately(actualDelay, 60, 10, 'should be close to expected delay - 60ms'); } }); }).timeout(2000); it('should retry first time without backoff', () => { const timestamps = []; - const maxTries = 3; - const expectedTries = maxTries + 1; - const delay = 200; - const backoff = 100; - const promiseFunc = () => { timestamps.push(Date.now()); return Promise.reject(new Error('expected error')); }; - return promiseUtil.retry(promiseFunc, { maxTries, delay, backoff }) + return promiseUtil.retry(promiseFunc, { maxTries: 3, delay: 60, backoff: 10 }) .catch((err) => { assert.ok(/expected error/.test(err)); - assert.lengthOf(timestamps, expectedTries, `Expected ${expectedTries} timestamps, got ${timestamps.length}`); + assert.lengthOf(timestamps, 3, 'Expected 3 records only'); for (let i = 1; i < timestamps.length; i += 1) { const actualDelay = timestamps[i] - timestamps[i - 1]; - let expectedDelay = delay; + let expectedDelay = 60; // first attempt should be without backoff factor if (i > 1) { /* eslint-disable no-restricted-properties */ - expectedDelay += backoff * Math.pow(2, i - 1); + expectedDelay += 10 * Math.pow(2, i - 1); } - assert.ok( - actualDelay >= expectedDelay * 0.9, - `Actual delay (${actualDelay}) is less than expected (${expectedDelay})` - ); + assert.approximately(actualDelay, expectedDelay, 20, 'should be close to expected delay'); } }); }).timeout(10000); + + it('should be able to retry func at least 101 times', () => { + const opts = { maxTries: 101 }; + return promiseUtil.retry(() => { throw new Error('expected error'); }, opts) + .catch((err) => { + assert.ok(/expected error/.test(err)); + assert.strictEqual(opts.tries, 101, 'should call target func 101 times'); + }); + }); + }); + + describe('.sleep()', () => { + it('should sleep for X ms.', () => { + const startTime = Date.now(); + const expectedDelay = 50; + return promiseUtil.sleep(expectedDelay) + .then(() => { + const actualDelay = Date.now() - startTime; + assert.approximately(actualDelay, expectedDelay, 10); + }); + }); + + it('should cancel promise', () => { + const promise = promiseUtil.sleep(50); + assert.isTrue(promise.cancel(new Error('expected error'))); + assert.isFalse(promise.cancel(new Error('expected error'))); + return assert.isRejected( + promise.then(() => Promise.reject(new Error('cancellation doesn\'t work'))), + 'expected error' + ); + }); + + it('should cancel promise after some delay', () => { + const promise = promiseUtil.sleep(50); + setTimeout(() => promise.cancel(), 10); + return assert.isRejected(promise, /canceled/); + }); + + it('should not be able to cancel once resolved', () => { + const promise = promiseUtil.sleep(50); + return promise.then(() => { + assert.isFalse(promise.cancel(new Error('expected error'))); + }); + }); + + it('should not be able to cancel once canceled', () => { + const promise = promiseUtil.sleep(50); + assert.isTrue(promise.cancel()); + return promise.catch((err) => err) + .then((err) => { + assert.isTrue(/canceled/.test(err)); + assert.isFalse(promise.cancel(new Error('expected error'))); + }); + }); }); }); diff --git a/test/unit/utils/tracerTests.js b/test/unit/utils/tracerTests.js index 671b6a97..877c96f2 100644 --- a/test/unit/utils/tracerTests.js +++ b/test/unit/utils/tracerTests.js @@ -392,7 +392,7 @@ describe('Tracer', () => { validateTracerData(writtenData); testAssert.includeMatch( coreStub.logger.messages.debug, - new RegExp(`Writing.*out of.*messages \\(limit = ${maxRecords} messages\\)`), + new RegExp(`Writing last ${maxRecords}.*out of.*messages \\(limit = ${maxRecords} messages\\)`), 'should write debug message' ); }); diff --git a/versions.json b/versions.json index 4e496992..49ce5361 100644 --- a/versions.json +++ b/versions.json @@ -1,7 +1,7 @@ { "versionMetaTimestamp": 1540928503, "latestVersion": { - "name": "1.30 (non-LTS)", + "name": "1.31 (non-LTS)", "url": "/products/extensions/f5-telemetry-streaming/latest/" }, "otherVersions": [