From 5659a8465a837ead82250c78f80c586f0470259f Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Tue, 1 Nov 2022 18:08:18 -0400 Subject: [PATCH 01/71] Cloudera template --- cloudera/CHANGELOG.md | 2 + cloudera/README.md | 55 +++++++++++ cloudera/assets/configuration/spec.yaml | 23 +++++ .../assets/dashboards/cloudera_overview.json | 0 cloudera/assets/service_checks.json | 1 + cloudera/datadog_checks/__init__.py | 4 + cloudera/datadog_checks/cloudera/__about__.py | 4 + cloudera/datadog_checks/cloudera/__init__.py | 7 ++ cloudera/datadog_checks/cloudera/check.py | 98 +++++++++++++++++++ .../cloudera/config_models/__init__.py | 25 +++++ .../cloudera/config_models/defaults.py | 31 ++++++ .../cloudera/config_models/instance.py | 52 ++++++++++ .../cloudera/config_models/shared.py | 49 ++++++++++ .../cloudera/config_models/validators.py | 13 +++ .../cloudera/data/conf.yaml.example | 44 +++++++++ cloudera/hatch.toml | 4 + cloudera/images/IMAGES_README.md | 46 +++++++++ cloudera/manifest.json | 50 ++++++++++ cloudera/metadata.csv | 1 + cloudera/pyproject.toml | 61 ++++++++++++ cloudera/setup.py | 79 +++++++++++++++ cloudera/tests/__init__.py | 3 + cloudera/tests/conftest.py | 14 +++ cloudera/tests/test_cloudera.py | 26 +++++ 24 files changed, 692 insertions(+) create mode 100644 cloudera/CHANGELOG.md create mode 100644 cloudera/README.md create mode 100644 cloudera/assets/configuration/spec.yaml create mode 100644 cloudera/assets/dashboards/cloudera_overview.json create mode 100644 cloudera/assets/service_checks.json create mode 100644 cloudera/datadog_checks/__init__.py create mode 100644 cloudera/datadog_checks/cloudera/__about__.py create mode 100644 cloudera/datadog_checks/cloudera/__init__.py create mode 100644 cloudera/datadog_checks/cloudera/check.py create mode 100644 cloudera/datadog_checks/cloudera/config_models/__init__.py create mode 100644 cloudera/datadog_checks/cloudera/config_models/defaults.py create mode 100644 cloudera/datadog_checks/cloudera/config_models/instance.py create mode 100644 cloudera/datadog_checks/cloudera/config_models/shared.py create mode 100644 cloudera/datadog_checks/cloudera/config_models/validators.py create mode 100644 cloudera/datadog_checks/cloudera/data/conf.yaml.example create mode 100644 cloudera/hatch.toml create mode 100644 cloudera/images/IMAGES_README.md create mode 100644 cloudera/manifest.json create mode 100644 cloudera/metadata.csv create mode 100644 cloudera/pyproject.toml create mode 100644 cloudera/setup.py create mode 100644 cloudera/tests/__init__.py create mode 100644 cloudera/tests/conftest.py create mode 100644 cloudera/tests/test_cloudera.py diff --git a/cloudera/CHANGELOG.md b/cloudera/CHANGELOG.md new file mode 100644 index 0000000000000..c4b87b8865990 --- /dev/null +++ b/cloudera/CHANGELOG.md @@ -0,0 +1,2 @@ +# CHANGELOG - Cloudera + diff --git a/cloudera/README.md b/cloudera/README.md new file mode 100644 index 0000000000000..2955789ba2adc --- /dev/null +++ b/cloudera/README.md @@ -0,0 +1,55 @@ +# Agent Check: Cloudera + +## Overview + +This check monitors [Cloudera][1] through the Datadog Agent. + +## Setup + +Follow the instructions below to install and configure this check for an Agent running on a host. For containerized environments, see the [Autodiscovery Integration Templates][3] for guidance on applying these instructions. + +### Installation + +The Cloudera check is included in the [Datadog Agent][2] package. +No additional installation is needed on your server. + +### Configuration + +1. Edit the `cloudera.d/conf.yaml` file, in the `conf.d/` folder at the root of your Agent's configuration directory to start collecting your cloudera performance data. See the [sample cloudera.d/conf.yaml][4] for all available configuration options. + +2. [Restart the Agent][5]. + +### Validation + +[Run the Agent's status subcommand][6] and look for `cloudera` under the Checks section. + +## Data Collected + +### Metrics + +See [metadata.csv][7] for a list of metrics provided by this integration. + +### Events + +The Cloudera integration does not include any events. + +### Service Checks + +The Cloudera integration does not include any service checks. + +See [service_checks.json][8] for a list of service checks provided by this integration. + +## Troubleshooting + +Need help? Contact [Datadog support][9]. + + +[1]: **LINK_TO_INTEGRATION_SITE** +[2]: https://app.datadoghq.com/account/settings#agent +[3]: https://docs.datadoghq.com/agent/kubernetes/integrations/ +[4]: https://github.com/DataDog/integrations-core/blob/master/cloudera/datadog_checks/cloudera/data/conf.yaml.example +[5]: https://docs.datadoghq.com/agent/guide/agent-commands/#start-stop-and-restart-the-agent +[6]: https://docs.datadoghq.com/agent/guide/agent-commands/#agent-status-and-information +[7]: https://github.com/DataDog/integrations-core/blob/master/cloudera/metadata.csv +[8]: https://github.com/DataDog/integrations-core/blob/master/cloudera/assets/service_checks.json +[9]: https://docs.datadoghq.com/help/ diff --git a/cloudera/assets/configuration/spec.yaml b/cloudera/assets/configuration/spec.yaml new file mode 100644 index 0000000000000..5d1fb9cae03db --- /dev/null +++ b/cloudera/assets/configuration/spec.yaml @@ -0,0 +1,23 @@ +name: Cloudera +files: +- name: cloudera.yaml + options: + - name: api_url + required: true + description: The Swagger API Url + value: + type: string + - name: username + description: The workload username + value: + type: string + - name: password + description: The workload password + value: + type: string + - template: init_config + options: + - template: init_config/default + - template: instances + options: + - template: instances/default diff --git a/cloudera/assets/dashboards/cloudera_overview.json b/cloudera/assets/dashboards/cloudera_overview.json new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/cloudera/assets/service_checks.json b/cloudera/assets/service_checks.json new file mode 100644 index 0000000000000..fe51488c7066f --- /dev/null +++ b/cloudera/assets/service_checks.json @@ -0,0 +1 @@ +[] diff --git a/cloudera/datadog_checks/__init__.py b/cloudera/datadog_checks/__init__.py new file mode 100644 index 0000000000000..28b0d67b919a6 --- /dev/null +++ b/cloudera/datadog_checks/__init__.py @@ -0,0 +1,4 @@ +# (C) Datadog, Inc. 2022-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) +__path__ = __import__('pkgutil').extend_path(__path__, __name__) # type: ignore diff --git a/cloudera/datadog_checks/cloudera/__about__.py b/cloudera/datadog_checks/cloudera/__about__.py new file mode 100644 index 0000000000000..439e81d6244c3 --- /dev/null +++ b/cloudera/datadog_checks/cloudera/__about__.py @@ -0,0 +1,4 @@ +# (C) Datadog, Inc. 2022-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) +__version__ = '0.0.1' diff --git a/cloudera/datadog_checks/cloudera/__init__.py b/cloudera/datadog_checks/cloudera/__init__.py new file mode 100644 index 0000000000000..f010bc66de56d --- /dev/null +++ b/cloudera/datadog_checks/cloudera/__init__.py @@ -0,0 +1,7 @@ +# (C) Datadog, Inc. 2022-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) +from .__about__ import __version__ +from .check import ClouderaCheck + +__all__ = ['__version__', 'ClouderaCheck'] diff --git a/cloudera/datadog_checks/cloudera/check.py b/cloudera/datadog_checks/cloudera/check.py new file mode 100644 index 0000000000000..ddb3be67ee0d5 --- /dev/null +++ b/cloudera/datadog_checks/cloudera/check.py @@ -0,0 +1,98 @@ +# (C) Datadog, Inc. 2022-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) +from typing import Any + +from datadog_checks.base import AgentCheck + +# from datadog_checks.base.utils.db import QueryManager +# from requests.exceptions import ConnectionError, HTTPError, InvalidURL, Timeout +# from json import JSONDecodeError + + +class ClouderaCheck(AgentCheck): + + # This will be the prefix of every metric and service check the integration sends + __NAMESPACE__ = 'cloudera' + + def __init__(self, name, init_config, instances): + super(ClouderaCheck, self).__init__(name, init_config, instances) + + # Use self.instance to read the check configuration + # self.url = self.instance.get("url") + + # If the check is going to perform SQL queries you should define a query manager here. + # More info at + # https://datadoghq.dev/integrations-core/base/databases/#datadog_checks.base.utils.db.core.QueryManager + # sample_query = { + # "name": "sample", + # "query": "SELECT * FROM sample_table", + # "columns": [ + # {"name": "metric", "type": "gauge"} + # ], + # } + # self._query_manager = QueryManager(self, self.execute_query, queries=[sample_query]) + # self.check_initializations.append(self._query_manager.compile_queries) + + def check(self, _): + # type: (Any) -> None + # The following are useful bits of code to help new users get started. + + # Perform HTTP Requests with our HTTP wrapper. + # More info at https://datadoghq.dev/integrations-core/base/http/ + # try: + # response = self.http.get(self.url) + # response.raise_for_status() + # response_json = response.json() + + # except Timeout as e: + # self.service_check( + # "can_connect", + # AgentCheck.CRITICAL, + # message="Request timeout: {}, {}".format(self.url, e), + # ) + # raise + + # except (HTTPError, InvalidURL, ConnectionError) as e: + # self.service_check( + # "can_connect", + # AgentCheck.CRITICAL, + # message="Request failed: {}, {}".format(self.url, e), + # ) + # raise + + # except JSONDecodeError as e: + # self.service_check( + # "can_connect", + # AgentCheck.CRITICAL, + # message="JSON Parse failed: {}, {}".format(self.url, e), + # ) + # raise + + # except ValueError as e: + # self.service_check( + # "can_connect", AgentCheck.CRITICAL, message=str(e) + # ) + # raise + + # This is how you submit metrics + # There are different types of metrics that you can submit (gauge, event). + # More info at https://datadoghq.dev/integrations-core/base/api/#datadog_checks.base.checks.base.AgentCheck + # self.gauge("test", 1.23, tags=['foo:bar']) + + # Perform database queries using the Query Manager + # self._query_manager.execute() + + # This is how you use the persistent cache. This cache file based and persists across agent restarts. + # If you need an in-memory cache that is persisted across runs + # You can define a dictionary in the __init__ method. + # self.write_persistent_cache("key", "value") + # value = self.read_persistent_cache("key") + + # If your check ran successfully, you can send the status. + # More info at + # https://datadoghq.dev/integrations-core/base/api/#datadog_checks.base.checks.base.AgentCheck.service_check + # self.service_check("can_connect", AgentCheck.OK) + + # If it didn't then it should send a critical service check + self.service_check("can_connect", AgentCheck.CRITICAL) diff --git a/cloudera/datadog_checks/cloudera/config_models/__init__.py b/cloudera/datadog_checks/cloudera/config_models/__init__.py new file mode 100644 index 0000000000000..c321f5f8b198b --- /dev/null +++ b/cloudera/datadog_checks/cloudera/config_models/__init__.py @@ -0,0 +1,25 @@ +# (C) Datadog, Inc. 2022-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) + +# This file is autogenerated. +# To change this file you should edit assets/configuration/spec.yaml and then run the following commands: +# ddev -x validate config -s +# ddev -x validate models -s + + +from .instance import InstanceConfig +from .shared import SharedConfig + + +class ConfigMixin: + _config_model_instance: InstanceConfig + _config_model_shared: SharedConfig + + @property + def config(self) -> InstanceConfig: + return self._config_model_instance + + @property + def shared_config(self) -> SharedConfig: + return self._config_model_shared diff --git a/cloudera/datadog_checks/cloudera/config_models/defaults.py b/cloudera/datadog_checks/cloudera/config_models/defaults.py new file mode 100644 index 0000000000000..5de6795a5f2a5 --- /dev/null +++ b/cloudera/datadog_checks/cloudera/config_models/defaults.py @@ -0,0 +1,31 @@ +# (C) Datadog, Inc. 2022-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) + +# This file is autogenerated. +# To change this file you should edit assets/configuration/spec.yaml and then run the following commands: +# ddev -x validate config -s +# ddev -x validate models -s + + +from datadog_checks.base.utils.models.fields import get_default_field_value + + +def shared_service(field, value): + return get_default_field_value(field, value) + + +def instance_empty_default_hostname(field, value): + return False + + +def instance_min_collection_interval(field, value): + return 15 + + +def instance_service(field, value): + return get_default_field_value(field, value) + + +def instance_tags(field, value): + return get_default_field_value(field, value) diff --git a/cloudera/datadog_checks/cloudera/config_models/instance.py b/cloudera/datadog_checks/cloudera/config_models/instance.py new file mode 100644 index 0000000000000..89ddeb7fba827 --- /dev/null +++ b/cloudera/datadog_checks/cloudera/config_models/instance.py @@ -0,0 +1,52 @@ +# (C) Datadog, Inc. 2022-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) + +# This file is autogenerated. +# To change this file you should edit assets/configuration/spec.yaml and then run the following commands: +# ddev -x validate config -s +# ddev -x validate models -s + + +from __future__ import annotations + +from typing import Optional, Sequence + +from pydantic import BaseModel, root_validator, validator + +from datadog_checks.base.utils.functions import identity +from datadog_checks.base.utils.models import validation + +from . import defaults, validators + + +class InstanceConfig(BaseModel): + class Config: + allow_mutation = False + + empty_default_hostname: Optional[bool] + min_collection_interval: Optional[float] + service: Optional[str] + tags: Optional[Sequence[str]] + + @root_validator(pre=True) + def _initial_validation(cls, values): + return validation.core.initialize_config(getattr(validators, 'initialize_instance', identity)(values)) + + @validator('*', pre=True, always=True) + def _ensure_defaults(cls, v, field): + if v is not None or field.required: + return v + + return getattr(defaults, f'instance_{field.name}')(field, v) + + @validator('*') + def _run_validations(cls, v, field): + if not v: + return v + + return getattr(validators, f'instance_{field.name}', identity)(v, field=field) + + @root_validator(pre=False) + def _final_validation(cls, values): + return validation.core.finalize_config(getattr(validators, 'finalize_instance', identity)(values)) diff --git a/cloudera/datadog_checks/cloudera/config_models/shared.py b/cloudera/datadog_checks/cloudera/config_models/shared.py new file mode 100644 index 0000000000000..a2a479a9d2bbf --- /dev/null +++ b/cloudera/datadog_checks/cloudera/config_models/shared.py @@ -0,0 +1,49 @@ +# (C) Datadog, Inc. 2022-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) + +# This file is autogenerated. +# To change this file you should edit assets/configuration/spec.yaml and then run the following commands: +# ddev -x validate config -s +# ddev -x validate models -s + + +from __future__ import annotations + +from typing import Optional + +from pydantic import BaseModel, root_validator, validator + +from datadog_checks.base.utils.functions import identity +from datadog_checks.base.utils.models import validation + +from . import defaults, validators + + +class SharedConfig(BaseModel): + class Config: + allow_mutation = False + + service: Optional[str] + + @root_validator(pre=True) + def _initial_validation(cls, values): + return validation.core.initialize_config(getattr(validators, 'initialize_shared', identity)(values)) + + @validator('*', pre=True, always=True) + def _ensure_defaults(cls, v, field): + if v is not None or field.required: + return v + + return getattr(defaults, f'shared_{field.name}')(field, v) + + @validator('*') + def _run_validations(cls, v, field): + if not v: + return v + + return getattr(validators, f'shared_{field.name}', identity)(v, field=field) + + @root_validator(pre=False) + def _final_validation(cls, values): + return validation.core.finalize_config(getattr(validators, 'finalize_shared', identity)(values)) diff --git a/cloudera/datadog_checks/cloudera/config_models/validators.py b/cloudera/datadog_checks/cloudera/config_models/validators.py new file mode 100644 index 0000000000000..92db7aee26a95 --- /dev/null +++ b/cloudera/datadog_checks/cloudera/config_models/validators.py @@ -0,0 +1,13 @@ +# (C) Datadog, Inc. 2022-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) + +# Here you can include additional config validators or transformers +# +# def initialize_instance(values, **kwargs): +# if 'my_option' not in values and 'my_legacy_option' in values: +# values['my_option'] = values['my_legacy_option'] +# if values.get('my_number') > 10: +# raise ValueError('my_number max value is 10, got %s' % str(values.get('my_number'))) +# +# return values diff --git a/cloudera/datadog_checks/cloudera/data/conf.yaml.example b/cloudera/datadog_checks/cloudera/data/conf.yaml.example new file mode 100644 index 0000000000000..8ee633b1335fc --- /dev/null +++ b/cloudera/datadog_checks/cloudera/data/conf.yaml.example @@ -0,0 +1,44 @@ +## All options defined here are available to all instances. +# +init_config: + + ## @param service - string - optional + ## Attach the tag `service:` to every metric, event, and service check emitted by this integration. + ## + ## Additionally, this sets the default `service` for every log source. + # + # service: + +## Every instance is scheduled independently of the others. +# +instances: + + - + ## @param tags - list of strings - optional + ## A list of tags to attach to every metric and service check emitted by this instance. + ## + ## Learn more about tagging at https://docs.datadoghq.com/tagging + # + # tags: + # - : + # - : + + ## @param service - string - optional + ## Attach the tag `service:` to every metric, event, and service check emitted by this integration. + ## + ## Overrides any `service` defined in the `init_config` section. + # + # service: + + ## @param min_collection_interval - number - optional - default: 15 + ## This changes the collection interval of the check. For more information, see: + ## https://docs.datadoghq.com/developers/write_agent_check/#collection-interval + # + # min_collection_interval: 15 + + ## @param empty_default_hostname - boolean - optional - default: false + ## This forces the check to send metrics with no hostname. + ## + ## This is useful for cluster-level checks. + # + # empty_default_hostname: false diff --git a/cloudera/hatch.toml b/cloudera/hatch.toml new file mode 100644 index 0000000000000..c1f666386ae2a --- /dev/null +++ b/cloudera/hatch.toml @@ -0,0 +1,4 @@ +[env.collectors.datadog-checks] + +[[envs.default.matrix]] +python = ["27", "38"] diff --git a/cloudera/images/IMAGES_README.md b/cloudera/images/IMAGES_README.md new file mode 100644 index 0000000000000..c915b722acace --- /dev/null +++ b/cloudera/images/IMAGES_README.md @@ -0,0 +1,46 @@ +# Marketplace Media Carousel Guidelines + +## Using the media gallery + +To use the media gallery, you must upload a minimum of one image. The gallery +can hold a maximum of 8 pieces of media total, and one of these pieces of media +can be a video (guidelines and submission steps below). Images should be +added to your /images directory and referenced in the manifest.json file. + + +## Image and video requirements + +### Images + +``` +File type : .jpg or .png +File size : ~500 KB per image, with a max of 1 MB per image +File dimensions : The aspect ratio must be 16:9 minimum, with these constraints: + + Width: 1440px + Min height: 810px + Max height: 2560px + +File name : Use only letters, numbers, underscores, and hyphens +Color mode : RGB +Color profile : sRGB +Description : 300 characters maximum +``` + +### Video + +To display a video in your media gallery, please send our team the zipped file +or a link to download the video at `marketplace@datadog.com`. In addition, +please upload a thumbnail image for your video as a part of the pull request. +Once approved, we will upload the file to Vimeo and provide you with the +vimeo_id to add to your manifest.json file. Please note that the gallery can +only hold one video. + +``` +File type : MP4 H.264 +File size : Max 1 video; 1 GB maximum size +File dimensions : The aspect ratio must be exactly 16:9, and the resolution must be 1920x1080 or higher +File name : partnerName-appName.mp4 +Run time : Recommendation of 60 seconds or less +Description : 300 characters maximum +``` diff --git a/cloudera/manifest.json b/cloudera/manifest.json new file mode 100644 index 0000000000000..9cc40a0b256cb --- /dev/null +++ b/cloudera/manifest.json @@ -0,0 +1,50 @@ +{ + "manifest_version": "2.0.0", + "app_uuid": "526ca1e8-f474-49cd-9a79-6cfe75de15fe", + "app_id": "cloudera", + "display_on_public_website": false, + "tile": { + "overview": "README.md#Overview", + "configuration": "README.md#Setup", + "support": "README.md#Support", + "changelog": "CHANGELOG.md", + "description": "", + "title": "Cloudera", + "media": [], + "classifier_tags": [ + "Supported OS::Linux", + "Supported OS::Windows", + "Supported OS::macOS" + ] + }, + "assets": { + "integration": { + "source_type_name": "Cloudera", + "configuration": { + "spec": "assets/configuration/spec.yaml" + }, + "events": { + "creates_events": false + }, + "metrics": { + "prefix": "cloudera.", + "check": "", + "metadata_path": "metadata.csv" + }, + "service_checks": { + "metadata_path": "assets/service_checks.json" + } + }, + "dashboards": {}, + "monitors": {}, + "logs": {}, + "saved_views": {} + }, + "author": { + "support_email": "help@datadoghq.com", + "name": "Datadog", + "homepage": "https://www.datadoghq.com", + "sales_email": "info@datadoghq.com" + }, + "oauth": {} +} diff --git a/cloudera/metadata.csv b/cloudera/metadata.csv new file mode 100644 index 0000000000000..6bcfec7d94d0c --- /dev/null +++ b/cloudera/metadata.csv @@ -0,0 +1 @@ +metric_name,metric_type,interval,unit_name,per_unit_name,description,orientation,integration,short_name,curated_metric diff --git a/cloudera/pyproject.toml b/cloudera/pyproject.toml new file mode 100644 index 0000000000000..8fc556404a2b3 --- /dev/null +++ b/cloudera/pyproject.toml @@ -0,0 +1,61 @@ +[build-system] +requires = [ + "hatchling>=0.13.0", + "setuptools<61", +] +build-backend = "hatchling.build" + +[project] +name = "datadog-cloudera" +description = "The Cloudera check" +readme = "README.md" +license = {text = "BSD-3-Clause"} +requires-python = ">=3.8" +keywords = [ + "datadog", + "datadog agent", + "datadog check", + "cloudera", +] +authors = [ + { name = "Datadog", email = "packages@datadoghq.com" }, +] +classifiers = [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Intended Audience :: System Administrators", + "License :: OSI Approved :: BSD License", + "Private :: Do Not Upload", + "Programming Language :: Python :: 3.8", + "Topic :: System :: Monitoring", +] +dependencies = [ + "datadog-checks-base>=25.1.0", +] +dynamic = [ + "version", +] + +[project.optional-dependencies] +deps = [] + +[project.urls] +Source = "https://github.com/DataDog/integrations-core" + +[tool.hatch.version] +path = "datadog_checks/cloudera/__about__.py" + +[tool.hatch.build.targets.sdist] +include = [ + "/datadog_checks", + "/tests", + "/manifest.json", +] + +[tool.hatch.build.targets.wheel] +include = [ + "/datadog_checks/cloudera", +] +dev-mode-dirs = [ + ".", +] diff --git a/cloudera/setup.py b/cloudera/setup.py new file mode 100644 index 0000000000000..55d1eee914a49 --- /dev/null +++ b/cloudera/setup.py @@ -0,0 +1,79 @@ +# (C) Datadog, Inc. 2022-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) +from codecs import open # To use a consistent encoding +from os import path + +from setuptools import setup + +HERE = path.dirname(path.abspath(__file__)) + +# Get version info +ABOUT = {} +with open(path.join(HERE, 'datadog_checks', 'cloudera', '__about__.py')) as f: + exec(f.read(), ABOUT) + +# Get the long description from the README file +with open(path.join(HERE, 'README.md'), encoding='utf-8') as f: + long_description = f.read() + + +def get_dependencies(): + dep_file = path.join(HERE, 'requirements.in') + if not path.isfile(dep_file): + return [] + + with open(dep_file, encoding='utf-8') as f: + return f.readlines() + + +def parse_pyproject_array(name): + import os + import re + from ast import literal_eval + + pattern = r'^{} = (\[.*?\])$'.format(name) + + with open(os.path.join(HERE, 'pyproject.toml'), 'r', encoding='utf-8') as f: + # Windows \r\n prevents match + contents = '\n'.join(line.rstrip() for line in f.readlines()) + + array = re.search(pattern, contents, flags=re.MULTILINE | re.DOTALL).group(1) + return literal_eval(array) + + +CHECKS_BASE_REQ = parse_pyproject_array('dependencies')[0] + + +setup( + name='datadog-cloudera', + version=ABOUT['__version__'], + description='The Cloudera check', + long_description=long_description, + long_description_content_type='text/markdown', + keywords='datadog agent cloudera check', + # The project's main homepage. + url='https://github.com/DataDog/integrations-core', + # Author details + author='Datadog', + author_email='packages@datadoghq.com', + # License + license='BSD-3-Clause', + # See https://pypi.org/classifiers + classifiers=[ + 'Development Status :: 5 - Production/Stable', + 'Intended Audience :: Developers', + 'Intended Audience :: System Administrators', + 'Topic :: System :: Monitoring', + 'License :: OSI Approved :: BSD License', + 'Programming Language :: Python :: 2.7', + 'Programming Language :: Python :: 3.8', + ], + # The package we're going to ship + packages=['datadog_checks.cloudera'], + # Run-time dependencies + install_requires=[CHECKS_BASE_REQ], + extras_require={'deps': parse_pyproject_array('deps')}, + # Extra files to ship with the wheel package + include_package_data=True, +) diff --git a/cloudera/tests/__init__.py b/cloudera/tests/__init__.py new file mode 100644 index 0000000000000..3eff9712cbcf5 --- /dev/null +++ b/cloudera/tests/__init__.py @@ -0,0 +1,3 @@ +# (C) Datadog, Inc. 2022-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) diff --git a/cloudera/tests/conftest.py b/cloudera/tests/conftest.py new file mode 100644 index 0000000000000..d6452d65b0121 --- /dev/null +++ b/cloudera/tests/conftest.py @@ -0,0 +1,14 @@ +# (C) Datadog, Inc. 2022-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) +import pytest + + +@pytest.fixture(scope='session') +def dd_environment(): + yield + + +@pytest.fixture +def instance(): + return {} diff --git a/cloudera/tests/test_cloudera.py b/cloudera/tests/test_cloudera.py new file mode 100644 index 0000000000000..5d40a062b6b96 --- /dev/null +++ b/cloudera/tests/test_cloudera.py @@ -0,0 +1,26 @@ +# (C) Datadog, Inc. 2022-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) + +from typing import Any, Callable, Dict + +from datadog_checks.base import AgentCheck +from datadog_checks.base.stubs.aggregator import AggregatorStub +from datadog_checks.dev.utils import get_metadata_metrics +from datadog_checks.cloudera import ClouderaCheck + + +def test_check(dd_run_check, aggregator, instance): + # type: (Callable[[AgentCheck, bool], None], AggregatorStub, Dict[str, Any]) -> None + check = ClouderaCheck('cloudera', {}, [instance]) + dd_run_check(check) + + aggregator.assert_all_metrics_covered() + aggregator.assert_metrics_using_metadata(get_metadata_metrics()) + + +def test_emits_critical_service_check_when_service_is_down(dd_run_check, aggregator, instance): + # type: (Callable[[AgentCheck, bool], None], AggregatorStub, Dict[str, Any]) -> None + check = ClouderaCheck('cloudera', {}, [instance]) + dd_run_check(check) + aggregator.assert_service_check('cloudera.can_connect', ClouderaCheck.CRITICAL) From 69747e9aaa7cce9a64654989088d837e96edacdb Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Wed, 2 Nov 2022 13:29:24 -0400 Subject: [PATCH 02/71] Outline plan for integration --- cloudera/datadog_checks/cloudera/check.py | 120 ++++++------------ cloudera/datadog_checks/cloudera/client.py | 19 +++ .../datadog_checks/cloudera/client_factory.py | 12 ++ cloudera/tests/test_cloudera.py | 28 ++-- cloudera/tests/test_config.py | 0 5 files changed, 84 insertions(+), 95 deletions(-) create mode 100644 cloudera/datadog_checks/cloudera/client.py create mode 100644 cloudera/datadog_checks/cloudera/client_factory.py create mode 100644 cloudera/tests/test_config.py diff --git a/cloudera/datadog_checks/cloudera/check.py b/cloudera/datadog_checks/cloudera/check.py index ddb3be67ee0d5..5123d9e7f1245 100644 --- a/cloudera/datadog_checks/cloudera/check.py +++ b/cloudera/datadog_checks/cloudera/check.py @@ -5,94 +5,52 @@ from datadog_checks.base import AgentCheck -# from datadog_checks.base.utils.db import QueryManager -# from requests.exceptions import ConnectionError, HTTPError, InvalidURL, Timeout -# from json import JSONDecodeError +from .client_factory import make_api_client class ClouderaCheck(AgentCheck): - - # This will be the prefix of every metric and service check the integration sends __NAMESPACE__ = 'cloudera' def __init__(self, name, init_config, instances): super(ClouderaCheck, self).__init__(name, init_config, instances) - # Use self.instance to read the check configuration - # self.url = self.instance.get("url") - - # If the check is going to perform SQL queries you should define a query manager here. - # More info at - # https://datadoghq.dev/integrations-core/base/databases/#datadog_checks.base.utils.db.core.QueryManager - # sample_query = { - # "name": "sample", - # "query": "SELECT * FROM sample_table", - # "columns": [ - # {"name": "metric", "type": "gauge"} - # ], - # } - # self._query_manager = QueryManager(self, self.execute_query, queries=[sample_query]) - # self.check_initializations.append(self._query_manager.compile_queries) + self.client, self._error = make_api_client(self, self.instance) + if self.client is None: + self.log.error("API Client is none: %s", self._error) + self.service_check("can_connect", ClouderaCheck.CRITICAL) def check(self, _): - # type: (Any) -> None - # The following are useful bits of code to help new users get started. - - # Perform HTTP Requests with our HTTP wrapper. - # More info at https://datadoghq.dev/integrations-core/base/http/ - # try: - # response = self.http.get(self.url) - # response.raise_for_status() - # response_json = response.json() - - # except Timeout as e: - # self.service_check( - # "can_connect", - # AgentCheck.CRITICAL, - # message="Request timeout: {}, {}".format(self.url, e), - # ) - # raise - - # except (HTTPError, InvalidURL, ConnectionError) as e: - # self.service_check( - # "can_connect", - # AgentCheck.CRITICAL, - # message="Request failed: {}, {}".format(self.url, e), - # ) - # raise - - # except JSONDecodeError as e: - # self.service_check( - # "can_connect", - # AgentCheck.CRITICAL, - # message="JSON Parse failed: {}, {}".format(self.url, e), - # ) - # raise - - # except ValueError as e: - # self.service_check( - # "can_connect", AgentCheck.CRITICAL, message=str(e) - # ) - # raise - - # This is how you submit metrics - # There are different types of metrics that you can submit (gauge, event). - # More info at https://datadoghq.dev/integrations-core/base/api/#datadog_checks.base.checks.base.AgentCheck - # self.gauge("test", 1.23, tags=['foo:bar']) - - # Perform database queries using the Query Manager - # self._query_manager.execute() - - # This is how you use the persistent cache. This cache file based and persists across agent restarts. - # If you need an in-memory cache that is persisted across runs - # You can define a dictionary in the __init__ method. - # self.write_persistent_cache("key", "value") - # value = self.read_persistent_cache("key") - - # If your check ran successfully, you can send the status. - # More info at - # https://datadoghq.dev/integrations-core/base/api/#datadog_checks.base.checks.base.AgentCheck.service_check - # self.service_check("can_connect", AgentCheck.OK) - - # If it didn't then it should send a critical service check - self.service_check("can_connect", AgentCheck.CRITICAL) + # Run through the list of default metrics first + + # Get the clusters + # ClustersResourceApi + + # For each cluster, get the services + # ServicesResourceApi + + # Structure: + # Cluster + # - Service + # - Nameservice + # - Role + # - Host + + # Get host metrics + # HostsResourceApi + + # get nameservice metrics + # NameservicesResourceApi + + # get role metrics + # RolesResourceApi + + # get service metrics + # ServicesResourceApi + + # Next steps: try to get cluster metrics and see how to structure hierarchy + + + # Run any custom queries + + # at the end, output can_connect + self.service_check("can_connect", ClouderaCheck.OK) diff --git a/cloudera/datadog_checks/cloudera/client.py b/cloudera/datadog_checks/cloudera/client.py new file mode 100644 index 0000000000000..ac247f72c2946 --- /dev/null +++ b/cloudera/datadog_checks/cloudera/client.py @@ -0,0 +1,19 @@ +import cm_client + + +class ClouderaClient: + def __init__(self, username, password, api_url): + cm_client.configuration.username = username + cm_client.configuration.password = password + self.api_client = cm_client.ApiClient(api_url) + + def query(self, cloudera_api): + # api_instance = cm_client.cloudera_api(self.api_client) + + raise NotImplemented + + def query_time_series(self, query, from_time, to_time): + api_instance = cm_client.TimeSeriesResourceApi(self.api_client) + result = api_instance.query_time_series(_from=from_time, query=query, to=to_time) + + raise NotImplemented diff --git a/cloudera/datadog_checks/cloudera/client_factory.py b/cloudera/datadog_checks/cloudera/client_factory.py new file mode 100644 index 0000000000000..c3578c71e07d5 --- /dev/null +++ b/cloudera/datadog_checks/cloudera/client_factory.py @@ -0,0 +1,12 @@ +from .cloudera.client import ClouderaClient + + +def make_api_client(check, instance): + workload_username = instance.get("workload_username") + workload_password = instance.get("workload_password") + api_url = instance.get("api_url") + + try: + return ClouderaClient(username=workload_username, password=workload_password, api_url=api_url), None + except Exception as e: + return None, str(e) \ No newline at end of file diff --git a/cloudera/tests/test_cloudera.py b/cloudera/tests/test_cloudera.py index 5d40a062b6b96..afec81c44627e 100644 --- a/cloudera/tests/test_cloudera.py +++ b/cloudera/tests/test_cloudera.py @@ -10,17 +10,17 @@ from datadog_checks.cloudera import ClouderaCheck -def test_check(dd_run_check, aggregator, instance): - # type: (Callable[[AgentCheck, bool], None], AggregatorStub, Dict[str, Any]) -> None - check = ClouderaCheck('cloudera', {}, [instance]) - dd_run_check(check) - - aggregator.assert_all_metrics_covered() - aggregator.assert_metrics_using_metadata(get_metadata_metrics()) - - -def test_emits_critical_service_check_when_service_is_down(dd_run_check, aggregator, instance): - # type: (Callable[[AgentCheck, bool], None], AggregatorStub, Dict[str, Any]) -> None - check = ClouderaCheck('cloudera', {}, [instance]) - dd_run_check(check) - aggregator.assert_service_check('cloudera.can_connect', ClouderaCheck.CRITICAL) +# def test_check(dd_run_check, aggregator, instance): +# # type: (Callable[[AgentCheck, bool], None], AggregatorStub, Dict[str, Any]) -> None +# check = ClouderaCheck('cloudera', {}, [instance]) +# dd_run_check(check) +# +# aggregator.assert_all_metrics_covered() +# aggregator.assert_metrics_using_metadata(get_metadata_metrics()) +# +# +# def test_emits_critical_service_check_when_service_is_down(dd_run_check, aggregator, instance): +# # type: (Callable[[AgentCheck, bool], None], AggregatorStub, Dict[str, Any]) -> None +# check = ClouderaCheck('cloudera', {}, [instance]) +# dd_run_check(check) +# aggregator.assert_service_check('cloudera.can_connect', ClouderaCheck.CRITICAL) diff --git a/cloudera/tests/test_config.py b/cloudera/tests/test_config.py new file mode 100644 index 0000000000000..e69de29bb2d1d From 98d608af35dd86f25c0a6236241ecd7d7924eb4c Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Mon, 14 Nov 2022 16:55:44 -0500 Subject: [PATCH 03/71] Set up init metric and test env --- cloudera/assets/configuration/spec.yaml | 28 +- cloudera/datadog_checks/cloudera/check.py | 36 +- cloudera/datadog_checks/cloudera/client.py | 6 +- .../datadog_checks/cloudera/client_factory.py | 2 +- .../cloudera/data/conf.yaml.example | 26 ++ cloudera/pyproject.toml | 4 +- cloudera/tests/conftest.py | 9 +- cloudera/tests/docker/docker-compose.yaml | 8 + .../tests/fixtures/cpu_soft_irq_rate.json | 325 ++++++++++++++++++ cloudera/tests/test_cloudera.py | 12 +- 10 files changed, 421 insertions(+), 35 deletions(-) create mode 100644 cloudera/tests/docker/docker-compose.yaml create mode 100644 cloudera/tests/fixtures/cpu_soft_irq_rate.json diff --git a/cloudera/assets/configuration/spec.yaml b/cloudera/assets/configuration/spec.yaml index 5d1fb9cae03db..29eb2bc21de9b 100644 --- a/cloudera/assets/configuration/spec.yaml +++ b/cloudera/assets/configuration/spec.yaml @@ -2,22 +2,24 @@ name: Cloudera files: - name: cloudera.yaml options: - - name: api_url - required: true - description: The Swagger API Url - value: - type: string - - name: username - description: The workload username - value: - type: string - - name: password - description: The workload password - value: - type: string - template: init_config options: - template: init_config/default - template: instances options: - template: instances/default + - name: api_url + required: true + description: The Swagger API Url + value: + type: string + - name: workload_username + description: The workload username + required: true + value: + type: string + - name: workload_password + description: The workload password + required: true + value: + type: string diff --git a/cloudera/datadog_checks/cloudera/check.py b/cloudera/datadog_checks/cloudera/check.py index 5123d9e7f1245..1815c4eecd51f 100644 --- a/cloudera/datadog_checks/cloudera/check.py +++ b/cloudera/datadog_checks/cloudera/check.py @@ -1,7 +1,8 @@ # (C) Datadog, Inc. 2022-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -from typing import Any +import datetime +import time from datadog_checks.base import AgentCheck @@ -16,11 +17,36 @@ def __init__(self, name, init_config, instances): self.client, self._error = make_api_client(self, self.instance) if self.client is None: - self.log.error("API Client is none: %s", self._error) + self.error("API Client is none: %s", self._error) self.service_check("can_connect", ClouderaCheck.CRITICAL) + def run_timeseries_checks(self): + to_time = datetime.datetime.fromtimestamp(time.time()) + from_time = datetime.datetime.fromtimestamp(time.time() - 1000) + query = "select last(cpu_soft_irq_rate)" + response = self.client.query_time_series(query=query, from_time=from_time, to_time=to_time) + + for entry in response: + value = entry.data[0].value + attributes = entry.metadata.attributes + tags = [ + f'cloudera_hostname:{attributes["hostname"]}', + f'cluster_display_name:{attributes["clusterDisplayName"]}', + f'entity_name:{attributes["entityName"]}', + f'cluster_name:{attributes["clusterName"]}', + f'host_id:{attributes["hostId"]}', + f'category:{attributes["category"]}', + f'rack_id:{attributes["rackId"]}', + ] + self.gauge("host.cpu_soft_irq_rate", value, tags=tags) + + def run_service_checks(self): + self.service_check("can_connect", ClouderaCheck.OK) + + def check(self, _): - # Run through the list of default metrics first + # Run through the list of default timeseries metrics first + self.run_timeseries_checks() # Get the clusters # ClustersResourceApi @@ -48,9 +74,9 @@ def check(self, _): # ServicesResourceApi # Next steps: try to get cluster metrics and see how to structure hierarchy + self.run_service_checks() # Run any custom queries - # at the end, output can_connect - self.service_check("can_connect", ClouderaCheck.OK) + # at the end, output can_connect \ No newline at end of file diff --git a/cloudera/datadog_checks/cloudera/client.py b/cloudera/datadog_checks/cloudera/client.py index ac247f72c2946..28c5207ede834 100644 --- a/cloudera/datadog_checks/cloudera/client.py +++ b/cloudera/datadog_checks/cloudera/client.py @@ -14,6 +14,8 @@ def query(self, cloudera_api): def query_time_series(self, query, from_time, to_time): api_instance = cm_client.TimeSeriesResourceApi(self.api_client) - result = api_instance.query_time_series(_from=from_time, query=query, to=to_time) + response = api_instance.query_time_series(_from=from_time, query=query, to=to_time) - raise NotImplemented + timeseries = response.items[0].time_series + + return timeseries \ No newline at end of file diff --git a/cloudera/datadog_checks/cloudera/client_factory.py b/cloudera/datadog_checks/cloudera/client_factory.py index c3578c71e07d5..88fce99b085eb 100644 --- a/cloudera/datadog_checks/cloudera/client_factory.py +++ b/cloudera/datadog_checks/cloudera/client_factory.py @@ -1,4 +1,4 @@ -from .cloudera.client import ClouderaClient +from .client import ClouderaClient def make_api_client(check, instance): diff --git a/cloudera/datadog_checks/cloudera/data/conf.yaml.example b/cloudera/datadog_checks/cloudera/data/conf.yaml.example index 8ee633b1335fc..04219ecea8394 100644 --- a/cloudera/datadog_checks/cloudera/data/conf.yaml.example +++ b/cloudera/datadog_checks/cloudera/data/conf.yaml.example @@ -42,3 +42,29 @@ instances: ## This is useful for cluster-level checks. # # empty_default_hostname: false + + ## @param metric_patterns - mapping - optional + ## A mapping of metrics to include or exclude, with each entry being a regular expression. + ## + ## Metrics defined in `exclude` will take precedence in case of overlap. + # + # metric_patterns: + # include: + # - + # exclude: + # - + + ## @param api_url - string - required + ## The Swagger API Url + # + api_url: + + ## @param workload_username - string - required + ## The workload username + # + workload_username: + + ## @param workload_password - string - required + ## The workload password + # + workload_password: diff --git a/cloudera/pyproject.toml b/cloudera/pyproject.toml index 8fc556404a2b3..38d538a6c2412 100644 --- a/cloudera/pyproject.toml +++ b/cloudera/pyproject.toml @@ -37,7 +37,9 @@ dynamic = [ ] [project.optional-dependencies] -deps = [] +deps = [ + "cm-client>=45.0.4", +] [project.urls] Source = "https://github.com/DataDog/integrations-core" diff --git a/cloudera/tests/conftest.py b/cloudera/tests/conftest.py index d6452d65b0121..0dfb7328f147b 100644 --- a/cloudera/tests/conftest.py +++ b/cloudera/tests/conftest.py @@ -2,13 +2,16 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) import pytest +from datadog_checks.dev import docker_run + +from . import common @pytest.fixture(scope='session') def dd_environment(): - yield - + with docker_run(common.COMPOSE_FILE): + yield common.INSTANCE @pytest.fixture def instance(): - return {} + return common.INSTANCE diff --git a/cloudera/tests/docker/docker-compose.yaml b/cloudera/tests/docker/docker-compose.yaml new file mode 100644 index 0000000000000..238f5752ebb59 --- /dev/null +++ b/cloudera/tests/docker/docker-compose.yaml @@ -0,0 +1,8 @@ +version: "3" + +services: + cloudera: + image: caddy:2.1.1-alpine + container_name: cloudera + ports: + - 80:80 \ No newline at end of file diff --git a/cloudera/tests/fixtures/cpu_soft_irq_rate.json b/cloudera/tests/fixtures/cpu_soft_irq_rate.json new file mode 100644 index 0000000000000..ed3cc25af3d87 --- /dev/null +++ b/cloudera/tests/fixtures/cpu_soft_irq_rate.json @@ -0,0 +1,325 @@ +{ + "items": [ + { + "timeSeries": [ + { + "metadata": { + "metricName": "last(cpu_soft_irq_rate)", + "entityName": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-14T20:57:10.033Z", + "endTime": "2022-11-14T21:02:10.033Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "96efbf3e7279bf25ae44fe0a6398ee97", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_soft_irq_rate) WHERE entityName = \"96efbf3e7279bf25ae44fe0a6398ee97\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-14T21:01:13.000Z", + "value": 0, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_soft_irq_rate)", + "entityName": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-14T20:57:10.033Z", + "endTime": "2022-11-14T21:02:10.033Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "88ae2611748383b5628d4aec94873da9", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "88ae2611748383b5628d4aec94873da9", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_soft_irq_rate) WHERE entityName = \"88ae2611748383b5628d4aec94873da9\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-14T21:01:11.000Z", + "value": 0, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_soft_irq_rate)", + "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-14T20:57:10.033Z", + "endTime": "2022-11-14T21:02:10.033Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_soft_irq_rate) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-14T21:01:13.000Z", + "value": 0.0015000000000024254, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_soft_irq_rate)", + "entityName": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-14T20:57:10.033Z", + "endTime": "2022-11-14T21:02:10.033Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "22f6ab659c835d47bc13d6c8f3370110", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "22f6ab659c835d47bc13d6c8f3370110", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_soft_irq_rate) WHERE entityName = \"22f6ab659c835d47bc13d6c8f3370110\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-14T21:01:12.000Z", + "value": 0, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_soft_irq_rate)", + "entityName": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-14T20:57:10.033Z", + "endTime": "2022-11-14T21:02:10.033Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "49adda80d1b98e9262ee146fd7fd798b", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "49adda80d1b98e9262ee146fd7fd798b", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_soft_irq_rate) WHERE entityName = \"49adda80d1b98e9262ee146fd7fd798b\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-14T21:01:12.000Z", + "value": 0, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_soft_irq_rate)", + "entityName": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-14T20:57:10.033Z", + "endTime": "2022-11-14T21:02:10.033Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "9784d85849c7179b790d476c483fd905", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "9784d85849c7179b790d476c483fd905", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_soft_irq_rate) WHERE entityName = \"9784d85849c7179b790d476c483fd905\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-14T21:01:11.000Z", + "value": 0.0001666666666665151, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_soft_irq_rate)", + "entityName": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-14T20:57:10.033Z", + "endTime": "2022-11-14T21:02:10.033Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "119115ab851aefe1429860d4255b3fab", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "119115ab851aefe1429860d4255b3fab", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_soft_irq_rate) WHERE entityName = \"119115ab851aefe1429860d4255b3fab\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-14T21:01:14.000Z", + "value": 0.0001666666666665151, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_soft_irq_rate)", + "entityName": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-14T20:57:10.033Z", + "endTime": "2022-11-14T21:02:10.033Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "ed528836ae33e47e6657b95373571c33", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "ed528836ae33e47e6657b95373571c33", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_soft_irq_rate) WHERE entityName = \"ed528836ae33e47e6657b95373571c33\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-14T21:01:11.000Z", + "value": 0, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_soft_irq_rate)", + "entityName": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-14T20:57:10.033Z", + "endTime": "2022-11-14T21:02:10.033Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "759451867dfde961d6adbeb21d9c13f9", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "759451867dfde961d6adbeb21d9c13f9", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_soft_irq_rate) WHERE entityName = \"759451867dfde961d6adbeb21d9c13f9\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-14T21:01:14.000Z", + "value": 0, + "type": "SAMPLE" + } + ] + } + ], + "warnings": [], + "timeSeriesQuery": "select last(cpu_soft_irq_rate)" + } + ] +} \ No newline at end of file diff --git a/cloudera/tests/test_cloudera.py b/cloudera/tests/test_cloudera.py index afec81c44627e..d900d1ccf2b4e 100644 --- a/cloudera/tests/test_cloudera.py +++ b/cloudera/tests/test_cloudera.py @@ -10,16 +10,8 @@ from datadog_checks.cloudera import ClouderaCheck -# def test_check(dd_run_check, aggregator, instance): -# # type: (Callable[[AgentCheck, bool], None], AggregatorStub, Dict[str, Any]) -> None -# check = ClouderaCheck('cloudera', {}, [instance]) -# dd_run_check(check) -# -# aggregator.assert_all_metrics_covered() -# aggregator.assert_metrics_using_metadata(get_metadata_metrics()) -# -# -# def test_emits_critical_service_check_when_service_is_down(dd_run_check, aggregator, instance): +def test_emits_critical_service_check_when_service_is_down(): + assert True # need at least 1 passing test to start an env # # type: (Callable[[AgentCheck, bool], None], AggregatorStub, Dict[str, Any]) -> None # check = ClouderaCheck('cloudera', {}, [instance]) # dd_run_check(check) From 7527b934f956a23163aacf457a8833d007ebbabd Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Mon, 14 Nov 2022 16:56:22 -0500 Subject: [PATCH 04/71] Add common.py --- cloudera/tests/common.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 cloudera/tests/common.py diff --git a/cloudera/tests/common.py b/cloudera/tests/common.py new file mode 100644 index 0000000000000..11ca0f1373c48 --- /dev/null +++ b/cloudera/tests/common.py @@ -0,0 +1,12 @@ +import os + +from datadog_checks.dev import get_here + +INSTANCE = { + 'workload_username': '~', + 'workload_password': '~', + 'api_url': '~', +} + +HERE = get_here() +COMPOSE_FILE = os.path.join(HERE, 'docker', 'docker-compose.yaml') \ No newline at end of file From 2146e0f78ba3ca290782b690a65a4370dc17d9bd Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Tue, 15 Nov 2022 09:25:38 -0500 Subject: [PATCH 05/71] Outline check and include tests --- cloudera/datadog_checks/cloudera/check.py | 48 ++++++++++----------- cloudera/datadog_checks/cloudera/queries.py | 31 +++++++++++++ cloudera/tests/test_cloudera.py | 6 +++ 3 files changed, 61 insertions(+), 24 deletions(-) create mode 100644 cloudera/datadog_checks/cloudera/queries.py diff --git a/cloudera/datadog_checks/cloudera/check.py b/cloudera/datadog_checks/cloudera/check.py index 1815c4eecd51f..c79c400dc9f17 100644 --- a/cloudera/datadog_checks/cloudera/check.py +++ b/cloudera/datadog_checks/cloudera/check.py @@ -7,6 +7,7 @@ from datadog_checks.base import AgentCheck from .client_factory import make_api_client +from .queries import TIMESERIES_QUERIES class ClouderaCheck(AgentCheck): @@ -22,32 +23,24 @@ def __init__(self, name, init_config, instances): def run_timeseries_checks(self): to_time = datetime.datetime.fromtimestamp(time.time()) - from_time = datetime.datetime.fromtimestamp(time.time() - 1000) - query = "select last(cpu_soft_irq_rate)" - response = self.client.query_time_series(query=query, from_time=from_time, to_time=to_time) - - for entry in response: - value = entry.data[0].value - attributes = entry.metadata.attributes - tags = [ - f'cloudera_hostname:{attributes["hostname"]}', - f'cluster_display_name:{attributes["clusterDisplayName"]}', - f'entity_name:{attributes["entityName"]}', - f'cluster_name:{attributes["clusterName"]}', - f'host_id:{attributes["hostId"]}', - f'category:{attributes["category"]}', - f'rack_id:{attributes["rackId"]}', - ] - self.gauge("host.cpu_soft_irq_rate", value, tags=tags) + from_time = datetime.datetime.fromtimestamp(time.time() - 6000) - def run_service_checks(self): - self.service_check("can_connect", ClouderaCheck.OK) + # For each timeseries query, get the metrics + for query in TIMESERIES_QUERIES: + responses = self.client.query_time_series(query=query['query_string'], from_time=from_time, to_time=to_time) + for response in responses: + value = response.data[0].value + attributes = response.metadata.attributes - def check(self, _): - # Run through the list of default timeseries metrics first - self.run_timeseries_checks() + # TODO: make this compatible with Py2 + tags = [f"{datadog_tag}:{attributes[attribute]}" for datadog_tag, attribute in query['tags']] + + category = attributes['category'].lower() + self.gauge(f"{category}.{query['metric_name']}", value, tags=tags) + # https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cod--qfdcinkqrzw/cdp-proxy/hbase/webui/logs/hbase-cmf-hbase-MASTER-cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site.log.out?host=cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site&port=16010 + def run_service_checks(self): # Get the clusters # ClustersResourceApi @@ -73,10 +66,17 @@ def check(self, _): # get service metrics # ServicesResourceApi + self.service_check("can_connect", ClouderaCheck.OK) + + def check(self, _): + # Run through the list of default timeseries metrics first + self.run_timeseries_checks() + # Next steps: try to get cluster metrics and see how to structure hierarchy - self.run_service_checks() + # Get the service checks of cluster, service, nameservice, role, and host + self.run_service_checks() # Run any custom queries - # at the end, output can_connect \ No newline at end of file + # at the end, output can_connect diff --git a/cloudera/datadog_checks/cloudera/queries.py b/cloudera/datadog_checks/cloudera/queries.py new file mode 100644 index 0000000000000..9a8931a9c7dd0 --- /dev/null +++ b/cloudera/datadog_checks/cloudera/queries.py @@ -0,0 +1,31 @@ + +# Each query is of format: +# query - the actual query +# tags - a list of tuples containing (datadog_tag_name, cloudera_attribute_name) +# metric_name - the name of the Datadog metric name +# TODO: Add other timeseries metrics +TIMESERIES_QUERIES = [ + { + 'query_string': 'select last(cpu_soft_irq_rate)', + 'tags': [ + ('cloudera_hostname', 'hostname'), + ('cluster_display_name', 'clusterDisplayName'), + ('entity_name', 'entityName'), + ('cluster_name', 'clusterName'), + ('host_id', 'hostId'), + ('rack_id', 'rackId') + ], + 'metric_name': 'cpu_soft_irq_rate' + }, + { + 'query_string': 'select last(cpu_system_rate)', + 'tags': [ # TODO: Add more tags + ('cloudera_hostname', 'hostname'), + ('entity_name', 'entityName'), + ('host_id', 'hostId'), + ('rack_id', 'rackId') + ], + 'metric_name': 'cpu_system_rate' + }, +] + diff --git a/cloudera/tests/test_cloudera.py b/cloudera/tests/test_cloudera.py index d900d1ccf2b4e..8d54704de4653 100644 --- a/cloudera/tests/test_cloudera.py +++ b/cloudera/tests/test_cloudera.py @@ -16,3 +16,9 @@ def test_emits_critical_service_check_when_service_is_down(): # check = ClouderaCheck('cloudera', {}, [instance]) # dd_run_check(check) # aggregator.assert_service_check('cloudera.can_connect', ClouderaCheck.CRITICAL) + + +# Tests to add: +# happy path +# emit critical when can't connect (incorrect credentials) +# emit critical when cm-client is missing \ No newline at end of file From a246429312181111eeaa96ea8a7b7e2350f9a6b6 Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Thu, 17 Nov 2022 15:21:48 -0500 Subject: [PATCH 06/71] Clean up check --- cloudera/datadog_checks/cloudera/check.py | 73 +++++++++++++--------- cloudera/datadog_checks/cloudera/client.py | 19 ++++-- cloudera/datadog_checks/cloudera/common.py | 23 +++++++ 3 files changed, 79 insertions(+), 36 deletions(-) create mode 100644 cloudera/datadog_checks/cloudera/common.py diff --git a/cloudera/datadog_checks/cloudera/check.py b/cloudera/datadog_checks/cloudera/check.py index c79c400dc9f17..b152d468f66df 100644 --- a/cloudera/datadog_checks/cloudera/check.py +++ b/cloudera/datadog_checks/cloudera/check.py @@ -7,6 +7,7 @@ from datadog_checks.base import AgentCheck from .client_factory import make_api_client +from .common import API_ENTITY_STATUS, CAN_CONNECT, CLUSTER_HEALTH, CLUSTER_RESOURCE_API, SERVICE_HEALTH, SERVICE_RESOURCE_API from .queries import TIMESERIES_QUERIES @@ -19,7 +20,9 @@ def __init__(self, name, init_config, instances): self.client, self._error = make_api_client(self, self.instance) if self.client is None: self.error("API Client is none: %s", self._error) - self.service_check("can_connect", ClouderaCheck.CRITICAL) + self.service_check(CAN_CONNECT, AgentCheck.CRITICAL) + + self.custom_tags = self.instance.get("tags", []) def run_timeseries_checks(self): to_time = datetime.datetime.fromtimestamp(time.time()) @@ -27,26 +30,20 @@ def run_timeseries_checks(self): # For each timeseries query, get the metrics for query in TIMESERIES_QUERIES: - responses = self.client.query_time_series(query=query['query_string'], from_time=from_time, to_time=to_time) + items = self.client.run_timeseries_query(query=query['query_string'], from_time=from_time, to_time=to_time) - for response in responses: - value = response.data[0].value - attributes = response.metadata.attributes + for item in items.time_series: + value = item.data[0].value + attributes = item.metadata.attributes # TODO: make this compatible with Py2 tags = [f"{datadog_tag}:{attributes[attribute]}" for datadog_tag, attribute in query['tags']] category = attributes['category'].lower() self.gauge(f"{category}.{query['metric_name']}", value, tags=tags) - # https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cod--qfdcinkqrzw/cdp-proxy/hbase/webui/logs/hbase-cmf-hbase-MASTER-cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site.log.out?host=cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site&port=16010 - - def run_service_checks(self): - # Get the clusters - # ClustersResourceApi - # For each cluster, get the services - # ServicesResourceApi + def run_service_checks(self): # Structure: # Cluster # - Service @@ -54,29 +51,45 @@ def run_service_checks(self): # - Role # - Host - # Get host metrics - # HostsResourceApi - - # get nameservice metrics - # NameservicesResourceApi - - # get role metrics - # RolesResourceApi - - # get service metrics - # ServicesResourceApi - - self.service_check("can_connect", ClouderaCheck.OK) + cluster_responses = self.client.run_query(CLUSTER_RESOURCE_API, "read_clusters", view='full', cluster_type='any') + for cluster_response in cluster_responses: + tags = [ + f'cluster_type:{cluster_response.cluster_type}', + f'cluster_url:{cluster_response.cluster_url}', + f'cluster_name:{cluster_response.display_name}', + ] + self._submit_health_check(cluster_response, CLUSTER_HEALTH, tags) + + # For each cluster, get the services + services = self.client.run_query(SERVICE_RESOURCE_API, "read_services", view='full', cluster_name=cluster_response.display_name) + + for service in services: + tags = [ + f'service_name:{service.display_name}', + f'service_url:{service.service_url}', + f'service_url:{service.service_url}', + f'service_type:{service.type}', + ] + self._submit_health_check(service, SERVICE_HEALTH, tags) + + # TODO: Get nameservice and role health checks + + # TODO: Get host health check + + # Output OK can_connect if got to here + self.service_check(CAN_CONNECT, AgentCheck.OK) + + def _submit_service_check(self, item, service_check, tags): + status = API_ENTITY_STATUS[item.entity_status] + message = None if status is AgentCheck.OK else item.entity_status + + self.service_check(service_check, status, message=message, tags=tags) def check(self, _): # Run through the list of default timeseries metrics first self.run_timeseries_checks() - # Next steps: try to get cluster metrics and see how to structure hierarchy - # Get the service checks of cluster, service, nameservice, role, and host self.run_service_checks() - # Run any custom queries - - # at the end, output can_connect + # TODO: Run any custom queries diff --git a/cloudera/datadog_checks/cloudera/client.py b/cloudera/datadog_checks/cloudera/client.py index 28c5207ede834..a5a011471e7aa 100644 --- a/cloudera/datadog_checks/cloudera/client.py +++ b/cloudera/datadog_checks/cloudera/client.py @@ -7,15 +7,22 @@ def __init__(self, username, password, api_url): cm_client.configuration.password = password self.api_client = cm_client.ApiClient(api_url) - def query(self, cloudera_api): - # api_instance = cm_client.cloudera_api(self.api_client) + def run_query(self, cloudera_api_class, cloudera_api_method, **kwargs): + # Create an instance of cloudera_api_class + api_instance = getattr(cm_client, cloudera_api_class)(self.api_client) - raise NotImplemented + # Run cloudera_api_method to query for metrics and service checks + response = getattr(api_instance, cloudera_api_method)(**kwargs) - def query_time_series(self, query, from_time, to_time): + return response.items + + def run_timeseries_query(self, query, from_time, to_time): api_instance = cm_client.TimeSeriesResourceApi(self.api_client) response = api_instance.query_time_series(_from=from_time, query=query, to=to_time) - timeseries = response.items[0].time_series + # There is always only one item in list `items` + return response.items[0].time_series + + def get_cluster_tags(self): - return timeseries \ No newline at end of file + raise NotImplemented \ No newline at end of file diff --git a/cloudera/datadog_checks/cloudera/common.py b/cloudera/datadog_checks/cloudera/common.py new file mode 100644 index 0000000000000..039812b65d287 --- /dev/null +++ b/cloudera/datadog_checks/cloudera/common.py @@ -0,0 +1,23 @@ +from datadog_checks.base import AgentCheck + +# Based on ApiEntityStatus: https://archive.cloudera.com/cm7/7.7.1/generic/jar/cm_api/apidocs/json_ApiEntityStatus.html +API_ENTITY_STATUS = { + 'UNKNOWN': AgentCheck.UNKNOWN, + 'NONE': AgentCheck.UNKNOWN, + 'STOPPED': AgentCheck.UNKNOWN, + 'DOWN': AgentCheck.CRITICAL, + 'UNKNOWN_HEALTH': AgentCheck.UNKNOWN, + 'DISABLED_HEALTH': AgentCheck.CRITICAL, + 'CONCERNING_HEALTH': AgentCheck.WARNING, + 'BAD_HEALTH': AgentCheck.CRITICAL, + 'GOOD_HEALTH': AgentCheck.OK, + 'STARTING': AgentCheck.OK, + 'STOPPING': AgentCheck.OK, + 'HISTORY_NOT_AVAILABLE': AgentCheck.UNKNOWN, +} + +CAN_CONNECT = "can_connect" +CLUSTER_HEALTH = "cluster.health" +SERVICE_HEALTH = "service.health" +CLUSTER_RESOURCE_API = "ClusterResourceApi" +SERVICE_RESOURCE_API = "ServiceResourceApi" \ No newline at end of file From 734aa55619e5bf71d9bf71305e6cc9df0279c293 Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Thu, 17 Nov 2022 17:20:05 -0500 Subject: [PATCH 07/71] Update cloudera/pyproject.toml Co-authored-by: Ofek Lev --- cloudera/pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cloudera/pyproject.toml b/cloudera/pyproject.toml index 38d538a6c2412..4051abc7ccf27 100644 --- a/cloudera/pyproject.toml +++ b/cloudera/pyproject.toml @@ -38,7 +38,7 @@ dynamic = [ [project.optional-dependencies] deps = [ - "cm-client>=45.0.4", + "cm-client==45.0.4", ] [project.urls] From d4868af76ec58bd1c1b63e95d577e9a9118c2985 Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Mon, 21 Nov 2022 10:32:11 -0500 Subject: [PATCH 08/71] Drop support for Python 2 --- cloudera/datadog_checks/cloudera/check.py | 1 - cloudera/hatch.toml | 2 +- cloudera/setup.py | 79 ----------------------- 3 files changed, 1 insertion(+), 81 deletions(-) delete mode 100644 cloudera/setup.py diff --git a/cloudera/datadog_checks/cloudera/check.py b/cloudera/datadog_checks/cloudera/check.py index b152d468f66df..49a9ea1dc9af5 100644 --- a/cloudera/datadog_checks/cloudera/check.py +++ b/cloudera/datadog_checks/cloudera/check.py @@ -36,7 +36,6 @@ def run_timeseries_checks(self): value = item.data[0].value attributes = item.metadata.attributes - # TODO: make this compatible with Py2 tags = [f"{datadog_tag}:{attributes[attribute]}" for datadog_tag, attribute in query['tags']] category = attributes['category'].lower() diff --git a/cloudera/hatch.toml b/cloudera/hatch.toml index c1f666386ae2a..4293e03e3b5f0 100644 --- a/cloudera/hatch.toml +++ b/cloudera/hatch.toml @@ -1,4 +1,4 @@ [env.collectors.datadog-checks] [[envs.default.matrix]] -python = ["27", "38"] +python = ["38"] diff --git a/cloudera/setup.py b/cloudera/setup.py deleted file mode 100644 index 55d1eee914a49..0000000000000 --- a/cloudera/setup.py +++ /dev/null @@ -1,79 +0,0 @@ -# (C) Datadog, Inc. 2022-present -# All rights reserved -# Licensed under a 3-clause BSD style license (see LICENSE) -from codecs import open # To use a consistent encoding -from os import path - -from setuptools import setup - -HERE = path.dirname(path.abspath(__file__)) - -# Get version info -ABOUT = {} -with open(path.join(HERE, 'datadog_checks', 'cloudera', '__about__.py')) as f: - exec(f.read(), ABOUT) - -# Get the long description from the README file -with open(path.join(HERE, 'README.md'), encoding='utf-8') as f: - long_description = f.read() - - -def get_dependencies(): - dep_file = path.join(HERE, 'requirements.in') - if not path.isfile(dep_file): - return [] - - with open(dep_file, encoding='utf-8') as f: - return f.readlines() - - -def parse_pyproject_array(name): - import os - import re - from ast import literal_eval - - pattern = r'^{} = (\[.*?\])$'.format(name) - - with open(os.path.join(HERE, 'pyproject.toml'), 'r', encoding='utf-8') as f: - # Windows \r\n prevents match - contents = '\n'.join(line.rstrip() for line in f.readlines()) - - array = re.search(pattern, contents, flags=re.MULTILINE | re.DOTALL).group(1) - return literal_eval(array) - - -CHECKS_BASE_REQ = parse_pyproject_array('dependencies')[0] - - -setup( - name='datadog-cloudera', - version=ABOUT['__version__'], - description='The Cloudera check', - long_description=long_description, - long_description_content_type='text/markdown', - keywords='datadog agent cloudera check', - # The project's main homepage. - url='https://github.com/DataDog/integrations-core', - # Author details - author='Datadog', - author_email='packages@datadoghq.com', - # License - license='BSD-3-Clause', - # See https://pypi.org/classifiers - classifiers=[ - 'Development Status :: 5 - Production/Stable', - 'Intended Audience :: Developers', - 'Intended Audience :: System Administrators', - 'Topic :: System :: Monitoring', - 'License :: OSI Approved :: BSD License', - 'Programming Language :: Python :: 2.7', - 'Programming Language :: Python :: 3.8', - ], - # The package we're going to ship - packages=['datadog_checks.cloudera'], - # Run-time dependencies - install_requires=[CHECKS_BASE_REQ], - extras_require={'deps': parse_pyproject_array('deps')}, - # Extra files to ship with the wheel package - include_package_data=True, -) From 0a17f6cac7eac2f8458c8b0beae5ddf71411fc62 Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Mon, 21 Nov 2022 15:05:23 -0500 Subject: [PATCH 09/71] Clean up timeseries metrics --- cloudera/datadog_checks/cloudera/check.py | 33 +++++++++++++--------- cloudera/datadog_checks/cloudera/client.py | 9 ++++-- cloudera/datadog_checks/cloudera/common.py | 4 +-- cloudera/tests/common.py | 2 +- 4 files changed, 28 insertions(+), 20 deletions(-) diff --git a/cloudera/datadog_checks/cloudera/check.py b/cloudera/datadog_checks/cloudera/check.py index 49a9ea1dc9af5..ad8581c60c516 100644 --- a/cloudera/datadog_checks/cloudera/check.py +++ b/cloudera/datadog_checks/cloudera/check.py @@ -4,17 +4,24 @@ import datetime import time -from datadog_checks.base import AgentCheck +from datadog_checks.base import AgentCheck, ConfigurationError from .client_factory import make_api_client -from .common import API_ENTITY_STATUS, CAN_CONNECT, CLUSTER_HEALTH, CLUSTER_RESOURCE_API, SERVICE_HEALTH, SERVICE_RESOURCE_API +from .common import API_ENTITY_STATUS, CAN_CONNECT, CLUSTER_HEALTH, CLUSTERS_RESOURCE_API, SERVICE_HEALTH, SERVICES_RESOURCE_API from .queries import TIMESERIES_QUERIES - +from six import PY2 class ClouderaCheck(AgentCheck): __NAMESPACE__ = 'cloudera' def __init__(self, name, init_config, instances): + if PY2: + raise ConfigurationError( + "This version of the integration is only available when using py3. " + "Check https://docs.datadoghq.com/agent/guide/agent-v6-python-3 " + "for more information." + ) + super(ClouderaCheck, self).__init__(name, init_config, instances) self.client, self._error = make_api_client(self, self.instance) @@ -25,19 +32,17 @@ def __init__(self, name, init_config, instances): self.custom_tags = self.instance.get("tags", []) def run_timeseries_checks(self): - to_time = datetime.datetime.fromtimestamp(time.time()) - from_time = datetime.datetime.fromtimestamp(time.time() - 6000) - # For each timeseries query, get the metrics for query in TIMESERIES_QUERIES: - items = self.client.run_timeseries_query(query=query['query_string'], from_time=from_time, to_time=to_time) + items = self.client.run_timeseries_query(query=query['query_string']) + for item in items: + if not item.data: + self.log.info(f"Data for entity {item.metadata.entity_name} is empty") + continue - for item in items.time_series: value = item.data[0].value attributes = item.metadata.attributes - tags = [f"{datadog_tag}:{attributes[attribute]}" for datadog_tag, attribute in query['tags']] - category = attributes['category'].lower() self.gauge(f"{category}.{query['metric_name']}", value, tags=tags) @@ -50,7 +55,7 @@ def run_service_checks(self): # - Role # - Host - cluster_responses = self.client.run_query(CLUSTER_RESOURCE_API, "read_clusters", view='full', cluster_type='any') + cluster_responses = self.client.run_query(CLUSTERS_RESOURCE_API, "read_clusters", view='full', cluster_type='any') for cluster_response in cluster_responses: tags = [ f'cluster_type:{cluster_response.cluster_type}', @@ -60,7 +65,7 @@ def run_service_checks(self): self._submit_health_check(cluster_response, CLUSTER_HEALTH, tags) # For each cluster, get the services - services = self.client.run_query(SERVICE_RESOURCE_API, "read_services", view='full', cluster_name=cluster_response.display_name) + services = self.client.run_query(SERVICES_RESOURCE_API, "read_services", view='full', cluster_name=cluster_response.display_name) for service in services: tags = [ @@ -78,11 +83,11 @@ def run_service_checks(self): # Output OK can_connect if got to here self.service_check(CAN_CONNECT, AgentCheck.OK) - def _submit_service_check(self, item, service_check, tags): + def _submit_health_check(self, item, service_check, tags): status = API_ENTITY_STATUS[item.entity_status] message = None if status is AgentCheck.OK else item.entity_status - self.service_check(service_check, status, message=message, tags=tags) + # self.service_check(service_check, status, message=message, tags=tags) def check(self, _): # Run through the list of default timeseries metrics first diff --git a/cloudera/datadog_checks/cloudera/client.py b/cloudera/datadog_checks/cloudera/client.py index a5a011471e7aa..c8de561a19ff1 100644 --- a/cloudera/datadog_checks/cloudera/client.py +++ b/cloudera/datadog_checks/cloudera/client.py @@ -16,11 +16,14 @@ def run_query(self, cloudera_api_class, cloudera_api_method, **kwargs): return response.items - def run_timeseries_query(self, query, from_time, to_time): + def run_timeseries_query(self, query): api_instance = cm_client.TimeSeriesResourceApi(self.api_client) - response = api_instance.query_time_series(_from=from_time, query=query, to=to_time) - # There is always only one item in list `items` + # Note: by default query_time_series() sets the optional `to_time` + # param to `now` and `_from_time` param to 5 minutes before now. + response = api_instance.query_time_series(query=query) + + # There is always only one item in response list `items` return response.items[0].time_series def get_cluster_tags(self): diff --git a/cloudera/datadog_checks/cloudera/common.py b/cloudera/datadog_checks/cloudera/common.py index 039812b65d287..e97990d93938d 100644 --- a/cloudera/datadog_checks/cloudera/common.py +++ b/cloudera/datadog_checks/cloudera/common.py @@ -19,5 +19,5 @@ CAN_CONNECT = "can_connect" CLUSTER_HEALTH = "cluster.health" SERVICE_HEALTH = "service.health" -CLUSTER_RESOURCE_API = "ClusterResourceApi" -SERVICE_RESOURCE_API = "ServiceResourceApi" \ No newline at end of file +CLUSTERS_RESOURCE_API = "ClustersResourceApi" +SERVICES_RESOURCE_API = "ServicesResourceApi" \ No newline at end of file diff --git a/cloudera/tests/common.py b/cloudera/tests/common.py index 11ca0f1373c48..6cb43e6687762 100644 --- a/cloudera/tests/common.py +++ b/cloudera/tests/common.py @@ -4,7 +4,7 @@ INSTANCE = { 'workload_username': '~', - 'workload_password': '~', + 'workload_password': 'wyz*xbw7cej*mbh9VUW', 'api_url': '~', } From e25bcd52515118398e750c9316326ace8b60398c Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Mon, 21 Nov 2022 16:05:18 -0500 Subject: [PATCH 10/71] Add more metrics --- cloudera/datadog_checks/cloudera/check.py | 16 +++- cloudera/datadog_checks/cloudera/queries.py | 82 ++++++++++++++++++++- 2 files changed, 92 insertions(+), 6 deletions(-) diff --git a/cloudera/datadog_checks/cloudera/check.py b/cloudera/datadog_checks/cloudera/check.py index ad8581c60c516..05edca1fc342c 100644 --- a/cloudera/datadog_checks/cloudera/check.py +++ b/cloudera/datadog_checks/cloudera/check.py @@ -26,27 +26,35 @@ def __init__(self, name, init_config, instances): self.client, self._error = make_api_client(self, self.instance) if self.client is None: - self.error("API Client is none: %s", self._error) + self.log.error(f"Cloudera API Client is none: {self._error}") self.service_check(CAN_CONNECT, AgentCheck.CRITICAL) self.custom_tags = self.instance.get("tags", []) def run_timeseries_checks(self): # For each timeseries query, get the metrics + # TODO: Running these metrics cause the execution time to be high, run async? for query in TIMESERIES_QUERIES: items = self.client.run_timeseries_query(query=query['query_string']) for item in items: if not item.data: - self.log.info(f"Data for entity {item.metadata.entity_name} is empty") + self.log.debug(f"Data for entity {item.metadata.entity_name} is empty") continue value = item.data[0].value attributes = item.metadata.attributes - tags = [f"{datadog_tag}:{attributes[attribute]}" for datadog_tag, attribute in query['tags']] + + # TODO: Add custom tags to this + tags = [] + for datadog_tag, attribute in query['tags']: + try: + tags.append(f"{datadog_tag}:{attributes[attribute]}") + except: + self.log.debug(f"no {datadog_tag} tag for metric {item.metadata.entity_name}") + category = attributes['category'].lower() self.gauge(f"{category}.{query['metric_name']}", value, tags=tags) - def run_service_checks(self): # Structure: # Cluster diff --git a/cloudera/datadog_checks/cloudera/queries.py b/cloudera/datadog_checks/cloudera/queries.py index 9a8931a9c7dd0..b3a898e7e332f 100644 --- a/cloudera/datadog_checks/cloudera/queries.py +++ b/cloudera/datadog_checks/cloudera/queries.py @@ -19,13 +19,91 @@ }, { 'query_string': 'select last(cpu_system_rate)', - 'tags': [ # TODO: Add more tags + 'tags': [ ('cloudera_hostname', 'hostname'), ('entity_name', 'entityName'), ('host_id', 'hostId'), - ('rack_id', 'rackId') + ('rack_id', 'rackId'), + ('cluster_display_name', 'clusterDisplayName'), ], 'metric_name': 'cpu_system_rate' }, + { + 'query_string': 'select last(load_1)', + 'tags': [ + ('cloudera_hostname', 'hostname'), + ('entity_name', 'entityName'), + ('host_id', 'hostId'), + ('rack_id', 'rackId'), + ('cluster_display_name', 'clusterDisplayName'), + ], + 'metric_name': 'load_1' + }, + { + 'query_string': 'select last(physical_memory_cached)', + 'tags': [ + ('cloudera_hostname', 'hostname'), + ('entity_name', 'entityName'), + ('host_id', 'hostId'), + ('rack_id', 'rackId'), + ('cluster_display_name', 'clusterDisplayName'), + ], + 'metric_name': 'physical_memory_cached' + }, + { + 'query_string': 'select last(mem_rss)', + 'tags': [ + ('cloudera_hostname', 'hostname'), + ('entity_name', 'entityName'), + ('host_id', 'hostId'), + ('rack_id', 'rackId'), + ('cluster_display_name', 'clusterDisplayName'), + ('role_type', 'roleType'), + ('service_display_name', 'serviceDisplayName'), + ], + 'metric_name': 'mem_rss' + }, + { + 'query_string': 'select last(swap_out_rate)', + 'tags': [ + ('cloudera_hostname', 'hostname'), + ('entity_name', 'entityName'), + ('host_id', 'hostId'), + ('rack_id', 'rackId'), + ('cluster_display_name', 'clusterDisplayName'), + ('role_type', 'roleType'), + ('service_display_name', 'serviceDisplayName'), + ], + 'metric_name': 'swap_out_rate' + }, + { + 'query_string': 'select last(total_bytes_receive_rate_across_network_interfaces)', + 'tags': [ + ('cloudera_hostname', 'hostname'), + ('entity_name', 'entityName'), + ('host_id', 'hostId'), + ('rack_id', 'rackId'), + ('cluster_display_name', 'clusterDisplayName'), + ('role_type', 'roleType'), + ('service_display_name', 'serviceDisplayName'), + ('role_config_group', 'roleConfigGroup'), + ], + 'metric_name': 'total_bytes_receive_rate_across_network_interfaces' + }, + { + 'query_string': 'select last(await_time)', + 'tags': [ + ('cloudera_hostname', 'hostname'), + ('entity_name', 'entityName'), + ('host_id', 'hostId'), + ('rack_id', 'rackId'), + ('cluster_display_name', 'clusterDisplayName'), + ('role_type', 'roleType'), + ('service_display_name', 'serviceDisplayName'), + ], + 'metric_name': 'await_time' + } + + ] From 43efa9a2dfc9229fb588e65d25cca63f0127922b Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Mon, 21 Nov 2022 16:05:57 -0500 Subject: [PATCH 11/71] Add more metrics --- cloudera/tests/common.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cloudera/tests/common.py b/cloudera/tests/common.py index 6cb43e6687762..11ca0f1373c48 100644 --- a/cloudera/tests/common.py +++ b/cloudera/tests/common.py @@ -4,7 +4,7 @@ INSTANCE = { 'workload_username': '~', - 'workload_password': 'wyz*xbw7cej*mbh9VUW', + 'workload_password': '~', 'api_url': '~', } From fd00fe849a53c7c59852ee62e6040d773d5d718d Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Tue, 22 Nov 2022 09:30:25 -0500 Subject: [PATCH 12/71] Implement host service check and fix style --- cloudera/datadog_checks/cloudera/check.py | 65 ++++++++++++++----- cloudera/datadog_checks/cloudera/client.py | 4 +- .../datadog_checks/cloudera/client_factory.py | 2 +- cloudera/datadog_checks/cloudera/common.py | 5 +- cloudera/datadog_checks/cloudera/queries.py | 25 +++---- cloudera/tests/common.py | 2 +- cloudera/tests/conftest.py | 2 + cloudera/tests/test_cloudera.py | 6 +- 8 files changed, 71 insertions(+), 40 deletions(-) diff --git a/cloudera/datadog_checks/cloudera/check.py b/cloudera/datadog_checks/cloudera/check.py index 05edca1fc342c..5e5b6fdaeb02b 100644 --- a/cloudera/datadog_checks/cloudera/check.py +++ b/cloudera/datadog_checks/cloudera/check.py @@ -1,15 +1,22 @@ # (C) Datadog, Inc. 2022-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -import datetime -import time +from six import PY2 from datadog_checks.base import AgentCheck, ConfigurationError from .client_factory import make_api_client -from .common import API_ENTITY_STATUS, CAN_CONNECT, CLUSTER_HEALTH, CLUSTERS_RESOURCE_API, SERVICE_HEALTH, SERVICES_RESOURCE_API +from .common import ( + API_ENTITY_STATUS, + CAN_CONNECT, + CLUSTER_HEALTH, + CLUSTERS_RESOURCE_API, + HOST_HEALTH, + ROLE_HEALTH, + SERVICES_RESOURCE_API, +) from .queries import TIMESERIES_QUERIES -from six import PY2 + class ClouderaCheck(AgentCheck): __NAMESPACE__ = 'cloudera' @@ -63,30 +70,52 @@ def run_service_checks(self): # - Role # - Host - cluster_responses = self.client.run_query(CLUSTERS_RESOURCE_API, "read_clusters", view='full', cluster_type='any') + cluster_responses = self.client.run_query( + CLUSTERS_RESOURCE_API, "read_clusters", view='full', cluster_type='any' + ) for cluster_response in cluster_responses: tags = [ f'cluster_type:{cluster_response.cluster_type}', f'cluster_url:{cluster_response.cluster_url}', f'cluster_name:{cluster_response.display_name}', ] - self._submit_health_check(cluster_response, CLUSTER_HEALTH, tags) - + self._submit_health_check(cluster_response, CLUSTER_HEALTH, tags) + # For each cluster, get the services - services = self.client.run_query(SERVICES_RESOURCE_API, "read_services", view='full', cluster_name=cluster_response.display_name) + service_responses = self.client.run_query( + SERVICES_RESOURCE_API, "read_services", view='full', cluster_name=cluster_response.display_name + ) - for service in services: + for service_response in service_responses: tags = [ - f'service_name:{service.display_name}', - f'service_url:{service.service_url}', - f'service_url:{service.service_url}', - f'service_type:{service.type}', + f'service_name:{service_response.display_name}', + f'service_url:{service_response.service_url}', + f'service_url:{service_response.service_url}', + f'service_type:{service_response.type}', ] - self._submit_health_check(service, SERVICE_HEALTH, tags) + # role and services are the same, but since the metric categories use role, the service check will use role as well + self._submit_health_check(service_response, ROLE_HEALTH, tags) # TODO: Get nameservice and role health checks - # TODO: Get host health check + # For each cluster, get the hosts + host_responses = self.client.run_query( + CLUSTERS_RESOURCE_API, "list_hosts", view='full', cluster_name=cluster_response.display_name + ) + + for host_response in host_responses: + host_tags = [ + f'cloudera_host_id:{host_response.host_id}', + f'cloudera_host_url:{host_response.host_url}', + f'cloudera_hostname:{host_response.hostname}', + ] + self._submit_health_check(host_response, HOST_HEALTH, host_tags) + # submit metrics for hosts + self.gauge("host.num_cores", host_response.num_cores, host_tags) + self.gauge("host.num_physical_cores", host_response.num_physical_cores, host_tags) + self.gauge("host.total_phys_mem_bytes", host_response.total_phys_mem_bytes, host_tags) + + # host metrics # Output OK can_connect if got to here self.service_check(CAN_CONNECT, AgentCheck.OK) @@ -94,8 +123,8 @@ def run_service_checks(self): def _submit_health_check(self, item, service_check, tags): status = API_ENTITY_STATUS[item.entity_status] message = None if status is AgentCheck.OK else item.entity_status - - # self.service_check(service_check, status, message=message, tags=tags) + + self.service_check(service_check, status, message=message, tags=tags) def check(self, _): # Run through the list of default timeseries metrics first @@ -104,4 +133,6 @@ def check(self, _): # Get the service checks of cluster, service, nameservice, role, and host self.run_service_checks() + # Get the health check metrics of clusters and services + # TODO: Run any custom queries diff --git a/cloudera/datadog_checks/cloudera/client.py b/cloudera/datadog_checks/cloudera/client.py index c8de561a19ff1..3c1b0f2cdf33e 100644 --- a/cloudera/datadog_checks/cloudera/client.py +++ b/cloudera/datadog_checks/cloudera/client.py @@ -19,7 +19,7 @@ def run_query(self, cloudera_api_class, cloudera_api_method, **kwargs): def run_timeseries_query(self, query): api_instance = cm_client.TimeSeriesResourceApi(self.api_client) - # Note: by default query_time_series() sets the optional `to_time` + # Note: by default query_time_series() sets the optional `to_time` # param to `now` and `_from_time` param to 5 minutes before now. response = api_instance.query_time_series(query=query) @@ -28,4 +28,4 @@ def run_timeseries_query(self, query): def get_cluster_tags(self): - raise NotImplemented \ No newline at end of file + raise NotImplemented diff --git a/cloudera/datadog_checks/cloudera/client_factory.py b/cloudera/datadog_checks/cloudera/client_factory.py index 88fce99b085eb..1a8dbe018d126 100644 --- a/cloudera/datadog_checks/cloudera/client_factory.py +++ b/cloudera/datadog_checks/cloudera/client_factory.py @@ -9,4 +9,4 @@ def make_api_client(check, instance): try: return ClouderaClient(username=workload_username, password=workload_password, api_url=api_url), None except Exception as e: - return None, str(e) \ No newline at end of file + return None, str(e) diff --git a/cloudera/datadog_checks/cloudera/common.py b/cloudera/datadog_checks/cloudera/common.py index e97990d93938d..722e5d9b679c0 100644 --- a/cloudera/datadog_checks/cloudera/common.py +++ b/cloudera/datadog_checks/cloudera/common.py @@ -18,6 +18,7 @@ CAN_CONNECT = "can_connect" CLUSTER_HEALTH = "cluster.health" -SERVICE_HEALTH = "service.health" +ROLE_HEALTH = "role.health" +HOST_HEALTH = "host.health" CLUSTERS_RESOURCE_API = "ClustersResourceApi" -SERVICES_RESOURCE_API = "ServicesResourceApi" \ No newline at end of file +SERVICES_RESOURCE_API = "ServicesResourceApi" diff --git a/cloudera/datadog_checks/cloudera/queries.py b/cloudera/datadog_checks/cloudera/queries.py index b3a898e7e332f..01eba7f9b6ce7 100644 --- a/cloudera/datadog_checks/cloudera/queries.py +++ b/cloudera/datadog_checks/cloudera/queries.py @@ -1,9 +1,7 @@ - # Each query is of format: # query - the actual query # tags - a list of tuples containing (datadog_tag_name, cloudera_attribute_name) # metric_name - the name of the Datadog metric name -# TODO: Add other timeseries metrics TIMESERIES_QUERIES = [ { 'query_string': 'select last(cpu_soft_irq_rate)', @@ -13,9 +11,9 @@ ('entity_name', 'entityName'), ('cluster_name', 'clusterName'), ('host_id', 'hostId'), - ('rack_id', 'rackId') + ('rack_id', 'rackId'), ], - 'metric_name': 'cpu_soft_irq_rate' + 'metric_name': 'cpu_soft_irq_rate', }, { 'query_string': 'select last(cpu_system_rate)', @@ -26,7 +24,7 @@ ('rack_id', 'rackId'), ('cluster_display_name', 'clusterDisplayName'), ], - 'metric_name': 'cpu_system_rate' + 'metric_name': 'cpu_system_rate', }, { 'query_string': 'select last(load_1)', @@ -37,7 +35,7 @@ ('rack_id', 'rackId'), ('cluster_display_name', 'clusterDisplayName'), ], - 'metric_name': 'load_1' + 'metric_name': 'load_1', }, { 'query_string': 'select last(physical_memory_cached)', @@ -48,7 +46,7 @@ ('rack_id', 'rackId'), ('cluster_display_name', 'clusterDisplayName'), ], - 'metric_name': 'physical_memory_cached' + 'metric_name': 'physical_memory_cached', }, { 'query_string': 'select last(mem_rss)', @@ -61,7 +59,7 @@ ('role_type', 'roleType'), ('service_display_name', 'serviceDisplayName'), ], - 'metric_name': 'mem_rss' + 'metric_name': 'mem_rss', }, { 'query_string': 'select last(swap_out_rate)', @@ -74,7 +72,7 @@ ('role_type', 'roleType'), ('service_display_name', 'serviceDisplayName'), ], - 'metric_name': 'swap_out_rate' + 'metric_name': 'swap_out_rate', }, { 'query_string': 'select last(total_bytes_receive_rate_across_network_interfaces)', @@ -88,7 +86,7 @@ ('service_display_name', 'serviceDisplayName'), ('role_config_group', 'roleConfigGroup'), ], - 'metric_name': 'total_bytes_receive_rate_across_network_interfaces' + 'metric_name': 'total_bytes_receive_rate_across_network_interfaces', }, { 'query_string': 'select last(await_time)', @@ -101,9 +99,6 @@ ('role_type', 'roleType'), ('service_display_name', 'serviceDisplayName'), ], - 'metric_name': 'await_time' - } - - + 'metric_name': 'await_time', + }, ] - diff --git a/cloudera/tests/common.py b/cloudera/tests/common.py index 11ca0f1373c48..0a83b4e43f9f1 100644 --- a/cloudera/tests/common.py +++ b/cloudera/tests/common.py @@ -9,4 +9,4 @@ } HERE = get_here() -COMPOSE_FILE = os.path.join(HERE, 'docker', 'docker-compose.yaml') \ No newline at end of file +COMPOSE_FILE = os.path.join(HERE, 'docker', 'docker-compose.yaml') diff --git a/cloudera/tests/conftest.py b/cloudera/tests/conftest.py index 0dfb7328f147b..aaf0fef27d055 100644 --- a/cloudera/tests/conftest.py +++ b/cloudera/tests/conftest.py @@ -2,6 +2,7 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) import pytest + from datadog_checks.dev import docker_run from . import common @@ -12,6 +13,7 @@ def dd_environment(): with docker_run(common.COMPOSE_FILE): yield common.INSTANCE + @pytest.fixture def instance(): return common.INSTANCE diff --git a/cloudera/tests/test_cloudera.py b/cloudera/tests/test_cloudera.py index 8d54704de4653..031b7dd53b3e5 100644 --- a/cloudera/tests/test_cloudera.py +++ b/cloudera/tests/test_cloudera.py @@ -6,12 +6,14 @@ from datadog_checks.base import AgentCheck from datadog_checks.base.stubs.aggregator import AggregatorStub -from datadog_checks.dev.utils import get_metadata_metrics from datadog_checks.cloudera import ClouderaCheck +from datadog_checks.dev.utils import get_metadata_metrics def test_emits_critical_service_check_when_service_is_down(): assert True # need at least 1 passing test to start an env + + # # type: (Callable[[AgentCheck, bool], None], AggregatorStub, Dict[str, Any]) -> None # check = ClouderaCheck('cloudera', {}, [instance]) # dd_run_check(check) @@ -21,4 +23,4 @@ def test_emits_critical_service_check_when_service_is_down(): # Tests to add: # happy path # emit critical when can't connect (incorrect credentials) -# emit critical when cm-client is missing \ No newline at end of file +# emit critical when cm-client is missing From 1bba4b567219eb9b82b627055e0ea4f7fa6c8d6f Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Wed, 23 Nov 2022 12:01:57 -0500 Subject: [PATCH 13/71] Change how cloudera client is created --- cloudera/datadog_checks/cloudera/check.py | 21 +++++++++++++----- .../datadog_checks/cloudera/client_factory.py | 12 ---------- cloudera/datadog_checks/cloudera/common.py | 2 ++ .../cloudera/config_models/__init__.py | 1 - .../cloudera/config_models/defaults.py | 9 +++++++- .../cloudera/config_models/instance.py | 14 +++++++++++- .../cloudera/config_models/shared.py | 1 - cloudera/tests/test_cloudera.py | 22 ++++++++++++------- 8 files changed, 52 insertions(+), 30 deletions(-) delete mode 100644 cloudera/datadog_checks/cloudera/client_factory.py diff --git a/cloudera/datadog_checks/cloudera/check.py b/cloudera/datadog_checks/cloudera/check.py index 5e5b6fdaeb02b..c135aa1e9484b 100644 --- a/cloudera/datadog_checks/cloudera/check.py +++ b/cloudera/datadog_checks/cloudera/check.py @@ -2,10 +2,10 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) from six import PY2 +from datadog_checks.cloudera.client import ClouderaClient from datadog_checks.base import AgentCheck, ConfigurationError -from .client_factory import make_api_client from .common import ( API_ENTITY_STATUS, CAN_CONNECT, @@ -16,9 +16,10 @@ SERVICES_RESOURCE_API, ) from .queries import TIMESERIES_QUERIES +from .config_models import ConfigMixin -class ClouderaCheck(AgentCheck): +class ClouderaCheck(AgentCheck, ConfigMixin): __NAMESPACE__ = 'cloudera' def __init__(self, name, init_config, instances): @@ -30,13 +31,21 @@ def __init__(self, name, init_config, instances): ) super(ClouderaCheck, self).__init__(name, init_config, instances) + self.client = None - self.client, self._error = make_api_client(self, self.instance) - if self.client is None: - self.log.error(f"Cloudera API Client is none: {self._error}") + self.check_initializations.append(self._create_client) + + def _create_client(self): + try: + client = ClouderaClient(username=self.config.workload_username, password=self.config.workload_password, api_url=self.config.api_url) + except Exception as e: + self.log.error(f"Cloudera API Client is none: {e}") self.service_check(CAN_CONNECT, AgentCheck.CRITICAL) + raise + + self.client = client + self.custom_tags = self.config.tags # TODO: Don't need self.custom_tags - self.custom_tags = self.instance.get("tags", []) def run_timeseries_checks(self): # For each timeseries query, get the metrics diff --git a/cloudera/datadog_checks/cloudera/client_factory.py b/cloudera/datadog_checks/cloudera/client_factory.py deleted file mode 100644 index 1a8dbe018d126..0000000000000 --- a/cloudera/datadog_checks/cloudera/client_factory.py +++ /dev/null @@ -1,12 +0,0 @@ -from .client import ClouderaClient - - -def make_api_client(check, instance): - workload_username = instance.get("workload_username") - workload_password = instance.get("workload_password") - api_url = instance.get("api_url") - - try: - return ClouderaClient(username=workload_username, password=workload_password, api_url=api_url), None - except Exception as e: - return None, str(e) diff --git a/cloudera/datadog_checks/cloudera/common.py b/cloudera/datadog_checks/cloudera/common.py index 722e5d9b679c0..7540a5da9e2e2 100644 --- a/cloudera/datadog_checks/cloudera/common.py +++ b/cloudera/datadog_checks/cloudera/common.py @@ -22,3 +22,5 @@ HOST_HEALTH = "host.health" CLUSTERS_RESOURCE_API = "ClustersResourceApi" SERVICES_RESOURCE_API = "ServicesResourceApi" + +# mock all of the methods and classes of the cloudera client \ No newline at end of file diff --git a/cloudera/datadog_checks/cloudera/config_models/__init__.py b/cloudera/datadog_checks/cloudera/config_models/__init__.py index c321f5f8b198b..70857774b0017 100644 --- a/cloudera/datadog_checks/cloudera/config_models/__init__.py +++ b/cloudera/datadog_checks/cloudera/config_models/__init__.py @@ -7,7 +7,6 @@ # ddev -x validate config -s # ddev -x validate models -s - from .instance import InstanceConfig from .shared import SharedConfig diff --git a/cloudera/datadog_checks/cloudera/config_models/defaults.py b/cloudera/datadog_checks/cloudera/config_models/defaults.py index 5de6795a5f2a5..80f6034897177 100644 --- a/cloudera/datadog_checks/cloudera/config_models/defaults.py +++ b/cloudera/datadog_checks/cloudera/config_models/defaults.py @@ -7,7 +7,6 @@ # ddev -x validate config -s # ddev -x validate models -s - from datadog_checks.base.utils.models.fields import get_default_field_value @@ -15,10 +14,18 @@ def shared_service(field, value): return get_default_field_value(field, value) +def instance_disable_generic_tags(field, value): + return False + + def instance_empty_default_hostname(field, value): return False +def instance_metric_patterns(field, value): + return get_default_field_value(field, value) + + def instance_min_collection_interval(field, value): return 15 diff --git a/cloudera/datadog_checks/cloudera/config_models/instance.py b/cloudera/datadog_checks/cloudera/config_models/instance.py index 89ddeb7fba827..1b9e135cae39c 100644 --- a/cloudera/datadog_checks/cloudera/config_models/instance.py +++ b/cloudera/datadog_checks/cloudera/config_models/instance.py @@ -7,7 +7,6 @@ # ddev -x validate config -s # ddev -x validate models -s - from __future__ import annotations from typing import Optional, Sequence @@ -20,14 +19,27 @@ from . import defaults, validators +class MetricPatterns(BaseModel): + class Config: + allow_mutation = False + + exclude: Optional[Sequence[str]] + include: Optional[Sequence[str]] + + class InstanceConfig(BaseModel): class Config: allow_mutation = False + api_url: str + disable_generic_tags: Optional[bool] empty_default_hostname: Optional[bool] + metric_patterns: Optional[MetricPatterns] min_collection_interval: Optional[float] service: Optional[str] tags: Optional[Sequence[str]] + workload_password: str + workload_username: str @root_validator(pre=True) def _initial_validation(cls, values): diff --git a/cloudera/datadog_checks/cloudera/config_models/shared.py b/cloudera/datadog_checks/cloudera/config_models/shared.py index a2a479a9d2bbf..de215afcbdd5e 100644 --- a/cloudera/datadog_checks/cloudera/config_models/shared.py +++ b/cloudera/datadog_checks/cloudera/config_models/shared.py @@ -7,7 +7,6 @@ # ddev -x validate config -s # ddev -x validate models -s - from __future__ import annotations from typing import Optional diff --git a/cloudera/tests/test_cloudera.py b/cloudera/tests/test_cloudera.py index 031b7dd53b3e5..683ea972efabf 100644 --- a/cloudera/tests/test_cloudera.py +++ b/cloudera/tests/test_cloudera.py @@ -10,17 +10,23 @@ from datadog_checks.dev.utils import get_metadata_metrics -def test_emits_critical_service_check_when_service_is_down(): - assert True # need at least 1 passing test to start an env +def test_emits_critical_service_check_when_api_is_none(): + assert True + +def test_emits_critical_service_check_when_credentials_incorrect(): + assert True + +def test_py2_not_supported(): + assert True + +def test_timeseries_item_no_data(): + assert True + +def test_check(): + assert True # # type: (Callable[[AgentCheck, bool], None], AggregatorStub, Dict[str, Any]) -> None # check = ClouderaCheck('cloudera', {}, [instance]) # dd_run_check(check) # aggregator.assert_service_check('cloudera.can_connect', ClouderaCheck.CRITICAL) - - -# Tests to add: -# happy path -# emit critical when can't connect (incorrect credentials) -# emit critical when cm-client is missing From 87c0051fa1b0d838ee92292216f4be78b4bc4cbd Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Wed, 23 Nov 2022 18:03:04 -0500 Subject: [PATCH 14/71] Add caddy to mock API output --- cloudera/tests/docker/docker-compose.yaml | 2 + .../tests/docker/fixtures/api/v48/clusters | 31 + .../cod--qfdcinkqrzw/hosts?view=FULL | 1411 +++++++++++++++++ .../tests/fixtures/cpu_soft_irq_rate.json | 325 ---- 4 files changed, 1444 insertions(+), 325 deletions(-) create mode 100644 cloudera/tests/docker/fixtures/api/v48/clusters create mode 100644 cloudera/tests/docker/fixtures/api/v48/clusters_test/cod--qfdcinkqrzw/hosts?view=FULL delete mode 100644 cloudera/tests/fixtures/cpu_soft_irq_rate.json diff --git a/cloudera/tests/docker/docker-compose.yaml b/cloudera/tests/docker/docker-compose.yaml index 238f5752ebb59..9895b04b5bed3 100644 --- a/cloudera/tests/docker/docker-compose.yaml +++ b/cloudera/tests/docker/docker-compose.yaml @@ -4,5 +4,7 @@ services: cloudera: image: caddy:2.1.1-alpine container_name: cloudera + volumes: + - ./fixtures:/usr/share/caddy ports: - 80:80 \ No newline at end of file diff --git a/cloudera/tests/docker/fixtures/api/v48/clusters b/cloudera/tests/docker/fixtures/api/v48/clusters new file mode 100644 index 0000000000000..d199f07633d98 --- /dev/null +++ b/cloudera/tests/docker/fixtures/api/v48/clusters @@ -0,0 +1,31 @@ +{ + "items": [ + { + "name": "cod--qfdcinkqrzw", + "displayName": "cod--qfdcinkqrzw", + "fullVersion": "7.2.15", + "maintenanceMode": false, + "maintenanceOwners": [], + "clusterUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/clusterRedirect/cod--qfdcinkqrzw", + "hostsUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/clusterRedirect/cod--qfdcinkqrzw/hosts", + "entityStatus": "BAD_HEALTH", + "uuid": "4f201e38-4f96-4a60-8fe5-11231a128617", + "dataContextRefs": [ + { + "name": "agent-integ-cloudera-data-lake" + } + ], + "clusterType": "COMPUTE_CLUSTER", + "tags": [ + { + "name": "_cldr_cb_clustertype", + "value": "Data Hub" + }, + { + "name": "_cldr_cb_origin", + "value": "cloudbreak" + } + ] + } + ] +} \ No newline at end of file diff --git a/cloudera/tests/docker/fixtures/api/v48/clusters_test/cod--qfdcinkqrzw/hosts?view=FULL b/cloudera/tests/docker/fixtures/api/v48/clusters_test/cod--qfdcinkqrzw/hosts?view=FULL new file mode 100644 index 0000000000000..ab8f821075970 --- /dev/null +++ b/cloudera/tests/docker/fixtures/api/v48/clusters_test/cod--qfdcinkqrzw/hosts?view=FULL @@ -0,0 +1,1411 @@ +{ + "items": [ + { + "healthChecks": [ + { + "name": "HOST_AGENT_CERTIFICATE_EXPIRY", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_AGENT_LOG_DIRECTORY_FREE_SPACE", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_AGENT_PARCEL_DIRECTORY_FREE_SPACE", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_AGENT_PROCESS_DIRECTORY_FREE_SPACE", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_AVAILABLE_ENTROPY", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_CLOCK_OFFSET", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_DNS_RESOLUTION", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_MEMORY_SWAPPING", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_NETWORK_FRAME_ERRORS", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_NETWORK_INTERFACES_SLOW_MODE", + "summary": "DISABLED", + "suppressed": false + }, + { + "name": "HOST_SCM_HEALTH", + "summary": "GOOD", + "suppressed": false + } + ], + "roleRefs": [ + { + "serviceName": "MGMT", + "roleName": "EVENTSERVER", + "healthSummary": "GOOD", + "roleStatus": "STARTED" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "hue", + "roleName": "hue-HUE_SERVER-7d0b6bba5cf23b4729586ee8d35ab766", + "healthSummary": "GOOD", + "roleStatus": "STARTED" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "data_context_connector-8617", + "roleName": "datadefdc267-GATEWAY-7d0b6bba5cf23b4729586ee8d35ab766", + "healthSummary": "GOOD", + "roleStatus": "NA" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "hue", + "roleName": "hue-KT_RENEWER-7d0b6bba5cf23b4729586ee8d35ab766", + "healthSummary": "GOOD", + "roleStatus": "STARTED" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "queuemanager", + "roleName": "queuc8af8526-QUEUEMANAGER_WEBAPP-7d0b6bba5cf23b4729586ee8d35ab76", + "healthSummary": "GOOD", + "roleStatus": "STARTED" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "hdfs", + "roleName": "hdfs-GATEWAY-7d0b6bba5cf23b4729586ee8d35ab766", + "healthSummary": "GOOD", + "roleStatus": "NA" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "hbase", + "roleName": "hbase-GATEWAY-7d0b6bba5cf23b4729586ee8d35ab766", + "healthSummary": "GOOD", + "roleStatus": "NA" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "hue", + "roleName": "hue-HUE_LOAD_BALANCER-7d0b6bba5cf23b4729586ee8d35ab766", + "healthSummary": "GOOD", + "roleStatus": "STARTED" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "knox-e428", + "roleName": "knox-e428-KNOX_GATEWAY-7d0b6bba5cf23b4729586ee8d35ab766", + "healthSummary": "GOOD", + "roleStatus": "STARTED" + }, + { + "serviceName": "MGMT", + "roleName": "ALERTPUBLISHER", + "healthSummary": "GOOD", + "roleStatus": "STARTED" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "yarn", + "roleName": "yarn-GATEWAY-7d0b6bba5cf23b4729586ee8d35ab766", + "healthSummary": "GOOD", + "roleStatus": "NA" + }, + { + "serviceName": "MGMT", + "roleName": "TELEMETRYPUBLISHER", + "healthSummary": "GOOD", + "roleStatus": "STARTED" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "queuemanager", + "roleName": "queuemanager-QUEUEMANAGER_STORE-7d0b6bba5cf23b4729586ee8d35ab766", + "healthSummary": "GOOD", + "roleStatus": "STARTED" + }, + { + "serviceName": "MGMT", + "roleName": "HOSTMONITOR", + "healthSummary": "GOOD", + "roleStatus": "STARTED" + }, + { + "serviceName": "MGMT", + "roleName": "SERVICEMONITOR", + "healthSummary": "GOOD", + "roleStatus": "STARTED" + } + ], + "maintenanceOwners": [], + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "ipAddress": "10.10.0.14", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "rackId": "/ap-northeast-1d", + "hostUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/hostRedirect/d8623d9457f4db06c5637c4fd4c02f5d", + "lastHeartbeat": "2022-11-23T22:24:34.308Z", + "healthSummary": "GOOD", + "maintenanceMode": false, + "commissionState": "COMMISSIONED", + "numCores": 8, + "numPhysicalCores": 4, + "totalPhysMemBytes": 33079799808, + "entityStatus": "GOOD_HEALTH", + "clusterRef": { + "clusterName": "cod--qfdcinkqrzw", + "displayName": "cod--qfdcinkqrzw" + }, + "distribution": { + "distributionType": "RHEL7", + "name": "centos", + "version": "7.9.2009" + }, + "tags": [ + { + "name": "_cldr_cm_host_template_name", + "value": "gateway" + } + ] + }, + { + "healthChecks": [ + { + "name": "HOST_AGENT_CERTIFICATE_EXPIRY", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_AGENT_LOG_DIRECTORY_FREE_SPACE", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_AGENT_PARCEL_DIRECTORY_FREE_SPACE", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_AGENT_PROCESS_DIRECTORY_FREE_SPACE", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_AVAILABLE_ENTROPY", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_CLOCK_OFFSET", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_DNS_RESOLUTION", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_MEMORY_SWAPPING", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_NETWORK_FRAME_ERRORS", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_NETWORK_INTERFACES_SLOW_MODE", + "summary": "DISABLED", + "suppressed": false + }, + { + "name": "HOST_SCM_HEALTH", + "summary": "GOOD", + "suppressed": false + } + ], + "roleRefs": [ + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "hdfs", + "roleName": "hdfs-BALANCER-3bc8f544ef0c15a373bbe9f9790fefba", + "healthSummary": "GOOD", + "roleStatus": "NA" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "yarn", + "roleName": "yarn-JOBHISTORY-3bc8f544ef0c15a373bbe9f9790fefba", + "healthSummary": "GOOD", + "roleStatus": "STARTED" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "hdfs", + "roleName": "hdfs-JOURNALNODE-3bc8f544ef0c15a373bbe9f9790fefba", + "healthSummary": "GOOD", + "roleStatus": "STARTED" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "data_context_connector-8617", + "roleName": "datadefdc267-GATEWAY-3bc8f544ef0c15a373bbe9f9790fefba", + "healthSummary": "GOOD", + "roleStatus": "NA" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "zookeeper-e52d", + "roleName": "zookeeper-e52d-SERVER-3bc8f544ef0c15a373bbe9f9790fefba", + "healthSummary": "GOOD", + "roleStatus": "STARTED" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "hdfs", + "roleName": "hdfs-GATEWAY-3bc8f544ef0c15a373bbe9f9790fefba", + "healthSummary": "GOOD", + "roleStatus": "NA" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "hbase", + "roleName": "hbase-HBASERESTSERVER-3bc8f544ef0c15a373bbe9f9790fefba", + "healthSummary": "GOOD", + "roleStatus": "STARTED" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "hbase", + "roleName": "hbase-GATEWAY-3bc8f544ef0c15a373bbe9f9790fefba", + "healthSummary": "GOOD", + "roleStatus": "NA" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "yarn", + "roleName": "yarn-GATEWAY-3bc8f544ef0c15a373bbe9f9790fefba", + "healthSummary": "GOOD", + "roleStatus": "NA" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "omid", + "roleName": "omid-OMID_TSO-3bc8f544ef0c15a373bbe9f9790fefba", + "healthSummary": "GOOD", + "roleStatus": "STARTED" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "hbase", + "roleName": "hbase-HBASETHRIFTSERVER-3bc8f544ef0c15a373bbe9f9790fefba", + "healthSummary": "GOOD", + "roleStatus": "STARTED" + } + ], + "maintenanceOwners": [], + "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", + "ipAddress": "10.10.1.14", + "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "rackId": "/ap-northeast-1a", + "hostUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/hostRedirect/96efbf3e7279bf25ae44fe0a6398ee97", + "lastHeartbeat": "2022-11-23T22:24:34.957Z", + "healthSummary": "GOOD", + "maintenanceMode": false, + "commissionState": "COMMISSIONED", + "numCores": 8, + "numPhysicalCores": 4, + "totalPhysMemBytes": 33079799808, + "entityStatus": "GOOD_HEALTH", + "clusterRef": { + "clusterName": "cod--qfdcinkqrzw", + "displayName": "cod--qfdcinkqrzw" + }, + "distribution": { + "distributionType": "RHEL7", + "name": "centos", + "version": "7.9.2009" + }, + "tags": [ + { + "name": "_cldr_cm_host_template_name", + "value": "leader" + } + ] + }, + { + "healthChecks": [ + { + "name": "HOST_AGENT_CERTIFICATE_EXPIRY", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_AGENT_LOG_DIRECTORY_FREE_SPACE", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_AGENT_PARCEL_DIRECTORY_FREE_SPACE", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_AGENT_PROCESS_DIRECTORY_FREE_SPACE", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_AVAILABLE_ENTROPY", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_CLOCK_OFFSET", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_DNS_RESOLUTION", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_MEMORY_SWAPPING", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_NETWORK_FRAME_ERRORS", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_NETWORK_INTERFACES_SLOW_MODE", + "summary": "DISABLED", + "suppressed": false + }, + { + "name": "HOST_SCM_HEALTH", + "summary": "GOOD", + "suppressed": false + } + ], + "roleRefs": [ + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "yarn", + "roleName": "yarn-RESOURCEMANAGER-6e88fa1a7ad969e10ea41365cba9abc5", + "healthSummary": "BAD", + "roleStatus": "BUSY" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "yarn", + "roleName": "yarn-GATEWAY-6e88fa1a7ad969e10ea41365cba9abc5", + "healthSummary": "GOOD", + "roleStatus": "NA" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "hbase", + "roleName": "hbase-GATEWAY-6e88fa1a7ad969e10ea41365cba9abc5", + "healthSummary": "GOOD", + "roleStatus": "NA" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "hdfs", + "roleName": "hdfs-GATEWAY-6e88fa1a7ad969e10ea41365cba9abc5", + "healthSummary": "GOOD", + "roleStatus": "NA" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "hdfs", + "roleName": "hdfs-NAMENODE-6e88fa1a7ad969e10ea41365cba9abc5", + "healthSummary": "GOOD", + "roleStatus": "STARTED" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "data_context_connector-8617", + "roleName": "datadefdc267-GATEWAY-6e88fa1a7ad969e10ea41365cba9abc5", + "healthSummary": "GOOD", + "roleStatus": "NA" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "hbase", + "roleName": "hbase-MASTER-6e88fa1a7ad969e10ea41365cba9abc5", + "healthSummary": "BAD", + "roleStatus": "STARTED" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "zookeeper-e52d", + "roleName": "zookeeper-e52d-SERVER-6e88fa1a7ad969e10ea41365cba9abc5", + "healthSummary": "GOOD", + "roleStatus": "STARTED" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "hdfs", + "roleName": "hdfs-FAILOVERCONTROLLER-6e88fa1a7ad969e10ea41365cba9abc5", + "healthSummary": "GOOD", + "roleStatus": "STOPPED" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "hdfs", + "roleName": "hdfs-JOURNALNODE-6e88fa1a7ad969e10ea41365cba9abc5", + "healthSummary": "GOOD", + "roleStatus": "STARTED" + } + ], + "maintenanceOwners": [], + "hostId": "759451867dfde961d6adbeb21d9c13f9", + "ipAddress": "10.10.0.138", + "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "rackId": "/ap-northeast-1d", + "hostUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/hostRedirect/759451867dfde961d6adbeb21d9c13f9", + "lastHeartbeat": "2022-11-23T22:24:33.778Z", + "healthSummary": "GOOD", + "maintenanceMode": false, + "commissionState": "COMMISSIONED", + "numCores": 8, + "numPhysicalCores": 4, + "totalPhysMemBytes": 33079799808, + "entityStatus": "GOOD_HEALTH", + "clusterRef": { + "clusterName": "cod--qfdcinkqrzw", + "displayName": "cod--qfdcinkqrzw" + }, + "distribution": { + "distributionType": "RHEL7", + "name": "centos", + "version": "7.9.2009" + }, + "tags": [ + { + "name": "_cldr_cm_host_template_name", + "value": "master" + } + ] + }, + { + "healthChecks": [ + { + "name": "HOST_AGENT_CERTIFICATE_EXPIRY", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_AGENT_LOG_DIRECTORY_FREE_SPACE", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_AGENT_PARCEL_DIRECTORY_FREE_SPACE", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_AGENT_PROCESS_DIRECTORY_FREE_SPACE", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_AVAILABLE_ENTROPY", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_CLOCK_OFFSET", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_DNS_RESOLUTION", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_MEMORY_SWAPPING", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_NETWORK_FRAME_ERRORS", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_NETWORK_INTERFACES_SLOW_MODE", + "summary": "DISABLED", + "suppressed": false + }, + { + "name": "HOST_SCM_HEALTH", + "summary": "GOOD", + "suppressed": false + } + ], + "roleRefs": [ + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "hbase", + "roleName": "hbase-MASTER-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "healthSummary": "BAD", + "roleStatus": "STARTED" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "hdfs", + "roleName": "hdfs-JOURNALNODE-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "healthSummary": "GOOD", + "roleStatus": "STARTED" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "zookeeper-e52d", + "roleName": "zookeeper-e52d-SERVER-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "healthSummary": "BAD", + "roleStatus": "STARTED" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "hdfs", + "roleName": "hdfs-FAILOVERCONTROLLER-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "healthSummary": "GOOD", + "roleStatus": "STOPPED" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "yarn", + "roleName": "yarn-RESOURCEMANAGER-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "healthSummary": "BAD", + "roleStatus": "STARTED" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "yarn", + "roleName": "yarn-GATEWAY-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "healthSummary": "GOOD", + "roleStatus": "NA" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "data_context_connector-8617", + "roleName": "datadefdc267-GATEWAY-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "healthSummary": "GOOD", + "roleStatus": "NA" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "hdfs", + "roleName": "hdfs-GATEWAY-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "healthSummary": "GOOD", + "roleStatus": "NA" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "hdfs", + "roleName": "hdfs-NAMENODE-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "healthSummary": "GOOD", + "roleStatus": "STARTED" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "hbase", + "roleName": "hbase-GATEWAY-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "healthSummary": "GOOD", + "roleStatus": "NA" + } + ], + "maintenanceOwners": [], + "hostId": "119115ab851aefe1429860d4255b3fab", + "ipAddress": "10.10.2.182", + "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "rackId": "/ap-northeast-1c", + "hostUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/hostRedirect/119115ab851aefe1429860d4255b3fab", + "lastHeartbeat": "2022-11-23T22:24:33.786Z", + "healthSummary": "GOOD", + "maintenanceMode": false, + "commissionState": "COMMISSIONED", + "numCores": 8, + "numPhysicalCores": 4, + "totalPhysMemBytes": 33079799808, + "entityStatus": "GOOD_HEALTH", + "clusterRef": { + "clusterName": "cod--qfdcinkqrzw", + "displayName": "cod--qfdcinkqrzw" + }, + "distribution": { + "distributionType": "RHEL7", + "name": "centos", + "version": "7.9.2009" + }, + "tags": [ + { + "name": "_cldr_cm_host_template_name", + "value": "master" + } + ] + }, + { + "healthChecks": [ + { + "name": "HOST_AGENT_CERTIFICATE_EXPIRY", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_AGENT_LOG_DIRECTORY_FREE_SPACE", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_AGENT_PARCEL_DIRECTORY_FREE_SPACE", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_AGENT_PROCESS_DIRECTORY_FREE_SPACE", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_AVAILABLE_ENTROPY", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_CLOCK_OFFSET", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_DNS_RESOLUTION", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_MEMORY_SWAPPING", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_NETWORK_FRAME_ERRORS", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_NETWORK_INTERFACES_SLOW_MODE", + "summary": "DISABLED", + "suppressed": false + }, + { + "name": "HOST_SCM_HEALTH", + "summary": "GOOD", + "suppressed": false + } + ], + "roleRefs": [ + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "hbase", + "roleName": "hbase-REGIONSERVER-145da1565b8e2c4165145d9ecc0c784e", + "healthSummary": "GOOD", + "roleStatus": "STARTED" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "phoenix", + "roleName": "phoenix-PHOENIX_QUERY_SERVER-145da1565b8e2c4165145d9ecc0c784e", + "healthSummary": "GOOD", + "roleStatus": "STARTED" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "hdfs", + "roleName": "hdfs-DATANODE-145da1565b8e2c4165145d9ecc0c784e", + "healthSummary": "BAD", + "roleStatus": "STARTED" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "yarn", + "roleName": "yarn-NODEMANAGER-145da1565b8e2c4165145d9ecc0c784e", + "healthSummary": "BAD", + "roleStatus": "STARTED" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "hdfs", + "roleName": "hdfs-GATEWAY-145da1565b8e2c4165145d9ecc0c784e", + "healthSummary": "GOOD", + "roleStatus": "NA" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "yarn", + "roleName": "yarn-GATEWAY-145da1565b8e2c4165145d9ecc0c784e", + "healthSummary": "GOOD", + "roleStatus": "NA" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "hbase", + "roleName": "hbase-GATEWAY-145da1565b8e2c4165145d9ecc0c784e", + "healthSummary": "GOOD", + "roleStatus": "NA" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "data_context_connector-8617", + "roleName": "datadefdc267-GATEWAY-145da1565b8e2c4165145d9ecc0c784e", + "healthSummary": "GOOD", + "roleStatus": "NA" + } + ], + "maintenanceOwners": [], + "hostId": "ed528836ae33e47e6657b95373571c33", + "ipAddress": "10.10.0.193", + "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", + "rackId": "/ap-northeast-1d", + "hostUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/hostRedirect/ed528836ae33e47e6657b95373571c33", + "lastHeartbeat": "2022-11-23T22:24:33.699Z", + "healthSummary": "GOOD", + "maintenanceMode": false, + "commissionState": "COMMISSIONED", + "numCores": 8, + "numPhysicalCores": 4, + "totalPhysMemBytes": 33079799808, + "entityStatus": "GOOD_HEALTH", + "clusterRef": { + "clusterName": "cod--qfdcinkqrzw", + "displayName": "cod--qfdcinkqrzw" + }, + "distribution": { + "distributionType": "RHEL7", + "name": "centos", + "version": "7.9.2009" + }, + "tags": [ + { + "name": "_cldr_cm_host_template_name", + "value": "worker" + } + ] + }, + { + "healthChecks": [ + { + "name": "HOST_AGENT_CERTIFICATE_EXPIRY", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_AGENT_LOG_DIRECTORY_FREE_SPACE", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_AGENT_PARCEL_DIRECTORY_FREE_SPACE", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_AGENT_PROCESS_DIRECTORY_FREE_SPACE", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_AVAILABLE_ENTROPY", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_CLOCK_OFFSET", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_DNS_RESOLUTION", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_MEMORY_SWAPPING", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_NETWORK_FRAME_ERRORS", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_NETWORK_INTERFACES_SLOW_MODE", + "summary": "DISABLED", + "suppressed": false + }, + { + "name": "HOST_SCM_HEALTH", + "summary": "GOOD", + "suppressed": false + } + ], + "roleRefs": [ + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "hbase", + "roleName": "hbase-GATEWAY-7e9a53b768c95833df424c7d7b0ae857", + "healthSummary": "GOOD", + "roleStatus": "NA" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "hdfs", + "roleName": "hdfs-GATEWAY-7e9a53b768c95833df424c7d7b0ae857", + "healthSummary": "GOOD", + "roleStatus": "NA" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "hbase", + "roleName": "hbase-REGIONSERVER-7e9a53b768c95833df424c7d7b0ae857", + "healthSummary": "GOOD", + "roleStatus": "STARTED" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "yarn", + "roleName": "yarn-GATEWAY-7e9a53b768c95833df424c7d7b0ae857", + "healthSummary": "GOOD", + "roleStatus": "NA" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "hdfs", + "roleName": "hdfs-DATANODE-7e9a53b768c95833df424c7d7b0ae857", + "healthSummary": "GOOD", + "roleStatus": "STARTED" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "yarn", + "roleName": "yarn-NODEMANAGER-7e9a53b768c95833df424c7d7b0ae857", + "healthSummary": "GOOD", + "roleStatus": "STARTED" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "data_context_connector-8617", + "roleName": "datadefdc267-GATEWAY-7e9a53b768c95833df424c7d7b0ae857", + "healthSummary": "GOOD", + "roleStatus": "NA" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "phoenix", + "roleName": "phoenix-PHOENIX_QUERY_SERVER-7e9a53b768c95833df424c7d7b0ae857", + "healthSummary": "GOOD", + "roleStatus": "STARTED" + } + ], + "maintenanceOwners": [], + "hostId": "22f6ab659c835d47bc13d6c8f3370110", + "ipAddress": "10.10.2.176", + "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", + "rackId": "/ap-northeast-1c", + "hostUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/hostRedirect/22f6ab659c835d47bc13d6c8f3370110", + "lastHeartbeat": "2022-11-23T22:24:34.430Z", + "healthSummary": "GOOD", + "maintenanceMode": false, + "commissionState": "COMMISSIONED", + "numCores": 8, + "numPhysicalCores": 4, + "totalPhysMemBytes": 32727478272, + "entityStatus": "GOOD_HEALTH", + "clusterRef": { + "clusterName": "cod--qfdcinkqrzw", + "displayName": "cod--qfdcinkqrzw" + }, + "distribution": { + "distributionType": "RHEL7", + "name": "centos", + "version": "7.9.2009" + }, + "tags": [ + { + "name": "_cldr_cm_host_template_name", + "value": "worker" + } + ] + }, + { + "healthChecks": [ + { + "name": "HOST_AGENT_CERTIFICATE_EXPIRY", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_AGENT_LOG_DIRECTORY_FREE_SPACE", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_AGENT_PARCEL_DIRECTORY_FREE_SPACE", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_AGENT_PROCESS_DIRECTORY_FREE_SPACE", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_AVAILABLE_ENTROPY", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_CLOCK_OFFSET", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_DNS_RESOLUTION", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_MEMORY_SWAPPING", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_NETWORK_FRAME_ERRORS", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_NETWORK_INTERFACES_SLOW_MODE", + "summary": "DISABLED", + "suppressed": false + }, + { + "name": "HOST_SCM_HEALTH", + "summary": "GOOD", + "suppressed": false + } + ], + "roleRefs": [ + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "hbase", + "roleName": "hbase-REGIONSERVER-3c658ac6009daca54192736b1502fae1", + "healthSummary": "GOOD", + "roleStatus": "STARTED" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "hbase", + "roleName": "hbase-GATEWAY-3c658ac6009daca54192736b1502fae1", + "healthSummary": "GOOD", + "roleStatus": "NA" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "hdfs", + "roleName": "hdfs-GATEWAY-3c658ac6009daca54192736b1502fae1", + "healthSummary": "GOOD", + "roleStatus": "NA" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "phoenix", + "roleName": "phoenix-PHOENIX_QUERY_SERVER-3c658ac6009daca54192736b1502fae1", + "healthSummary": "GOOD", + "roleStatus": "STARTED" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "yarn", + "roleName": "yarn-GATEWAY-3c658ac6009daca54192736b1502fae1", + "healthSummary": "GOOD", + "roleStatus": "NA" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "data_context_connector-8617", + "roleName": "datadefdc267-GATEWAY-3c658ac6009daca54192736b1502fae1", + "healthSummary": "GOOD", + "roleStatus": "NA" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "hdfs", + "roleName": "hdfs-DATANODE-3c658ac6009daca54192736b1502fae1", + "healthSummary": "GOOD", + "roleStatus": "STARTED" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "yarn", + "roleName": "yarn-NODEMANAGER-3c658ac6009daca54192736b1502fae1", + "healthSummary": "GOOD", + "roleStatus": "STARTED" + } + ], + "maintenanceOwners": [], + "hostId": "49adda80d1b98e9262ee146fd7fd798b", + "ipAddress": "10.10.212.157", + "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", + "rackId": "/ap-northeast-1c", + "hostUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/hostRedirect/49adda80d1b98e9262ee146fd7fd798b", + "lastHeartbeat": "2022-11-23T22:24:35.255Z", + "healthSummary": "GOOD", + "maintenanceMode": false, + "commissionState": "COMMISSIONED", + "numCores": 8, + "numPhysicalCores": 4, + "totalPhysMemBytes": 32727470080, + "entityStatus": "GOOD_HEALTH", + "clusterRef": { + "clusterName": "cod--qfdcinkqrzw", + "displayName": "cod--qfdcinkqrzw" + }, + "distribution": { + "distributionType": "RHEL7", + "name": "centos", + "version": "7.9.2009" + }, + "tags": [ + { + "name": "_cldr_cm_host_template_name", + "value": "worker" + } + ] + }, + { + "healthChecks": [ + { + "name": "HOST_AGENT_CERTIFICATE_EXPIRY", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_AGENT_LOG_DIRECTORY_FREE_SPACE", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_AGENT_PARCEL_DIRECTORY_FREE_SPACE", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_AGENT_PROCESS_DIRECTORY_FREE_SPACE", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_AVAILABLE_ENTROPY", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_CLOCK_OFFSET", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_DNS_RESOLUTION", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_MEMORY_SWAPPING", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_NETWORK_FRAME_ERRORS", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_NETWORK_INTERFACES_SLOW_MODE", + "summary": "DISABLED", + "suppressed": false + }, + { + "name": "HOST_SCM_HEALTH", + "summary": "GOOD", + "suppressed": false + } + ], + "roleRefs": [ + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "yarn", + "roleName": "yarn-NODEMANAGER-d51d3a03fc3294039de9c160b1013676", + "healthSummary": "GOOD", + "roleStatus": "STARTED" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "hdfs", + "roleName": "hdfs-GATEWAY-d51d3a03fc3294039de9c160b1013676", + "healthSummary": "GOOD", + "roleStatus": "NA" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "hdfs", + "roleName": "hdfs-DATANODE-d51d3a03fc3294039de9c160b1013676", + "healthSummary": "GOOD", + "roleStatus": "STARTED" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "data_context_connector-8617", + "roleName": "datadefdc267-GATEWAY-d51d3a03fc3294039de9c160b1013676", + "healthSummary": "GOOD", + "roleStatus": "NA" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "hbase", + "roleName": "hbase-REGIONSERVER-d51d3a03fc3294039de9c160b1013676", + "healthSummary": "GOOD", + "roleStatus": "STARTED" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "phoenix", + "roleName": "phoenix-PHOENIX_QUERY_SERVER-d51d3a03fc3294039de9c160b1013676", + "healthSummary": "GOOD", + "roleStatus": "STARTED" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "hbase", + "roleName": "hbase-GATEWAY-d51d3a03fc3294039de9c160b1013676", + "healthSummary": "GOOD", + "roleStatus": "NA" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "yarn", + "roleName": "yarn-GATEWAY-d51d3a03fc3294039de9c160b1013676", + "healthSummary": "GOOD", + "roleStatus": "NA" + } + ], + "maintenanceOwners": [], + "hostId": "88ae2611748383b5628d4aec94873da9", + "ipAddress": "10.10.1.177", + "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", + "rackId": "/ap-northeast-1a", + "hostUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/hostRedirect/88ae2611748383b5628d4aec94873da9", + "lastHeartbeat": "2022-11-23T22:24:33.808Z", + "healthSummary": "GOOD", + "maintenanceMode": false, + "commissionState": "COMMISSIONED", + "numCores": 8, + "numPhysicalCores": 4, + "totalPhysMemBytes": 33079799808, + "entityStatus": "GOOD_HEALTH", + "clusterRef": { + "clusterName": "cod--qfdcinkqrzw", + "displayName": "cod--qfdcinkqrzw" + }, + "distribution": { + "distributionType": "RHEL7", + "name": "centos", + "version": "7.9.2009" + }, + "tags": [ + { + "name": "_cldr_cm_host_template_name", + "value": "worker" + } + ] + }, + { + "healthChecks": [ + { + "name": "HOST_AGENT_CERTIFICATE_EXPIRY", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_AGENT_LOG_DIRECTORY_FREE_SPACE", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_AGENT_PARCEL_DIRECTORY_FREE_SPACE", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_AGENT_PROCESS_DIRECTORY_FREE_SPACE", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_AVAILABLE_ENTROPY", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_CLOCK_OFFSET", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_DNS_RESOLUTION", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_MEMORY_SWAPPING", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_NETWORK_FRAME_ERRORS", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "HOST_NETWORK_INTERFACES_SLOW_MODE", + "summary": "DISABLED", + "suppressed": false + }, + { + "name": "HOST_SCM_HEALTH", + "summary": "GOOD", + "suppressed": false + } + ], + "roleRefs": [ + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "phoenix", + "roleName": "phoenix-PHOENIX_QUERY_SERVER-bf4b8e304dd0b549bcad6614d3129033", + "healthSummary": "GOOD", + "roleStatus": "STARTED" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "data_context_connector-8617", + "roleName": "datadefdc267-GATEWAY-bf4b8e304dd0b549bcad6614d3129033", + "healthSummary": "GOOD", + "roleStatus": "NA" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "hbase", + "roleName": "hbase-REGIONSERVER-bf4b8e304dd0b549bcad6614d3129033", + "healthSummary": "GOOD", + "roleStatus": "STARTED" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "yarn", + "roleName": "yarn-NODEMANAGER-bf4b8e304dd0b549bcad6614d3129033", + "healthSummary": "GOOD", + "roleStatus": "STARTED" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "hdfs", + "roleName": "hdfs-DATANODE-bf4b8e304dd0b549bcad6614d3129033", + "healthSummary": "GOOD", + "roleStatus": "STARTED" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "hdfs", + "roleName": "hdfs-GATEWAY-bf4b8e304dd0b549bcad6614d3129033", + "healthSummary": "GOOD", + "roleStatus": "NA" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "yarn", + "roleName": "yarn-GATEWAY-bf4b8e304dd0b549bcad6614d3129033", + "healthSummary": "GOOD", + "roleStatus": "NA" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "hbase", + "roleName": "hbase-GATEWAY-bf4b8e304dd0b549bcad6614d3129033", + "healthSummary": "GOOD", + "roleStatus": "NA" + } + ], + "maintenanceOwners": [], + "hostId": "9784d85849c7179b790d476c483fd905", + "ipAddress": "10.10.188.72", + "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", + "rackId": "/ap-northeast-1d", + "hostUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/hostRedirect/9784d85849c7179b790d476c483fd905", + "lastHeartbeat": "2022-11-23T22:24:34.092Z", + "healthSummary": "GOOD", + "maintenanceMode": false, + "commissionState": "COMMISSIONED", + "numCores": 8, + "numPhysicalCores": 4, + "totalPhysMemBytes": 33079799808, + "entityStatus": "GOOD_HEALTH", + "clusterRef": { + "clusterName": "cod--qfdcinkqrzw", + "displayName": "cod--qfdcinkqrzw" + }, + "distribution": { + "distributionType": "RHEL7", + "name": "centos", + "version": "7.9.2009" + }, + "tags": [ + { + "name": "_cldr_cm_host_template_name", + "value": "worker" + } + ] + } + ] +} \ No newline at end of file diff --git a/cloudera/tests/fixtures/cpu_soft_irq_rate.json b/cloudera/tests/fixtures/cpu_soft_irq_rate.json deleted file mode 100644 index ed3cc25af3d87..0000000000000 --- a/cloudera/tests/fixtures/cpu_soft_irq_rate.json +++ /dev/null @@ -1,325 +0,0 @@ -{ - "items": [ - { - "timeSeries": [ - { - "metadata": { - "metricName": "last(cpu_soft_irq_rate)", - "entityName": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-14T20:57:10.033Z", - "endTime": "2022-11-14T21:02:10.033Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "96efbf3e7279bf25ae44fe0a6398ee97", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1a" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_soft_irq_rate) WHERE entityName = \"96efbf3e7279bf25ae44fe0a6398ee97\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-14T21:01:13.000Z", - "value": 0, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_soft_irq_rate)", - "entityName": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-14T20:57:10.033Z", - "endTime": "2022-11-14T21:02:10.033Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "88ae2611748383b5628d4aec94873da9", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "88ae2611748383b5628d4aec94873da9", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1a" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_soft_irq_rate) WHERE entityName = \"88ae2611748383b5628d4aec94873da9\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-14T21:01:11.000Z", - "value": 0, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_soft_irq_rate)", - "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-14T20:57:10.033Z", - "endTime": "2022-11-14T21:02:10.033Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "d8623d9457f4db06c5637c4fd4c02f5d", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_soft_irq_rate) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-14T21:01:13.000Z", - "value": 0.0015000000000024254, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_soft_irq_rate)", - "entityName": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-14T20:57:10.033Z", - "endTime": "2022-11-14T21:02:10.033Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "22f6ab659c835d47bc13d6c8f3370110", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "22f6ab659c835d47bc13d6c8f3370110", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_soft_irq_rate) WHERE entityName = \"22f6ab659c835d47bc13d6c8f3370110\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-14T21:01:12.000Z", - "value": 0, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_soft_irq_rate)", - "entityName": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-14T20:57:10.033Z", - "endTime": "2022-11-14T21:02:10.033Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "49adda80d1b98e9262ee146fd7fd798b", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "49adda80d1b98e9262ee146fd7fd798b", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_soft_irq_rate) WHERE entityName = \"49adda80d1b98e9262ee146fd7fd798b\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-14T21:01:12.000Z", - "value": 0, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_soft_irq_rate)", - "entityName": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-14T20:57:10.033Z", - "endTime": "2022-11-14T21:02:10.033Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "9784d85849c7179b790d476c483fd905", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "9784d85849c7179b790d476c483fd905", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_soft_irq_rate) WHERE entityName = \"9784d85849c7179b790d476c483fd905\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-14T21:01:11.000Z", - "value": 0.0001666666666665151, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_soft_irq_rate)", - "entityName": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-14T20:57:10.033Z", - "endTime": "2022-11-14T21:02:10.033Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "119115ab851aefe1429860d4255b3fab", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "119115ab851aefe1429860d4255b3fab", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_soft_irq_rate) WHERE entityName = \"119115ab851aefe1429860d4255b3fab\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-14T21:01:14.000Z", - "value": 0.0001666666666665151, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_soft_irq_rate)", - "entityName": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-14T20:57:10.033Z", - "endTime": "2022-11-14T21:02:10.033Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "ed528836ae33e47e6657b95373571c33", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "ed528836ae33e47e6657b95373571c33", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_soft_irq_rate) WHERE entityName = \"ed528836ae33e47e6657b95373571c33\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-14T21:01:11.000Z", - "value": 0, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_soft_irq_rate)", - "entityName": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-14T20:57:10.033Z", - "endTime": "2022-11-14T21:02:10.033Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "759451867dfde961d6adbeb21d9c13f9", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "759451867dfde961d6adbeb21d9c13f9", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_soft_irq_rate) WHERE entityName = \"759451867dfde961d6adbeb21d9c13f9\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-14T21:01:14.000Z", - "value": 0, - "type": "SAMPLE" - } - ] - } - ], - "warnings": [], - "timeSeriesQuery": "select last(cpu_soft_irq_rate)" - } - ] -} \ No newline at end of file From 929a0ad6aa0642988411c5602478a4334f07cc70 Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Mon, 28 Nov 2022 23:59:04 -0500 Subject: [PATCH 15/71] Add caddy test API outputs --- .../cod--qfdcinkqrzw/hosts?view=FULL | 0 .../cod--qfdcinkqrzw/services?view=FULL | 291 +++ .../api/v48/{clusters => clusters/index.html} | 0 ...lse&query=select%20last(await_time)&to=now | 955 ++++++++ ...ry=select%20last(cpu_soft_irq_rate)&to=now | 325 +++ ...uery=select%20last(cpu_system_rate)&to=now | 2175 +++++++++++++++++ ...p=false&query=select%20last(load_1)&to=now | 307 +++ ...=false&query=select%20last(mem_rss)&to=now | 1774 ++++++++++++++ ...lect%20last(physical_memory_cached)&to=now | 307 +++ ...&query=select%20last(swap_out_rate)&to=now | 325 +++ ...ive_rate_across_network_interfaces)&to=now | 447 ++++ 11 files changed, 6906 insertions(+) rename cloudera/tests/docker/fixtures/api/v48/{clusters_test => clusters}/cod--qfdcinkqrzw/hosts?view=FULL (100%) create mode 100644 cloudera/tests/docker/fixtures/api/v48/clusters/cod--qfdcinkqrzw/services?view=FULL rename cloudera/tests/docker/fixtures/api/v48/{clusters => clusters/index.html} (100%) create mode 100644 cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(await_time)&to=now create mode 100644 cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(cpu_soft_irq_rate)&to=now create mode 100644 cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(cpu_system_rate)&to=now create mode 100644 cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(load_1)&to=now create mode 100644 cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(mem_rss)&to=now create mode 100644 cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(physical_memory_cached)&to=now create mode 100644 cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(swap_out_rate)&to=now create mode 100644 cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(total_bytes_receive_rate_across_network_interfaces)&to=now diff --git a/cloudera/tests/docker/fixtures/api/v48/clusters_test/cod--qfdcinkqrzw/hosts?view=FULL b/cloudera/tests/docker/fixtures/api/v48/clusters/cod--qfdcinkqrzw/hosts?view=FULL similarity index 100% rename from cloudera/tests/docker/fixtures/api/v48/clusters_test/cod--qfdcinkqrzw/hosts?view=FULL rename to cloudera/tests/docker/fixtures/api/v48/clusters/cod--qfdcinkqrzw/hosts?view=FULL diff --git a/cloudera/tests/docker/fixtures/api/v48/clusters/cod--qfdcinkqrzw/services?view=FULL b/cloudera/tests/docker/fixtures/api/v48/clusters/cod--qfdcinkqrzw/services?view=FULL new file mode 100644 index 0000000000000..aaec48c72962f --- /dev/null +++ b/cloudera/tests/docker/fixtures/api/v48/clusters/cod--qfdcinkqrzw/services?view=FULL @@ -0,0 +1,291 @@ +{ + "items": [ + { + "healthChecks": [ + { + "name": "PHOENIX_PHOENIX_QUERY_SERVER_HEALTHY", + "summary": "DISABLED", + "suppressed": false + } + ], + "maintenanceOwners": [], + "tags": [], + "name": "phoenix", + "type": "PHOENIX", + "clusterRef": { + "clusterName": "cod--qfdcinkqrzw", + "displayName": "cod--qfdcinkqrzw" + }, + "serviceUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/serviceRedirect/phoenix", + "serviceVersion": "CDH 7.2.15", + "roleInstancesUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/serviceRedirect/phoenix/instances", + "serviceState": "STOPPED", + "healthSummary": "DISABLED", + "configStalenessStatus": "FRESH", + "clientConfigStalenessStatus": "FRESH", + "maintenanceMode": false, + "displayName": "phoenix", + "entityStatus": "STOPPED" + }, + { + "healthChecks": [ + { + "name": "OMID_OMID_TSO_HEALTHY", + "summary": "DISABLED", + "suppressed": false + } + ], + "maintenanceOwners": [], + "tags": [], + "name": "omid", + "type": "OMID", + "clusterRef": { + "clusterName": "cod--qfdcinkqrzw", + "displayName": "cod--qfdcinkqrzw" + }, + "serviceUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/serviceRedirect/omid", + "serviceVersion": "CDH 7.2.15", + "roleInstancesUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/serviceRedirect/omid/instances", + "serviceState": "STOPPED", + "healthSummary": "DISABLED", + "configStalenessStatus": "FRESH", + "clientConfigStalenessStatus": "FRESH", + "maintenanceMode": false, + "displayName": "omid", + "entityStatus": "STOPPED" + }, + { + "healthChecks": [], + "maintenanceOwners": [], + "tags": [], + "name": "data_context_connector-8617", + "type": "DATA_CONTEXT_CONNECTOR", + "clusterRef": { + "clusterName": "cod--qfdcinkqrzw", + "displayName": "cod--qfdcinkqrzw" + }, + "serviceUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/serviceRedirect/data_context_connector-8617", + "serviceVersion": "CDH 7.2.15", + "roleInstancesUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/serviceRedirect/data_context_connector-8617/instances", + "serviceState": "STARTED", + "healthSummary": "NOT_AVAILABLE", + "configStalenessStatus": "FRESH", + "clientConfigStalenessStatus": "STALE", + "maintenanceMode": false, + "displayName": "agent-integ-cloudera-data-lake", + "entityStatus": "GOOD_HEALTH" + }, + { + "healthChecks": [ + { + "name": "ZOOKEEPER_CANARY_HEALTH", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "ZOOKEEPER_SERVERS_HEALTHY", + "summary": "GOOD", + "suppressed": false + } + ], + "maintenanceOwners": [], + "tags": [], + "name": "zookeeper-e52d", + "type": "ZOOKEEPER", + "clusterRef": { + "clusterName": "cod--qfdcinkqrzw", + "displayName": "cod--qfdcinkqrzw" + }, + "serviceUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/serviceRedirect/zookeeper-e52d", + "serviceVersion": "CDH 7.2.15", + "roleInstancesUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/serviceRedirect/zookeeper-e52d/instances", + "serviceState": "STARTED", + "healthSummary": "GOOD", + "configStalenessStatus": "FRESH", + "clientConfigStalenessStatus": "FRESH", + "maintenanceMode": false, + "displayName": "ZooKeeper", + "entityStatus": "GOOD_HEALTH" + }, + { + "healthChecks": [], + "maintenanceOwners": [], + "tags": [], + "name": "hdfs", + "type": "HDFS", + "clusterRef": { + "clusterName": "cod--qfdcinkqrzw", + "displayName": "cod--qfdcinkqrzw" + }, + "serviceUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/serviceRedirect/hdfs", + "serviceVersion": "CDH 7.2.15", + "roleInstancesUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/serviceRedirect/hdfs/instances", + "serviceState": "STARTED", + "healthSummary": "BAD", + "configStalenessStatus": "FRESH", + "clientConfigStalenessStatus": "FRESH", + "maintenanceMode": false, + "displayName": "hdfs", + "entityStatus": "BAD_HEALTH" + }, + { + "healthChecks": [ + { + "name": "YARN_JOBHISTORY_HEALTH", + "summary": "BAD", + "suppressed": false + }, + { + "name": "YARN_NODE_MANAGERS_HEALTHY", + "summary": "GOOD", + "suppressed": false + }, + { + "name": "YARN_RESOURCEMANAGERS_HEALTH", + "summary": "BAD", + "suppressed": false + }, + { + "name": "YARN_USAGE_AGGREGATION_HEALTH", + "summary": "DISABLED", + "suppressed": false + } + ], + "maintenanceOwners": [], + "tags": [], + "name": "yarn", + "type": "YARN", + "clusterRef": { + "clusterName": "cod--qfdcinkqrzw", + "displayName": "cod--qfdcinkqrzw" + }, + "serviceUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/serviceRedirect/yarn", + "serviceVersion": "CDH 7.2.15", + "roleInstancesUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/serviceRedirect/yarn/instances", + "serviceState": "STARTED", + "healthSummary": "BAD", + "configStalenessStatus": "FRESH", + "clientConfigStalenessStatus": "FRESH", + "maintenanceMode": false, + "displayName": "yarn", + "entityStatus": "BAD_HEALTH" + }, + { + "healthChecks": [ + { + "name": "HBASE_MASTER_HEALTH", + "summary": "DISABLED", + "suppressed": false + }, + { + "name": "HBASE_REGION_SERVERS_HEALTHY", + "summary": "DISABLED", + "suppressed": false + } + ], + "maintenanceOwners": [], + "tags": [], + "name": "hbase", + "type": "HBASE", + "clusterRef": { + "clusterName": "cod--qfdcinkqrzw", + "displayName": "cod--qfdcinkqrzw" + }, + "serviceUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/serviceRedirect/hbase", + "serviceVersion": "CDH 7.2.15", + "roleInstancesUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/serviceRedirect/hbase/instances", + "serviceState": "STOPPED", + "healthSummary": "DISABLED", + "configStalenessStatus": "FRESH", + "clientConfigStalenessStatus": "FRESH", + "maintenanceMode": false, + "displayName": "hbase", + "entityStatus": "STOPPED" + }, + { + "healthChecks": [], + "maintenanceOwners": [], + "tags": [], + "name": "queuemanager", + "type": "QUEUEMANAGER", + "clusterRef": { + "clusterName": "cod--qfdcinkqrzw", + "displayName": "cod--qfdcinkqrzw" + }, + "serviceUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/serviceRedirect/queuemanager", + "serviceVersion": "CDH 7.2.15", + "roleInstancesUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/serviceRedirect/queuemanager/instances", + "serviceState": "STARTED", + "healthSummary": "GOOD", + "configStalenessStatus": "FRESH", + "clientConfigStalenessStatus": "FRESH", + "maintenanceMode": false, + "displayName": "queuemanager", + "entityStatus": "GOOD_HEALTH" + }, + { + "healthChecks": [ + { + "name": "KNOX_KNOX_GATEWAY_HEALTHY", + "summary": "GOOD", + "suppressed": false + } + ], + "maintenanceOwners": [], + "tags": [], + "name": "knox-e428", + "type": "KNOX", + "clusterRef": { + "clusterName": "cod--qfdcinkqrzw", + "displayName": "cod--qfdcinkqrzw" + }, + "serviceUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/serviceRedirect/knox-e428", + "serviceVersion": "CDH 7.2.15", + "roleInstancesUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/serviceRedirect/knox-e428/instances", + "serviceState": "STARTED", + "healthSummary": "GOOD", + "configStalenessStatus": "FRESH", + "clientConfigStalenessStatus": "FRESH", + "maintenanceMode": false, + "displayName": "Knox", + "entityStatus": "GOOD_HEALTH" + }, + { + "healthChecks": [ + { + "name": "HUE_HUE_SERVERS_HEALTHY", + "summary": "DISABLED", + "suppressed": false + }, + { + "name": "HUE_KT_RENEWERS_HEALTHY", + "summary": "DISABLED", + "suppressed": false + }, + { + "name": "HUE_LOAD_BALANCER_HEALTHY", + "summary": "DISABLED", + "suppressed": false + } + ], + "maintenanceOwners": [], + "tags": [], + "name": "hue", + "type": "HUE", + "clusterRef": { + "clusterName": "cod--qfdcinkqrzw", + "displayName": "cod--qfdcinkqrzw" + }, + "serviceUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/serviceRedirect/hue", + "serviceVersion": "CDH 7.2.15", + "roleInstancesUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/serviceRedirect/hue/instances", + "serviceState": "STOPPED", + "healthSummary": "DISABLED", + "configStalenessStatus": "FRESH", + "clientConfigStalenessStatus": "FRESH", + "maintenanceMode": false, + "displayName": "hue", + "entityStatus": "STOPPED" + } + ] +} \ No newline at end of file diff --git a/cloudera/tests/docker/fixtures/api/v48/clusters b/cloudera/tests/docker/fixtures/api/v48/clusters/index.html similarity index 100% rename from cloudera/tests/docker/fixtures/api/v48/clusters rename to cloudera/tests/docker/fixtures/api/v48/clusters/index.html diff --git a/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(await_time)&to=now b/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(await_time)&to=now new file mode 100644 index 0000000000000..e44b5b19f3610 --- /dev/null +++ b/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(await_time)&to=now @@ -0,0 +1,955 @@ +{ + "items": [ + { + "timeSeries": [ + { + "metadata": { + "metricName": "last(await_time)", + "entityName": "nvme0n1p1 (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:49:47.846Z", + "endTime": "2022-11-29T04:54:47.846Z", + "attributes": { + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "96efbf3e7279bf25ae44fe0a6398ee97:nvme0n1p1", + "clusterName": "cod--qfdcinkqrzw", + "logicalPartition": "true", + "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", + "active": "true", + "category": "DISK", + "device": "nvme0n1p1", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "ms" + ], + "unitDenominators": [], + "expression": "SELECT last(await_time) WHERE entityName = \"96efbf3e7279bf25ae44fe0a6398ee97:nvme0n1p1\" AND category = DISK", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:54:09.000Z", + "value": 0.3150684931506849, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(await_time)", + "entityName": "nvme0n1p1 (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:49:47.846Z", + "endTime": "2022-11-29T04:54:47.846Z", + "attributes": { + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "759451867dfde961d6adbeb21d9c13f9:nvme0n1p1", + "clusterName": "cod--qfdcinkqrzw", + "logicalPartition": "true", + "hostId": "759451867dfde961d6adbeb21d9c13f9", + "active": "true", + "category": "DISK", + "device": "nvme0n1p1", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "ms" + ], + "unitDenominators": [], + "expression": "SELECT last(await_time) WHERE entityName = \"759451867dfde961d6adbeb21d9c13f9:nvme0n1p1\" AND category = DISK", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:54:43.000Z", + "value": 0.15789473684210525, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(await_time)", + "entityName": "nvme0n1p1 (cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:49:47.846Z", + "endTime": "2022-11-29T04:54:47.846Z", + "attributes": { + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "49adda80d1b98e9262ee146fd7fd798b:nvme0n1p1", + "clusterName": "cod--qfdcinkqrzw", + "logicalPartition": "true", + "hostId": "49adda80d1b98e9262ee146fd7fd798b", + "active": "true", + "category": "DISK", + "device": "nvme0n1p1", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "ms" + ], + "unitDenominators": [], + "expression": "SELECT last(await_time) WHERE entityName = \"49adda80d1b98e9262ee146fd7fd798b:nvme0n1p1\" AND category = DISK", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:54:23.000Z", + "value": 0.46774193548387094, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(await_time)", + "entityName": "nvme0n1 (cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:49:47.846Z", + "endTime": "2022-11-29T04:54:47.846Z", + "attributes": { + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "22f6ab659c835d47bc13d6c8f3370110:nvme0n1", + "clusterName": "cod--qfdcinkqrzw", + "logicalPartition": "false", + "hostId": "22f6ab659c835d47bc13d6c8f3370110", + "active": "true", + "category": "DISK", + "device": "nvme0n1", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "ms" + ], + "unitDenominators": [], + "expression": "SELECT last(await_time) WHERE entityName = \"22f6ab659c835d47bc13d6c8f3370110:nvme0n1\" AND category = DISK", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:54:24.000Z", + "value": 0.12, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(await_time)", + "entityName": "nvme0n1 (cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:49:47.846Z", + "endTime": "2022-11-29T04:54:47.846Z", + "attributes": { + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "ed528836ae33e47e6657b95373571c33:nvme0n1", + "clusterName": "cod--qfdcinkqrzw", + "logicalPartition": "false", + "hostId": "ed528836ae33e47e6657b95373571c33", + "active": "true", + "category": "DISK", + "device": "nvme0n1", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "ms" + ], + "unitDenominators": [], + "expression": "SELECT last(await_time) WHERE entityName = \"ed528836ae33e47e6657b95373571c33:nvme0n1\" AND category = DISK", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:54:22.000Z", + "value": 0.48148148148148145, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(await_time)", + "entityName": "nvme1n1 (cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:49:47.846Z", + "endTime": "2022-11-29T04:54:47.846Z", + "attributes": { + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "ed528836ae33e47e6657b95373571c33:nvme1n1", + "clusterName": "cod--qfdcinkqrzw", + "logicalPartition": "false", + "hostId": "ed528836ae33e47e6657b95373571c33", + "active": "true", + "category": "DISK", + "device": "nvme1n1", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "ms" + ], + "unitDenominators": [], + "expression": "SELECT last(await_time) WHERE entityName = \"ed528836ae33e47e6657b95373571c33:nvme1n1\" AND category = DISK", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:54:22.000Z", + "value": 0, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(await_time)", + "entityName": "nvme0n1 (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:49:47.846Z", + "endTime": "2022-11-29T04:54:47.846Z", + "attributes": { + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "96efbf3e7279bf25ae44fe0a6398ee97:nvme0n1", + "clusterName": "cod--qfdcinkqrzw", + "logicalPartition": "false", + "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", + "active": "true", + "category": "DISK", + "device": "nvme0n1", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "ms" + ], + "unitDenominators": [], + "expression": "SELECT last(await_time) WHERE entityName = \"96efbf3e7279bf25ae44fe0a6398ee97:nvme0n1\" AND category = DISK", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:54:09.000Z", + "value": 0.3150684931506849, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(await_time)", + "entityName": "nvme0n1p1 (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:49:47.846Z", + "endTime": "2022-11-29T04:54:47.846Z", + "attributes": { + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "119115ab851aefe1429860d4255b3fab:nvme0n1p1", + "clusterName": "cod--qfdcinkqrzw", + "logicalPartition": "true", + "hostId": "119115ab851aefe1429860d4255b3fab", + "active": "true", + "category": "DISK", + "device": "nvme0n1p1", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "ms" + ], + "unitDenominators": [], + "expression": "SELECT last(await_time) WHERE entityName = \"119115ab851aefe1429860d4255b3fab:nvme0n1p1\" AND category = DISK", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:53:50.000Z", + "value": 0.40540540540540543, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(await_time)", + "entityName": "nvme0n1p1 (cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:49:47.846Z", + "endTime": "2022-11-29T04:54:47.846Z", + "attributes": { + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "9784d85849c7179b790d476c483fd905:nvme0n1p1", + "clusterName": "cod--qfdcinkqrzw", + "logicalPartition": "true", + "hostId": "9784d85849c7179b790d476c483fd905", + "active": "true", + "category": "DISK", + "device": "nvme0n1p1", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "ms" + ], + "unitDenominators": [], + "expression": "SELECT last(await_time) WHERE entityName = \"9784d85849c7179b790d476c483fd905:nvme0n1p1\" AND category = DISK", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:54:22.000Z", + "value": 0.4107142857142857, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(await_time)", + "entityName": "nvme1n1 (cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:49:47.846Z", + "endTime": "2022-11-29T04:54:47.846Z", + "attributes": { + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "22f6ab659c835d47bc13d6c8f3370110:nvme1n1", + "clusterName": "cod--qfdcinkqrzw", + "logicalPartition": "false", + "hostId": "22f6ab659c835d47bc13d6c8f3370110", + "active": "true", + "category": "DISK", + "device": "nvme1n1", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "ms" + ], + "unitDenominators": [], + "expression": "SELECT last(await_time) WHERE entityName = \"22f6ab659c835d47bc13d6c8f3370110:nvme1n1\" AND category = DISK", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:54:24.000Z", + "value": 1, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(await_time)", + "entityName": "nvme1n1 (cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:49:47.846Z", + "endTime": "2022-11-29T04:54:47.846Z", + "attributes": { + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "88ae2611748383b5628d4aec94873da9:nvme1n1", + "clusterName": "cod--qfdcinkqrzw", + "logicalPartition": "false", + "hostId": "88ae2611748383b5628d4aec94873da9", + "active": "true", + "category": "DISK", + "device": "nvme1n1", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "ms" + ], + "unitDenominators": [], + "expression": "SELECT last(await_time) WHERE entityName = \"88ae2611748383b5628d4aec94873da9:nvme1n1\" AND category = DISK", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:54:23.000Z", + "value": 0.6666666666666666, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(await_time)", + "entityName": "nvme0n1 (cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:49:47.846Z", + "endTime": "2022-11-29T04:54:47.846Z", + "attributes": { + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "88ae2611748383b5628d4aec94873da9:nvme0n1", + "clusterName": "cod--qfdcinkqrzw", + "logicalPartition": "false", + "hostId": "88ae2611748383b5628d4aec94873da9", + "active": "true", + "category": "DISK", + "device": "nvme0n1", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "ms" + ], + "unitDenominators": [], + "expression": "SELECT last(await_time) WHERE entityName = \"88ae2611748383b5628d4aec94873da9:nvme0n1\" AND category = DISK", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:54:23.000Z", + "value": 0.3157894736842105, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(await_time)", + "entityName": "nvme1n1 (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:49:47.846Z", + "endTime": "2022-11-29T04:54:47.846Z", + "attributes": { + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "96efbf3e7279bf25ae44fe0a6398ee97:nvme1n1", + "clusterName": "cod--qfdcinkqrzw", + "logicalPartition": "false", + "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", + "active": "true", + "category": "DISK", + "device": "nvme1n1", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "ms" + ], + "unitDenominators": [], + "expression": "SELECT last(await_time) WHERE entityName = \"96efbf3e7279bf25ae44fe0a6398ee97:nvme1n1\" AND category = DISK", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:54:09.000Z", + "value": 0.8947368421052632, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(await_time)", + "entityName": "nvme0n1p1 (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:49:47.846Z", + "endTime": "2022-11-29T04:54:47.846Z", + "attributes": { + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d:nvme0n1p1", + "clusterName": "cod--qfdcinkqrzw", + "logicalPartition": "true", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "DISK", + "device": "nvme0n1p1", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "ms" + ], + "unitDenominators": [], + "expression": "SELECT last(await_time) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d:nvme0n1p1\" AND category = DISK", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:54:25.000Z", + "value": 0.9731543624161074, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(await_time)", + "entityName": "nvme1n1 (cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:49:47.846Z", + "endTime": "2022-11-29T04:54:47.846Z", + "attributes": { + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "9784d85849c7179b790d476c483fd905:nvme1n1", + "clusterName": "cod--qfdcinkqrzw", + "logicalPartition": "false", + "hostId": "9784d85849c7179b790d476c483fd905", + "active": "true", + "category": "DISK", + "device": "nvme1n1", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "ms" + ], + "unitDenominators": [], + "expression": "SELECT last(await_time) WHERE entityName = \"9784d85849c7179b790d476c483fd905:nvme1n1\" AND category = DISK", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:54:22.000Z", + "value": 0.8333333333333334, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(await_time)", + "entityName": "nvme1n1 (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:49:47.846Z", + "endTime": "2022-11-29T04:54:47.846Z", + "attributes": { + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d:nvme1n1", + "clusterName": "cod--qfdcinkqrzw", + "logicalPartition": "false", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "DISK", + "device": "nvme1n1", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "ms" + ], + "unitDenominators": [], + "expression": "SELECT last(await_time) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d:nvme1n1\" AND category = DISK", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:54:25.000Z", + "value": 1.8879310344827587, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(await_time)", + "entityName": "nvme0n1 (cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:49:47.846Z", + "endTime": "2022-11-29T04:54:47.846Z", + "attributes": { + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "9784d85849c7179b790d476c483fd905:nvme0n1", + "clusterName": "cod--qfdcinkqrzw", + "logicalPartition": "false", + "hostId": "9784d85849c7179b790d476c483fd905", + "active": "true", + "category": "DISK", + "device": "nvme0n1", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "ms" + ], + "unitDenominators": [], + "expression": "SELECT last(await_time) WHERE entityName = \"9784d85849c7179b790d476c483fd905:nvme0n1\" AND category = DISK", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:54:22.000Z", + "value": 0.4107142857142857, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(await_time)", + "entityName": "nvme0n1 (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:49:47.846Z", + "endTime": "2022-11-29T04:54:47.846Z", + "attributes": { + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d:nvme0n1", + "clusterName": "cod--qfdcinkqrzw", + "logicalPartition": "false", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "DISK", + "device": "nvme0n1", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "ms" + ], + "unitDenominators": [], + "expression": "SELECT last(await_time) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d:nvme0n1\" AND category = DISK", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:54:25.000Z", + "value": 0.9731543624161074, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(await_time)", + "entityName": "nvme1n1 (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:49:47.846Z", + "endTime": "2022-11-29T04:54:47.846Z", + "attributes": { + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "759451867dfde961d6adbeb21d9c13f9:nvme1n1", + "clusterName": "cod--qfdcinkqrzw", + "logicalPartition": "false", + "hostId": "759451867dfde961d6adbeb21d9c13f9", + "active": "true", + "category": "DISK", + "device": "nvme1n1", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "ms" + ], + "unitDenominators": [], + "expression": "SELECT last(await_time) WHERE entityName = \"759451867dfde961d6adbeb21d9c13f9:nvme1n1\" AND category = DISK", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:54:43.000Z", + "value": 0.8095238095238095, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(await_time)", + "entityName": "nvme0n1 (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:49:47.846Z", + "endTime": "2022-11-29T04:54:47.846Z", + "attributes": { + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "759451867dfde961d6adbeb21d9c13f9:nvme0n1", + "clusterName": "cod--qfdcinkqrzw", + "logicalPartition": "false", + "hostId": "759451867dfde961d6adbeb21d9c13f9", + "active": "true", + "category": "DISK", + "device": "nvme0n1", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "ms" + ], + "unitDenominators": [], + "expression": "SELECT last(await_time) WHERE entityName = \"759451867dfde961d6adbeb21d9c13f9:nvme0n1\" AND category = DISK", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:54:43.000Z", + "value": 0.15789473684210525, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(await_time)", + "entityName": "nvme0n1p1 (cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:49:47.846Z", + "endTime": "2022-11-29T04:54:47.846Z", + "attributes": { + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "22f6ab659c835d47bc13d6c8f3370110:nvme0n1p1", + "clusterName": "cod--qfdcinkqrzw", + "logicalPartition": "true", + "hostId": "22f6ab659c835d47bc13d6c8f3370110", + "active": "true", + "category": "DISK", + "device": "nvme0n1p1", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "ms" + ], + "unitDenominators": [], + "expression": "SELECT last(await_time) WHERE entityName = \"22f6ab659c835d47bc13d6c8f3370110:nvme0n1p1\" AND category = DISK", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:54:24.000Z", + "value": 0.12, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(await_time)", + "entityName": "nvme0n1p1 (cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:49:47.846Z", + "endTime": "2022-11-29T04:54:47.846Z", + "attributes": { + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "88ae2611748383b5628d4aec94873da9:nvme0n1p1", + "clusterName": "cod--qfdcinkqrzw", + "logicalPartition": "true", + "hostId": "88ae2611748383b5628d4aec94873da9", + "active": "true", + "category": "DISK", + "device": "nvme0n1p1", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "ms" + ], + "unitDenominators": [], + "expression": "SELECT last(await_time) WHERE entityName = \"88ae2611748383b5628d4aec94873da9:nvme0n1p1\" AND category = DISK", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:54:23.000Z", + "value": 0.3157894736842105, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(await_time)", + "entityName": "nvme1n1 (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:49:47.846Z", + "endTime": "2022-11-29T04:54:47.846Z", + "attributes": { + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "119115ab851aefe1429860d4255b3fab:nvme1n1", + "clusterName": "cod--qfdcinkqrzw", + "logicalPartition": "false", + "hostId": "119115ab851aefe1429860d4255b3fab", + "active": "true", + "category": "DISK", + "device": "nvme1n1", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "ms" + ], + "unitDenominators": [], + "expression": "SELECT last(await_time) WHERE entityName = \"119115ab851aefe1429860d4255b3fab:nvme1n1\" AND category = DISK", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:53:50.000Z", + "value": 1.0952380952380953, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(await_time)", + "entityName": "nvme0n1 (cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:49:47.846Z", + "endTime": "2022-11-29T04:54:47.846Z", + "attributes": { + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "49adda80d1b98e9262ee146fd7fd798b:nvme0n1", + "clusterName": "cod--qfdcinkqrzw", + "logicalPartition": "false", + "hostId": "49adda80d1b98e9262ee146fd7fd798b", + "active": "true", + "category": "DISK", + "device": "nvme0n1", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "ms" + ], + "unitDenominators": [], + "expression": "SELECT last(await_time) WHERE entityName = \"49adda80d1b98e9262ee146fd7fd798b:nvme0n1\" AND category = DISK", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:54:23.000Z", + "value": 0.46774193548387094, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(await_time)", + "entityName": "nvme1n1 (cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:49:47.846Z", + "endTime": "2022-11-29T04:54:47.846Z", + "attributes": { + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "49adda80d1b98e9262ee146fd7fd798b:nvme1n1", + "clusterName": "cod--qfdcinkqrzw", + "logicalPartition": "false", + "hostId": "49adda80d1b98e9262ee146fd7fd798b", + "active": "true", + "category": "DISK", + "device": "nvme1n1", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "ms" + ], + "unitDenominators": [], + "expression": "SELECT last(await_time) WHERE entityName = \"49adda80d1b98e9262ee146fd7fd798b:nvme1n1\" AND category = DISK", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:54:23.000Z", + "value": 0, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(await_time)", + "entityName": "nvme0n1p1 (cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:49:47.846Z", + "endTime": "2022-11-29T04:54:47.846Z", + "attributes": { + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "ed528836ae33e47e6657b95373571c33:nvme0n1p1", + "clusterName": "cod--qfdcinkqrzw", + "logicalPartition": "true", + "hostId": "ed528836ae33e47e6657b95373571c33", + "active": "true", + "category": "DISK", + "device": "nvme0n1p1", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "ms" + ], + "unitDenominators": [], + "expression": "SELECT last(await_time) WHERE entityName = \"ed528836ae33e47e6657b95373571c33:nvme0n1p1\" AND category = DISK", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:54:22.000Z", + "value": 0.48148148148148145, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(await_time)", + "entityName": "nvme0n1 (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:49:47.846Z", + "endTime": "2022-11-29T04:54:47.846Z", + "attributes": { + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "119115ab851aefe1429860d4255b3fab:nvme0n1", + "clusterName": "cod--qfdcinkqrzw", + "logicalPartition": "false", + "hostId": "119115ab851aefe1429860d4255b3fab", + "active": "true", + "category": "DISK", + "device": "nvme0n1", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "ms" + ], + "unitDenominators": [], + "expression": "SELECT last(await_time) WHERE entityName = \"119115ab851aefe1429860d4255b3fab:nvme0n1\" AND category = DISK", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:53:50.000Z", + "value": 0.40540540540540543, + "type": "SAMPLE" + } + ] + } + ], + "warnings": [], + "timeSeriesQuery": "select last(await_time)" + } + ] +} \ No newline at end of file diff --git a/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(cpu_soft_irq_rate)&to=now b/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(cpu_soft_irq_rate)&to=now new file mode 100644 index 0000000000000..1d38597592030 --- /dev/null +++ b/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(cpu_soft_irq_rate)&to=now @@ -0,0 +1,325 @@ +{ + "items": [ + { + "timeSeries": [ + { + "metadata": { + "metricName": "last(cpu_soft_irq_rate)", + "entityName": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:41:46.122Z", + "endTime": "2022-11-29T04:46:46.122Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "96efbf3e7279bf25ae44fe0a6398ee97", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_soft_irq_rate) WHERE entityName = \"96efbf3e7279bf25ae44fe0a6398ee97\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:46:09.000Z", + "value": 0, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_soft_irq_rate)", + "entityName": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:41:46.122Z", + "endTime": "2022-11-29T04:46:46.122Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "88ae2611748383b5628d4aec94873da9", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "88ae2611748383b5628d4aec94873da9", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_soft_irq_rate) WHERE entityName = \"88ae2611748383b5628d4aec94873da9\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:46:23.000Z", + "value": 0.0001666666666665151, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_soft_irq_rate)", + "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:41:46.122Z", + "endTime": "2022-11-29T04:46:46.122Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_soft_irq_rate) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:46:24.000Z", + "value": 0.0015000000000024254, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_soft_irq_rate)", + "entityName": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:41:46.122Z", + "endTime": "2022-11-29T04:46:46.122Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "22f6ab659c835d47bc13d6c8f3370110", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "22f6ab659c835d47bc13d6c8f3370110", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_soft_irq_rate) WHERE entityName = \"22f6ab659c835d47bc13d6c8f3370110\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:46:24.000Z", + "value": 0.0001666666666665151, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_soft_irq_rate)", + "entityName": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:41:46.122Z", + "endTime": "2022-11-29T04:46:46.122Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "49adda80d1b98e9262ee146fd7fd798b", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "49adda80d1b98e9262ee146fd7fd798b", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_soft_irq_rate) WHERE entityName = \"49adda80d1b98e9262ee146fd7fd798b\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:46:23.000Z", + "value": 0, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_soft_irq_rate)", + "entityName": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:41:46.122Z", + "endTime": "2022-11-29T04:46:46.122Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "9784d85849c7179b790d476c483fd905", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "9784d85849c7179b790d476c483fd905", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_soft_irq_rate) WHERE entityName = \"9784d85849c7179b790d476c483fd905\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:46:22.000Z", + "value": 0, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_soft_irq_rate)", + "entityName": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:41:46.122Z", + "endTime": "2022-11-29T04:46:46.122Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "119115ab851aefe1429860d4255b3fab", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "119115ab851aefe1429860d4255b3fab", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_soft_irq_rate) WHERE entityName = \"119115ab851aefe1429860d4255b3fab\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:45:50.000Z", + "value": 0, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_soft_irq_rate)", + "entityName": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:41:46.122Z", + "endTime": "2022-11-29T04:46:46.122Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "ed528836ae33e47e6657b95373571c33", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "ed528836ae33e47e6657b95373571c33", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_soft_irq_rate) WHERE entityName = \"ed528836ae33e47e6657b95373571c33\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:46:22.000Z", + "value": 0, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_soft_irq_rate)", + "entityName": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:41:46.122Z", + "endTime": "2022-11-29T04:46:46.122Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "759451867dfde961d6adbeb21d9c13f9", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "759451867dfde961d6adbeb21d9c13f9", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_soft_irq_rate) WHERE entityName = \"759451867dfde961d6adbeb21d9c13f9\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:46:43.000Z", + "value": 0.0001666666666665151, + "type": "SAMPLE" + } + ] + } + ], + "warnings": [], + "timeSeriesQuery": "select last(cpu_soft_irq_rate)" + } + ] +} \ No newline at end of file diff --git a/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(cpu_system_rate)&to=now b/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(cpu_system_rate)&to=now new file mode 100644 index 0000000000000..f4d2ad33bf65b --- /dev/null +++ b/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(cpu_system_rate)&to=now @@ -0,0 +1,2175 @@ +{ + "items": [ + { + "timeSeries": [ + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "96efbf3e7279bf25ae44fe0a6398ee97", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"96efbf3e7279bf25ae44fe0a6398ee97\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:48:09.000Z", + "value": 0.008166666666632712, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "88ae2611748383b5628d4aec94873da9", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "88ae2611748383b5628d4aec94873da9", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"88ae2611748383b5628d4aec94873da9\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:48:23.000Z", + "value": 0.00850000000015522, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:48:25.000Z", + "value": 0.03377049180324052, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "22f6ab659c835d47bc13d6c8f3370110", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "22f6ab659c835d47bc13d6c8f3370110", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"22f6ab659c835d47bc13d6c8f3370110\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:48:24.000Z", + "value": 0.008166666666753978, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "49adda80d1b98e9262ee146fd7fd798b", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "49adda80d1b98e9262ee146fd7fd798b", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"49adda80d1b98e9262ee146fd7fd798b\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:48:23.000Z", + "value": 0.008499999999912689, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "9784d85849c7179b790d476c483fd905", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "9784d85849c7179b790d476c483fd905", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"9784d85849c7179b790d476c483fd905\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:48:22.000Z", + "value": 0.009000000000135818, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "119115ab851aefe1429860d4255b3fab", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "119115ab851aefe1429860d4255b3fab", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"119115ab851aefe1429860d4255b3fab\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:47:50.000Z", + "value": 0.020833333333333332, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "ed528836ae33e47e6657b95373571c33", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "ed528836ae33e47e6657b95373571c33", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"ed528836ae33e47e6657b95373571c33\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:48:22.000Z", + "value": 0.010166666666676368, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "759451867dfde961d6adbeb21d9c13f9", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "759451867dfde961d6adbeb21d9c13f9", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"759451867dfde961d6adbeb21d9c13f9\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:47:43.000Z", + "value": 0.01916666666669092, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "DataNode (cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "9784d85849c7179b790d476c483fd905", + "active": "true", + "serviceName": "hdfs", + "roleType": "DATANODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-DATANODE-bf4b8e304dd0b549bcad6614d3129033", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-DATANODE-bf4b8e304dd0b549bcad6614d3129033", + "roleConfigGroup": "DataNode Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hdfs-DATANODE-bf4b8e304dd0b549bcad6614d3129033\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:48:21.000Z", + "value": 0.0005084745762712057, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "Master (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "HBASE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "119115ab851aefe1429860d4255b3fab", + "active": "true", + "serviceDisplayName": "hbase", + "serviceName": "hbase", + "roleType": "MASTER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hbase-MASTER-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hbase-MASTER-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "roleConfigGroup": "Master Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hbase-MASTER-dbb26169f4e1fe9a387fcc5bd5bfd6af\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "Server (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "ZOOKEEPER", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", + "active": "true", + "serviceDisplayName": "ZooKeeper", + "serviceName": "zookeeper-e52d", + "roleType": "SERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "zookeeper-e52d-SERVER-3bc8f544ef0c15a373bbe9f9790fefba", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "zookeeper-e52d-SERVER-3bc8f544ef0c15a373bbe9f9790fefba", + "roleConfigGroup": "Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"zookeeper-e52d-SERVER-3bc8f544ef0c15a373bbe9f9790fefba\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:48:09.000Z", + "value": 0.000500000000000019, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "JournalNode (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "119115ab851aefe1429860d4255b3fab", + "active": "true", + "serviceName": "hdfs", + "roleType": "JOURNALNODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-JOURNALNODE-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-JOURNALNODE-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "roleConfigGroup": "JournalNode Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hdfs-JOURNALNODE-dbb26169f4e1fe9a387fcc5bd5bfd6af\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:47:49.000Z", + "value": 0.00033333333333350387, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "NameNode (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "759451867dfde961d6adbeb21d9c13f9", + "active": "true", + "serviceName": "hdfs", + "roleType": "NAMENODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-NAMENODE-6e88fa1a7ad969e10ea41365cba9abc5", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-NAMENODE-6e88fa1a7ad969e10ea41365cba9abc5", + "roleConfigGroup": "NameNode Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hdfs-NAMENODE-6e88fa1a7ad969e10ea41365cba9abc5\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:47:43.000Z", + "value": 0.0014999999999986357, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "RegionServer (cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "HBASE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "9784d85849c7179b790d476c483fd905", + "active": "true", + "serviceDisplayName": "hbase", + "serviceName": "hbase", + "roleType": "REGIONSERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hbase-REGIONSERVER-bf4b8e304dd0b549bcad6614d3129033", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hbase-REGIONSERVER-bf4b8e304dd0b549bcad6614d3129033", + "roleConfigGroup": "RegionServer Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hbase-REGIONSERVER-bf4b8e304dd0b549bcad6614d3129033\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "PHOENIX_QUERY_SERVER (cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "PHOENIX", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "49adda80d1b98e9262ee146fd7fd798b", + "active": "true", + "serviceDisplayName": "phoenix", + "serviceName": "phoenix", + "roleType": "PHOENIX_QUERY_SERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "phoenix-PHOENIX_QUERY_SERVER-3c658ac6009daca54192736b1502fae1", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "phoenix-PHOENIX_QUERY_SERVER-3c658ac6009daca54192736b1502fae1", + "roleConfigGroup": "Query Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"phoenix-PHOENIX_QUERY_SERVER-3c658ac6009daca54192736b1502fae1\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "PHOENIX_QUERY_SERVER (cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "PHOENIX", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "ed528836ae33e47e6657b95373571c33", + "active": "true", + "serviceDisplayName": "phoenix", + "serviceName": "phoenix", + "roleType": "PHOENIX_QUERY_SERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "phoenix-PHOENIX_QUERY_SERVER-145da1565b8e2c4165145d9ecc0c784e", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "phoenix-PHOENIX_QUERY_SERVER-145da1565b8e2c4165145d9ecc0c784e", + "roleConfigGroup": "Query Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"phoenix-PHOENIX_QUERY_SERVER-145da1565b8e2c4165145d9ecc0c784e\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "NodeManager (cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "YARN", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "88ae2611748383b5628d4aec94873da9", + "active": "true", + "serviceDisplayName": "yarn", + "serviceName": "yarn", + "roleType": "NODEMANAGER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "yarn-NODEMANAGER-d51d3a03fc3294039de9c160b1013676", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "yarn-NODEMANAGER-d51d3a03fc3294039de9c160b1013676", + "roleConfigGroup": "NodeManager Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"yarn-NODEMANAGER-d51d3a03fc3294039de9c160b1013676\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:48:23.000Z", + "value": 0.0005000000000000004, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "Server (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "ZOOKEEPER", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "119115ab851aefe1429860d4255b3fab", + "active": "true", + "serviceDisplayName": "ZooKeeper", + "serviceName": "zookeeper-e52d", + "roleType": "SERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "zookeeper-e52d-SERVER-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "zookeeper-e52d-SERVER-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "roleConfigGroup": "Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"zookeeper-e52d-SERVER-dbb26169f4e1fe9a387fcc5bd5bfd6af\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:47:50.000Z", + "value": 0.000333333333333267, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "RegionServer (cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "HBASE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "22f6ab659c835d47bc13d6c8f3370110", + "active": "true", + "serviceDisplayName": "hbase", + "serviceName": "hbase", + "roleType": "REGIONSERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hbase-REGIONSERVER-7e9a53b768c95833df424c7d7b0ae857", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hbase-REGIONSERVER-7e9a53b768c95833df424c7d7b0ae857", + "roleConfigGroup": "hbase-REGIONSERVER", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hbase-REGIONSERVER-7e9a53b768c95833df424c7d7b0ae857\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "DataNode (cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "ed528836ae33e47e6657b95373571c33", + "active": "true", + "serviceName": "hdfs", + "roleType": "DATANODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-DATANODE-145da1565b8e2c4165145d9ecc0c784e", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-DATANODE-145da1565b8e2c4165145d9ecc0c784e", + "roleConfigGroup": "DataNode Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hdfs-DATANODE-145da1565b8e2c4165145d9ecc0c784e\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:48:22.000Z", + "value": 0.000666666666666534, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "Host Monitor (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "MGMT", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "HOSTMONITOR", + "roleName": "HOSTMONITOR", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "roleConfigGroup": "Host Monitor Default Group", + "active": "true", + "serviceDisplayName": "MGMT", + "serviceName": "MGMT", + "roleType": "HOSTMONITOR", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"HOSTMONITOR\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:48:24.000Z", + "value": 0.0024999999999939368, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "ResourceManager (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "YARN", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "759451867dfde961d6adbeb21d9c13f9", + "active": "true", + "serviceDisplayName": "yarn", + "serviceName": "yarn", + "roleType": "RESOURCEMANAGER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "yarn-RESOURCEMANAGER-6e88fa1a7ad969e10ea41365cba9abc5", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "yarn-RESOURCEMANAGER-6e88fa1a7ad969e10ea41365cba9abc5", + "roleConfigGroup": "ResourceManager Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"yarn-RESOURCEMANAGER-6e88fa1a7ad969e10ea41365cba9abc5\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "PHOENIX_QUERY_SERVER (cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "PHOENIX", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "9784d85849c7179b790d476c483fd905", + "active": "true", + "serviceDisplayName": "phoenix", + "serviceName": "phoenix", + "roleType": "PHOENIX_QUERY_SERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "phoenix-PHOENIX_QUERY_SERVER-bf4b8e304dd0b549bcad6614d3129033", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "phoenix-PHOENIX_QUERY_SERVER-bf4b8e304dd0b549bcad6614d3129033", + "roleConfigGroup": "Query Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"phoenix-PHOENIX_QUERY_SERVER-bf4b8e304dd0b549bcad6614d3129033\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "RegionServer (cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "HBASE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "ed528836ae33e47e6657b95373571c33", + "active": "true", + "serviceDisplayName": "hbase", + "serviceName": "hbase", + "roleType": "REGIONSERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hbase-REGIONSERVER-145da1565b8e2c4165145d9ecc0c784e", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hbase-REGIONSERVER-145da1565b8e2c4165145d9ecc0c784e", + "roleConfigGroup": "RegionServer Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hbase-REGIONSERVER-145da1565b8e2c4165145d9ecc0c784e\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "RegionServer (cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "HBASE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "88ae2611748383b5628d4aec94873da9", + "active": "true", + "serviceDisplayName": "hbase", + "serviceName": "hbase", + "roleType": "REGIONSERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hbase-REGIONSERVER-d51d3a03fc3294039de9c160b1013676", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hbase-REGIONSERVER-d51d3a03fc3294039de9c160b1013676", + "roleConfigGroup": "RegionServer Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hbase-REGIONSERVER-d51d3a03fc3294039de9c160b1013676\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "Load Balancer (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "HUE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "serviceDisplayName": "hue", + "serviceName": "hue", + "roleType": "HUE_LOAD_BALANCER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hue-HUE_LOAD_BALANCER-7d0b6bba5cf23b4729586ee8d35ab766", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hue-HUE_LOAD_BALANCER-7d0b6bba5cf23b4729586ee8d35ab766", + "roleConfigGroup": "Load Balancer Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hue-HUE_LOAD_BALANCER-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "Kerberos Ticket Renewer (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "HUE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "serviceDisplayName": "hue", + "serviceName": "hue", + "roleType": "KT_RENEWER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hue-KT_RENEWER-7d0b6bba5cf23b4729586ee8d35ab766", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hue-KT_RENEWER-7d0b6bba5cf23b4729586ee8d35ab766", + "roleConfigGroup": "Kerberos Ticket Renewer Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hue-KT_RENEWER-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "HBase REST Server (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "HBASE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", + "active": "true", + "serviceDisplayName": "hbase", + "serviceName": "hbase", + "roleType": "HBASERESTSERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hbase-HBASERESTSERVER-3bc8f544ef0c15a373bbe9f9790fefba", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hbase-HBASERESTSERVER-3bc8f544ef0c15a373bbe9f9790fefba", + "roleConfigGroup": "HBase REST Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hbase-HBASERESTSERVER-3bc8f544ef0c15a373bbe9f9790fefba\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "OMID_TSO (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "OMID", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", + "active": "true", + "serviceDisplayName": "omid", + "serviceName": "omid", + "roleType": "OMID_TSO", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "omid-OMID_TSO-3bc8f544ef0c15a373bbe9f9790fefba", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "omid-OMID_TSO-3bc8f544ef0c15a373bbe9f9790fefba", + "roleConfigGroup": "Omid tso server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"omid-OMID_TSO-3bc8f544ef0c15a373bbe9f9790fefba\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "JournalNode (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "759451867dfde961d6adbeb21d9c13f9", + "active": "true", + "serviceName": "hdfs", + "roleType": "JOURNALNODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-JOURNALNODE-6e88fa1a7ad969e10ea41365cba9abc5", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-JOURNALNODE-6e88fa1a7ad969e10ea41365cba9abc5", + "roleConfigGroup": "JournalNode Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hdfs-JOURNALNODE-6e88fa1a7ad969e10ea41365cba9abc5\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:47:43.000Z", + "value": 0.000500000000000019, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "JournalNode (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", + "active": "true", + "serviceName": "hdfs", + "roleType": "JOURNALNODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-JOURNALNODE-3bc8f544ef0c15a373bbe9f9790fefba", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-JOURNALNODE-3bc8f544ef0c15a373bbe9f9790fefba", + "roleConfigGroup": "JournalNode Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hdfs-JOURNALNODE-3bc8f544ef0c15a373bbe9f9790fefba\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:48:09.000Z", + "value": 0.00033333333333350387, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "Server (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "ZOOKEEPER", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "759451867dfde961d6adbeb21d9c13f9", + "active": "true", + "serviceDisplayName": "ZooKeeper", + "serviceName": "zookeeper-e52d", + "roleType": "SERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "zookeeper-e52d-SERVER-6e88fa1a7ad969e10ea41365cba9abc5", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "zookeeper-e52d-SERVER-6e88fa1a7ad969e10ea41365cba9abc5", + "roleConfigGroup": "Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"zookeeper-e52d-SERVER-6e88fa1a7ad969e10ea41365cba9abc5\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:47:43.000Z", + "value": 0.000333333333333267, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "PHOENIX_QUERY_SERVER (cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "PHOENIX", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "88ae2611748383b5628d4aec94873da9", + "active": "true", + "serviceDisplayName": "phoenix", + "serviceName": "phoenix", + "roleType": "PHOENIX_QUERY_SERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "phoenix-PHOENIX_QUERY_SERVER-d51d3a03fc3294039de9c160b1013676", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "phoenix-PHOENIX_QUERY_SERVER-d51d3a03fc3294039de9c160b1013676", + "roleConfigGroup": "Query Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"phoenix-PHOENIX_QUERY_SERVER-d51d3a03fc3294039de9c160b1013676\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "Hue Server (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "HUE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "serviceDisplayName": "hue", + "serviceName": "hue", + "roleType": "HUE_SERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hue-HUE_SERVER-7d0b6bba5cf23b4729586ee8d35ab766", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hue-HUE_SERVER-7d0b6bba5cf23b4729586ee8d35ab766", + "roleConfigGroup": "Hue Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hue-HUE_SERVER-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "Master (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "HBASE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "759451867dfde961d6adbeb21d9c13f9", + "active": "true", + "serviceDisplayName": "hbase", + "serviceName": "hbase", + "roleType": "MASTER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hbase-MASTER-6e88fa1a7ad969e10ea41365cba9abc5", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hbase-MASTER-6e88fa1a7ad969e10ea41365cba9abc5", + "roleConfigGroup": "Master Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hbase-MASTER-6e88fa1a7ad969e10ea41365cba9abc5\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "Event Server (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "MGMT", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "EVENTSERVER", + "roleName": "EVENTSERVER", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "roleConfigGroup": "Event Server Default Group", + "active": "true", + "serviceDisplayName": "MGMT", + "serviceName": "MGMT", + "roleType": "EVENTSERVER", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"EVENTSERVER\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:48:24.000Z", + "value": 0.001166666666661816, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "QUEUEMANAGER_STORE (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "QUEUEMANAGER", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "serviceDisplayName": "queuemanager", + "serviceName": "queuemanager", + "roleType": "QUEUEMANAGER_STORE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "queuemanager-QUEUEMANAGER_STORE-7d0b6bba5cf23b4729586ee8d35ab766", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "queuemanager-QUEUEMANAGER_STORE-7d0b6bba5cf23b4729586ee8d35ab766", + "roleConfigGroup": "YARN Queue Manager Store Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"queuemanager-QUEUEMANAGER_STORE-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:48:25.000Z", + "value": 0.000333333333333267, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "PHOENIX_QUERY_SERVER (cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "PHOENIX", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "22f6ab659c835d47bc13d6c8f3370110", + "active": "true", + "serviceDisplayName": "phoenix", + "serviceName": "phoenix", + "roleType": "PHOENIX_QUERY_SERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "phoenix-PHOENIX_QUERY_SERVER-7e9a53b768c95833df424c7d7b0ae857", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "phoenix-PHOENIX_QUERY_SERVER-7e9a53b768c95833df424c7d7b0ae857", + "roleConfigGroup": "Query Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"phoenix-PHOENIX_QUERY_SERVER-7e9a53b768c95833df424c7d7b0ae857\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "DataNode (cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "88ae2611748383b5628d4aec94873da9", + "active": "true", + "serviceName": "hdfs", + "roleType": "DATANODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-DATANODE-d51d3a03fc3294039de9c160b1013676", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-DATANODE-d51d3a03fc3294039de9c160b1013676", + "roleConfigGroup": "DataNode Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hdfs-DATANODE-d51d3a03fc3294039de9c160b1013676\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:48:23.000Z", + "value": 0.000500000000000019, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "NodeManager (cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "YARN", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "ed528836ae33e47e6657b95373571c33", + "active": "true", + "serviceDisplayName": "yarn", + "serviceName": "yarn", + "roleType": "NODEMANAGER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "yarn-NODEMANAGER-145da1565b8e2c4165145d9ecc0c784e", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "yarn-NODEMANAGER-145da1565b8e2c4165145d9ecc0c784e", + "roleConfigGroup": "NodeManager Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"yarn-NODEMANAGER-145da1565b8e2c4165145d9ecc0c784e\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:48:22.000Z", + "value": 0.0008333333333333377, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "Failover Controller (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "759451867dfde961d6adbeb21d9c13f9", + "active": "true", + "serviceName": "hdfs", + "roleType": "FAILOVERCONTROLLER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-FAILOVERCONTROLLER-6e88fa1a7ad969e10ea41365cba9abc5", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-FAILOVERCONTROLLER-6e88fa1a7ad969e10ea41365cba9abc5", + "roleConfigGroup": "Failover Controller Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hdfs-FAILOVERCONTROLLER-6e88fa1a7ad969e10ea41365cba9abc5\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "HBase Thrift Server (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "HBASE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", + "active": "true", + "serviceDisplayName": "hbase", + "serviceName": "hbase", + "roleType": "HBASETHRIFTSERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hbase-HBASETHRIFTSERVER-3bc8f544ef0c15a373bbe9f9790fefba", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hbase-HBASETHRIFTSERVER-3bc8f544ef0c15a373bbe9f9790fefba", + "roleConfigGroup": "HBase Thrift Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hbase-HBASETHRIFTSERVER-3bc8f544ef0c15a373bbe9f9790fefba\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "NameNode (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "119115ab851aefe1429860d4255b3fab", + "active": "true", + "serviceName": "hdfs", + "roleType": "NAMENODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-NAMENODE-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-NAMENODE-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "roleConfigGroup": "NameNode Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hdfs-NAMENODE-dbb26169f4e1fe9a387fcc5bd5bfd6af\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:47:49.000Z", + "value": 0.001166666666666553, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "JobHistory Server (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "YARN", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", + "active": "true", + "serviceDisplayName": "yarn", + "serviceName": "yarn", + "roleType": "JOBHISTORY", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "yarn-JOBHISTORY-3bc8f544ef0c15a373bbe9f9790fefba", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "yarn-JOBHISTORY-3bc8f544ef0c15a373bbe9f9790fefba", + "roleConfigGroup": "JobHistory Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"yarn-JOBHISTORY-3bc8f544ef0c15a373bbe9f9790fefba\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:48:09.000Z", + "value": 0.00016666666666666682, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "RegionServer (cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "HBASE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "49adda80d1b98e9262ee146fd7fd798b", + "active": "true", + "serviceDisplayName": "hbase", + "serviceName": "hbase", + "roleType": "REGIONSERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hbase-REGIONSERVER-3c658ac6009daca54192736b1502fae1", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hbase-REGIONSERVER-3c658ac6009daca54192736b1502fae1", + "roleConfigGroup": "hbase-REGIONSERVER", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hbase-REGIONSERVER-3c658ac6009daca54192736b1502fae1\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "NodeManager (cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "YARN", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "9784d85849c7179b790d476c483fd905", + "active": "true", + "serviceDisplayName": "yarn", + "serviceName": "yarn", + "roleType": "NODEMANAGER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "yarn-NODEMANAGER-bf4b8e304dd0b549bcad6614d3129033", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "yarn-NODEMANAGER-bf4b8e304dd0b549bcad6614d3129033", + "roleConfigGroup": "NodeManager Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"yarn-NODEMANAGER-bf4b8e304dd0b549bcad6614d3129033\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:48:21.000Z", + "value": 0.0008474576271186486, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "QUEUEMANAGER_WEBAPP (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "QUEUEMANAGER", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "serviceDisplayName": "queuemanager", + "serviceName": "queuemanager", + "roleType": "QUEUEMANAGER_WEBAPP", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "queuc8af8526-QUEUEMANAGER_WEBAPP-7d0b6bba5cf23b4729586ee8d35ab76", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "queuc8af8526-QUEUEMANAGER_WEBAPP-7d0b6bba5cf23b4729586ee8d35ab76", + "roleConfigGroup": "YARN Queue Manager Webapp Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"queuc8af8526-QUEUEMANAGER_WEBAPP-7d0b6bba5cf23b4729586ee8d35ab76\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:48:25.000Z", + "value": 0.0001666666666666335, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "KNOX_GATEWAY (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "KNOX", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "serviceDisplayName": "Knox", + "serviceName": "knox-e428", + "roleType": "KNOX_GATEWAY", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "knox-e428-KNOX_GATEWAY-7d0b6bba5cf23b4729586ee8d35ab766", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "knox-e428-KNOX_GATEWAY-7d0b6bba5cf23b4729586ee8d35ab766", + "roleConfigGroup": "Knox Gateway Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"knox-e428-KNOX_GATEWAY-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:48:25.000Z", + "value": 0.0006666666666670077, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "Failover Controller (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "119115ab851aefe1429860d4255b3fab", + "active": "true", + "serviceName": "hdfs", + "roleType": "FAILOVERCONTROLLER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-FAILOVERCONTROLLER-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-FAILOVERCONTROLLER-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "roleConfigGroup": "Failover Controller Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hdfs-FAILOVERCONTROLLER-dbb26169f4e1fe9a387fcc5bd5bfd6af\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "Alert Publisher (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "MGMT", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "ALERTPUBLISHER", + "roleName": "ALERTPUBLISHER", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "roleConfigGroup": "Alert Publisher Default Group", + "active": "true", + "serviceDisplayName": "MGMT", + "serviceName": "MGMT", + "roleType": "ALERTPUBLISHER", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"ALERTPUBLISHER\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:48:25.000Z", + "value": 0.0003333333333330302, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "ResourceManager (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "YARN", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "119115ab851aefe1429860d4255b3fab", + "active": "true", + "serviceDisplayName": "yarn", + "serviceName": "yarn", + "roleType": "RESOURCEMANAGER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "yarn-RESOURCEMANAGER-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "yarn-RESOURCEMANAGER-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "roleConfigGroup": "ResourceManager Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"yarn-RESOURCEMANAGER-dbb26169f4e1fe9a387fcc5bd5bfd6af\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "Telemetry Publisher (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "MGMT", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "TELEMETRYPUBLISHER", + "roleName": "TELEMETRYPUBLISHER", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "roleConfigGroup": "Telemetry Publisher Default Group", + "active": "true", + "serviceDisplayName": "MGMT", + "serviceName": "MGMT", + "roleType": "TELEMETRYPUBLISHER", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"TELEMETRYPUBLISHER\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:48:24.000Z", + "value": 0.00233333333333879, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "DataNode (cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "22f6ab659c835d47bc13d6c8f3370110", + "active": "true", + "serviceName": "hdfs", + "roleType": "DATANODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-DATANODE-7e9a53b768c95833df424c7d7b0ae857", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-DATANODE-7e9a53b768c95833df424c7d7b0ae857", + "roleConfigGroup": "DataNode Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hdfs-DATANODE-7e9a53b768c95833df424c7d7b0ae857\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:48:24.000Z", + "value": 0.000500000000000019, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "DataNode (cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "49adda80d1b98e9262ee146fd7fd798b", + "active": "true", + "serviceName": "hdfs", + "roleType": "DATANODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-DATANODE-3c658ac6009daca54192736b1502fae1", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-DATANODE-3c658ac6009daca54192736b1502fae1", + "roleConfigGroup": "DataNode Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hdfs-DATANODE-3c658ac6009daca54192736b1502fae1\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:48:23.000Z", + "value": 0.000666666666666534, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "NodeManager (cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "YARN", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "22f6ab659c835d47bc13d6c8f3370110", + "active": "true", + "serviceDisplayName": "yarn", + "serviceName": "yarn", + "roleType": "NODEMANAGER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "yarn-NODEMANAGER-7e9a53b768c95833df424c7d7b0ae857", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "yarn-NODEMANAGER-7e9a53b768c95833df424c7d7b0ae857", + "roleConfigGroup": "yarn-NODEMANAGER", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"yarn-NODEMANAGER-7e9a53b768c95833df424c7d7b0ae857\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:48:24.000Z", + "value": 0.0005000000000000041, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "NodeManager (cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "YARN", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "49adda80d1b98e9262ee146fd7fd798b", + "active": "true", + "serviceDisplayName": "yarn", + "serviceName": "yarn", + "roleType": "NODEMANAGER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "yarn-NODEMANAGER-3c658ac6009daca54192736b1502fae1", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "yarn-NODEMANAGER-3c658ac6009daca54192736b1502fae1", + "roleConfigGroup": "yarn-NODEMANAGER", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"yarn-NODEMANAGER-3c658ac6009daca54192736b1502fae1\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:48:23.000Z", + "value": 0.0006666666666666673, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "Service Monitor (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:43:40.462Z", + "endTime": "2022-11-29T04:48:40.462Z", + "attributes": { + "serviceType": "MGMT", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "SERVICEMONITOR", + "roleName": "SERVICEMONITOR", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "roleConfigGroup": "Service Monitor Default Group", + "active": "true", + "serviceDisplayName": "MGMT", + "serviceName": "MGMT", + "roleType": "SERVICEMONITOR", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"SERVICEMONITOR\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:48:24.000Z", + "value": 0.004000000000026678, + "type": "SAMPLE" + } + ] + } + ], + "warnings": [], + "timeSeriesQuery": "select last(cpu_system_rate)" + } + ] +} \ No newline at end of file diff --git a/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(load_1)&to=now b/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(load_1)&to=now new file mode 100644 index 0000000000000..3ebc5bda9ff25 --- /dev/null +++ b/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(load_1)&to=now @@ -0,0 +1,307 @@ +{ + "items": [ + { + "timeSeries": [ + { + "metadata": { + "metricName": "last(load_1)", + "entityName": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:44:28.683Z", + "endTime": "2022-11-29T04:49:28.683Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "96efbf3e7279bf25ae44fe0a6398ee97", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "load average" + ], + "unitDenominators": [], + "expression": "SELECT last(load_1) WHERE entityName = \"96efbf3e7279bf25ae44fe0a6398ee97\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:49:09.000Z", + "value": 0.15, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(load_1)", + "entityName": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:44:28.683Z", + "endTime": "2022-11-29T04:49:28.683Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "88ae2611748383b5628d4aec94873da9", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "88ae2611748383b5628d4aec94873da9", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "load average" + ], + "unitDenominators": [], + "expression": "SELECT last(load_1) WHERE entityName = \"88ae2611748383b5628d4aec94873da9\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:49:23.000Z", + "value": 0, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(load_1)", + "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:44:28.683Z", + "endTime": "2022-11-29T04:49:28.683Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "load average" + ], + "unitDenominators": [], + "expression": "SELECT last(load_1) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:49:25.000Z", + "value": 0.2, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(load_1)", + "entityName": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:44:28.683Z", + "endTime": "2022-11-29T04:49:28.683Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "22f6ab659c835d47bc13d6c8f3370110", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "22f6ab659c835d47bc13d6c8f3370110", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "load average" + ], + "unitDenominators": [], + "expression": "SELECT last(load_1) WHERE entityName = \"22f6ab659c835d47bc13d6c8f3370110\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:49:24.000Z", + "value": 0, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(load_1)", + "entityName": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:44:28.683Z", + "endTime": "2022-11-29T04:49:28.683Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "49adda80d1b98e9262ee146fd7fd798b", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "49adda80d1b98e9262ee146fd7fd798b", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "load average" + ], + "unitDenominators": [], + "expression": "SELECT last(load_1) WHERE entityName = \"49adda80d1b98e9262ee146fd7fd798b\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:49:23.000Z", + "value": 0.05, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(load_1)", + "entityName": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:44:28.683Z", + "endTime": "2022-11-29T04:49:28.683Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "9784d85849c7179b790d476c483fd905", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "9784d85849c7179b790d476c483fd905", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "load average" + ], + "unitDenominators": [], + "expression": "SELECT last(load_1) WHERE entityName = \"9784d85849c7179b790d476c483fd905\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:49:22.000Z", + "value": 0, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(load_1)", + "entityName": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:44:28.683Z", + "endTime": "2022-11-29T04:49:28.683Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "119115ab851aefe1429860d4255b3fab", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "119115ab851aefe1429860d4255b3fab", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "load average" + ], + "unitDenominators": [], + "expression": "SELECT last(load_1) WHERE entityName = \"119115ab851aefe1429860d4255b3fab\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:48:50.000Z", + "value": 0, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(load_1)", + "entityName": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:44:28.683Z", + "endTime": "2022-11-29T04:49:28.683Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "ed528836ae33e47e6657b95373571c33", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "ed528836ae33e47e6657b95373571c33", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "load average" + ], + "unitDenominators": [], + "expression": "SELECT last(load_1) WHERE entityName = \"ed528836ae33e47e6657b95373571c33\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:49:22.000Z", + "value": 0.07, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(load_1)", + "entityName": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:44:28.683Z", + "endTime": "2022-11-29T04:49:28.683Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "759451867dfde961d6adbeb21d9c13f9", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "759451867dfde961d6adbeb21d9c13f9", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "load average" + ], + "unitDenominators": [], + "expression": "SELECT last(load_1) WHERE entityName = \"759451867dfde961d6adbeb21d9c13f9\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:48:43.000Z", + "value": 0.12, + "type": "SAMPLE" + } + ] + } + ], + "warnings": [], + "timeSeriesQuery": "select last(load_1)" + } + ] +} \ No newline at end of file diff --git a/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(mem_rss)&to=now b/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(mem_rss)&to=now new file mode 100644 index 0000000000000..6fe0e0e79eb16 --- /dev/null +++ b/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(mem_rss)&to=now @@ -0,0 +1,1774 @@ +{ + "items": [ + { + "timeSeries": [ + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "DataNode (cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "9784d85849c7179b790d476c483fd905", + "active": "true", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "DATANODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-DATANODE-bf4b8e304dd0b549bcad6614d3129033", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-DATANODE-bf4b8e304dd0b549bcad6614d3129033", + "roleConfigGroup": "DataNode Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"hdfs-DATANODE-bf4b8e304dd0b549bcad6614d3129033\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:52:21.000Z", + "value": 585314304, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "Master (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "HBASE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "119115ab851aefe1429860d4255b3fab", + "active": "true", + "serviceDisplayName": "hbase", + "serviceName": "hbase", + "roleType": "MASTER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hbase-MASTER-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hbase-MASTER-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "roleConfigGroup": "Master Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"hbase-MASTER-dbb26169f4e1fe9a387fcc5bd5bfd6af\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "Server (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "ZOOKEEPER", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", + "active": "true", + "serviceDisplayName": "ZooKeeper", + "serviceName": "zookeeper-e52d", + "roleType": "SERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "zookeeper-e52d-SERVER-3bc8f544ef0c15a373bbe9f9790fefba", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "zookeeper-e52d-SERVER-3bc8f544ef0c15a373bbe9f9790fefba", + "roleConfigGroup": "Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"zookeeper-e52d-SERVER-3bc8f544ef0c15a373bbe9f9790fefba\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:52:09.000Z", + "value": 3064156160, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "JournalNode (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "119115ab851aefe1429860d4255b3fab", + "active": "true", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "JOURNALNODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-JOURNALNODE-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-JOURNALNODE-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "roleConfigGroup": "JournalNode Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"hdfs-JOURNALNODE-dbb26169f4e1fe9a387fcc5bd5bfd6af\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:52:49.000Z", + "value": 398761984, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "NameNode (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "759451867dfde961d6adbeb21d9c13f9", + "active": "true", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "NAMENODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-NAMENODE-6e88fa1a7ad969e10ea41365cba9abc5", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-NAMENODE-6e88fa1a7ad969e10ea41365cba9abc5", + "roleConfigGroup": "NameNode Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"hdfs-NAMENODE-6e88fa1a7ad969e10ea41365cba9abc5\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:52:43.000Z", + "value": 1083379712, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "RegionServer (cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "HBASE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "9784d85849c7179b790d476c483fd905", + "active": "true", + "serviceDisplayName": "hbase", + "serviceName": "hbase", + "roleType": "REGIONSERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hbase-REGIONSERVER-bf4b8e304dd0b549bcad6614d3129033", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hbase-REGIONSERVER-bf4b8e304dd0b549bcad6614d3129033", + "roleConfigGroup": "RegionServer Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"hbase-REGIONSERVER-bf4b8e304dd0b549bcad6614d3129033\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "PHOENIX_QUERY_SERVER (cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "PHOENIX", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "49adda80d1b98e9262ee146fd7fd798b", + "active": "true", + "serviceDisplayName": "phoenix", + "serviceName": "phoenix", + "roleType": "PHOENIX_QUERY_SERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "phoenix-PHOENIX_QUERY_SERVER-3c658ac6009daca54192736b1502fae1", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "phoenix-PHOENIX_QUERY_SERVER-3c658ac6009daca54192736b1502fae1", + "roleConfigGroup": "Query Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"phoenix-PHOENIX_QUERY_SERVER-3c658ac6009daca54192736b1502fae1\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "PHOENIX_QUERY_SERVER (cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "PHOENIX", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "ed528836ae33e47e6657b95373571c33", + "active": "true", + "serviceDisplayName": "phoenix", + "serviceName": "phoenix", + "roleType": "PHOENIX_QUERY_SERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "phoenix-PHOENIX_QUERY_SERVER-145da1565b8e2c4165145d9ecc0c784e", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "phoenix-PHOENIX_QUERY_SERVER-145da1565b8e2c4165145d9ecc0c784e", + "roleConfigGroup": "Query Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"phoenix-PHOENIX_QUERY_SERVER-145da1565b8e2c4165145d9ecc0c784e\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "NodeManager (cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "YARN", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "88ae2611748383b5628d4aec94873da9", + "active": "true", + "serviceDisplayName": "yarn", + "serviceName": "yarn", + "roleType": "NODEMANAGER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "yarn-NODEMANAGER-d51d3a03fc3294039de9c160b1013676", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "yarn-NODEMANAGER-d51d3a03fc3294039de9c160b1013676", + "roleConfigGroup": "NodeManager Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"yarn-NODEMANAGER-d51d3a03fc3294039de9c160b1013676\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:52:23.000Z", + "value": 447881216, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "Server (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "ZOOKEEPER", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "119115ab851aefe1429860d4255b3fab", + "active": "true", + "serviceDisplayName": "ZooKeeper", + "serviceName": "zookeeper-e52d", + "roleType": "SERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "zookeeper-e52d-SERVER-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "zookeeper-e52d-SERVER-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "roleConfigGroup": "Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"zookeeper-e52d-SERVER-dbb26169f4e1fe9a387fcc5bd5bfd6af\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:52:50.000Z", + "value": 3064639488, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "RegionServer (cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "HBASE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "22f6ab659c835d47bc13d6c8f3370110", + "active": "true", + "serviceDisplayName": "hbase", + "serviceName": "hbase", + "roleType": "REGIONSERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hbase-REGIONSERVER-7e9a53b768c95833df424c7d7b0ae857", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hbase-REGIONSERVER-7e9a53b768c95833df424c7d7b0ae857", + "roleConfigGroup": "hbase-REGIONSERVER", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"hbase-REGIONSERVER-7e9a53b768c95833df424c7d7b0ae857\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "DataNode (cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "ed528836ae33e47e6657b95373571c33", + "active": "true", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "DATANODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-DATANODE-145da1565b8e2c4165145d9ecc0c784e", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-DATANODE-145da1565b8e2c4165145d9ecc0c784e", + "roleConfigGroup": "DataNode Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"hdfs-DATANODE-145da1565b8e2c4165145d9ecc0c784e\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:52:22.000Z", + "value": 600510464, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "Host Monitor (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "MGMT", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "HOSTMONITOR", + "roleName": "HOSTMONITOR", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "roleConfigGroup": "Host Monitor Default Group", + "active": "true", + "serviceDisplayName": "MGMT", + "serviceName": "MGMT", + "roleType": "HOSTMONITOR", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"HOSTMONITOR\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:52:24.000Z", + "value": 1988956160, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "ResourceManager (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "YARN", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "759451867dfde961d6adbeb21d9c13f9", + "active": "true", + "serviceDisplayName": "yarn", + "serviceName": "yarn", + "roleType": "RESOURCEMANAGER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "yarn-RESOURCEMANAGER-6e88fa1a7ad969e10ea41365cba9abc5", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "yarn-RESOURCEMANAGER-6e88fa1a7ad969e10ea41365cba9abc5", + "roleConfigGroup": "ResourceManager Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"yarn-RESOURCEMANAGER-6e88fa1a7ad969e10ea41365cba9abc5\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "PHOENIX_QUERY_SERVER (cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "PHOENIX", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "9784d85849c7179b790d476c483fd905", + "active": "true", + "serviceDisplayName": "phoenix", + "serviceName": "phoenix", + "roleType": "PHOENIX_QUERY_SERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "phoenix-PHOENIX_QUERY_SERVER-bf4b8e304dd0b549bcad6614d3129033", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "phoenix-PHOENIX_QUERY_SERVER-bf4b8e304dd0b549bcad6614d3129033", + "roleConfigGroup": "Query Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"phoenix-PHOENIX_QUERY_SERVER-bf4b8e304dd0b549bcad6614d3129033\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "RegionServer (cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "HBASE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "ed528836ae33e47e6657b95373571c33", + "active": "true", + "serviceDisplayName": "hbase", + "serviceName": "hbase", + "roleType": "REGIONSERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hbase-REGIONSERVER-145da1565b8e2c4165145d9ecc0c784e", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hbase-REGIONSERVER-145da1565b8e2c4165145d9ecc0c784e", + "roleConfigGroup": "RegionServer Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"hbase-REGIONSERVER-145da1565b8e2c4165145d9ecc0c784e\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "RegionServer (cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "HBASE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "88ae2611748383b5628d4aec94873da9", + "active": "true", + "serviceDisplayName": "hbase", + "serviceName": "hbase", + "roleType": "REGIONSERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hbase-REGIONSERVER-d51d3a03fc3294039de9c160b1013676", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hbase-REGIONSERVER-d51d3a03fc3294039de9c160b1013676", + "roleConfigGroup": "RegionServer Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"hbase-REGIONSERVER-d51d3a03fc3294039de9c160b1013676\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "Load Balancer (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "HUE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "serviceDisplayName": "hue", + "serviceName": "hue", + "roleType": "HUE_LOAD_BALANCER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hue-HUE_LOAD_BALANCER-7d0b6bba5cf23b4729586ee8d35ab766", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hue-HUE_LOAD_BALANCER-7d0b6bba5cf23b4729586ee8d35ab766", + "roleConfigGroup": "Load Balancer Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"hue-HUE_LOAD_BALANCER-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "Kerberos Ticket Renewer (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "HUE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "serviceDisplayName": "hue", + "serviceName": "hue", + "roleType": "KT_RENEWER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hue-KT_RENEWER-7d0b6bba5cf23b4729586ee8d35ab766", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hue-KT_RENEWER-7d0b6bba5cf23b4729586ee8d35ab766", + "roleConfigGroup": "Kerberos Ticket Renewer Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"hue-KT_RENEWER-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "HBase REST Server (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "HBASE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", + "active": "true", + "serviceDisplayName": "hbase", + "serviceName": "hbase", + "roleType": "HBASERESTSERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hbase-HBASERESTSERVER-3bc8f544ef0c15a373bbe9f9790fefba", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hbase-HBASERESTSERVER-3bc8f544ef0c15a373bbe9f9790fefba", + "roleConfigGroup": "HBase REST Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"hbase-HBASERESTSERVER-3bc8f544ef0c15a373bbe9f9790fefba\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "OMID_TSO (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "OMID", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", + "active": "true", + "serviceDisplayName": "omid", + "serviceName": "omid", + "roleType": "OMID_TSO", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "omid-OMID_TSO-3bc8f544ef0c15a373bbe9f9790fefba", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "omid-OMID_TSO-3bc8f544ef0c15a373bbe9f9790fefba", + "roleConfigGroup": "Omid tso server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"omid-OMID_TSO-3bc8f544ef0c15a373bbe9f9790fefba\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "JournalNode (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "759451867dfde961d6adbeb21d9c13f9", + "active": "true", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "JOURNALNODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-JOURNALNODE-6e88fa1a7ad969e10ea41365cba9abc5", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-JOURNALNODE-6e88fa1a7ad969e10ea41365cba9abc5", + "roleConfigGroup": "JournalNode Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"hdfs-JOURNALNODE-6e88fa1a7ad969e10ea41365cba9abc5\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:52:43.000Z", + "value": 390250496, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "JournalNode (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", + "active": "true", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "JOURNALNODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-JOURNALNODE-3bc8f544ef0c15a373bbe9f9790fefba", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-JOURNALNODE-3bc8f544ef0c15a373bbe9f9790fefba", + "roleConfigGroup": "JournalNode Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"hdfs-JOURNALNODE-3bc8f544ef0c15a373bbe9f9790fefba\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:52:09.000Z", + "value": 397582336, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "Server (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "ZOOKEEPER", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "759451867dfde961d6adbeb21d9c13f9", + "active": "true", + "serviceDisplayName": "ZooKeeper", + "serviceName": "zookeeper-e52d", + "roleType": "SERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "zookeeper-e52d-SERVER-6e88fa1a7ad969e10ea41365cba9abc5", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "zookeeper-e52d-SERVER-6e88fa1a7ad969e10ea41365cba9abc5", + "roleConfigGroup": "Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"zookeeper-e52d-SERVER-6e88fa1a7ad969e10ea41365cba9abc5\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:52:43.000Z", + "value": 3058343936, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "PHOENIX_QUERY_SERVER (cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "PHOENIX", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "88ae2611748383b5628d4aec94873da9", + "active": "true", + "serviceDisplayName": "phoenix", + "serviceName": "phoenix", + "roleType": "PHOENIX_QUERY_SERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "phoenix-PHOENIX_QUERY_SERVER-d51d3a03fc3294039de9c160b1013676", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "phoenix-PHOENIX_QUERY_SERVER-d51d3a03fc3294039de9c160b1013676", + "roleConfigGroup": "Query Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"phoenix-PHOENIX_QUERY_SERVER-d51d3a03fc3294039de9c160b1013676\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "Hue Server (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "HUE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "serviceDisplayName": "hue", + "serviceName": "hue", + "roleType": "HUE_SERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hue-HUE_SERVER-7d0b6bba5cf23b4729586ee8d35ab766", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hue-HUE_SERVER-7d0b6bba5cf23b4729586ee8d35ab766", + "roleConfigGroup": "Hue Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"hue-HUE_SERVER-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "Master (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "HBASE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "759451867dfde961d6adbeb21d9c13f9", + "active": "true", + "serviceDisplayName": "hbase", + "serviceName": "hbase", + "roleType": "MASTER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hbase-MASTER-6e88fa1a7ad969e10ea41365cba9abc5", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hbase-MASTER-6e88fa1a7ad969e10ea41365cba9abc5", + "roleConfigGroup": "Master Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"hbase-MASTER-6e88fa1a7ad969e10ea41365cba9abc5\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "Event Server (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "MGMT", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "EVENTSERVER", + "roleName": "EVENTSERVER", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "roleConfigGroup": "Event Server Default Group", + "active": "true", + "serviceDisplayName": "MGMT", + "serviceName": "MGMT", + "roleType": "EVENTSERVER", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"EVENTSERVER\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:52:24.000Z", + "value": 1334972416, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "QUEUEMANAGER_STORE (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "QUEUEMANAGER", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "serviceDisplayName": "queuemanager", + "serviceName": "queuemanager", + "roleType": "QUEUEMANAGER_STORE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "queuemanager-QUEUEMANAGER_STORE-7d0b6bba5cf23b4729586ee8d35ab766", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "queuemanager-QUEUEMANAGER_STORE-7d0b6bba5cf23b4729586ee8d35ab766", + "roleConfigGroup": "YARN Queue Manager Store Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"queuemanager-QUEUEMANAGER_STORE-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:52:25.000Z", + "value": 988344320, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "PHOENIX_QUERY_SERVER (cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "PHOENIX", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "22f6ab659c835d47bc13d6c8f3370110", + "active": "true", + "serviceDisplayName": "phoenix", + "serviceName": "phoenix", + "roleType": "PHOENIX_QUERY_SERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "phoenix-PHOENIX_QUERY_SERVER-7e9a53b768c95833df424c7d7b0ae857", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "phoenix-PHOENIX_QUERY_SERVER-7e9a53b768c95833df424c7d7b0ae857", + "roleConfigGroup": "Query Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"phoenix-PHOENIX_QUERY_SERVER-7e9a53b768c95833df424c7d7b0ae857\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "DataNode (cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "88ae2611748383b5628d4aec94873da9", + "active": "true", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "DATANODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-DATANODE-d51d3a03fc3294039de9c160b1013676", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-DATANODE-d51d3a03fc3294039de9c160b1013676", + "roleConfigGroup": "DataNode Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"hdfs-DATANODE-d51d3a03fc3294039de9c160b1013676\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:52:23.000Z", + "value": 589336576, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "NodeManager (cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "YARN", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "ed528836ae33e47e6657b95373571c33", + "active": "true", + "serviceDisplayName": "yarn", + "serviceName": "yarn", + "roleType": "NODEMANAGER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "yarn-NODEMANAGER-145da1565b8e2c4165145d9ecc0c784e", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "yarn-NODEMANAGER-145da1565b8e2c4165145d9ecc0c784e", + "roleConfigGroup": "NodeManager Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"yarn-NODEMANAGER-145da1565b8e2c4165145d9ecc0c784e\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:52:22.000Z", + "value": 432259072, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "Failover Controller (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "759451867dfde961d6adbeb21d9c13f9", + "active": "true", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "FAILOVERCONTROLLER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-FAILOVERCONTROLLER-6e88fa1a7ad969e10ea41365cba9abc5", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-FAILOVERCONTROLLER-6e88fa1a7ad969e10ea41365cba9abc5", + "roleConfigGroup": "Failover Controller Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"hdfs-FAILOVERCONTROLLER-6e88fa1a7ad969e10ea41365cba9abc5\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "HBase Thrift Server (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "HBASE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", + "active": "true", + "serviceDisplayName": "hbase", + "serviceName": "hbase", + "roleType": "HBASETHRIFTSERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hbase-HBASETHRIFTSERVER-3bc8f544ef0c15a373bbe9f9790fefba", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hbase-HBASETHRIFTSERVER-3bc8f544ef0c15a373bbe9f9790fefba", + "roleConfigGroup": "HBase Thrift Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"hbase-HBASETHRIFTSERVER-3bc8f544ef0c15a373bbe9f9790fefba\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "NameNode (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "119115ab851aefe1429860d4255b3fab", + "active": "true", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "NAMENODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-NAMENODE-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-NAMENODE-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "roleConfigGroup": "NameNode Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"hdfs-NAMENODE-dbb26169f4e1fe9a387fcc5bd5bfd6af\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:52:49.000Z", + "value": 1088442368, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "JobHistory Server (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "YARN", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", + "active": "true", + "serviceDisplayName": "yarn", + "serviceName": "yarn", + "roleType": "JOBHISTORY", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "yarn-JOBHISTORY-3bc8f544ef0c15a373bbe9f9790fefba", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "yarn-JOBHISTORY-3bc8f544ef0c15a373bbe9f9790fefba", + "roleConfigGroup": "JobHistory Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"yarn-JOBHISTORY-3bc8f544ef0c15a373bbe9f9790fefba\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:52:09.000Z", + "value": 444329984, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "RegionServer (cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "HBASE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "49adda80d1b98e9262ee146fd7fd798b", + "active": "true", + "serviceDisplayName": "hbase", + "serviceName": "hbase", + "roleType": "REGIONSERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hbase-REGIONSERVER-3c658ac6009daca54192736b1502fae1", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hbase-REGIONSERVER-3c658ac6009daca54192736b1502fae1", + "roleConfigGroup": "hbase-REGIONSERVER", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"hbase-REGIONSERVER-3c658ac6009daca54192736b1502fae1\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "NodeManager (cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "YARN", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "9784d85849c7179b790d476c483fd905", + "active": "true", + "serviceDisplayName": "yarn", + "serviceName": "yarn", + "roleType": "NODEMANAGER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "yarn-NODEMANAGER-bf4b8e304dd0b549bcad6614d3129033", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "yarn-NODEMANAGER-bf4b8e304dd0b549bcad6614d3129033", + "roleConfigGroup": "NodeManager Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"yarn-NODEMANAGER-bf4b8e304dd0b549bcad6614d3129033\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:52:21.000Z", + "value": 432128000, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "QUEUEMANAGER_WEBAPP (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "QUEUEMANAGER", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "serviceDisplayName": "queuemanager", + "serviceName": "queuemanager", + "roleType": "QUEUEMANAGER_WEBAPP", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "queuc8af8526-QUEUEMANAGER_WEBAPP-7d0b6bba5cf23b4729586ee8d35ab76", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "queuc8af8526-QUEUEMANAGER_WEBAPP-7d0b6bba5cf23b4729586ee8d35ab76", + "roleConfigGroup": "YARN Queue Manager Webapp Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"queuc8af8526-QUEUEMANAGER_WEBAPP-7d0b6bba5cf23b4729586ee8d35ab76\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:52:25.000Z", + "value": 277598208, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "KNOX_GATEWAY (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "KNOX", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "serviceDisplayName": "Knox", + "serviceName": "knox-e428", + "roleType": "KNOX_GATEWAY", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "knox-e428-KNOX_GATEWAY-7d0b6bba5cf23b4729586ee8d35ab766", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "knox-e428-KNOX_GATEWAY-7d0b6bba5cf23b4729586ee8d35ab766", + "roleConfigGroup": "Knox Gateway Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"knox-e428-KNOX_GATEWAY-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:52:25.000Z", + "value": 874676224, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "Failover Controller (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "119115ab851aefe1429860d4255b3fab", + "active": "true", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "FAILOVERCONTROLLER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-FAILOVERCONTROLLER-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-FAILOVERCONTROLLER-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "roleConfigGroup": "Failover Controller Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"hdfs-FAILOVERCONTROLLER-dbb26169f4e1fe9a387fcc5bd5bfd6af\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "Alert Publisher (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "MGMT", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "ALERTPUBLISHER", + "roleName": "ALERTPUBLISHER", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "roleConfigGroup": "Alert Publisher Default Group", + "active": "true", + "serviceDisplayName": "MGMT", + "serviceName": "MGMT", + "roleType": "ALERTPUBLISHER", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"ALERTPUBLISHER\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:52:25.000Z", + "value": 283770880, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "ResourceManager (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "YARN", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "119115ab851aefe1429860d4255b3fab", + "active": "true", + "serviceDisplayName": "yarn", + "serviceName": "yarn", + "roleType": "RESOURCEMANAGER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "yarn-RESOURCEMANAGER-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "yarn-RESOURCEMANAGER-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "roleConfigGroup": "ResourceManager Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"yarn-RESOURCEMANAGER-dbb26169f4e1fe9a387fcc5bd5bfd6af\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "Telemetry Publisher (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "MGMT", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "TELEMETRYPUBLISHER", + "roleName": "TELEMETRYPUBLISHER", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "roleConfigGroup": "Telemetry Publisher Default Group", + "active": "true", + "serviceDisplayName": "MGMT", + "serviceName": "MGMT", + "roleType": "TELEMETRYPUBLISHER", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"TELEMETRYPUBLISHER\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:52:24.000Z", + "value": 1248509952, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "DataNode (cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "22f6ab659c835d47bc13d6c8f3370110", + "active": "true", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "DATANODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-DATANODE-7e9a53b768c95833df424c7d7b0ae857", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-DATANODE-7e9a53b768c95833df424c7d7b0ae857", + "roleConfigGroup": "DataNode Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"hdfs-DATANODE-7e9a53b768c95833df424c7d7b0ae857\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:52:24.000Z", + "value": 604594176, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "DataNode (cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "49adda80d1b98e9262ee146fd7fd798b", + "active": "true", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "DATANODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-DATANODE-3c658ac6009daca54192736b1502fae1", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-DATANODE-3c658ac6009daca54192736b1502fae1", + "roleConfigGroup": "DataNode Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"hdfs-DATANODE-3c658ac6009daca54192736b1502fae1\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:52:23.000Z", + "value": 581242880, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "NodeManager (cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "YARN", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "22f6ab659c835d47bc13d6c8f3370110", + "active": "true", + "serviceDisplayName": "yarn", + "serviceName": "yarn", + "roleType": "NODEMANAGER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "yarn-NODEMANAGER-7e9a53b768c95833df424c7d7b0ae857", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "yarn-NODEMANAGER-7e9a53b768c95833df424c7d7b0ae857", + "roleConfigGroup": "yarn-NODEMANAGER", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"yarn-NODEMANAGER-7e9a53b768c95833df424c7d7b0ae857\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:52:24.000Z", + "value": 447143936, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "NodeManager (cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "YARN", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "49adda80d1b98e9262ee146fd7fd798b", + "active": "true", + "serviceDisplayName": "yarn", + "serviceName": "yarn", + "roleType": "NODEMANAGER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "yarn-NODEMANAGER-3c658ac6009daca54192736b1502fae1", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "yarn-NODEMANAGER-3c658ac6009daca54192736b1502fae1", + "roleConfigGroup": "yarn-NODEMANAGER", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"yarn-NODEMANAGER-3c658ac6009daca54192736b1502fae1\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:52:23.000Z", + "value": 443666432, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "Service Monitor (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-11-29T04:48:06.459Z", + "endTime": "2022-11-29T04:53:06.459Z", + "attributes": { + "serviceType": "MGMT", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "SERVICEMONITOR", + "roleName": "SERVICEMONITOR", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "roleConfigGroup": "Service Monitor Default Group", + "active": "true", + "serviceDisplayName": "MGMT", + "serviceName": "MGMT", + "roleType": "SERVICEMONITOR", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"SERVICEMONITOR\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:52:24.000Z", + "value": 3099918336, + "type": "SAMPLE" + } + ] + } + ], + "warnings": [], + "timeSeriesQuery": "select last(mem_rss)" + } + ] +} \ No newline at end of file diff --git a/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(physical_memory_cached)&to=now b/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(physical_memory_cached)&to=now new file mode 100644 index 0000000000000..ccc7815e2c43f --- /dev/null +++ b/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(physical_memory_cached)&to=now @@ -0,0 +1,307 @@ +{ + "items": [ + { + "timeSeries": [ + { + "metadata": { + "metricName": "last(physical_memory_cached)", + "entityName": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:45:02.415Z", + "endTime": "2022-11-29T04:50:02.415Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "96efbf3e7279bf25ae44fe0a6398ee97", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(physical_memory_cached) WHERE entityName = \"96efbf3e7279bf25ae44fe0a6398ee97\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:49:09.000Z", + "value": 2690670592, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(physical_memory_cached)", + "entityName": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:45:02.415Z", + "endTime": "2022-11-29T04:50:02.415Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "88ae2611748383b5628d4aec94873da9", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "88ae2611748383b5628d4aec94873da9", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(physical_memory_cached) WHERE entityName = \"88ae2611748383b5628d4aec94873da9\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:49:23.000Z", + "value": 2141118464, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(physical_memory_cached)", + "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:45:02.415Z", + "endTime": "2022-11-29T04:50:02.415Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(physical_memory_cached) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:49:25.000Z", + "value": 15145844736, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(physical_memory_cached)", + "entityName": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:45:02.415Z", + "endTime": "2022-11-29T04:50:02.415Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "22f6ab659c835d47bc13d6c8f3370110", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "22f6ab659c835d47bc13d6c8f3370110", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(physical_memory_cached) WHERE entityName = \"22f6ab659c835d47bc13d6c8f3370110\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:49:24.000Z", + "value": 3900317696, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(physical_memory_cached)", + "entityName": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:45:02.415Z", + "endTime": "2022-11-29T04:50:02.415Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "49adda80d1b98e9262ee146fd7fd798b", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "49adda80d1b98e9262ee146fd7fd798b", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(physical_memory_cached) WHERE entityName = \"49adda80d1b98e9262ee146fd7fd798b\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:49:23.000Z", + "value": 2180915200, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(physical_memory_cached)", + "entityName": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:45:02.415Z", + "endTime": "2022-11-29T04:50:02.415Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "9784d85849c7179b790d476c483fd905", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "9784d85849c7179b790d476c483fd905", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(physical_memory_cached) WHERE entityName = \"9784d85849c7179b790d476c483fd905\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:49:22.000Z", + "value": 2401472512, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(physical_memory_cached)", + "entityName": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:45:02.415Z", + "endTime": "2022-11-29T04:50:02.415Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "119115ab851aefe1429860d4255b3fab", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "119115ab851aefe1429860d4255b3fab", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(physical_memory_cached) WHERE entityName = \"119115ab851aefe1429860d4255b3fab\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:49:50.000Z", + "value": 1961009152, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(physical_memory_cached)", + "entityName": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:45:02.415Z", + "endTime": "2022-11-29T04:50:02.415Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "ed528836ae33e47e6657b95373571c33", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "ed528836ae33e47e6657b95373571c33", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(physical_memory_cached) WHERE entityName = \"ed528836ae33e47e6657b95373571c33\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:49:22.000Z", + "value": 2140213248, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(physical_memory_cached)", + "entityName": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:45:02.415Z", + "endTime": "2022-11-29T04:50:02.415Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "759451867dfde961d6adbeb21d9c13f9", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "759451867dfde961d6adbeb21d9c13f9", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(physical_memory_cached) WHERE entityName = \"759451867dfde961d6adbeb21d9c13f9\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:49:43.000Z", + "value": 1256312832, + "type": "SAMPLE" + } + ] + } + ], + "warnings": [], + "timeSeriesQuery": "select last(physical_memory_cached)" + } + ] +} \ No newline at end of file diff --git a/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(swap_out_rate)&to=now b/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(swap_out_rate)&to=now new file mode 100644 index 0000000000000..6073559d67abb --- /dev/null +++ b/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(swap_out_rate)&to=now @@ -0,0 +1,325 @@ +{ + "items": [ + { + "timeSeries": [ + { + "metadata": { + "metricName": "last(swap_out_rate)", + "entityName": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:48:31.349Z", + "endTime": "2022-11-29T04:53:31.349Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "96efbf3e7279bf25ae44fe0a6398ee97", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "pages" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(swap_out_rate) WHERE entityName = \"96efbf3e7279bf25ae44fe0a6398ee97\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:53:09.000Z", + "value": 0, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(swap_out_rate)", + "entityName": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:48:31.349Z", + "endTime": "2022-11-29T04:53:31.349Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "88ae2611748383b5628d4aec94873da9", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "88ae2611748383b5628d4aec94873da9", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "pages" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(swap_out_rate) WHERE entityName = \"88ae2611748383b5628d4aec94873da9\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:53:23.000Z", + "value": 0, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(swap_out_rate)", + "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:48:31.349Z", + "endTime": "2022-11-29T04:53:31.349Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "pages" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(swap_out_rate) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:53:25.000Z", + "value": 0, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(swap_out_rate)", + "entityName": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:48:31.349Z", + "endTime": "2022-11-29T04:53:31.349Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "22f6ab659c835d47bc13d6c8f3370110", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "22f6ab659c835d47bc13d6c8f3370110", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "pages" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(swap_out_rate) WHERE entityName = \"22f6ab659c835d47bc13d6c8f3370110\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:53:24.000Z", + "value": 0, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(swap_out_rate)", + "entityName": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:48:31.349Z", + "endTime": "2022-11-29T04:53:31.349Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "49adda80d1b98e9262ee146fd7fd798b", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "49adda80d1b98e9262ee146fd7fd798b", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "pages" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(swap_out_rate) WHERE entityName = \"49adda80d1b98e9262ee146fd7fd798b\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:53:23.000Z", + "value": 0, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(swap_out_rate)", + "entityName": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:48:31.349Z", + "endTime": "2022-11-29T04:53:31.349Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "9784d85849c7179b790d476c483fd905", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "9784d85849c7179b790d476c483fd905", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "pages" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(swap_out_rate) WHERE entityName = \"9784d85849c7179b790d476c483fd905\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:53:22.000Z", + "value": 0, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(swap_out_rate)", + "entityName": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:48:31.349Z", + "endTime": "2022-11-29T04:53:31.349Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "119115ab851aefe1429860d4255b3fab", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "119115ab851aefe1429860d4255b3fab", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "pages" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(swap_out_rate) WHERE entityName = \"119115ab851aefe1429860d4255b3fab\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:52:50.000Z", + "value": 0, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(swap_out_rate)", + "entityName": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:48:31.349Z", + "endTime": "2022-11-29T04:53:31.349Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "ed528836ae33e47e6657b95373571c33", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "ed528836ae33e47e6657b95373571c33", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "pages" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(swap_out_rate) WHERE entityName = \"ed528836ae33e47e6657b95373571c33\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:53:22.000Z", + "value": 0, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(swap_out_rate)", + "entityName": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:48:31.349Z", + "endTime": "2022-11-29T04:53:31.349Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "759451867dfde961d6adbeb21d9c13f9", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "759451867dfde961d6adbeb21d9c13f9", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "pages" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(swap_out_rate) WHERE entityName = \"759451867dfde961d6adbeb21d9c13f9\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:52:43.000Z", + "value": 0, + "type": "SAMPLE" + } + ] + } + ], + "warnings": [], + "timeSeriesQuery": "select last(swap_out_rate)" + } + ] +} \ No newline at end of file diff --git a/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(total_bytes_receive_rate_across_network_interfaces)&to=now b/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(total_bytes_receive_rate_across_network_interfaces)&to=now new file mode 100644 index 0000000000000..79d4b7b1264fb --- /dev/null +++ b/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(total_bytes_receive_rate_across_network_interfaces)&to=now @@ -0,0 +1,447 @@ +{ + "items": [ + { + "timeSeries": [ + { + "metadata": { + "metricName": "last(total_bytes_receive_rate_across_network_interfaces)", + "entityName": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:49:12.024Z", + "endTime": "2022-11-29T04:54:12.024Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "96efbf3e7279bf25ae44fe0a6398ee97", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(total_bytes_receive_rate_across_network_interfaces) WHERE entityName = \"96efbf3e7279bf25ae44fe0a6398ee97\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:54:03.770Z", + "value": 1032.2, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(total_bytes_receive_rate_across_network_interfaces)", + "entityName": "/ap-northeast-1a", + "startTime": "2022-11-29T04:49:12.024Z", + "endTime": "2022-11-29T04:54:12.024Z", + "attributes": { + "active": "true", + "category": "RACK", + "entityName": "/ap-northeast-1a", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(total_bytes_receive_rate_across_network_interfaces) WHERE entityName = \"/ap-northeast-1a\" AND category = RACK", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:54:03.770Z", + "value": 1447.9833333333333, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(total_bytes_receive_rate_across_network_interfaces)", + "entityName": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:49:12.024Z", + "endTime": "2022-11-29T04:54:12.024Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "88ae2611748383b5628d4aec94873da9", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "88ae2611748383b5628d4aec94873da9", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(total_bytes_receive_rate_across_network_interfaces) WHERE entityName = \"88ae2611748383b5628d4aec94873da9\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:54:03.770Z", + "value": 415.78333333333336, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(total_bytes_receive_rate_across_network_interfaces)", + "entityName": "/ap-northeast-1c", + "startTime": "2022-11-29T04:49:12.024Z", + "endTime": "2022-11-29T04:54:12.024Z", + "attributes": { + "active": "true", + "category": "RACK", + "entityName": "/ap-northeast-1c", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(total_bytes_receive_rate_across_network_interfaces) WHERE entityName = \"/ap-northeast-1c\" AND category = RACK", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:54:03.770Z", + "value": 3130.9833333333336, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(total_bytes_receive_rate_across_network_interfaces)", + "entityName": "/ap-northeast-1d", + "startTime": "2022-11-29T04:49:12.024Z", + "endTime": "2022-11-29T04:54:12.024Z", + "attributes": { + "active": "true", + "category": "RACK", + "entityName": "/ap-northeast-1d", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(total_bytes_receive_rate_across_network_interfaces) WHERE entityName = \"/ap-northeast-1d\" AND category = RACK", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:54:03.770Z", + "value": 534756.65, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(total_bytes_receive_rate_across_network_interfaces)", + "entityName": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:49:12.024Z", + "endTime": "2022-11-29T04:54:12.024Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "22f6ab659c835d47bc13d6c8f3370110", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "22f6ab659c835d47bc13d6c8f3370110", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(total_bytes_receive_rate_across_network_interfaces) WHERE entityName = \"22f6ab659c835d47bc13d6c8f3370110\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:54:03.770Z", + "value": 348.53333333333336, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(total_bytes_receive_rate_across_network_interfaces)", + "entityName": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:49:12.024Z", + "endTime": "2022-11-29T04:54:12.024Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "49adda80d1b98e9262ee146fd7fd798b", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "49adda80d1b98e9262ee146fd7fd798b", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(total_bytes_receive_rate_across_network_interfaces) WHERE entityName = \"49adda80d1b98e9262ee146fd7fd798b\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:54:03.770Z", + "value": 339.93333333333334, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(total_bytes_receive_rate_across_network_interfaces)", + "entityName": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:49:12.024Z", + "endTime": "2022-11-29T04:54:12.024Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "119115ab851aefe1429860d4255b3fab", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "119115ab851aefe1429860d4255b3fab", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(total_bytes_receive_rate_across_network_interfaces) WHERE entityName = \"119115ab851aefe1429860d4255b3fab\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:54:03.770Z", + "value": 2442.516666666667, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(total_bytes_receive_rate_across_network_interfaces)", + "entityName": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:49:12.024Z", + "endTime": "2022-11-29T04:54:12.024Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "ed528836ae33e47e6657b95373571c33", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "ed528836ae33e47e6657b95373571c33", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(total_bytes_receive_rate_across_network_interfaces) WHERE entityName = \"ed528836ae33e47e6657b95373571c33\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:54:03.770Z", + "value": 344.5, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(total_bytes_receive_rate_across_network_interfaces)", + "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:49:12.024Z", + "endTime": "2022-11-29T04:54:12.024Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(total_bytes_receive_rate_across_network_interfaces) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:54:03.770Z", + "value": 531573.2833333333, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(total_bytes_receive_rate_across_network_interfaces)", + "entityName": "cod--qfdcinkqrzw", + "startTime": "2022-11-29T04:49:12.024Z", + "endTime": "2022-11-29T04:54:12.024Z", + "attributes": { + "active": "true", + "clusterDisplayName": "cod--qfdcinkqrzw", + "category": "CLUSTER", + "version": "CDH 7.2.15", + "entityName": "1546335201", + "clusterName": "cod--qfdcinkqrzw" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(total_bytes_receive_rate_across_network_interfaces) WHERE entityName = \"1546335201\" AND category = CLUSTER", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:54:03.770Z", + "value": 539335.6166666667, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(total_bytes_receive_rate_across_network_interfaces)", + "entityName": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:49:12.024Z", + "endTime": "2022-11-29T04:54:12.024Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "9784d85849c7179b790d476c483fd905", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "9784d85849c7179b790d476c483fd905", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(total_bytes_receive_rate_across_network_interfaces) WHERE entityName = \"9784d85849c7179b790d476c483fd905\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:54:03.770Z", + "value": 441.18333333333334, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(total_bytes_receive_rate_across_network_interfaces)", + "entityName": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-11-29T04:49:12.024Z", + "endTime": "2022-11-29T04:54:12.024Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "759451867dfde961d6adbeb21d9c13f9", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "759451867dfde961d6adbeb21d9c13f9", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(total_bytes_receive_rate_across_network_interfaces) WHERE entityName = \"759451867dfde961d6adbeb21d9c13f9\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-11-29T04:54:03.770Z", + "value": 2397.6833333333334, + "type": "SAMPLE" + } + ] + } + ], + "warnings": [], + "timeSeriesQuery": "select last(total_bytes_receive_rate_across_network_interfaces)" + } + ] +} \ No newline at end of file From efa96da491c54938efaf46e4006fada5e7b37093 Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Tue, 29 Nov 2022 14:48:56 -0800 Subject: [PATCH 16/71] Apply Jose's metric and health check collection style (#13423) * First commit * Added docker-compose file * Match current PR * Match PR * Fix style * Refactor * Revert any test changes * Spacing * Revert unnecessary changes * Spacing Co-authored-by: Jose Manuel Almaza --- .../datadog_checks/cloudera/api_client.py | 11 ++ .../cloudera/api_client_factory.py | 24 ++++ .../datadog_checks/cloudera/api_client_v5.py | 106 ++++++++++++++++ .../datadog_checks/cloudera/api_client_v7.py | 112 +++++++++++++++++ cloudera/datadog_checks/cloudera/check.py | 118 +----------------- cloudera/datadog_checks/cloudera/client.py | 31 ----- cloudera/datadog_checks/cloudera/common.py | 22 +--- .../datadog_checks/cloudera/entity_status.py | 17 +++ cloudera/datadog_checks/cloudera/metrics.py | 34 +++++ 9 files changed, 311 insertions(+), 164 deletions(-) create mode 100644 cloudera/datadog_checks/cloudera/api_client.py create mode 100644 cloudera/datadog_checks/cloudera/api_client_factory.py create mode 100644 cloudera/datadog_checks/cloudera/api_client_v5.py create mode 100644 cloudera/datadog_checks/cloudera/api_client_v7.py delete mode 100644 cloudera/datadog_checks/cloudera/client.py create mode 100644 cloudera/datadog_checks/cloudera/entity_status.py create mode 100644 cloudera/datadog_checks/cloudera/metrics.py diff --git a/cloudera/datadog_checks/cloudera/api_client.py b/cloudera/datadog_checks/cloudera/api_client.py new file mode 100644 index 0000000000000..d88a92ff398f2 --- /dev/null +++ b/cloudera/datadog_checks/cloudera/api_client.py @@ -0,0 +1,11 @@ +from abc import abstractmethod + +class ApiClient: + def __init__(self, check, api_client): + self._check = check + self._log = check.log + self._api_client = api_client + + @abstractmethod + def collect_data(self): + raise NotImplementedError diff --git a/cloudera/datadog_checks/cloudera/api_client_factory.py b/cloudera/datadog_checks/cloudera/api_client_factory.py new file mode 100644 index 0000000000000..7712cff21b18a --- /dev/null +++ b/cloudera/datadog_checks/cloudera/api_client_factory.py @@ -0,0 +1,24 @@ +import cm_client +import packaging.version + +from datadog_checks.cloudera.api_client_v7 import ApiClientV7 + + +def make_api_client(check, config): + cm_client.configuration.username = config.workload_username + cm_client.configuration.password = config.workload_password + api_client = cm_client.ApiClient(config.api_url) + + check.log.debug('Getting version from cloudera') + cloudera_manager_resource_api = cm_client.ClouderaManagerResourceApi(api_client) + get_version_response = cloudera_manager_resource_api.get_version() + check.log.debug('get_version_response: %s', get_version_response) + cloudera_version = get_version_response.version + check.log.debug('Cloudera Manager Version: %s', cloudera_version) + cloudera_version = packaging.version.parse(str(cloudera_version)) + + # FIXME: For now, no v5 since changes are done in v7 + # if cloudera_version.major == 5: + # return ApiClientV5(check, api_client) + if cloudera_version.major == 7: + return ApiClientV7(check, api_client) diff --git a/cloudera/datadog_checks/cloudera/api_client_v5.py b/cloudera/datadog_checks/cloudera/api_client_v5.py new file mode 100644 index 0000000000000..ebd0e3f4808ab --- /dev/null +++ b/cloudera/datadog_checks/cloudera/api_client_v5.py @@ -0,0 +1,106 @@ +# import cm_client +# from cm_client.rest import ApiException + +# from datadog_checks.base import AgentCheck +# from datadog_checks.cloudera.api_client import ApiClient +# from datadog_checks.cloudera.entity_status import ENTITY_STATUS +# from datadog_checks.cloudera.health_summary import HEALTH_SUMMARY +# from datadog_checks.cloudera.metrics import METRICS + + +# class ApiClientV5(ApiClient): +# def __init__(self, check, instance, api_client): +# super(ApiClientV5, self).__init__(check, instance, api_client) + +# def collect_data(self): +# self._collect_clusters() + +# def _collect_clusters(self): +# clusters_resource_api = cm_client.ClustersResourceApi(self._api_client) +# read_clusters_response = clusters_resource_api.read_clusters(cluster_type='any', view='full') +# self._log.debug('read_clusters_response: %s', read_clusters_response) +# for cluster in read_clusters_response.items: +# self._collect_cluster(cluster) + +# def _collect_cluster(self, cluster): +# self._log.debug('cluster: %s', cluster) +# cluster_entity_status = ENTITY_STATUS[cluster.entity_status] if cluster.entity_status else None +# cluster_name = cluster.name +# cluster_tags = cluster.tags +# self._log.debug('cluster_entity_status: %s', cluster_entity_status) +# self._log.debug('cluster_name: %s', cluster_name) +# self._log.debug('cluster_tags: %s', cluster_tags) +# if cluster_name: +# tags = [f'cloudera_cluster:{cluster_name}'] +# if cluster_tags: +# for cluster_tag in cluster_tags: +# tags.append(f"{cluster_tag.name}:{cluster_tag.value}") +# self._check.service_check("cluster_status", cluster_entity_status, tags=tags) +# if cluster_name: +# self._collect_cluster_metrics(cluster_name, tags) +# self._collect_cluster_hosts(cluster_name) + +# def _collect_cluster_metrics(self, cluster_name, tags): +# time_series_resource_api = cm_client.TimeSeriesResourceApi(self._api_client) +# metric_names = ','.join(f'last({metric})' for metric in METRICS['cluster']) +# query = f'SELECT {metric_names} WHERE clusterName="{cluster_name}" AND category=CLUSTER' +# self._log.debug('query: %s', query) +# query_time_series_response = time_series_resource_api.query_time_series(query=query) +# self._log.debug('query_time_series_response: %s', query_time_series_response) +# index = 0 +# while index < len(query_time_series_response.items[0].time_series): +# metric_name = METRICS['cluster'][index] +# value = query_time_series_response.items[0].time_series[index].data[0].value +# self._log.debug('metric_name: %s', f'cluster.{metric_name}') +# self._log.debug('value: %s', value) +# self._log.debug('tags: %s', tags) +# self._check.gauge(f'cluster.{metric_name}', value, tags=tags) +# index += 1 + +# def _collect_cluster_hosts(self, cluster_name): +# clusters_resource_api = cm_client.ClustersResourceApi(self._api_client) +# list_hosts_response = clusters_resource_api.list_hosts(cluster_name, view='full') +# self._log.debug('list_hosts_response: %s', list_hosts_response) +# for host in list_hosts_response.items: +# self._collect_cluster_host(host) + +# def _collect_cluster_host(self, host): +# self._log.debug('host: %s', host) +# host_health_summary = HEALTH_SUMMARY[host.health_summary] if host.health_summary else None +# host_id = host.host_id +# host_name = host.hostname +# host_ip_address = host.ip_address +# host_tags = host.tags +# self._log.debug('host_status: %s', host_health_summary) +# self._log.debug('host_id: %s', host_id) +# self._log.debug('host_tags: %s', host_tags) +# tags = [] +# if host_id: +# tags.append(f'cloudera_host_id:{host_id}') +# if host_name: +# tags.append(f'cloudera_host_id:{host_name}') +# if host_ip_address: +# tags.append(f'cloudera_host_id:{host_ip_address}') +# if host_tags: +# tags.extend([f"{host_tag.name}:{host_tag.value}" for host_tag in host_tags]) +# self._log.debug('host_tags: %s', tags) +# self._check.service_check("host_status", host_health_summary, tags=tags) +# if host_id: +# self._collect_host_metrics(host_id, tags) + +# def _collect_host_metrics(self, host_id, tags): +# time_series_resource_api = cm_client.TimeSeriesResourceApi(self._api_client) +# metric_names = ','.join(f'last({metric})' for metric in METRICS['host']) +# query = f'SELECT {metric_names} WHERE hostId="{host_id}" AND category=HOST' +# self._log.debug('query: %s', query) +# query_time_series_response = time_series_resource_api.query_time_series(query=query) +# self._log.debug('query_time_series_response: %s', query_time_series_response) +# index = 0 +# while index < len(query_time_series_response.items[0].time_series): +# metric_name = METRICS['host'][index] +# value = query_time_series_response.items[0].time_series[index].data[0].value +# self._log.debug('metric_name: %s', f'host.{metric_name}') +# self._log.debug('value: %s', value) +# self._log.debug('tags: %s', tags) +# self._check.gauge(f'host.{metric_name}', value, tags=tags) +# index += 1 diff --git a/cloudera/datadog_checks/cloudera/api_client_v7.py b/cloudera/datadog_checks/cloudera/api_client_v7.py new file mode 100644 index 0000000000000..4dceb09bedeee --- /dev/null +++ b/cloudera/datadog_checks/cloudera/api_client_v7.py @@ -0,0 +1,112 @@ +import cm_client + +from datadog_checks.cloudera.api_client import ApiClient +from datadog_checks.cloudera.entity_status import ENTITY_STATUS +from datadog_checks.cloudera.metrics import METRICS + +from .common import CLUSTER_HEALTH, HOST_HEALTH +from datadog_checks.base import AgentCheck + +# TODO: Refactor this to be cleaner +class ApiClientV7(ApiClient): + def __init__(self, check, api_client): + super(ApiClientV7, self).__init__(check, api_client) + + def collect_data(self): + self._collect_clusters() + + def _collect_clusters(self): + clusters_resource_api = cm_client.ClustersResourceApi(self._api_client) + read_clusters_response = clusters_resource_api.read_clusters(cluster_type='any', view='full') + for cluster in read_clusters_response.items: + self._collect_cluster_metrics_and_service_check(cluster) + + def _collect_cluster_metrics_and_service_check(self, cluster): + self._log.debug('cluster: %s', cluster) + cluster_entity_status = ENTITY_STATUS[cluster.entity_status] + cluster_name = cluster.name + cluster_tags = cluster.tags + self._log.debug('cluster_entity_status: %s', cluster_entity_status) + self._log.debug('cluster_name: %s', cluster_name) + self._log.debug('cluster_tags: %s', cluster_tags) + + if cluster_name: + tags = [f'cloudera_cluster:{cluster_name}'] + + if cluster_tags: + for cluster_tag in cluster_tags: + tags.append(f"{cluster_tag.name}:{cluster_tag.value}") + + message = cluster.entity_status if cluster_entity_status != AgentCheck.OK else None + self._check.service_check(CLUSTER_HEALTH, cluster_entity_status, tags=tags, message=message) + + if cluster_name: + self._collect_cluster_metrics(cluster_name, tags) + self._collect_hosts_metrics_and_service_check(cluster_name) + + def _collect_cluster_metrics(self, cluster_name, tags): + time_series_resource_api = cm_client.TimeSeriesResourceApi(self._api_client) + metric_names = ','.join(f'last({metric})' for metric in METRICS['cluster']) + query = f'SELECT {metric_names} WHERE clusterName="{cluster_name}" AND category=CLUSTER' + self._log.debug('query: %s', query) + query_time_series_response = time_series_resource_api.query_time_series(query=query) + self._collect_query_time_series(query_time_series_response, 'cluster') + + def _collect_hosts_metrics_and_service_check(self, cluster_name): + clusters_resource_api = cm_client.ClustersResourceApi(self._api_client) + list_hosts_response = clusters_resource_api.list_hosts(cluster_name, view='full') + for host in list_hosts_response.items: + self._collect_host_metrics_and_service_check(host) + + def _collect_host_metrics_and_service_check(self, host): + self._log.debug('host: %s', host) + host_entity_status = ENTITY_STATUS[host.entity_status] if host.entity_status else None + + host_id = host.host_id + self._log.debug('host_entity_status: %s', host_entity_status) + self._log.debug('host_id: %s', host_id) + + if host_id: + tags = [f"{tag.name}:{tag.value}" for tag in host.tags] + self._collect_host_metrics(host_id, tags) + self._collect_role_metrics(host_id, tags) + self._log.debug('host tags: %s', tags) + self._check.service_check(HOST_HEALTH, host_entity_status, tags=tags) + + def _collect_host_metrics(self, host_id, tags): + time_series_resource_api = cm_client.TimeSeriesResourceApi(self._api_client) + metric_names = ','.join(f'last({metric})' for metric in METRICS['host']) + query = f'SELECT {metric_names} WHERE hostId="{host_id}" AND category=HOST' + self._log.debug('query: %s', query) + query_time_series_response = time_series_resource_api.query_time_series(query=query) + self._collect_query_time_series(query_time_series_response, 'host', tags) + + def _collect_role_metrics(self, host_id, tags): + time_series_resource_api = cm_client.TimeSeriesResourceApi(self._api_client) + metric_names = ','.join(f'last({metric})' for metric in METRICS['role']) + query = f'SELECT {metric_names} WHERE hostId="{host_id}" AND category=ROLE' + self._log.debug('query: %s', query) + query_time_series_response = time_series_resource_api.query_time_series(query=query) + self._collect_query_time_series(query_time_series_response, 'role', tags) + + def _collect_query_time_series(self, query_time_series_response, category, tags=[]): + for item in query_time_series_response.items: + last_metadata_metric_name = None + for ts in item.time_series: + self._log.debug('ts: %s', ts) + if last_metadata_metric_name is None: + index = 0 + elif last_metadata_metric_name != ts.metadata.metric_name: + index += 1 + last_metadata_metric_name = ts.metadata.metric_name + metric_name = METRICS[category][index] + full_metric_name = f'{category}.{metric_name}' + new_tag = f'cloudera_{category}:{ts.metadata.entity_name}' + if new_tag not in tags: + tags.append(new_tag) + for d in ts.data: + value = d.value + self._log.debug('full_metric_name: %s', full_metric_name) + self._log.debug('value: %s', value) + self._log.debug('tags: %s', tags) + self._check.gauge(full_metric_name, value, tags=tags) diff --git a/cloudera/datadog_checks/cloudera/check.py b/cloudera/datadog_checks/cloudera/check.py index c135aa1e9484b..d4cd474618e56 100644 --- a/cloudera/datadog_checks/cloudera/check.py +++ b/cloudera/datadog_checks/cloudera/check.py @@ -2,20 +2,11 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) from six import PY2 -from datadog_checks.cloudera.client import ClouderaClient from datadog_checks.base import AgentCheck, ConfigurationError -from .common import ( - API_ENTITY_STATUS, - CAN_CONNECT, - CLUSTER_HEALTH, - CLUSTERS_RESOURCE_API, - HOST_HEALTH, - ROLE_HEALTH, - SERVICES_RESOURCE_API, -) -from .queries import TIMESERIES_QUERIES +from .api_client_factory import make_api_client +from .common import CAN_CONNECT from .config_models import ConfigMixin @@ -32,116 +23,19 @@ def __init__(self, name, init_config, instances): super(ClouderaCheck, self).__init__(name, init_config, instances) self.client = None - self.check_initializations.append(self._create_client) def _create_client(self): try: - client = ClouderaClient(username=self.config.workload_username, password=self.config.workload_password, api_url=self.config.api_url) + client = make_api_client(self, self.config) except Exception as e: self.log.error(f"Cloudera API Client is none: {e}") self.service_check(CAN_CONNECT, AgentCheck.CRITICAL) raise - + self.client = client self.custom_tags = self.config.tags # TODO: Don't need self.custom_tags - - def run_timeseries_checks(self): - # For each timeseries query, get the metrics - # TODO: Running these metrics cause the execution time to be high, run async? - for query in TIMESERIES_QUERIES: - items = self.client.run_timeseries_query(query=query['query_string']) - for item in items: - if not item.data: - self.log.debug(f"Data for entity {item.metadata.entity_name} is empty") - continue - - value = item.data[0].value - attributes = item.metadata.attributes - - # TODO: Add custom tags to this - tags = [] - for datadog_tag, attribute in query['tags']: - try: - tags.append(f"{datadog_tag}:{attributes[attribute]}") - except: - self.log.debug(f"no {datadog_tag} tag for metric {item.metadata.entity_name}") - - category = attributes['category'].lower() - self.gauge(f"{category}.{query['metric_name']}", value, tags=tags) - - def run_service_checks(self): - # Structure: - # Cluster - # - Service - # - Nameservice - # - Role - # - Host - - cluster_responses = self.client.run_query( - CLUSTERS_RESOURCE_API, "read_clusters", view='full', cluster_type='any' - ) - for cluster_response in cluster_responses: - tags = [ - f'cluster_type:{cluster_response.cluster_type}', - f'cluster_url:{cluster_response.cluster_url}', - f'cluster_name:{cluster_response.display_name}', - ] - self._submit_health_check(cluster_response, CLUSTER_HEALTH, tags) - - # For each cluster, get the services - service_responses = self.client.run_query( - SERVICES_RESOURCE_API, "read_services", view='full', cluster_name=cluster_response.display_name - ) - - for service_response in service_responses: - tags = [ - f'service_name:{service_response.display_name}', - f'service_url:{service_response.service_url}', - f'service_url:{service_response.service_url}', - f'service_type:{service_response.type}', - ] - # role and services are the same, but since the metric categories use role, the service check will use role as well - self._submit_health_check(service_response, ROLE_HEALTH, tags) - - # TODO: Get nameservice and role health checks - - # For each cluster, get the hosts - host_responses = self.client.run_query( - CLUSTERS_RESOURCE_API, "list_hosts", view='full', cluster_name=cluster_response.display_name - ) - - for host_response in host_responses: - host_tags = [ - f'cloudera_host_id:{host_response.host_id}', - f'cloudera_host_url:{host_response.host_url}', - f'cloudera_hostname:{host_response.hostname}', - ] - self._submit_health_check(host_response, HOST_HEALTH, host_tags) - # submit metrics for hosts - self.gauge("host.num_cores", host_response.num_cores, host_tags) - self.gauge("host.num_physical_cores", host_response.num_physical_cores, host_tags) - self.gauge("host.total_phys_mem_bytes", host_response.total_phys_mem_bytes, host_tags) - - # host metrics - - # Output OK can_connect if got to here - self.service_check(CAN_CONNECT, AgentCheck.OK) - - def _submit_health_check(self, item, service_check, tags): - status = API_ENTITY_STATUS[item.entity_status] - message = None if status is AgentCheck.OK else item.entity_status - - self.service_check(service_check, status, message=message, tags=tags) - def check(self, _): - # Run through the list of default timeseries metrics first - self.run_timeseries_checks() - - # Get the service checks of cluster, service, nameservice, role, and host - self.run_service_checks() - - # Get the health check metrics of clusters and services - - # TODO: Run any custom queries + self.client.collect_data() + self.service_check(CAN_CONNECT, AgentCheck.OK) diff --git a/cloudera/datadog_checks/cloudera/client.py b/cloudera/datadog_checks/cloudera/client.py deleted file mode 100644 index 3c1b0f2cdf33e..0000000000000 --- a/cloudera/datadog_checks/cloudera/client.py +++ /dev/null @@ -1,31 +0,0 @@ -import cm_client - - -class ClouderaClient: - def __init__(self, username, password, api_url): - cm_client.configuration.username = username - cm_client.configuration.password = password - self.api_client = cm_client.ApiClient(api_url) - - def run_query(self, cloudera_api_class, cloudera_api_method, **kwargs): - # Create an instance of cloudera_api_class - api_instance = getattr(cm_client, cloudera_api_class)(self.api_client) - - # Run cloudera_api_method to query for metrics and service checks - response = getattr(api_instance, cloudera_api_method)(**kwargs) - - return response.items - - def run_timeseries_query(self, query): - api_instance = cm_client.TimeSeriesResourceApi(self.api_client) - - # Note: by default query_time_series() sets the optional `to_time` - # param to `now` and `_from_time` param to 5 minutes before now. - response = api_instance.query_time_series(query=query) - - # There is always only one item in response list `items` - return response.items[0].time_series - - def get_cluster_tags(self): - - raise NotImplemented diff --git a/cloudera/datadog_checks/cloudera/common.py b/cloudera/datadog_checks/cloudera/common.py index 7540a5da9e2e2..2d76ed33f0760 100644 --- a/cloudera/datadog_checks/cloudera/common.py +++ b/cloudera/datadog_checks/cloudera/common.py @@ -1,26 +1,6 @@ -from datadog_checks.base import AgentCheck - -# Based on ApiEntityStatus: https://archive.cloudera.com/cm7/7.7.1/generic/jar/cm_api/apidocs/json_ApiEntityStatus.html -API_ENTITY_STATUS = { - 'UNKNOWN': AgentCheck.UNKNOWN, - 'NONE': AgentCheck.UNKNOWN, - 'STOPPED': AgentCheck.UNKNOWN, - 'DOWN': AgentCheck.CRITICAL, - 'UNKNOWN_HEALTH': AgentCheck.UNKNOWN, - 'DISABLED_HEALTH': AgentCheck.CRITICAL, - 'CONCERNING_HEALTH': AgentCheck.WARNING, - 'BAD_HEALTH': AgentCheck.CRITICAL, - 'GOOD_HEALTH': AgentCheck.OK, - 'STARTING': AgentCheck.OK, - 'STOPPING': AgentCheck.OK, - 'HISTORY_NOT_AVAILABLE': AgentCheck.UNKNOWN, -} - CAN_CONNECT = "can_connect" CLUSTER_HEALTH = "cluster.health" ROLE_HEALTH = "role.health" HOST_HEALTH = "host.health" -CLUSTERS_RESOURCE_API = "ClustersResourceApi" -SERVICES_RESOURCE_API = "ServicesResourceApi" -# mock all of the methods and classes of the cloudera client \ No newline at end of file +# mock all of the methods and classes of the cloudera client diff --git a/cloudera/datadog_checks/cloudera/entity_status.py b/cloudera/datadog_checks/cloudera/entity_status.py new file mode 100644 index 0000000000000..36b975ed670ae --- /dev/null +++ b/cloudera/datadog_checks/cloudera/entity_status.py @@ -0,0 +1,17 @@ +from datadog_checks.base import AgentCheck + +# Based on ApiEntityStatus: https://archive.cloudera.com/cm7/7.7.1/generic/jar/cm_api/apidocs/json_ApiEntityStatus.html +ENTITY_STATUS = { + 'UNKNOWN': AgentCheck.UNKNOWN, + 'NONE': AgentCheck.UNKNOWN, + 'STOPPED': AgentCheck.UNKNOWN, + 'DOWN': AgentCheck.CRITICAL, + 'UNKNOWN_HEALTH': AgentCheck.UNKNOWN, + 'DISABLED_HEALTH': AgentCheck.CRITICAL, + 'CONCERNING_HEALTH': AgentCheck.WARNING, + 'BAD_HEALTH': AgentCheck.CRITICAL, + 'GOOD_HEALTH': AgentCheck.OK, + 'STARTING': AgentCheck.OK, + 'STOPPING': AgentCheck.OK, + 'HISTORY_NOT_AVAILABLE': AgentCheck.UNKNOWN, +} diff --git a/cloudera/datadog_checks/cloudera/metrics.py b/cloudera/datadog_checks/cloudera/metrics.py new file mode 100644 index 0000000000000..2478b24cf386a --- /dev/null +++ b/cloudera/datadog_checks/cloudera/metrics.py @@ -0,0 +1,34 @@ +TIMESERIES_METRICS = { + 'cluster': [ + 'cpu_percent_across_hosts', + 'total_read_bytes_rate_across_disks', + 'total_write_bytes_rate_across_disks', + 'total_bytes_receive_rate_across_network_interfaces', + 'total_bytes_transmit_rate_across_network_interfaces', + ], + 'host': [ + 'cpu_user_rate', + 'cpu_system_rate', + 'cpu_nice_rate', + 'cpu_iowait_rate', + 'cpu_irq_rate', + 'cpu_soft_irq_rate', + 'cpu_steal_rate', + 'load_1', + 'load_5', + 'load_15', + 'swap_used', + 'swap_out_rate', + 'physical_memory_used', + 'physical_memory_total', + 'physical_memory_cached', + 'physical_memory_buffers', + ], + 'role': [ + 'mem_rss', + ], +} + +NATIVE_METRICS = {} + +METRICS = {**NATIVE_METRICS, **TIMESERIES_METRICS} From ed094377635e4012037c5c2b9f4ab936788774d1 Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Wed, 30 Nov 2022 08:50:51 -0800 Subject: [PATCH 17/71] Apply testing changes (#13424) --- .../api_responses/cluster_bad_health.json | 15 + .../api_responses/cluster_good_health.json | 4 + .../tests/api_responses/version_0_0_0.json | 3 + .../tests/api_responses/version_5_0_0.json | 3 + .../tests/api_responses/version_empty.json | 2 + cloudera/tests/common.py | 5 +- cloudera/tests/conftest.py | 30 +- cloudera/tests/docker/Dockerfile | 6 + cloudera/tests/docker/docker-compose.yaml | 33 +- cloudera/tests/docker/docker-compose.yaml.old | 10 + cloudera/tests/docker/start_cloudera.sh | 55 ++ cloudera/tests/test_cloudera.py | 32 - cloudera/tests/test_integration.py | 67 +++ cloudera/tests/test_unit.py | 554 ++++++++++++++++++ 14 files changed, 779 insertions(+), 40 deletions(-) create mode 100644 cloudera/tests/api_responses/cluster_bad_health.json create mode 100644 cloudera/tests/api_responses/cluster_good_health.json create mode 100644 cloudera/tests/api_responses/version_0_0_0.json create mode 100644 cloudera/tests/api_responses/version_5_0_0.json create mode 100644 cloudera/tests/api_responses/version_empty.json create mode 100644 cloudera/tests/docker/Dockerfile create mode 100644 cloudera/tests/docker/docker-compose.yaml.old create mode 100644 cloudera/tests/docker/start_cloudera.sh delete mode 100644 cloudera/tests/test_cloudera.py create mode 100644 cloudera/tests/test_integration.py create mode 100644 cloudera/tests/test_unit.py diff --git a/cloudera/tests/api_responses/cluster_bad_health.json b/cloudera/tests/api_responses/cluster_bad_health.json new file mode 100644 index 0000000000000..8297ab80625ed --- /dev/null +++ b/cloudera/tests/api_responses/cluster_bad_health.json @@ -0,0 +1,15 @@ +{ + "name": "cod--qfdcinkqrzw", + "entity_status": "BAD_HEALTH", + "cluster_type": "COMPUTE_CLUSTER", + "tags": [ + { + "name": "_cldr_cb_clustertype", + "value": "Data Hub" + }, + { + "name": "_cldr_cb_origin", + "value": "cloudbreak" + } + ] +} \ No newline at end of file diff --git a/cloudera/tests/api_responses/cluster_good_health.json b/cloudera/tests/api_responses/cluster_good_health.json new file mode 100644 index 0000000000000..f8908caaea910 --- /dev/null +++ b/cloudera/tests/api_responses/cluster_good_health.json @@ -0,0 +1,4 @@ +{ + + "cluster_type": "COMPUTE_CLUSTER" +} \ No newline at end of file diff --git a/cloudera/tests/api_responses/version_0_0_0.json b/cloudera/tests/api_responses/version_0_0_0.json new file mode 100644 index 0000000000000..c158d5be87422 --- /dev/null +++ b/cloudera/tests/api_responses/version_0_0_0.json @@ -0,0 +1,3 @@ +{ + "version": "0.0.0" +} \ No newline at end of file diff --git a/cloudera/tests/api_responses/version_5_0_0.json b/cloudera/tests/api_responses/version_5_0_0.json new file mode 100644 index 0000000000000..ebde3a7001d48 --- /dev/null +++ b/cloudera/tests/api_responses/version_5_0_0.json @@ -0,0 +1,3 @@ +{ + "version": "5.0.0" +} \ No newline at end of file diff --git a/cloudera/tests/api_responses/version_empty.json b/cloudera/tests/api_responses/version_empty.json new file mode 100644 index 0000000000000..7a73a41bfdf76 --- /dev/null +++ b/cloudera/tests/api_responses/version_empty.json @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/cloudera/tests/common.py b/cloudera/tests/common.py index 0a83b4e43f9f1..8f6ab58b7f7ad 100644 --- a/cloudera/tests/common.py +++ b/cloudera/tests/common.py @@ -1,6 +1,9 @@ import os -from datadog_checks.dev import get_here +from datadog_checks.dev import get_docker_hostname, get_here + +HOST = get_docker_hostname() +PORT = 7180 INSTANCE = { 'workload_username': '~', diff --git a/cloudera/tests/conftest.py b/cloudera/tests/conftest.py index aaf0fef27d055..a6bc9a9706f90 100644 --- a/cloudera/tests/conftest.py +++ b/cloudera/tests/conftest.py @@ -1,19 +1,47 @@ # (C) Datadog, Inc. 2022-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) +import json +import os + import pytest +from datadog_checks.cloudera import ClouderaCheck from datadog_checks.dev import docker_run +from datadog_checks.dev.conditions import CheckDockerLogs from . import common @pytest.fixture(scope='session') def dd_environment(): - with docker_run(common.COMPOSE_FILE): + compose_file = os.path.join(common.HERE, 'compose', common.COMPOSE_FILE) + conditions = [ + CheckDockerLogs( + identifier='cloudera', patterns=['Success! You can now log into Cloudera Manager'], attempts=180, wait=5 + ), + ] + with docker_run( + compose_file, + conditions=conditions, + ): yield common.INSTANCE @pytest.fixture def instance(): return common.INSTANCE + + +@pytest.fixture(scope='session') +def cloudera_check(): + return lambda instance: ClouderaCheck('cloudera', {}, [instance]) + + +@pytest.fixture +def api_response(): + def _response(filename): + with open(os.path.join(common.HERE, "api_responses", f'{filename}.json'), 'r') as f: + return json.load(f) + + return _response diff --git a/cloudera/tests/docker/Dockerfile b/cloudera/tests/docker/Dockerfile new file mode 100644 index 0000000000000..465eaf886eda1 --- /dev/null +++ b/cloudera/tests/docker/Dockerfile @@ -0,0 +1,6 @@ +FROM cloudera/quickstart:latest + +COPY start_cloudera.sh /home/cloudera + +ENTRYPOINT ["/usr/bin/env"] +CMD ["bash", "/home/cloudera/start_cloudera.sh"] diff --git a/cloudera/tests/docker/docker-compose.yaml b/cloudera/tests/docker/docker-compose.yaml index 9895b04b5bed3..0c05c9de4c25c 100644 --- a/cloudera/tests/docker/docker-compose.yaml +++ b/cloudera/tests/docker/docker-compose.yaml @@ -1,10 +1,31 @@ -version: "3" - +version: '2' services: cloudera: - image: caddy:2.1.1-alpine container_name: cloudera - volumes: - - ./fixtures:/usr/share/caddy + build: . + privileged: true + hostname: quickstart.cloudera ports: - - 80:80 \ No newline at end of file + - "8020:8020" # HDFS + - "8022:22" # SSH + - "7180:7180" # Cloudera Manager + - "8888:8888" # Hue + - "11000:11000" # Oozie + - "50070:50070" # HDFS Rest Namenode + - "50075:50075" # HDFS Rest Datanode + - "2181:2181" # Zookeeper + - "8088:8088" # YARN Resource Manager + - "19888:19888" # MapReduce Job History + - "50030:50030" # MapReduce Job Tracker + - "8983:8983" # Solr + - "16000:16000" # Sqoop Metastore + - "8042:8042" # YARN Node Manager + - "60010:60010" # HBase Master + - "60030:60030" # HBase Region + - "9090:9090" # HBase Thrift + - "8080:8080" # HBase Rest + - "7077:7077" # Spark Master + tty: true + stdin_open: true + volumes: + - /var/shared_cloudera_quickstart:/media/shared_from_local diff --git a/cloudera/tests/docker/docker-compose.yaml.old b/cloudera/tests/docker/docker-compose.yaml.old new file mode 100644 index 0000000000000..9895b04b5bed3 --- /dev/null +++ b/cloudera/tests/docker/docker-compose.yaml.old @@ -0,0 +1,10 @@ +version: "3" + +services: + cloudera: + image: caddy:2.1.1-alpine + container_name: cloudera + volumes: + - ./fixtures:/usr/share/caddy + ports: + - 80:80 \ No newline at end of file diff --git a/cloudera/tests/docker/start_cloudera.sh b/cloudera/tests/docker/start_cloudera.sh new file mode 100644 index 0000000000000..2b082348d5f4f --- /dev/null +++ b/cloudera/tests/docker/start_cloudera.sh @@ -0,0 +1,55 @@ +#! /usr/bin/env bash + +echo 'starting cloudera quickstart' + +DAEMONS="\ + mysqld \ + cloudera-quickstart-init" + +if [ -e /var/lib/cloudera-quickstart/.kerberos ]; then + DAEMONS="${DAEMONS} \ + krb5kdc \ + kadmin" +fi + +if [ -e /var/lib/cloudera-quickstart/.cloudera-manager ]; then + DAEMONS="${DAEMONS} \ + cloudera-scm-server-db \ + cloudera-scb-server \ + cloudera-scm-server-db" +else + DAEMONS="${DAEMONS} \ + zookeeper-server \ + hadoop-hdfs-datanode \ + hadoop-hdfs-journalnode \ + hadoop-hdfs-namenode \ + hadoop-hdfs-secondarynamenode \ + hadoop-httpfs \ + hadoop-mapreduce-historyserver \ + hadoop-yarn-nodemanager \ + hadoop-yarn-resourcemanager \ + hbase-master \ + hbase-rest \ + hbase-thrift \ + hive-metastore \ + hive-server2 \ + sqoop2-server \ + spark-history-server \ + hbase-regionserver \ + hue \ + impala-state-store \ + oozie \ + solr-server \ + impala-catalog \ + impala-server" +fi + +for daemon in ${DAEMONS}; do + sudo service ${daemon} start +done + +echo 'starting cloudera manager' + +/home/cloudera/cloudera-manager --express --force + +exec bash \ No newline at end of file diff --git a/cloudera/tests/test_cloudera.py b/cloudera/tests/test_cloudera.py deleted file mode 100644 index 683ea972efabf..0000000000000 --- a/cloudera/tests/test_cloudera.py +++ /dev/null @@ -1,32 +0,0 @@ -# (C) Datadog, Inc. 2022-present -# All rights reserved -# Licensed under a 3-clause BSD style license (see LICENSE) - -from typing import Any, Callable, Dict - -from datadog_checks.base import AgentCheck -from datadog_checks.base.stubs.aggregator import AggregatorStub -from datadog_checks.cloudera import ClouderaCheck -from datadog_checks.dev.utils import get_metadata_metrics - - -def test_emits_critical_service_check_when_api_is_none(): - assert True - -def test_emits_critical_service_check_when_credentials_incorrect(): - assert True - -def test_py2_not_supported(): - assert True - -def test_timeseries_item_no_data(): - assert True - -def test_check(): - assert True - - -# # type: (Callable[[AgentCheck, bool], None], AggregatorStub, Dict[str, Any]) -> None -# check = ClouderaCheck('cloudera', {}, [instance]) -# dd_run_check(check) -# aggregator.assert_service_check('cloudera.can_connect', ClouderaCheck.CRITICAL) diff --git a/cloudera/tests/test_integration.py b/cloudera/tests/test_integration.py new file mode 100644 index 0000000000000..76d91cd4f0287 --- /dev/null +++ b/cloudera/tests/test_integration.py @@ -0,0 +1,67 @@ +import pytest + +from datadog_checks.cloudera import ClouderaCheck +from datadog_checks.cloudera.metrics import METRICS + + +@pytest.mark.integration +def test_given_bad_url_when_check_runs_then_service_check_critical( + aggregator, + dd_run_check, + cloudera_check, +): + # Given + instance = { + 'api_url': 'bad_url', + } + check = cloudera_check(instance) + # When + dd_run_check(check) + # Then + aggregator.assert_service_check('cloudera.can_connect', ClouderaCheck.CRITICAL) + + +@pytest.mark.usefixtures('dd_environment') +@pytest.mark.integration +def test_given_api_v12_endpoint_when_check_runs_then_service_check_ok_and_metrics( + aggregator, + dd_run_check, + cloudera_check, +): + # Given + instance = { + 'username': 'cloudera', + 'password': 'cloudera', + 'api_url': 'http://localhost:7180/api/v12', + } + check = cloudera_check(instance) + # When + dd_run_check(check) + # Then + for category, metrics in METRICS.items(): + for metric in metrics: + aggregator.assert_metric(f'cloudera.{category}.{metric}') + aggregator.assert_service_check('cloudera.can_connect', ClouderaCheck.OK) + + +@pytest.mark.integration +def test_given_api_v48_endpoint_when_check_runs_then_service_check_ok_and_metrics( + aggregator, + dd_run_check, + cloudera_check, +): + # Given + instance = { + 'username': 'cloudera', + 'password': 'cloudera', + 'api_url': 'http://localhost:7180/api/v12', + } + check = cloudera_check(instance) + # When + dd_run_check(check) + # Then + for category, metrics in METRICS.items(): + for metric in metrics: + aggregator.assert_metric(f'cloudera.{category}.{metric}') + aggregator.assert_service_check('cloudera.can_connect', ClouderaCheck.OK) + assert False diff --git a/cloudera/tests/test_unit.py b/cloudera/tests/test_unit.py new file mode 100644 index 0000000000000..e6fa7a8b9d0f3 --- /dev/null +++ b/cloudera/tests/test_unit.py @@ -0,0 +1,554 @@ +# (C) Datadog, Inc. 2022-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) + +import mock +import pytest +import six +from cm_client.models.api_cluster import ApiCluster +from cm_client.models.api_cluster_list import ApiClusterList +from cm_client.models.api_entity_tag import ApiEntityTag +from cm_client.models.api_host import ApiHost +from cm_client.models.api_host_list import ApiHostList +from cm_client.models.api_time_series import ApiTimeSeries +from cm_client.models.api_time_series_data import ApiTimeSeriesData +from cm_client.models.api_time_series_response import ApiTimeSeriesResponse +from cm_client.models.api_time_series_response_list import ApiTimeSeriesResponseList +from cm_client.models.api_version_info import ApiVersionInfo +from cm_client.rest import ApiException + +from datadog_checks.base import AgentCheck, ConfigurationError +from datadog_checks.cloudera.metrics import METRICS +from datadog_checks.cloudera.queries import TIMESERIES_QUERIES + +pytestmark = [pytest.mark.unit] + + +def test_given_cloudera_check_when_py2_then_raises_exception( + aggregator, + dd_run_check, + cloudera_check, +): + with mock.patch.object(six, 'PY2'), pytest.raises( + ConfigurationError, match='This version of the integration is only available when using py3' + ): + # Given + instance = {} + cloudera_check(instance) + + +def test_given_cloudera_check_when_get_version_exception_from_cloudera_client_then_emits_critical_service( + aggregator, + dd_run_check, + cloudera_check, +): + with mock.patch( + 'cm_client.ClouderaManagerResourceApi.get_version', + side_effect=ApiException('Service not available'), + ): + # Given + instance = {} + check = cloudera_check(instance) + # When + dd_run_check(check) + # Then + aggregator.assert_service_check('cloudera.can_connect', AgentCheck.CRITICAL) + + +def test_given_cloudera_check_when_version_field_not_found_then_emits_critical_service( + aggregator, + dd_run_check, + cloudera_check, + api_response, +): + with mock.patch( + 'cm_client.ClouderaManagerResourceApi.get_version', + return_value=ApiVersionInfo(), + ): + # Given + instance = {} + check = cloudera_check(instance) + # When + dd_run_check(check) + # Then + aggregator.assert_service_check('cloudera.can_connect', AgentCheck.CRITICAL) + + +def test_given_cloudera_check_when_not_supported_version_then_emits_critical_service( + aggregator, + dd_run_check, + cloudera_check, + api_response, +): + with mock.patch( + 'cm_client.ClouderaManagerResourceApi.get_version', + return_value=ApiVersionInfo(version='0.0.0'), + ): + # Given + instance = {} + check = cloudera_check(instance) + # When + dd_run_check(check) + # Then + aggregator.assert_service_check('cloudera.can_connect', AgentCheck.CRITICAL) + + +def test_given_cloudera_check_when_supported_version_then_emits_ok_service( + aggregator, + dd_run_check, + cloudera_check, + api_response, +): + with mock.patch( + 'cm_client.ClouderaManagerResourceApi.get_version', + return_value=ApiVersionInfo(version="5.0.0"), + ), mock.patch( + 'cm_client.ClustersResourceApi.read_clusters', + return_value=ApiClusterList( + [ + ApiCluster( + name="cluster_1", + entity_status="BAD_HEALTH", + tags=[ + ApiEntityTag(name="_cldr_cb_clustertype", value="Data Hub"), + ApiEntityTag(name="_cldr_cb_origin", value="cloudbreak"), + ], + **api_response('cluster_good_health'), + ), + ], + ), + ), mock.patch( + 'cm_client.TimeSeriesResourceApi.query_time_series', + side_effect=[ + ApiTimeSeriesResponseList( + items=[ + ApiTimeSeriesResponse( + time_series=[ + ApiTimeSeries( + data=[ + ApiTimeSeriesData(value=49.7), + ], + ), + ApiTimeSeries( + data=[ + ApiTimeSeriesData(value=49.7), + ], + ), + ApiTimeSeries( + data=[ + ApiTimeSeriesData(value=49.7), + ], + ), + ApiTimeSeries( + data=[ + ApiTimeSeriesData(value=49.7), + ], + ), + ApiTimeSeries( + data=[ + ApiTimeSeriesData(value=49.7), + ], + ), + ], + ) + ] + ), + ApiTimeSeriesResponseList( + items=[ + ApiTimeSeriesResponse( + time_series=[ + ApiTimeSeries( + data=[ + ApiTimeSeriesData(value=49.7), + ], + ), + ApiTimeSeries( + data=[ + ApiTimeSeriesData(value=49.7), + ], + ), + ApiTimeSeries( + data=[ + ApiTimeSeriesData(value=49.7), + ], + ), + ApiTimeSeries( + data=[ + ApiTimeSeriesData(value=49.7), + ], + ), + ApiTimeSeries( + data=[ + ApiTimeSeriesData(value=49.7), + ], + ), + ApiTimeSeries( + data=[ + ApiTimeSeriesData(value=49.7), + ], + ), + ApiTimeSeries( + data=[ + ApiTimeSeriesData(value=49.7), + ], + ), + ApiTimeSeries( + data=[ + ApiTimeSeriesData(value=49.7), + ], + ), + ApiTimeSeries( + data=[ + ApiTimeSeriesData(value=49.7), + ], + ), + ApiTimeSeries( + data=[ + ApiTimeSeriesData(value=49.7), + ], + ), + ApiTimeSeries( + data=[ + ApiTimeSeriesData(value=49.7), + ], + ), + ApiTimeSeries( + data=[ + ApiTimeSeriesData(value=49.7), + ], + ), + ], + ), + ], + ), + ], + ), mock.patch( + 'cm_client.ClustersResourceApi.list_hosts', + return_value=ApiHostList( + items=[ApiHost(host_id='host_1')], + ), + ): + # Given + instance = {} + check = cloudera_check(instance) + # When + dd_run_check(check) + # Then + aggregator.assert_service_check('cloudera.can_connect', AgentCheck.OK) + + +def test_given_cloudera_check_when_v5_read_clusters_exception_from_cloudera_client_then_emits_critical_service( + aggregator, + dd_run_check, + cloudera_check, + api_response, +): + with mock.patch( + 'cm_client.ClouderaManagerResourceApi.get_version', + return_value=ApiVersionInfo(version="5.0.0"), + ), mock.patch( + 'cm_client.ClustersResourceApi.read_clusters', + side_effect=ApiException('Service not available'), + ): + # Given + instance = {} + check = cloudera_check(instance) + # When + dd_run_check(check) + # Then + aggregator.assert_service_check('cloudera.can_connect', AgentCheck.CRITICAL) + + +def test_given_cloudera_check_when_v7_read_clusters_exception_from_cloudera_client_then_emits_critical_service( + aggregator, + dd_run_check, + cloudera_check, + api_response, +): + with mock.patch( + 'cm_client.ClouderaManagerResourceApi.get_version', + return_value=ApiVersionInfo(version="7.0.0"), + ), mock.patch( + 'cm_client.ClustersResourceApi.read_clusters', + side_effect=ApiException('Service not available'), + ): + # Given + instance = {} + check = cloudera_check(instance) + # When + dd_run_check(check) + # Then + aggregator.assert_service_check('cloudera.can_connect', AgentCheck.CRITICAL) + + +def test_given_cloudera_check_when_bad_health_cluster_then_emits_clusters_status_critical( + aggregator, + dd_run_check, + cloudera_check, + api_response, +): + with mock.patch( + 'cm_client.ClouderaManagerResourceApi.get_version', + return_value=ApiVersionInfo(version="5.0.0"), + ), mock.patch( + 'cm_client.ClustersResourceApi.read_clusters', + return_value=ApiClusterList( + [ + ApiCluster( + name="cluster_1", + entity_status="BAD_HEALTH", + tags=[ + ApiEntityTag(name="_cldr_cb_clustertype", value="Data Hub"), + ApiEntityTag(name="_cldr_cb_origin", value="cloudbreak"), + ], + **api_response('cluster_good_health'), + ), + ], + ), + ), mock.patch( + 'cm_client.TimeSeriesResourceApi.query_time_series', + return_value=ApiTimeSeriesResponseList( + items=[ + ApiTimeSeriesResponse( + time_series=[ + ApiTimeSeries( + data=[ + ApiTimeSeriesData(value=49.7), + ], + ), + ], + ), + ], + ), + ): + # Given + instance = {} + check = cloudera_check(instance) + # When + dd_run_check(check) + # Then + aggregator.assert_service_check( + 'cloudera.cluster_status', + AgentCheck.CRITICAL, + tags=['_cldr_cb_clustertype:Data Hub', '_cldr_cb_origin:cloudbreak', 'cloudera_cluster:cluster_1'], + ) + + +def test_given_cloudera_check_when_good_health_cluster_then_emits_clusters_status_ok( + aggregator, + dd_run_check, + cloudera_check, + api_response, +): + with mock.patch( + 'cm_client.ClouderaManagerResourceApi.get_version', + return_value=ApiVersionInfo(version="5.0.0"), + ), mock.patch( + 'cm_client.ClustersResourceApi.read_clusters', + return_value=ApiClusterList( + [ + ApiCluster( + name="cluster_1", + entity_status="GOOD_HEALTH", + tags=[ + ApiEntityTag(name="_cldr_cb_clustertype", value="Data Hub"), + ApiEntityTag(name="_cldr_cb_origin", value="cloudbreak"), + ], + **api_response('cluster_good_health'), + ), + ], + ), + ), mock.patch( + 'cm_client.TimeSeriesResourceApi.query_time_series', + return_value=ApiTimeSeriesResponseList( + items=[ + ApiTimeSeriesResponse( + time_series=[ + ApiTimeSeries( + data=[ + ApiTimeSeriesData(value=49.7), + ], + ), + ], + ), + ], + ), + ): + # Given + instance = {} + check = cloudera_check(instance) + # When + dd_run_check(check) + # Then + aggregator.assert_service_check( + 'cloudera.cluster_status', + AgentCheck.OK, + tags=['_cldr_cb_clustertype:Data Hub', '_cldr_cb_origin:cloudbreak', 'cloudera_cluster:cluster_1'], + ) + + +def test_given_cloudera_check_when_good_health_cluster_then_emits_cluster_metrics( + aggregator, + dd_run_check, + cloudera_check, + api_response, +): + with mock.patch( + 'cm_client.ClouderaManagerResourceApi.get_version', + return_value=ApiVersionInfo(version="5.0.0"), + ), mock.patch( + 'cm_client.ClustersResourceApi.read_clusters', + return_value=ApiClusterList( + items=[ + ApiCluster( + name="cluster_1", + entity_status="GOOD_HEALTH", + tags=[ + ApiEntityTag(name="_cldr_cb_clustertype", value="Data Hub"), + ApiEntityTag(name="_cldr_cb_origin", value="cloudbreak"), + ], + **api_response('cluster_good_health'), + ), + ], + ), + ), mock.patch( + 'cm_client.TimeSeriesResourceApi.query_time_series', + side_effect=[ + ApiTimeSeriesResponseList( + items=[ + ApiTimeSeriesResponse( + time_series=[ + ApiTimeSeries( + data=[ + ApiTimeSeriesData(value=49.7), + ], + ), + ApiTimeSeries( + data=[ + ApiTimeSeriesData(value=49.7), + ], + ), + ApiTimeSeries( + data=[ + ApiTimeSeriesData(value=49.7), + ], + ), + ApiTimeSeries( + data=[ + ApiTimeSeriesData(value=49.7), + ], + ), + ApiTimeSeries( + data=[ + ApiTimeSeriesData(value=49.7), + ], + ), + ], + ) + ] + ), + ApiTimeSeriesResponseList( + items=[ + ApiTimeSeriesResponse( + time_series=[ + ApiTimeSeries( + data=[ + ApiTimeSeriesData(value=49.7), + ], + ), + ApiTimeSeries( + data=[ + ApiTimeSeriesData(value=49.7), + ], + ), + ApiTimeSeries( + data=[ + ApiTimeSeriesData(value=49.7), + ], + ), + ApiTimeSeries( + data=[ + ApiTimeSeriesData(value=49.7), + ], + ), + ApiTimeSeries( + data=[ + ApiTimeSeriesData(value=49.7), + ], + ), + ApiTimeSeries( + data=[ + ApiTimeSeriesData(value=49.7), + ], + ), + ApiTimeSeries( + data=[ + ApiTimeSeriesData(value=49.7), + ], + ), + ApiTimeSeries( + data=[ + ApiTimeSeriesData(value=49.7), + ], + ), + ApiTimeSeries( + data=[ + ApiTimeSeriesData(value=49.7), + ], + ), + ApiTimeSeries( + data=[ + ApiTimeSeriesData(value=49.7), + ], + ), + ApiTimeSeries( + data=[ + ApiTimeSeriesData(value=49.7), + ], + ), + ApiTimeSeries( + data=[ + ApiTimeSeriesData(value=49.7), + ], + ), + ], + ), + ], + ), + ], + ), mock.patch( + 'cm_client.ClustersResourceApi.list_hosts', + return_value=ApiHostList( + items=[ApiHost(host_id='host_1')], + ), + ): + # Given + instance = {} + check = cloudera_check(instance) + # When + dd_run_check(check) + # Then + for category, metrics in METRICS.items(): + for metric in metrics: + aggregator.assert_metric(f'cloudera.{category}.{metric}') + + +def test_run_timeseries_checks( + aggregator, + dd_run_check, + cloudera_check, +): + # Given + instance = { + 'username': 'cloudera', + 'password': 'cloudera', + 'api_url': 'http://localhost:7180/api/v12', + } + check = cloudera_check(instance) + # When + dd_run_check(check) + # Then + for metric in TIMESERIES_QUERIES: + metric_name = metric['metric_name'] + for category in metric['categories']: + aggregator.assert_metric(f'cloudera.{category}.{metric_name}') From dbe5a362acafd12bc74affcc9d72fe73de553627 Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Wed, 30 Nov 2022 14:10:15 -0500 Subject: [PATCH 18/71] Apply changes from Jose's branch --- .../cloudera/api_client_factory.py | 2 + .../datadog_checks/cloudera/api_client_v7.py | 37 +- cloudera/datadog_checks/cloudera/metrics.py | 8 + cloudera/tests/test_integration.py | 45 ++- cloudera/tests/test_unit.py | 372 ++++++------------ 5 files changed, 174 insertions(+), 290 deletions(-) diff --git a/cloudera/datadog_checks/cloudera/api_client_factory.py b/cloudera/datadog_checks/cloudera/api_client_factory.py index 7712cff21b18a..99c5380578a37 100644 --- a/cloudera/datadog_checks/cloudera/api_client_factory.py +++ b/cloudera/datadog_checks/cloudera/api_client_factory.py @@ -22,3 +22,5 @@ def make_api_client(check, config): # return ApiClientV5(check, api_client) if cloudera_version.major == 7: return ApiClientV7(check, api_client) + else: + raise ConfigurationError() # TODO: Clean up \ No newline at end of file diff --git a/cloudera/datadog_checks/cloudera/api_client_v7.py b/cloudera/datadog_checks/cloudera/api_client_v7.py index 4dceb09bedeee..3e22c8555840e 100644 --- a/cloudera/datadog_checks/cloudera/api_client_v7.py +++ b/cloudera/datadog_checks/cloudera/api_client_v7.py @@ -7,17 +7,24 @@ from .common import CLUSTER_HEALTH, HOST_HEALTH from datadog_checks.base import AgentCheck -# TODO: Refactor this to be cleaner +# TODO: Refactor this to abstract out timeseries queries using composite pattern class ApiClientV7(ApiClient): def __init__(self, check, api_client): super(ApiClientV7, self).__init__(check, api_client) def collect_data(self): - self._collect_clusters() + try: + self._collect_clusters() + except Exception as e: + self.error("Unable to finish collecting data: %s", e) + raise def _collect_clusters(self): clusters_resource_api = cm_client.ClustersResourceApi(self._api_client) read_clusters_response = clusters_resource_api.read_clusters(cluster_type='any', view='full') + self.log.debug("Full clusters response:") + self.log.debug(read_clusters_response) + for cluster in read_clusters_response.items: self._collect_cluster_metrics_and_service_check(cluster) @@ -50,11 +57,16 @@ def _collect_cluster_metrics(self, cluster_name, tags): query = f'SELECT {metric_names} WHERE clusterName="{cluster_name}" AND category=CLUSTER' self._log.debug('query: %s', query) query_time_series_response = time_series_resource_api.query_time_series(query=query) - self._collect_query_time_series(query_time_series_response, 'cluster') + self.log.debug("Full timeseries response:") + self.log.debug(query_time_series_response) + self._collect_query_time_series(query_time_series_response, 'cluster', []) def _collect_hosts_metrics_and_service_check(self, cluster_name): clusters_resource_api = cm_client.ClustersResourceApi(self._api_client) list_hosts_response = clusters_resource_api.list_hosts(cluster_name, view='full') + self.log.debug("Full hosts response:") + self.log.debug(list_hosts_response) + for host in list_hosts_response.items: self._collect_host_metrics_and_service_check(host) @@ -67,7 +79,7 @@ def _collect_host_metrics_and_service_check(self, host): self._log.debug('host_id: %s', host_id) if host_id: - tags = [f"{tag.name}:{tag.value}" for tag in host.tags] + tags = [f"{tag.name}:{tag.value}" for tag in host.tags] if host.tags else [] self._collect_host_metrics(host_id, tags) self._collect_role_metrics(host_id, tags) self._log.debug('host tags: %s', tags) @@ -79,6 +91,9 @@ def _collect_host_metrics(self, host_id, tags): query = f'SELECT {metric_names} WHERE hostId="{host_id}" AND category=HOST' self._log.debug('query: %s', query) query_time_series_response = time_series_resource_api.query_time_series(query=query) + self.log.debug("Full timeseries response:") + self.log.debug(query_time_series_response) + self._collect_query_time_series(query_time_series_response, 'host', tags) def _collect_role_metrics(self, host_id, tags): @@ -87,9 +102,11 @@ def _collect_role_metrics(self, host_id, tags): query = f'SELECT {metric_names} WHERE hostId="{host_id}" AND category=ROLE' self._log.debug('query: %s', query) query_time_series_response = time_series_resource_api.query_time_series(query=query) - self._collect_query_time_series(query_time_series_response, 'role', tags) + self.log.debug("Full timeseries response:") + self.log.debug(query_time_series_response) + self._collect_query_time_series(query_time_series_response, 'role', []) - def _collect_query_time_series(self, query_time_series_response, category, tags=[]): + def _collect_query_time_series(self, query_time_series_response, category, tags): for item in query_time_series_response.items: last_metadata_metric_name = None for ts in item.time_series: @@ -100,13 +117,17 @@ def _collect_query_time_series(self, query_time_series_response, category, tags= index += 1 last_metadata_metric_name = ts.metadata.metric_name metric_name = METRICS[category][index] + metric_tags = tags + [f'cloudera_{category}:{ts.metadata.entity_name}'] full_metric_name = f'{category}.{metric_name}' new_tag = f'cloudera_{category}:{ts.metadata.entity_name}' + if new_tag not in tags: + tags.append(new_tag) + new_tag = f'cloudera_{category}:{ts.metadata.entity_name}' if new_tag not in tags: tags.append(new_tag) for d in ts.data: value = d.value self._log.debug('full_metric_name: %s', full_metric_name) self._log.debug('value: %s', value) - self._log.debug('tags: %s', tags) - self._check.gauge(full_metric_name, value, tags=tags) + self._log.debug('metric_tags: %s', metric_tags) + self._check.gauge(full_metric_name, value, tags=metric_tags) \ No newline at end of file diff --git a/cloudera/datadog_checks/cloudera/metrics.py b/cloudera/datadog_checks/cloudera/metrics.py index 2478b24cf386a..793a4b6e5920e 100644 --- a/cloudera/datadog_checks/cloudera/metrics.py +++ b/cloudera/datadog_checks/cloudera/metrics.py @@ -26,6 +26,14 @@ ], 'role': [ 'mem_rss', + 'cpu_user_rate', + 'cpu_system_rate', + ], + 'disk': [ + 'service_time', + 'await_time', + 'await_read_time', + 'await_write_time', ], } diff --git a/cloudera/tests/test_integration.py b/cloudera/tests/test_integration.py index 76d91cd4f0287..a6ee3a30adfc6 100644 --- a/cloudera/tests/test_integration.py +++ b/cloudera/tests/test_integration.py @@ -21,27 +21,27 @@ def test_given_bad_url_when_check_runs_then_service_check_critical( aggregator.assert_service_check('cloudera.can_connect', ClouderaCheck.CRITICAL) -@pytest.mark.usefixtures('dd_environment') -@pytest.mark.integration -def test_given_api_v12_endpoint_when_check_runs_then_service_check_ok_and_metrics( - aggregator, - dd_run_check, - cloudera_check, -): - # Given - instance = { - 'username': 'cloudera', - 'password': 'cloudera', - 'api_url': 'http://localhost:7180/api/v12', - } - check = cloudera_check(instance) - # When - dd_run_check(check) - # Then - for category, metrics in METRICS.items(): - for metric in metrics: - aggregator.assert_metric(f'cloudera.{category}.{metric}') - aggregator.assert_service_check('cloudera.can_connect', ClouderaCheck.OK) +# @pytest.mark.usefixtures('dd_environment') +# @pytest.mark.integration +# def test_given_api_v12_endpoint_when_check_runs_then_service_check_ok_and_metrics( +# aggregator, +# dd_run_check, +# cloudera_check, +# ): +# # Given +# instance = { +# 'username': 'cloudera', +# 'password': 'cloudera', +# 'api_url': 'http://localhost:7180/api/v12', +# } +# check = cloudera_check(instance) +# # When +# dd_run_check(check) +# # Then +# for category, metrics in METRICS.items(): +# for metric in metrics: +# aggregator.assert_metric(f'cloudera.{category}.{metric}') +# aggregator.assert_service_check('cloudera.can_connect', ClouderaCheck.OK) @pytest.mark.integration @@ -63,5 +63,4 @@ def test_given_api_v48_endpoint_when_check_runs_then_service_check_ok_and_metric for category, metrics in METRICS.items(): for metric in metrics: aggregator.assert_metric(f'cloudera.{category}.{metric}') - aggregator.assert_service_check('cloudera.can_connect', ClouderaCheck.OK) - assert False + aggregator.assert_service_check('cloudera.can_connect', ClouderaCheck.OK) \ No newline at end of file diff --git a/cloudera/tests/test_unit.py b/cloudera/tests/test_unit.py index e6fa7a8b9d0f3..58dfe27558b6c 100644 --- a/cloudera/tests/test_unit.py +++ b/cloudera/tests/test_unit.py @@ -12,6 +12,7 @@ from cm_client.models.api_host_list import ApiHostList from cm_client.models.api_time_series import ApiTimeSeries from cm_client.models.api_time_series_data import ApiTimeSeriesData +from cm_client.models.api_time_series_metadata import ApiTimeSeriesMetadata from cm_client.models.api_time_series_response import ApiTimeSeriesResponse from cm_client.models.api_time_series_response_list import ApiTimeSeriesResponseList from cm_client.models.api_version_info import ApiVersionInfo @@ -19,7 +20,8 @@ from datadog_checks.base import AgentCheck, ConfigurationError from datadog_checks.cloudera.metrics import METRICS -from datadog_checks.cloudera.queries import TIMESERIES_QUERIES + +# from datadog_checks.cloudera.queries import TIMESERIES_QUERIES pytestmark = [pytest.mark.unit] @@ -82,7 +84,7 @@ def test_given_cloudera_check_when_not_supported_version_then_emits_critical_ser ): with mock.patch( 'cm_client.ClouderaManagerResourceApi.get_version', - return_value=ApiVersionInfo(version='0.0.0'), + return_value=ApiVersionInfo(version='5.0.0'), ): # Given instance = {} @@ -101,14 +103,14 @@ def test_given_cloudera_check_when_supported_version_then_emits_ok_service( ): with mock.patch( 'cm_client.ClouderaManagerResourceApi.get_version', - return_value=ApiVersionInfo(version="5.0.0"), + return_value=ApiVersionInfo(version="7.0.0"), ), mock.patch( 'cm_client.ClustersResourceApi.read_clusters', return_value=ApiClusterList( - [ + items=[ ApiCluster( name="cluster_1", - entity_status="BAD_HEALTH", + entity_status="GOOD_HEALTH", tags=[ ApiEntityTag(name="_cldr_cb_clustertype", value="Data Hub"), ApiEntityTag(name="_cldr_cb_origin", value="cloudbreak"), @@ -128,99 +130,14 @@ def test_given_cloudera_check_when_supported_version_then_emits_ok_service( data=[ ApiTimeSeriesData(value=49.7), ], - ), - ApiTimeSeries( - data=[ - ApiTimeSeriesData(value=49.7), - ], - ), - ApiTimeSeries( - data=[ - ApiTimeSeriesData(value=49.7), - ], - ), - ApiTimeSeries( - data=[ - ApiTimeSeriesData(value=49.7), - ], - ), - ApiTimeSeries( - data=[ - ApiTimeSeriesData(value=49.7), - ], - ), - ], - ) - ] - ), - ApiTimeSeriesResponseList( - items=[ - ApiTimeSeriesResponse( - time_series=[ - ApiTimeSeries( - data=[ - ApiTimeSeriesData(value=49.7), - ], - ), - ApiTimeSeries( - data=[ - ApiTimeSeriesData(value=49.7), - ], - ), - ApiTimeSeries( - data=[ - ApiTimeSeriesData(value=49.7), - ], - ), - ApiTimeSeries( - data=[ - ApiTimeSeriesData(value=49.7), - ], - ), - ApiTimeSeries( - data=[ - ApiTimeSeriesData(value=49.7), - ], - ), - ApiTimeSeries( - data=[ - ApiTimeSeriesData(value=49.7), - ], - ), - ApiTimeSeries( - data=[ - ApiTimeSeriesData(value=49.7), - ], - ), - ApiTimeSeries( - data=[ - ApiTimeSeriesData(value=49.7), - ], - ), - ApiTimeSeries( - data=[ - ApiTimeSeriesData(value=49.7), - ], - ), - ApiTimeSeries( - data=[ - ApiTimeSeriesData(value=49.7), - ], - ), - ApiTimeSeries( - data=[ - ApiTimeSeriesData(value=49.7), - ], - ), - ApiTimeSeries( - data=[ - ApiTimeSeriesData(value=49.7), - ], - ), - ], + metadata=ApiTimeSeriesMetadata(metric_name=metric, entity_name=category), + ) + for metric in metrics + ] ), ], - ), + ) + for category, metrics in METRICS.items() ], ), mock.patch( 'cm_client.ClustersResourceApi.list_hosts', @@ -237,26 +154,26 @@ def test_given_cloudera_check_when_supported_version_then_emits_ok_service( aggregator.assert_service_check('cloudera.can_connect', AgentCheck.OK) -def test_given_cloudera_check_when_v5_read_clusters_exception_from_cloudera_client_then_emits_critical_service( - aggregator, - dd_run_check, - cloudera_check, - api_response, -): - with mock.patch( - 'cm_client.ClouderaManagerResourceApi.get_version', - return_value=ApiVersionInfo(version="5.0.0"), - ), mock.patch( - 'cm_client.ClustersResourceApi.read_clusters', - side_effect=ApiException('Service not available'), - ): - # Given - instance = {} - check = cloudera_check(instance) - # When - dd_run_check(check) - # Then - aggregator.assert_service_check('cloudera.can_connect', AgentCheck.CRITICAL) +# def test_given_cloudera_check_when_v5_read_clusters_exception_from_cloudera_client_then_emits_critical_service( +# aggregator, +# dd_run_check, +# cloudera_check, +# api_response, +# ): +# with mock.patch( +# 'cm_client.ClouderaManagerResourceApi.get_version', +# return_value=ApiVersionInfo(version="5.0.0"), +# ), mock.patch( +# 'cm_client.ClustersResourceApi.read_clusters', +# side_effect=ApiException('Service not available'), +# ): +# # Given +# instance = {} +# check = cloudera_check(instance) +# # When +# dd_run_check(check) +# # Then +# aggregator.assert_service_check('cloudera.can_connect', AgentCheck.CRITICAL) def test_given_cloudera_check_when_v7_read_clusters_exception_from_cloudera_client_then_emits_critical_service( @@ -281,7 +198,7 @@ def test_given_cloudera_check_when_v7_read_clusters_exception_from_cloudera_clie aggregator.assert_service_check('cloudera.can_connect', AgentCheck.CRITICAL) -def test_given_cloudera_check_when_bad_health_cluster_then_emits_clusters_status_critical( +def test_given_cloudera_check_when_bad_health_cluster_then_emits_cluster_health_critical( aggregator, dd_run_check, cloudera_check, @@ -289,11 +206,11 @@ def test_given_cloudera_check_when_bad_health_cluster_then_emits_clusters_status ): with mock.patch( 'cm_client.ClouderaManagerResourceApi.get_version', - return_value=ApiVersionInfo(version="5.0.0"), + return_value=ApiVersionInfo(version="7.0.0"), ), mock.patch( 'cm_client.ClustersResourceApi.read_clusters', return_value=ApiClusterList( - [ + items=[ ApiCluster( name="cluster_1", entity_status="BAD_HEALTH", @@ -307,18 +224,28 @@ def test_given_cloudera_check_when_bad_health_cluster_then_emits_clusters_status ), ), mock.patch( 'cm_client.TimeSeriesResourceApi.query_time_series', - return_value=ApiTimeSeriesResponseList( - items=[ - ApiTimeSeriesResponse( - time_series=[ - ApiTimeSeries( - data=[ - ApiTimeSeriesData(value=49.7), - ], - ), - ], - ), - ], + side_effect=[ + ApiTimeSeriesResponseList( + items=[ + ApiTimeSeriesResponse( + time_series=[ + ApiTimeSeries( + data=[ + ApiTimeSeriesData(value=49.7), + ], + metadata=ApiTimeSeriesMetadata(metric_name=metric, entity_name=category), + ) + for metric in metrics + ] + ), + ], + ) + for category, metrics in METRICS.items() + ], + ), mock.patch( + 'cm_client.ClustersResourceApi.list_hosts', + return_value=ApiHostList( + items=[ApiHost(host_id='host_1')], ), ): # Given @@ -328,13 +255,13 @@ def test_given_cloudera_check_when_bad_health_cluster_then_emits_clusters_status dd_run_check(check) # Then aggregator.assert_service_check( - 'cloudera.cluster_status', + 'cloudera.cluster.health', AgentCheck.CRITICAL, tags=['_cldr_cb_clustertype:Data Hub', '_cldr_cb_origin:cloudbreak', 'cloudera_cluster:cluster_1'], ) -def test_given_cloudera_check_when_good_health_cluster_then_emits_clusters_status_ok( +def test_given_cloudera_check_when_good_health_cluster_then_emits_cluster_health_ok( aggregator, dd_run_check, cloudera_check, @@ -342,11 +269,11 @@ def test_given_cloudera_check_when_good_health_cluster_then_emits_clusters_statu ): with mock.patch( 'cm_client.ClouderaManagerResourceApi.get_version', - return_value=ApiVersionInfo(version="5.0.0"), + return_value=ApiVersionInfo(version="7.0.0"), ), mock.patch( 'cm_client.ClustersResourceApi.read_clusters', return_value=ApiClusterList( - [ + items=[ ApiCluster( name="cluster_1", entity_status="GOOD_HEALTH", @@ -360,18 +287,28 @@ def test_given_cloudera_check_when_good_health_cluster_then_emits_clusters_statu ), ), mock.patch( 'cm_client.TimeSeriesResourceApi.query_time_series', - return_value=ApiTimeSeriesResponseList( - items=[ - ApiTimeSeriesResponse( - time_series=[ - ApiTimeSeries( - data=[ - ApiTimeSeriesData(value=49.7), - ], - ), - ], - ), - ], + side_effect=[ + ApiTimeSeriesResponseList( + items=[ + ApiTimeSeriesResponse( + time_series=[ + ApiTimeSeries( + data=[ + ApiTimeSeriesData(value=49.7), + ], + metadata=ApiTimeSeriesMetadata(metric_name=metric, entity_name=category), + ) + for metric in metrics + ] + ), + ], + ) + for category, metrics in METRICS.items() + ], + ), mock.patch( + 'cm_client.ClustersResourceApi.list_hosts', + return_value=ApiHostList( + items=[ApiHost(host_id='host_1')], ), ): # Given @@ -381,7 +318,7 @@ def test_given_cloudera_check_when_good_health_cluster_then_emits_clusters_statu dd_run_check(check) # Then aggregator.assert_service_check( - 'cloudera.cluster_status', + 'cloudera.cluster.health', AgentCheck.OK, tags=['_cldr_cb_clustertype:Data Hub', '_cldr_cb_origin:cloudbreak', 'cloudera_cluster:cluster_1'], ) @@ -395,7 +332,7 @@ def test_given_cloudera_check_when_good_health_cluster_then_emits_cluster_metric ): with mock.patch( 'cm_client.ClouderaManagerResourceApi.get_version', - return_value=ApiVersionInfo(version="5.0.0"), + return_value=ApiVersionInfo(version="7.0.0"), ), mock.patch( 'cm_client.ClustersResourceApi.read_clusters', return_value=ApiClusterList( @@ -422,99 +359,14 @@ def test_given_cloudera_check_when_good_health_cluster_then_emits_cluster_metric data=[ ApiTimeSeriesData(value=49.7), ], - ), - ApiTimeSeries( - data=[ - ApiTimeSeriesData(value=49.7), - ], - ), - ApiTimeSeries( - data=[ - ApiTimeSeriesData(value=49.7), - ], - ), - ApiTimeSeries( - data=[ - ApiTimeSeriesData(value=49.7), - ], - ), - ApiTimeSeries( - data=[ - ApiTimeSeriesData(value=49.7), - ], - ), - ], - ) - ] - ), - ApiTimeSeriesResponseList( - items=[ - ApiTimeSeriesResponse( - time_series=[ - ApiTimeSeries( - data=[ - ApiTimeSeriesData(value=49.7), - ], - ), - ApiTimeSeries( - data=[ - ApiTimeSeriesData(value=49.7), - ], - ), - ApiTimeSeries( - data=[ - ApiTimeSeriesData(value=49.7), - ], - ), - ApiTimeSeries( - data=[ - ApiTimeSeriesData(value=49.7), - ], - ), - ApiTimeSeries( - data=[ - ApiTimeSeriesData(value=49.7), - ], - ), - ApiTimeSeries( - data=[ - ApiTimeSeriesData(value=49.7), - ], - ), - ApiTimeSeries( - data=[ - ApiTimeSeriesData(value=49.7), - ], - ), - ApiTimeSeries( - data=[ - ApiTimeSeriesData(value=49.7), - ], - ), - ApiTimeSeries( - data=[ - ApiTimeSeriesData(value=49.7), - ], - ), - ApiTimeSeries( - data=[ - ApiTimeSeriesData(value=49.7), - ], - ), - ApiTimeSeries( - data=[ - ApiTimeSeriesData(value=49.7), - ], - ), - ApiTimeSeries( - data=[ - ApiTimeSeriesData(value=49.7), - ], - ), - ], + metadata=ApiTimeSeriesMetadata(metric_name=metric, entity_name=category), + ) + for metric in metrics + ] ), ], - ), + ) + for category, metrics in METRICS.items() ], ), mock.patch( 'cm_client.ClustersResourceApi.list_hosts', @@ -533,22 +385,24 @@ def test_given_cloudera_check_when_good_health_cluster_then_emits_cluster_metric aggregator.assert_metric(f'cloudera.{category}.{metric}') -def test_run_timeseries_checks( - aggregator, - dd_run_check, - cloudera_check, -): - # Given - instance = { - 'username': 'cloudera', - 'password': 'cloudera', - 'api_url': 'http://localhost:7180/api/v12', - } - check = cloudera_check(instance) - # When - dd_run_check(check) - # Then - for metric in TIMESERIES_QUERIES: - metric_name = metric['metric_name'] - for category in metric['categories']: - aggregator.assert_metric(f'cloudera.{category}.{metric_name}') +# def test_run_timeseries_checks( +# aggregator, +# dd_run_check, +# cloudera_check, +# ): +# # Given +# instance = { +# 'run_timeseries': True, +# 'username': 'csso_shri.subramanian', +# 'password': 'wyz*xbw7cej*mbh9VUW', +# 'api_url': 'https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/' +# 'cod--qfdcinkqrzw/cdp-proxy-api/cm-api/v48', +# } +# check = cloudera_check(instance) +# # When +# dd_run_check(check) +# # Then +# for metric in TIMESERIES_QUERIES: +# metric_name = metric['metric_name'] +# for category in metric['categories']: +# aggregator.assert_metric(f'cloudera.{category}.{metric_name}') \ No newline at end of file From 1c4c4b6459c1de2f3eb5326ddf341c1cb2663617 Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Wed, 30 Nov 2022 14:10:52 -0500 Subject: [PATCH 19/71] Add Jose's new host metrics --- cloudera/datadog_checks/cloudera/metrics.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/cloudera/datadog_checks/cloudera/metrics.py b/cloudera/datadog_checks/cloudera/metrics.py index 793a4b6e5920e..34925d6576047 100644 --- a/cloudera/datadog_checks/cloudera/metrics.py +++ b/cloudera/datadog_checks/cloudera/metrics.py @@ -23,6 +23,21 @@ 'physical_memory_total', 'physical_memory_cached', 'physical_memory_buffers', + 'total_bytes_receive_rate_across_network_interfaces', + 'total_bytes_transmit_rate_across_network_interfaces', + 'total_read_bytes_rate_across_disks', + 'total_write_bytes_rate_across_disks', + 'total_read_ios_rate_across_disks', + 'total_write_ios_rate_across_disks', + 'health_good_rate', + 'health_concerning_rate', + 'health_bad_rate', + 'health_disabled_rate', + 'health_unknown_rate', + 'alerts_rate', + 'events_critical_rate', + 'events_important_rate', + ], 'role': [ 'mem_rss', From b6a54bfcb3b8370a756daf5f204a95855031bda3 Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Wed, 30 Nov 2022 14:32:59 -0500 Subject: [PATCH 20/71] Fix validations --- .azure-pipelines/templates/test-all-checks.yml | 3 +++ .codecov.yml | 9 +++++++++ .github/workflows/config/labeler.yml | 6 +++--- cloudera/manifest.json | 8 ++------ cloudera/metadata.csv | 1 + .../datadog_checks/base/data/agent_requirements.in | 1 + 6 files changed, 19 insertions(+), 9 deletions(-) diff --git a/.azure-pipelines/templates/test-all-checks.yml b/.azure-pipelines/templates/test-all-checks.yml index 02eb20eb0cf90..2a41bb45e3354 100644 --- a/.azure-pipelines/templates/test-all-checks.yml +++ b/.azure-pipelines/templates/test-all-checks.yml @@ -120,6 +120,9 @@ jobs: - checkName: cloud_foundry_api displayName: Cloud Foundry API os: linux + - checkName: cloudera + displayName: Cloudera + os: linux - checkName: cockroachdb displayName: CockroachDB os: linux diff --git a/.codecov.yml b/.codecov.yml index a3f300f5f8cff..3eacb8de9fc04 100644 --- a/.codecov.yml +++ b/.codecov.yml @@ -114,6 +114,10 @@ coverage: target: 75 flags: - cloud_foundry_api + Cloudera: + target: 75 + flags: + - cloudera CockroachDB: target: 75 flags: @@ -736,6 +740,11 @@ flags: paths: - cloud_foundry_api/datadog_checks/cloud_foundry_api - cloud_foundry_api/tests + cloudera: + carryforward: true + paths: + - cloudera/datadog_checks/cloudera + - cloudera/tests cockroachdb: carryforward: true paths: diff --git a/.github/workflows/config/labeler.yml b/.github/workflows/config/labeler.yml index 9c28bbf8194a2..2e3db4765fffd 100644 --- a/.github/workflows/config/labeler.yml +++ b/.github/workflows/config/labeler.yml @@ -2,13 +2,11 @@ base_package: - datadog_checks_base/**/* changelog/no-changelog: - requirements-agent-release.txt -- '*/__about__.py' +- datadog_checks_dev/datadog_checks/dev/__about__.py - all: - '*/!(datadog_checks)/**' - all: - '*/!(pyproject.toml)' -- all: - - '*/(!ddev)/**' ddev: - ddev/**/* dependencies: @@ -94,6 +92,8 @@ integration/clickhouse: - clickhouse/**/* integration/cloud_foundry_api: - cloud_foundry_api/**/* +integration/cloudera: +- cloudera/**/* integration/cockroachdb: - cockroachdb/**/* integration/confluent_platform: diff --git a/cloudera/manifest.json b/cloudera/manifest.json index 9cc40a0b256cb..e9aea79438471 100644 --- a/cloudera/manifest.json +++ b/cloudera/manifest.json @@ -28,17 +28,13 @@ }, "metrics": { "prefix": "cloudera.", - "check": "", + "check": "cloudera.cluster.cpu_percent_across_hosts", "metadata_path": "metadata.csv" }, "service_checks": { "metadata_path": "assets/service_checks.json" } - }, - "dashboards": {}, - "monitors": {}, - "logs": {}, - "saved_views": {} + } }, "author": { "support_email": "help@datadoghq.com", diff --git a/cloudera/metadata.csv b/cloudera/metadata.csv index 6bcfec7d94d0c..51dba090b4b49 100644 --- a/cloudera/metadata.csv +++ b/cloudera/metadata.csv @@ -1 +1,2 @@ metric_name,metric_type,interval,unit_name,per_unit_name,description,orientation,integration,short_name,curated_metric +cloudera.cluster.cpu_percent_across_hosts,gauge,,percent,,CPU usage in percent across hosts for this cluster,0,cloudera,cluster cpu percent across hosts, diff --git a/datadog_checks_base/datadog_checks/base/data/agent_requirements.in b/datadog_checks_base/datadog_checks/base/data/agent_requirements.in index a9a71ebd5a40a..01ef56a862d52 100644 --- a/datadog_checks_base/datadog_checks/base/data/agent_requirements.in +++ b/datadog_checks_base/datadog_checks/base/data/agent_requirements.in @@ -15,6 +15,7 @@ cachetools==5.2.0; python_version > '3.0' clickhouse-cityhash==1.0.2.3 clickhouse-driver==0.2.0; python_version < '3.0' clickhouse-driver==0.2.3; python_version > '3.0' +cm-client==45.0.4 contextlib2==0.6.0.post1; python_version < '3.0' cryptography==3.3.2; python_version < '3.0' cryptography==38.0.3; python_version > '3.0' From 53a023b3a4eb5cfd070ec2402beaed46fc0c5ec8 Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Wed, 30 Nov 2022 15:43:43 -0500 Subject: [PATCH 21/71] Add license --- LICENSE-3rdparty.csv | 1 + 1 file changed, 1 insertion(+) diff --git a/LICENSE-3rdparty.csv b/LICENSE-3rdparty.csv index 3d993d8b3260a..d75b7daa7444d 100644 --- a/LICENSE-3rdparty.csv +++ b/LICENSE-3rdparty.csv @@ -19,6 +19,7 @@ cachetools,PyPI,MIT,Thomas Kemmer check-postgres,"https://github.com/bucardo/",BSD-2-Clause,Greg Sabino Mullane clickhouse-cityhash,PyPI,MIT,Alexander [Amper] Marshalov clickhouse-driver,PyPI,MIT,Konstantin Lebedev +cm-client,PyPI,Apache-2.0,Cloudera team contextlib2,PyPI,PSF,Nick Coghlan cryptography,PyPI,Apache-2.0,The Python Cryptographic Authority and individual contributors | The cryptography developers cryptography,PyPI,BSD-3-Clause,The Python Cryptographic Authority and individual contributors | The cryptography developers From 47aaa9ff13985341b241ed1d81135a81872674b2 Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Wed, 30 Nov 2022 16:27:47 -0500 Subject: [PATCH 22/71] Fix properties --- .../datadog_checks/cloudera/api_client_v7.py | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/cloudera/datadog_checks/cloudera/api_client_v7.py b/cloudera/datadog_checks/cloudera/api_client_v7.py index 3e22c8555840e..d1df94f0758e2 100644 --- a/cloudera/datadog_checks/cloudera/api_client_v7.py +++ b/cloudera/datadog_checks/cloudera/api_client_v7.py @@ -16,14 +16,14 @@ def collect_data(self): try: self._collect_clusters() except Exception as e: - self.error("Unable to finish collecting data: %s", e) + self.check.error("Unable to finish collecting data: %s", str(e)) raise def _collect_clusters(self): clusters_resource_api = cm_client.ClustersResourceApi(self._api_client) read_clusters_response = clusters_resource_api.read_clusters(cluster_type='any', view='full') - self.log.debug("Full clusters response:") - self.log.debug(read_clusters_response) + self._log.debug("Full clusters response:") + self._log.debug(read_clusters_response) for cluster in read_clusters_response.items: self._collect_cluster_metrics_and_service_check(cluster) @@ -57,15 +57,15 @@ def _collect_cluster_metrics(self, cluster_name, tags): query = f'SELECT {metric_names} WHERE clusterName="{cluster_name}" AND category=CLUSTER' self._log.debug('query: %s', query) query_time_series_response = time_series_resource_api.query_time_series(query=query) - self.log.debug("Full timeseries response:") - self.log.debug(query_time_series_response) + self._log.debug("Full timeseries response:") + self._log.debug(query_time_series_response) self._collect_query_time_series(query_time_series_response, 'cluster', []) def _collect_hosts_metrics_and_service_check(self, cluster_name): clusters_resource_api = cm_client.ClustersResourceApi(self._api_client) list_hosts_response = clusters_resource_api.list_hosts(cluster_name, view='full') - self.log.debug("Full hosts response:") - self.log.debug(list_hosts_response) + self._log.debug("Full hosts response:") + self._log.debug(list_hosts_response) for host in list_hosts_response.items: self._collect_host_metrics_and_service_check(host) @@ -91,8 +91,8 @@ def _collect_host_metrics(self, host_id, tags): query = f'SELECT {metric_names} WHERE hostId="{host_id}" AND category=HOST' self._log.debug('query: %s', query) query_time_series_response = time_series_resource_api.query_time_series(query=query) - self.log.debug("Full timeseries response:") - self.log.debug(query_time_series_response) + self._log.debug("Full timeseries response:") + self._log.debug(query_time_series_response) self._collect_query_time_series(query_time_series_response, 'host', tags) @@ -102,8 +102,8 @@ def _collect_role_metrics(self, host_id, tags): query = f'SELECT {metric_names} WHERE hostId="{host_id}" AND category=ROLE' self._log.debug('query: %s', query) query_time_series_response = time_series_resource_api.query_time_series(query=query) - self.log.debug("Full timeseries response:") - self.log.debug(query_time_series_response) + self._log.debug("Full timeseries response:") + self._log.debug(query_time_series_response) self._collect_query_time_series(query_time_series_response, 'role', []) def _collect_query_time_series(self, query_time_series_response, category, tags): From ad6efb373743f62908c5726c1c13b101ab671728 Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Wed, 30 Nov 2022 17:07:12 -0500 Subject: [PATCH 23/71] Change to use caddy docker image --- .../cloudera/api_client_factory.py | 3 +- cloudera/tests/conftest.py | 26 +++++++++------ cloudera/tests/docker/docker-compose.yaml | 33 ++++--------------- cloudera/tests/docker/docker-compose.yaml.old | 10 ------ cloudera/tests/docker/docker-compose.yaml.v5 | 31 +++++++++++++++++ cloudera/tests/test_unit.py | 20 ++++++----- 6 files changed, 66 insertions(+), 57 deletions(-) delete mode 100644 cloudera/tests/docker/docker-compose.yaml.old create mode 100644 cloudera/tests/docker/docker-compose.yaml.v5 diff --git a/cloudera/datadog_checks/cloudera/api_client_factory.py b/cloudera/datadog_checks/cloudera/api_client_factory.py index 99c5380578a37..8728d1ddd1159 100644 --- a/cloudera/datadog_checks/cloudera/api_client_factory.py +++ b/cloudera/datadog_checks/cloudera/api_client_factory.py @@ -3,6 +3,7 @@ from datadog_checks.cloudera.api_client_v7 import ApiClientV7 +from datadog_checks.base import ConfigurationError def make_api_client(check, config): cm_client.configuration.username = config.workload_username @@ -23,4 +24,4 @@ def make_api_client(check, config): if cloudera_version.major == 7: return ApiClientV7(check, api_client) else: - raise ConfigurationError() # TODO: Clean up \ No newline at end of file + raise ConfigurationError("Version is unsupported or unknown.") diff --git a/cloudera/tests/conftest.py b/cloudera/tests/conftest.py index a6bc9a9706f90..013407771605e 100644 --- a/cloudera/tests/conftest.py +++ b/cloudera/tests/conftest.py @@ -15,16 +15,22 @@ @pytest.fixture(scope='session') def dd_environment(): - compose_file = os.path.join(common.HERE, 'compose', common.COMPOSE_FILE) - conditions = [ - CheckDockerLogs( - identifier='cloudera', patterns=['Success! You can now log into Cloudera Manager'], attempts=180, wait=5 - ), - ] - with docker_run( - compose_file, - conditions=conditions, - ): + # FIXME: Commenting out v12 Cloudera Docker image until confirmation this version should be supported + + # compose_file = os.path.join(common.HERE, 'compose', common.COMPOSE_FILE) + # conditions = [ + # CheckDockerLogs( + # identifier='cloudera', patterns=['Success! You can now log into Cloudera Manager'], attempts=180, wait=5 + # ), + # ] + # with docker_run( + # compose_file, + # conditions=conditions, + # ): + # yield common.INSTANCE + + compose_file = common.COMPOSE_FILE + with docker_run(compose_file): yield common.INSTANCE diff --git a/cloudera/tests/docker/docker-compose.yaml b/cloudera/tests/docker/docker-compose.yaml index 0c05c9de4c25c..9895b04b5bed3 100644 --- a/cloudera/tests/docker/docker-compose.yaml +++ b/cloudera/tests/docker/docker-compose.yaml @@ -1,31 +1,10 @@ -version: '2' +version: "3" + services: cloudera: + image: caddy:2.1.1-alpine container_name: cloudera - build: . - privileged: true - hostname: quickstart.cloudera - ports: - - "8020:8020" # HDFS - - "8022:22" # SSH - - "7180:7180" # Cloudera Manager - - "8888:8888" # Hue - - "11000:11000" # Oozie - - "50070:50070" # HDFS Rest Namenode - - "50075:50075" # HDFS Rest Datanode - - "2181:2181" # Zookeeper - - "8088:8088" # YARN Resource Manager - - "19888:19888" # MapReduce Job History - - "50030:50030" # MapReduce Job Tracker - - "8983:8983" # Solr - - "16000:16000" # Sqoop Metastore - - "8042:8042" # YARN Node Manager - - "60010:60010" # HBase Master - - "60030:60030" # HBase Region - - "9090:9090" # HBase Thrift - - "8080:8080" # HBase Rest - - "7077:7077" # Spark Master - tty: true - stdin_open: true volumes: - - /var/shared_cloudera_quickstart:/media/shared_from_local + - ./fixtures:/usr/share/caddy + ports: + - 80:80 \ No newline at end of file diff --git a/cloudera/tests/docker/docker-compose.yaml.old b/cloudera/tests/docker/docker-compose.yaml.old deleted file mode 100644 index 9895b04b5bed3..0000000000000 --- a/cloudera/tests/docker/docker-compose.yaml.old +++ /dev/null @@ -1,10 +0,0 @@ -version: "3" - -services: - cloudera: - image: caddy:2.1.1-alpine - container_name: cloudera - volumes: - - ./fixtures:/usr/share/caddy - ports: - - 80:80 \ No newline at end of file diff --git a/cloudera/tests/docker/docker-compose.yaml.v5 b/cloudera/tests/docker/docker-compose.yaml.v5 new file mode 100644 index 0000000000000..0c05c9de4c25c --- /dev/null +++ b/cloudera/tests/docker/docker-compose.yaml.v5 @@ -0,0 +1,31 @@ +version: '2' +services: + cloudera: + container_name: cloudera + build: . + privileged: true + hostname: quickstart.cloudera + ports: + - "8020:8020" # HDFS + - "8022:22" # SSH + - "7180:7180" # Cloudera Manager + - "8888:8888" # Hue + - "11000:11000" # Oozie + - "50070:50070" # HDFS Rest Namenode + - "50075:50075" # HDFS Rest Datanode + - "2181:2181" # Zookeeper + - "8088:8088" # YARN Resource Manager + - "19888:19888" # MapReduce Job History + - "50030:50030" # MapReduce Job Tracker + - "8983:8983" # Solr + - "16000:16000" # Sqoop Metastore + - "8042:8042" # YARN Node Manager + - "60010:60010" # HBase Master + - "60030:60030" # HBase Region + - "9090:9090" # HBase Thrift + - "8080:8080" # HBase Rest + - "7077:7077" # Spark Master + tty: true + stdin_open: true + volumes: + - /var/shared_cloudera_quickstart:/media/shared_from_local diff --git a/cloudera/tests/test_unit.py b/cloudera/tests/test_unit.py index 58dfe27558b6c..1c6f15a833d93 100644 --- a/cloudera/tests/test_unit.py +++ b/cloudera/tests/test_unit.py @@ -20,6 +20,8 @@ from datadog_checks.base import AgentCheck, ConfigurationError from datadog_checks.cloudera.metrics import METRICS +from six import PY2 + # from datadog_checks.cloudera.queries import TIMESERIES_QUERIES @@ -30,12 +32,12 @@ def test_given_cloudera_check_when_py2_then_raises_exception( aggregator, dd_run_check, cloudera_check, + instance, ): with mock.patch.object(six, 'PY2'), pytest.raises( ConfigurationError, match='This version of the integration is only available when using py3' ): # Given - instance = {} cloudera_check(instance) @@ -43,13 +45,13 @@ def test_given_cloudera_check_when_get_version_exception_from_cloudera_client_th aggregator, dd_run_check, cloudera_check, + instance, ): with mock.patch( 'cm_client.ClouderaManagerResourceApi.get_version', side_effect=ApiException('Service not available'), ): # Given - instance = {} check = cloudera_check(instance) # When dd_run_check(check) @@ -62,13 +64,13 @@ def test_given_cloudera_check_when_version_field_not_found_then_emits_critical_s dd_run_check, cloudera_check, api_response, + instance, ): with mock.patch( 'cm_client.ClouderaManagerResourceApi.get_version', return_value=ApiVersionInfo(), ): # Given - instance = {} check = cloudera_check(instance) # When dd_run_check(check) @@ -81,13 +83,13 @@ def test_given_cloudera_check_when_not_supported_version_then_emits_critical_ser dd_run_check, cloudera_check, api_response, + instance, ): with mock.patch( 'cm_client.ClouderaManagerResourceApi.get_version', return_value=ApiVersionInfo(version='5.0.0'), ): # Given - instance = {} check = cloudera_check(instance) # When dd_run_check(check) @@ -100,6 +102,7 @@ def test_given_cloudera_check_when_supported_version_then_emits_ok_service( dd_run_check, cloudera_check, api_response, + instance, ): with mock.patch( 'cm_client.ClouderaManagerResourceApi.get_version', @@ -146,7 +149,6 @@ def test_given_cloudera_check_when_supported_version_then_emits_ok_service( ), ): # Given - instance = {} check = cloudera_check(instance) # When dd_run_check(check) @@ -181,6 +183,7 @@ def test_given_cloudera_check_when_v7_read_clusters_exception_from_cloudera_clie dd_run_check, cloudera_check, api_response, + instance, ): with mock.patch( 'cm_client.ClouderaManagerResourceApi.get_version', @@ -190,7 +193,6 @@ def test_given_cloudera_check_when_v7_read_clusters_exception_from_cloudera_clie side_effect=ApiException('Service not available'), ): # Given - instance = {} check = cloudera_check(instance) # When dd_run_check(check) @@ -203,6 +205,7 @@ def test_given_cloudera_check_when_bad_health_cluster_then_emits_cluster_health_ dd_run_check, cloudera_check, api_response, + instance, ): with mock.patch( 'cm_client.ClouderaManagerResourceApi.get_version', @@ -249,7 +252,6 @@ def test_given_cloudera_check_when_bad_health_cluster_then_emits_cluster_health_ ), ): # Given - instance = {} check = cloudera_check(instance) # When dd_run_check(check) @@ -266,6 +268,7 @@ def test_given_cloudera_check_when_good_health_cluster_then_emits_cluster_health dd_run_check, cloudera_check, api_response, + instance, ): with mock.patch( 'cm_client.ClouderaManagerResourceApi.get_version', @@ -312,7 +315,6 @@ def test_given_cloudera_check_when_good_health_cluster_then_emits_cluster_health ), ): # Given - instance = {} check = cloudera_check(instance) # When dd_run_check(check) @@ -329,6 +331,7 @@ def test_given_cloudera_check_when_good_health_cluster_then_emits_cluster_metric dd_run_check, cloudera_check, api_response, + instance, ): with mock.patch( 'cm_client.ClouderaManagerResourceApi.get_version', @@ -375,7 +378,6 @@ def test_given_cloudera_check_when_good_health_cluster_then_emits_cluster_metric ), ): # Given - instance = {} check = cloudera_check(instance) # When dd_run_check(check) From 4f50e48027f7d05fc024f04b061fb87636518453 Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Wed, 30 Nov 2022 17:53:51 -0500 Subject: [PATCH 24/71] Start events implementation --- .../datadog_checks/cloudera/api_client_v7.py | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/cloudera/datadog_checks/cloudera/api_client_v7.py b/cloudera/datadog_checks/cloudera/api_client_v7.py index d1df94f0758e2..35a53942cf4ec 100644 --- a/cloudera/datadog_checks/cloudera/api_client_v7.py +++ b/cloudera/datadog_checks/cloudera/api_client_v7.py @@ -19,6 +19,12 @@ def collect_data(self): self.check.error("Unable to finish collecting data: %s", str(e)) raise + try: + self._collect_events() + except Exception as e: + self.check.error("Unable to finish collecting events: %s", str(e)) + raise + def _collect_clusters(self): clusters_resource_api = cm_client.ClustersResourceApi(self._api_client) read_clusters_response = clusters_resource_api.read_clusters(cluster_type='any', view='full') @@ -130,4 +136,18 @@ def _collect_query_time_series(self, query_time_series_response, category, tags) self._log.debug('full_metric_name: %s', full_metric_name) self._log.debug('value: %s', value) self._log.debug('metric_tags: %s', metric_tags) - self._check.gauge(full_metric_name, value, tags=metric_tags) \ No newline at end of file + self._check.gauge(full_metric_name, value, tags=metric_tags) + + + def _collect_events(self): + events_resource_api = cm_client.EventsResourceApi(self._api_client) + + # TODO: need to determine the time ranges to collect events, look at Silk integration for logic + query = "timeOccurred=ge=2022-11-30T21:06:35Z;timeOccurred=le=2022-11-30T21:07:35Z" + event_resource_response = events_resource_api.read_events(query=query) + + # TODO: Implement + for item in event_resource_response.items: + self._log.debug(f"content: %s", item.content) + self._log.debug(f"id: %s", item.id) + self._log.debug(f"category: %s", item.category) \ No newline at end of file From bf2b03246d5e0e26f22b6567410d4991240b884c Mon Sep 17 00:00:00 2001 From: Jose Manuel Almaza Date: Thu, 1 Dec 2022 10:12:12 +0100 Subject: [PATCH 25/71] Unit tests working --- .../datadog_checks/cloudera/api_client.py | 1 + .../cloudera/api_client_factory.py | 20 +++---- .../datadog_checks/cloudera/api_client_v7.py | 46 ++++++++-------- cloudera/datadog_checks/cloudera/check.py | 20 +++---- cloudera/datadog_checks/cloudera/metrics.py | 1 - cloudera/tests/conftest.py | 5 +- cloudera/tests/test_integration.py | 2 +- cloudera/tests/test_unit.py | 53 +++++-------------- 8 files changed, 58 insertions(+), 90 deletions(-) diff --git a/cloudera/datadog_checks/cloudera/api_client.py b/cloudera/datadog_checks/cloudera/api_client.py index d88a92ff398f2..ddb6705977aea 100644 --- a/cloudera/datadog_checks/cloudera/api_client.py +++ b/cloudera/datadog_checks/cloudera/api_client.py @@ -1,5 +1,6 @@ from abc import abstractmethod + class ApiClient: def __init__(self, check, api_client): self._check = check diff --git a/cloudera/datadog_checks/cloudera/api_client_factory.py b/cloudera/datadog_checks/cloudera/api_client_factory.py index 8728d1ddd1159..85a3411b271aa 100644 --- a/cloudera/datadog_checks/cloudera/api_client_factory.py +++ b/cloudera/datadog_checks/cloudera/api_client_factory.py @@ -1,9 +1,9 @@ import cm_client import packaging.version +from datadog_checks.base import ConfigurationError from datadog_checks.cloudera.api_client_v7 import ApiClientV7 -from datadog_checks.base import ConfigurationError def make_api_client(check, config): cm_client.configuration.username = config.workload_username @@ -14,14 +14,10 @@ def make_api_client(check, config): cloudera_manager_resource_api = cm_client.ClouderaManagerResourceApi(api_client) get_version_response = cloudera_manager_resource_api.get_version() check.log.debug('get_version_response: %s', get_version_response) - cloudera_version = get_version_response.version - check.log.debug('Cloudera Manager Version: %s', cloudera_version) - cloudera_version = packaging.version.parse(str(cloudera_version)) - - # FIXME: For now, no v5 since changes are done in v7 - # if cloudera_version.major == 5: - # return ApiClientV5(check, api_client) - if cloudera_version.major == 7: - return ApiClientV7(check, api_client) - else: - raise ConfigurationError("Version is unsupported or unknown.") + response_version = get_version_response.version + if response_version: + cloudera_version = packaging.version.parse(response_version) + check.log.debug('Cloudera Manager Version: %s', cloudera_version) + if cloudera_version.major == 7: + return ApiClientV7(check, api_client) + raise ConfigurationError(f'Cloudera Manager Version is unsupported or unknown: {response_version}') diff --git a/cloudera/datadog_checks/cloudera/api_client_v7.py b/cloudera/datadog_checks/cloudera/api_client_v7.py index 35a53942cf4ec..ef09a467c5ce0 100644 --- a/cloudera/datadog_checks/cloudera/api_client_v7.py +++ b/cloudera/datadog_checks/cloudera/api_client_v7.py @@ -1,11 +1,12 @@ import cm_client +from datadog_checks.base import AgentCheck from datadog_checks.cloudera.api_client import ApiClient from datadog_checks.cloudera.entity_status import ENTITY_STATUS -from datadog_checks.cloudera.metrics import METRICS +from datadog_checks.cloudera.metrics import TIMESERIES_METRICS from .common import CLUSTER_HEALTH, HOST_HEALTH -from datadog_checks.base import AgentCheck + # TODO: Refactor this to abstract out timeseries queries using composite pattern class ApiClientV7(ApiClient): @@ -13,24 +14,14 @@ def __init__(self, check, api_client): super(ApiClientV7, self).__init__(check, api_client) def collect_data(self): - try: - self._collect_clusters() - except Exception as e: - self.check.error("Unable to finish collecting data: %s", str(e)) - raise - - try: - self._collect_events() - except Exception as e: - self.check.error("Unable to finish collecting events: %s", str(e)) - raise + self._collect_clusters() + # self._collect_events() def _collect_clusters(self): clusters_resource_api = cm_client.ClustersResourceApi(self._api_client) read_clusters_response = clusters_resource_api.read_clusters(cluster_type='any', view='full') self._log.debug("Full clusters response:") self._log.debug(read_clusters_response) - for cluster in read_clusters_response.items: self._collect_cluster_metrics_and_service_check(cluster) @@ -49,7 +40,7 @@ def _collect_cluster_metrics_and_service_check(self, cluster): if cluster_tags: for cluster_tag in cluster_tags: tags.append(f"{cluster_tag.name}:{cluster_tag.value}") - + message = cluster.entity_status if cluster_entity_status != AgentCheck.OK else None self._check.service_check(CLUSTER_HEALTH, cluster_entity_status, tags=tags, message=message) @@ -59,7 +50,7 @@ def _collect_cluster_metrics_and_service_check(self, cluster): def _collect_cluster_metrics(self, cluster_name, tags): time_series_resource_api = cm_client.TimeSeriesResourceApi(self._api_client) - metric_names = ','.join(f'last({metric})' for metric in METRICS['cluster']) + metric_names = ','.join(f'last({metric})' for metric in TIMESERIES_METRICS['cluster']) query = f'SELECT {metric_names} WHERE clusterName="{cluster_name}" AND category=CLUSTER' self._log.debug('query: %s', query) query_time_series_response = time_series_resource_api.query_time_series(query=query) @@ -88,12 +79,13 @@ def _collect_host_metrics_and_service_check(self, host): tags = [f"{tag.name}:{tag.value}" for tag in host.tags] if host.tags else [] self._collect_host_metrics(host_id, tags) self._collect_role_metrics(host_id, tags) + self._collect_host_disks(host_id) self._log.debug('host tags: %s', tags) self._check.service_check(HOST_HEALTH, host_entity_status, tags=tags) def _collect_host_metrics(self, host_id, tags): time_series_resource_api = cm_client.TimeSeriesResourceApi(self._api_client) - metric_names = ','.join(f'last({metric})' for metric in METRICS['host']) + metric_names = ','.join(f'last({metric})' for metric in TIMESERIES_METRICS['host']) query = f'SELECT {metric_names} WHERE hostId="{host_id}" AND category=HOST' self._log.debug('query: %s', query) query_time_series_response = time_series_resource_api.query_time_series(query=query) @@ -104,7 +96,7 @@ def _collect_host_metrics(self, host_id, tags): def _collect_role_metrics(self, host_id, tags): time_series_resource_api = cm_client.TimeSeriesResourceApi(self._api_client) - metric_names = ','.join(f'last({metric})' for metric in METRICS['role']) + metric_names = ','.join(f'last({metric})' for metric in TIMESERIES_METRICS['role']) query = f'SELECT {metric_names} WHERE hostId="{host_id}" AND category=ROLE' self._log.debug('query: %s', query) query_time_series_response = time_series_resource_api.query_time_series(query=query) @@ -112,6 +104,15 @@ def _collect_role_metrics(self, host_id, tags): self._log.debug(query_time_series_response) self._collect_query_time_series(query_time_series_response, 'role', []) + def _collect_host_disks(self, host_id): + time_series_resource_api = cm_client.TimeSeriesResourceApi(self._api_client) + metric_names = ','.join(f'last({metric})' for metric in TIMESERIES_METRICS['disk']) + query = f'SELECT {metric_names} WHERE hostId="{host_id}" AND category=DISK' + self._log.debug('query: %s', query) + query_time_series_response = time_series_resource_api.query_time_series(query=query) + self._log.debug('query_time_series_response: %s', query_time_series_response) + self._collect_query_time_series(query_time_series_response, 'disk', []) + def _collect_query_time_series(self, query_time_series_response, category, tags): for item in query_time_series_response.items: last_metadata_metric_name = None @@ -122,7 +123,7 @@ def _collect_query_time_series(self, query_time_series_response, category, tags) elif last_metadata_metric_name != ts.metadata.metric_name: index += 1 last_metadata_metric_name = ts.metadata.metric_name - metric_name = METRICS[category][index] + metric_name = TIMESERIES_METRICS[category][index] metric_tags = tags + [f'cloudera_{category}:{ts.metadata.entity_name}'] full_metric_name = f'{category}.{metric_name}' new_tag = f'cloudera_{category}:{ts.metadata.entity_name}' @@ -138,7 +139,6 @@ def _collect_query_time_series(self, query_time_series_response, category, tags) self._log.debug('metric_tags: %s', metric_tags) self._check.gauge(full_metric_name, value, tags=metric_tags) - def _collect_events(self): events_resource_api = cm_client.EventsResourceApi(self._api_client) @@ -148,6 +148,6 @@ def _collect_events(self): # TODO: Implement for item in event_resource_response.items: - self._log.debug(f"content: %s", item.content) - self._log.debug(f"id: %s", item.id) - self._log.debug(f"category: %s", item.category) \ No newline at end of file + self._log.debug('content: %s', item.content) + self._log.debug('id: %s', item.id) + self._log.debug('category: %s', item.category) diff --git a/cloudera/datadog_checks/cloudera/check.py b/cloudera/datadog_checks/cloudera/check.py index d4cd474618e56..e6804e179d00e 100644 --- a/cloudera/datadog_checks/cloudera/check.py +++ b/cloudera/datadog_checks/cloudera/check.py @@ -1,7 +1,7 @@ # (C) Datadog, Inc. 2022-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -from six import PY2 +import six from datadog_checks.base import AgentCheck, ConfigurationError @@ -14,28 +14,28 @@ class ClouderaCheck(AgentCheck, ConfigMixin): __NAMESPACE__ = 'cloudera' def __init__(self, name, init_config, instances): - if PY2: + if six.PY2: raise ConfigurationError( "This version of the integration is only available when using py3. " "Check https://docs.datadoghq.com/agent/guide/agent-v6-python-3 " "for more information." ) - super(ClouderaCheck, self).__init__(name, init_config, instances) self.client = None self.check_initializations.append(self._create_client) def _create_client(self): try: - client = make_api_client(self, self.config) + self.client = make_api_client(self, self.config) except Exception as e: - self.log.error(f"Cloudera API Client is none: {e}") + self.log.error("Cloudera API Client is none: %s", e) self.service_check(CAN_CONNECT, AgentCheck.CRITICAL) raise - self.client = client - self.custom_tags = self.config.tags # TODO: Don't need self.custom_tags - def check(self, _): - self.client.collect_data() - self.service_check(CAN_CONNECT, AgentCheck.OK) + try: + self.client.collect_data() + self.service_check(CAN_CONNECT, AgentCheck.OK) + except Exception as e: + self.log.error('Cloudera check raised an exception: %s', e) + self.service_check(CAN_CONNECT, AgentCheck.CRITICAL) diff --git a/cloudera/datadog_checks/cloudera/metrics.py b/cloudera/datadog_checks/cloudera/metrics.py index 34925d6576047..ebe4043bbd7c2 100644 --- a/cloudera/datadog_checks/cloudera/metrics.py +++ b/cloudera/datadog_checks/cloudera/metrics.py @@ -37,7 +37,6 @@ 'alerts_rate', 'events_critical_rate', 'events_important_rate', - ], 'role': [ 'mem_rss', diff --git a/cloudera/tests/conftest.py b/cloudera/tests/conftest.py index 013407771605e..a55039b1b540b 100644 --- a/cloudera/tests/conftest.py +++ b/cloudera/tests/conftest.py @@ -8,15 +8,16 @@ from datadog_checks.cloudera import ClouderaCheck from datadog_checks.dev import docker_run -from datadog_checks.dev.conditions import CheckDockerLogs from . import common +# from datadog_checks.dev.conditions import CheckDockerLogs + @pytest.fixture(scope='session') def dd_environment(): # FIXME: Commenting out v12 Cloudera Docker image until confirmation this version should be supported - + # compose_file = os.path.join(common.HERE, 'compose', common.COMPOSE_FILE) # conditions = [ # CheckDockerLogs( diff --git a/cloudera/tests/test_integration.py b/cloudera/tests/test_integration.py index a6ee3a30adfc6..5319b039577e2 100644 --- a/cloudera/tests/test_integration.py +++ b/cloudera/tests/test_integration.py @@ -63,4 +63,4 @@ def test_given_api_v48_endpoint_when_check_runs_then_service_check_ok_and_metric for category, metrics in METRICS.items(): for metric in metrics: aggregator.assert_metric(f'cloudera.{category}.{metric}') - aggregator.assert_service_check('cloudera.can_connect', ClouderaCheck.OK) \ No newline at end of file + aggregator.assert_service_check('cloudera.can_connect', ClouderaCheck.OK) diff --git a/cloudera/tests/test_unit.py b/cloudera/tests/test_unit.py index 1c6f15a833d93..d5af7042f6162 100644 --- a/cloudera/tests/test_unit.py +++ b/cloudera/tests/test_unit.py @@ -20,29 +20,22 @@ from datadog_checks.base import AgentCheck, ConfigurationError from datadog_checks.cloudera.metrics import METRICS -from six import PY2 - - -# from datadog_checks.cloudera.queries import TIMESERIES_QUERIES pytestmark = [pytest.mark.unit] def test_given_cloudera_check_when_py2_then_raises_exception( - aggregator, - dd_run_check, cloudera_check, instance, ): with mock.patch.object(six, 'PY2'), pytest.raises( - ConfigurationError, match='This version of the integration is only available when using py3' + ConfigurationError, + match='This version of the integration is only available when using py3', ): - # Given cloudera_check(instance) def test_given_cloudera_check_when_get_version_exception_from_cloudera_client_then_emits_critical_service( - aggregator, dd_run_check, cloudera_check, instance, @@ -50,32 +43,29 @@ def test_given_cloudera_check_when_get_version_exception_from_cloudera_client_th with mock.patch( 'cm_client.ClouderaManagerResourceApi.get_version', side_effect=ApiException('Service not available'), + ), pytest.raises( + Exception, + match='Service not available', ): # Given check = cloudera_check(instance) # When dd_run_check(check) - # Then - aggregator.assert_service_check('cloudera.can_connect', AgentCheck.CRITICAL) def test_given_cloudera_check_when_version_field_not_found_then_emits_critical_service( - aggregator, dd_run_check, cloudera_check, - api_response, instance, ): - with mock.patch( - 'cm_client.ClouderaManagerResourceApi.get_version', - return_value=ApiVersionInfo(), + with mock.patch('cm_client.ClouderaManagerResourceApi.get_version', return_value=ApiVersionInfo(),), pytest.raises( + Exception, + match='Cloudera Manager Version is unsupported or unknown', ): # Given check = cloudera_check(instance) # When dd_run_check(check) - # Then - aggregator.assert_service_check('cloudera.can_connect', AgentCheck.CRITICAL) def test_given_cloudera_check_when_not_supported_version_then_emits_critical_service( @@ -88,6 +78,9 @@ def test_given_cloudera_check_when_not_supported_version_then_emits_critical_ser with mock.patch( 'cm_client.ClouderaManagerResourceApi.get_version', return_value=ApiVersionInfo(version='5.0.0'), + ), pytest.raises( + Exception, + match='Cloudera Manager Version is unsupported or unknown', ): # Given check = cloudera_check(instance) @@ -156,28 +149,6 @@ def test_given_cloudera_check_when_supported_version_then_emits_ok_service( aggregator.assert_service_check('cloudera.can_connect', AgentCheck.OK) -# def test_given_cloudera_check_when_v5_read_clusters_exception_from_cloudera_client_then_emits_critical_service( -# aggregator, -# dd_run_check, -# cloudera_check, -# api_response, -# ): -# with mock.patch( -# 'cm_client.ClouderaManagerResourceApi.get_version', -# return_value=ApiVersionInfo(version="5.0.0"), -# ), mock.patch( -# 'cm_client.ClustersResourceApi.read_clusters', -# side_effect=ApiException('Service not available'), -# ): -# # Given -# instance = {} -# check = cloudera_check(instance) -# # When -# dd_run_check(check) -# # Then -# aggregator.assert_service_check('cloudera.can_connect', AgentCheck.CRITICAL) - - def test_given_cloudera_check_when_v7_read_clusters_exception_from_cloudera_client_then_emits_critical_service( aggregator, dd_run_check, @@ -407,4 +378,4 @@ def test_given_cloudera_check_when_good_health_cluster_then_emits_cluster_metric # for metric in TIMESERIES_QUERIES: # metric_name = metric['metric_name'] # for category in metric['categories']: -# aggregator.assert_metric(f'cloudera.{category}.{metric_name}') \ No newline at end of file +# aggregator.assert_metric(f'cloudera.{category}.{metric_name}') From f581b3e7bdf1a3140996e1f6bdbe8a41809100e1 Mon Sep 17 00:00:00 2001 From: Jose Manuel Almaza Date: Thu, 1 Dec 2022 10:19:20 +0100 Subject: [PATCH 26/71] Map to 80 local port not recommended --- cloudera/tests/docker/docker-compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cloudera/tests/docker/docker-compose.yaml b/cloudera/tests/docker/docker-compose.yaml index 9895b04b5bed3..cb02927f61eca 100644 --- a/cloudera/tests/docker/docker-compose.yaml +++ b/cloudera/tests/docker/docker-compose.yaml @@ -7,4 +7,4 @@ services: volumes: - ./fixtures:/usr/share/caddy ports: - - 80:80 \ No newline at end of file + - "8080:80" \ No newline at end of file From 27f784cfb3f8bc7878a79e000acb2a90a3811da3 Mon Sep 17 00:00:00 2001 From: Jose Manuel Almaza Date: Fri, 2 Dec 2022 09:35:14 +0100 Subject: [PATCH 27/71] Added url to debug log --- cloudera/datadog_checks/cloudera/api_client_factory.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cloudera/datadog_checks/cloudera/api_client_factory.py b/cloudera/datadog_checks/cloudera/api_client_factory.py index 85a3411b271aa..a634947444de8 100644 --- a/cloudera/datadog_checks/cloudera/api_client_factory.py +++ b/cloudera/datadog_checks/cloudera/api_client_factory.py @@ -10,7 +10,7 @@ def make_api_client(check, config): cm_client.configuration.password = config.workload_password api_client = cm_client.ApiClient(config.api_url) - check.log.debug('Getting version from cloudera') + check.log.debug('Getting version from cloudera[%s]', config.api_url) cloudera_manager_resource_api = cm_client.ClouderaManagerResourceApi(api_client) get_version_response = cloudera_manager_resource_api.get_version() check.log.debug('get_version_response: %s', get_version_response) From 80486320d4a1894c4d68d70237fe06beab5f2b66 Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Thu, 1 Dec 2022 13:40:38 -0500 Subject: [PATCH 28/71] Remove events implementation --- cloudera/datadog_checks/cloudera/api_client_v7.py | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/cloudera/datadog_checks/cloudera/api_client_v7.py b/cloudera/datadog_checks/cloudera/api_client_v7.py index ef09a467c5ce0..6cf058cd8542f 100644 --- a/cloudera/datadog_checks/cloudera/api_client_v7.py +++ b/cloudera/datadog_checks/cloudera/api_client_v7.py @@ -15,7 +15,6 @@ def __init__(self, check, api_client): def collect_data(self): self._collect_clusters() - # self._collect_events() def _collect_clusters(self): clusters_resource_api = cm_client.ClustersResourceApi(self._api_client) @@ -138,16 +137,3 @@ def _collect_query_time_series(self, query_time_series_response, category, tags) self._log.debug('value: %s', value) self._log.debug('metric_tags: %s', metric_tags) self._check.gauge(full_metric_name, value, tags=metric_tags) - - def _collect_events(self): - events_resource_api = cm_client.EventsResourceApi(self._api_client) - - # TODO: need to determine the time ranges to collect events, look at Silk integration for logic - query = "timeOccurred=ge=2022-11-30T21:06:35Z;timeOccurred=le=2022-11-30T21:07:35Z" - event_resource_response = events_resource_api.read_events(query=query) - - # TODO: Implement - for item in event_resource_response.items: - self._log.debug('content: %s', item.content) - self._log.debug('id: %s', item.id) - self._log.debug('category: %s', item.category) From d060eebe899388a8176e3fe5d1feb7d89936631e Mon Sep 17 00:00:00 2001 From: Jose Manuel Almaza Date: Fri, 2 Dec 2022 09:39:37 +0100 Subject: [PATCH 29/71] Fixed integration tests --- cloudera/tests/docker/docker-compose.yaml | 6 +- cloudera/tests/docker/etc/caddy/Caddyfile | 72 + .../{hosts?view=FULL => hosts/get} | 180 +- .../cod--qfdcinkqrzw/services?view=FULL | 291 --- .../api/v48/clusters/{index.html => get} | 0 .../docker/fixtures/api/v48/cm/version/get | 3 + .../v48/timeseries/get_metrics_from_cluster | 168 ++ .../api/v48/timeseries/get_metrics_from_disk | 430 ++++ .../api/v48/timeseries/get_metrics_from_host | 1044 ++++++++ .../api/v48/timeseries/get_metrics_from_role | 1242 ++++++++++ ...lse&query=select%20last(await_time)&to=now | 955 -------- ...ry=select%20last(cpu_soft_irq_rate)&to=now | 325 --- ...uery=select%20last(cpu_system_rate)&to=now | 2175 ----------------- ...p=false&query=select%20last(load_1)&to=now | 307 --- ...=false&query=select%20last(mem_rss)&to=now | 1774 -------------- ...lect%20last(physical_memory_cached)&to=now | 307 --- ...&query=select%20last(swap_out_rate)&to=now | 325 --- ...ive_rate_across_network_interfaces)&to=now | 447 ---- cloudera/tests/test_integration.py | 49 +- 19 files changed, 3065 insertions(+), 7035 deletions(-) create mode 100644 cloudera/tests/docker/etc/caddy/Caddyfile rename cloudera/tests/docker/fixtures/api/v48/clusters/cod--qfdcinkqrzw/{hosts?view=FULL => hosts/get} (97%) delete mode 100644 cloudera/tests/docker/fixtures/api/v48/clusters/cod--qfdcinkqrzw/services?view=FULL rename cloudera/tests/docker/fixtures/api/v48/clusters/{index.html => get} (100%) create mode 100644 cloudera/tests/docker/fixtures/api/v48/cm/version/get create mode 100644 cloudera/tests/docker/fixtures/api/v48/timeseries/get_metrics_from_cluster create mode 100644 cloudera/tests/docker/fixtures/api/v48/timeseries/get_metrics_from_disk create mode 100644 cloudera/tests/docker/fixtures/api/v48/timeseries/get_metrics_from_host create mode 100644 cloudera/tests/docker/fixtures/api/v48/timeseries/get_metrics_from_role delete mode 100644 cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(await_time)&to=now delete mode 100644 cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(cpu_soft_irq_rate)&to=now delete mode 100644 cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(cpu_system_rate)&to=now delete mode 100644 cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(load_1)&to=now delete mode 100644 cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(mem_rss)&to=now delete mode 100644 cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(physical_memory_cached)&to=now delete mode 100644 cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(swap_out_rate)&to=now delete mode 100644 cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(total_bytes_receive_rate_across_network_interfaces)&to=now diff --git a/cloudera/tests/docker/docker-compose.yaml b/cloudera/tests/docker/docker-compose.yaml index cb02927f61eca..b0b2b773872a2 100644 --- a/cloudera/tests/docker/docker-compose.yaml +++ b/cloudera/tests/docker/docker-compose.yaml @@ -2,9 +2,11 @@ version: "3" services: cloudera: - image: caddy:2.1.1-alpine + image: caddy:2.6.2-alpine container_name: cloudera volumes: - ./fixtures:/usr/share/caddy + - ./etc/caddy:/etc/caddy/ ports: - - "8080:80" \ No newline at end of file + - "8080:80" + - "2019:2019" \ No newline at end of file diff --git a/cloudera/tests/docker/etc/caddy/Caddyfile b/cloudera/tests/docker/etc/caddy/Caddyfile new file mode 100644 index 0000000000000..51a8ec06f6f69 --- /dev/null +++ b/cloudera/tests/docker/etc/caddy/Caddyfile @@ -0,0 +1,72 @@ +{ + debug + admin :2019 +} +:80 { + root * /usr/share/caddy/ + @get_version { + method GET + path /api/v48/cm/version + } + route @get_version { + rewrite /api/v48/cm/version api/v48/cm/version/get + file_server + } + @get_clusters { + method GET + path /api/v48/clusters + } + route @get_clusters { + rewrite /api/v48/clusters api/v48/clusters/get + file_server + } + @get_metrics_from_cluster { + method GET + path /api/v48/timeseries + expression {query}.contains('SELECT+last%28cpu_percent_across_hosts%29%2Clast%28total_read_bytes_rate_across_disks%29%2Clast%28total_write_bytes_rate_across_disks%29%2Clast%28total_bytes_receive_rate_across_network_interfaces%29%2Clast%28total_bytes_transmit_rate_across_network_interfaces') + expression {query}.contains('category%3DCLUSTER') + } + route @get_metrics_from_cluster { + rewrite /api/v48/timeseries /api/v48/timeseries/get_metrics_from_cluster + file_server + } + @get_hosts { + method GET + path /api/v48/clusters/cod--qfdcinkqrzw/hosts + } + route @get_hosts { + rewrite /api/v48/clusters/cod--qfdcinkqrzw/hosts /api/v48/clusters/cod--qfdcinkqrzw/hosts/get + file_server + } + @get_metrics_from_host { + method GET + path /api/v48/timeseries + expression {query}.contains('SELECT+last%28cpu_user_rate%29%2Clast%28cpu_system_rate%29%2Clast%28cpu_nice_rate%29%2Clast%28cpu_iowait_rate%29%2Clast%28cpu_irq_rate%29%2Clast%28cpu_soft_irq_rate%29%2Clast%28cpu_steal_rate%29%2Clast%28load_1%29%2Clast%28load_5%29%2Clast%28load_15%29%2Clast%28swap_used%29%2Clast%28swap_out_rate%29%2Clast%28physical_memory_used%29%2Clast%28physical_memory_total%29%2Clast%28physical_memory_cached%29%2Clast%28physical_memory_buffers%29%2Clast%28total_bytes_receive_rate_across_network_interfaces%29%2Clast%28total_bytes_transmit_rate_across_network_interfaces%29%2Clast%28total_read_bytes_rate_across_disks%29%2Clast%28total_write_bytes_rate_across_disks%29%2Clast%28total_read_ios_rate_across_disks%29%2Clast%28total_write_ios_rate_across_disks%29%2Clast%28health_good_rate%29%2Clast%28health_concerning_rate%29%2Clast%28health_bad_rate%29%2Clast%28health_disabled_rate%29%2Clast%28health_unknown_rate%29%2Clast%28alerts_rate%29%2Clast%28events_critical_rate%29%2Clast%28events_important_rate') + expression {query}.contains('category%3DHOST') + } + route @get_metrics_from_host { + rewrite /api/v48/timeseries /api/v48/timeseries/get_metrics_from_host + file_server + } + @get_metrics_from_role { + method GET + path /api/v48/timeseries + expression {query}.contains('SELECT+last%28mem_rss%29%2Clast%28cpu_user_rate%29%2Clast%28cpu_system_rate') + expression {query}.contains('category%3DROLE') + } + route @get_metrics_from_role { + rewrite /api/v48/timeseries /api/v48/timeseries/get_metrics_from_role + file_server + } + @get_metrics_from_disk { + method GET + path /api/v48/timeseries + expression {query}.contains('SELECT+last%28service_time%29%2Clast%28await_time%29%2Clast%28await_read_time%29%2Clast%28await_write_time') + expression {query}.contains('category%3DDISK') + } + route @get_metrics_from_disk { + rewrite /api/v48/timeseries /api/v48/timeseries/get_metrics_from_disk + file_server + } + file_server browse +} diff --git a/cloudera/tests/docker/fixtures/api/v48/clusters/cod--qfdcinkqrzw/hosts?view=FULL b/cloudera/tests/docker/fixtures/api/v48/clusters/cod--qfdcinkqrzw/hosts/get similarity index 97% rename from cloudera/tests/docker/fixtures/api/v48/clusters/cod--qfdcinkqrzw/hosts?view=FULL rename to cloudera/tests/docker/fixtures/api/v48/clusters/cod--qfdcinkqrzw/hosts/get index ab8f821075970..f337360865fa6 100644 --- a/cloudera/tests/docker/fixtures/api/v48/clusters/cod--qfdcinkqrzw/hosts?view=FULL +++ b/cloudera/tests/docker/fixtures/api/v48/clusters/cod--qfdcinkqrzw/hosts/get @@ -70,7 +70,7 @@ "serviceName": "hue", "roleName": "hue-HUE_SERVER-7d0b6bba5cf23b4729586ee8d35ab766", "healthSummary": "GOOD", - "roleStatus": "STARTED" + "roleStatus": "STOPPED" }, { "clusterName": "cod--qfdcinkqrzw", @@ -81,17 +81,17 @@ }, { "clusterName": "cod--qfdcinkqrzw", - "serviceName": "hue", - "roleName": "hue-KT_RENEWER-7d0b6bba5cf23b4729586ee8d35ab766", + "serviceName": "queuemanager", + "roleName": "queuc8af8526-QUEUEMANAGER_WEBAPP-7d0b6bba5cf23b4729586ee8d35ab76", "healthSummary": "GOOD", "roleStatus": "STARTED" }, { "clusterName": "cod--qfdcinkqrzw", - "serviceName": "queuemanager", - "roleName": "queuc8af8526-QUEUEMANAGER_WEBAPP-7d0b6bba5cf23b4729586ee8d35ab76", + "serviceName": "hue", + "roleName": "hue-KT_RENEWER-7d0b6bba5cf23b4729586ee8d35ab766", "healthSummary": "GOOD", - "roleStatus": "STARTED" + "roleStatus": "STOPPED" }, { "clusterName": "cod--qfdcinkqrzw", @@ -112,7 +112,7 @@ "serviceName": "hue", "roleName": "hue-HUE_LOAD_BALANCER-7d0b6bba5cf23b4729586ee8d35ab766", "healthSummary": "GOOD", - "roleStatus": "STARTED" + "roleStatus": "STOPPED" }, { "clusterName": "cod--qfdcinkqrzw", @@ -166,7 +166,7 @@ "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", "rackId": "/ap-northeast-1d", "hostUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/hostRedirect/d8623d9457f4db06c5637c4fd4c02f5d", - "lastHeartbeat": "2022-11-23T22:24:34.308Z", + "lastHeartbeat": "2022-12-02T08:06:25.365Z", "healthSummary": "GOOD", "maintenanceMode": false, "commissionState": "COMMISSIONED", @@ -249,6 +249,13 @@ } ], "roleRefs": [ + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "omid", + "roleName": "omid-OMID_TSO-3bc8f544ef0c15a373bbe9f9790fefba", + "healthSummary": "GOOD", + "roleStatus": "STOPPED" + }, { "clusterName": "cod--qfdcinkqrzw", "serviceName": "hdfs", @@ -260,7 +267,7 @@ "clusterName": "cod--qfdcinkqrzw", "serviceName": "yarn", "roleName": "yarn-JOBHISTORY-3bc8f544ef0c15a373bbe9f9790fefba", - "healthSummary": "GOOD", + "healthSummary": "BAD", "roleStatus": "STARTED" }, { @@ -284,6 +291,13 @@ "healthSummary": "GOOD", "roleStatus": "STARTED" }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "hbase", + "roleName": "hbase-HBASETHRIFTSERVER-3bc8f544ef0c15a373bbe9f9790fefba", + "healthSummary": "GOOD", + "roleStatus": "STOPPED" + }, { "clusterName": "cod--qfdcinkqrzw", "serviceName": "hdfs", @@ -296,7 +310,7 @@ "serviceName": "hbase", "roleName": "hbase-HBASERESTSERVER-3bc8f544ef0c15a373bbe9f9790fefba", "healthSummary": "GOOD", - "roleStatus": "STARTED" + "roleStatus": "STOPPED" }, { "clusterName": "cod--qfdcinkqrzw", @@ -311,20 +325,6 @@ "roleName": "yarn-GATEWAY-3bc8f544ef0c15a373bbe9f9790fefba", "healthSummary": "GOOD", "roleStatus": "NA" - }, - { - "clusterName": "cod--qfdcinkqrzw", - "serviceName": "omid", - "roleName": "omid-OMID_TSO-3bc8f544ef0c15a373bbe9f9790fefba", - "healthSummary": "GOOD", - "roleStatus": "STARTED" - }, - { - "clusterName": "cod--qfdcinkqrzw", - "serviceName": "hbase", - "roleName": "hbase-HBASETHRIFTSERVER-3bc8f544ef0c15a373bbe9f9790fefba", - "healthSummary": "GOOD", - "roleStatus": "STARTED" } ], "maintenanceOwners": [], @@ -333,7 +333,7 @@ "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", "rackId": "/ap-northeast-1a", "hostUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/hostRedirect/96efbf3e7279bf25ae44fe0a6398ee97", - "lastHeartbeat": "2022-11-23T22:24:34.957Z", + "lastHeartbeat": "2022-12-02T08:06:26.451Z", "healthSummary": "GOOD", "maintenanceMode": false, "commissionState": "COMMISSIONED", @@ -421,7 +421,7 @@ "serviceName": "yarn", "roleName": "yarn-RESOURCEMANAGER-6e88fa1a7ad969e10ea41365cba9abc5", "healthSummary": "BAD", - "roleStatus": "BUSY" + "roleStatus": "STARTED" }, { "clusterName": "cod--qfdcinkqrzw", @@ -432,57 +432,57 @@ }, { "clusterName": "cod--qfdcinkqrzw", - "serviceName": "hbase", - "roleName": "hbase-GATEWAY-6e88fa1a7ad969e10ea41365cba9abc5", + "serviceName": "data_context_connector-8617", + "roleName": "datadefdc267-GATEWAY-6e88fa1a7ad969e10ea41365cba9abc5", "healthSummary": "GOOD", "roleStatus": "NA" }, { "clusterName": "cod--qfdcinkqrzw", - "serviceName": "hdfs", - "roleName": "hdfs-GATEWAY-6e88fa1a7ad969e10ea41365cba9abc5", + "serviceName": "hbase", + "roleName": "hbase-MASTER-6e88fa1a7ad969e10ea41365cba9abc5", "healthSummary": "GOOD", - "roleStatus": "NA" + "roleStatus": "STOPPED" }, { "clusterName": "cod--qfdcinkqrzw", - "serviceName": "hdfs", - "roleName": "hdfs-NAMENODE-6e88fa1a7ad969e10ea41365cba9abc5", + "serviceName": "zookeeper-e52d", + "roleName": "zookeeper-e52d-SERVER-6e88fa1a7ad969e10ea41365cba9abc5", "healthSummary": "GOOD", "roleStatus": "STARTED" }, { "clusterName": "cod--qfdcinkqrzw", - "serviceName": "data_context_connector-8617", - "roleName": "datadefdc267-GATEWAY-6e88fa1a7ad969e10ea41365cba9abc5", + "serviceName": "hdfs", + "roleName": "hdfs-FAILOVERCONTROLLER-6e88fa1a7ad969e10ea41365cba9abc5", "healthSummary": "GOOD", - "roleStatus": "NA" + "roleStatus": "STOPPED" }, { "clusterName": "cod--qfdcinkqrzw", - "serviceName": "hbase", - "roleName": "hbase-MASTER-6e88fa1a7ad969e10ea41365cba9abc5", - "healthSummary": "BAD", + "serviceName": "hdfs", + "roleName": "hdfs-JOURNALNODE-6e88fa1a7ad969e10ea41365cba9abc5", + "healthSummary": "GOOD", "roleStatus": "STARTED" }, { "clusterName": "cod--qfdcinkqrzw", - "serviceName": "zookeeper-e52d", - "roleName": "zookeeper-e52d-SERVER-6e88fa1a7ad969e10ea41365cba9abc5", + "serviceName": "hbase", + "roleName": "hbase-GATEWAY-6e88fa1a7ad969e10ea41365cba9abc5", "healthSummary": "GOOD", - "roleStatus": "STARTED" + "roleStatus": "NA" }, { "clusterName": "cod--qfdcinkqrzw", "serviceName": "hdfs", - "roleName": "hdfs-FAILOVERCONTROLLER-6e88fa1a7ad969e10ea41365cba9abc5", + "roleName": "hdfs-GATEWAY-6e88fa1a7ad969e10ea41365cba9abc5", "healthSummary": "GOOD", - "roleStatus": "STOPPED" + "roleStatus": "NA" }, { "clusterName": "cod--qfdcinkqrzw", "serviceName": "hdfs", - "roleName": "hdfs-JOURNALNODE-6e88fa1a7ad969e10ea41365cba9abc5", + "roleName": "hdfs-NAMENODE-6e88fa1a7ad969e10ea41365cba9abc5", "healthSummary": "GOOD", "roleStatus": "STARTED" } @@ -493,7 +493,7 @@ "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", "rackId": "/ap-northeast-1d", "hostUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/hostRedirect/759451867dfde961d6adbeb21d9c13f9", - "lastHeartbeat": "2022-11-23T22:24:33.778Z", + "lastHeartbeat": "2022-12-02T08:06:23.968Z", "healthSummary": "GOOD", "maintenanceMode": false, "commissionState": "COMMISSIONED", @@ -578,52 +578,45 @@ "roleRefs": [ { "clusterName": "cod--qfdcinkqrzw", - "serviceName": "hbase", - "roleName": "hbase-MASTER-dbb26169f4e1fe9a387fcc5bd5bfd6af", - "healthSummary": "BAD", - "roleStatus": "STARTED" - }, - { - "clusterName": "cod--qfdcinkqrzw", - "serviceName": "hdfs", - "roleName": "hdfs-JOURNALNODE-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "serviceName": "yarn", + "roleName": "yarn-RESOURCEMANAGER-dbb26169f4e1fe9a387fcc5bd5bfd6af", "healthSummary": "GOOD", - "roleStatus": "STARTED" + "roleStatus": "STOPPED" }, { "clusterName": "cod--qfdcinkqrzw", - "serviceName": "zookeeper-e52d", - "roleName": "zookeeper-e52d-SERVER-dbb26169f4e1fe9a387fcc5bd5bfd6af", - "healthSummary": "BAD", - "roleStatus": "STARTED" + "serviceName": "yarn", + "roleName": "yarn-GATEWAY-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "healthSummary": "GOOD", + "roleStatus": "NA" }, { "clusterName": "cod--qfdcinkqrzw", - "serviceName": "hdfs", - "roleName": "hdfs-FAILOVERCONTROLLER-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "serviceName": "hbase", + "roleName": "hbase-MASTER-dbb26169f4e1fe9a387fcc5bd5bfd6af", "healthSummary": "GOOD", "roleStatus": "STOPPED" }, { "clusterName": "cod--qfdcinkqrzw", - "serviceName": "yarn", - "roleName": "yarn-RESOURCEMANAGER-dbb26169f4e1fe9a387fcc5bd5bfd6af", - "healthSummary": "BAD", - "roleStatus": "STARTED" + "serviceName": "data_context_connector-8617", + "roleName": "datadefdc267-GATEWAY-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "healthSummary": "GOOD", + "roleStatus": "NA" }, { "clusterName": "cod--qfdcinkqrzw", - "serviceName": "yarn", - "roleName": "yarn-GATEWAY-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "serviceName": "hdfs", + "roleName": "hdfs-JOURNALNODE-dbb26169f4e1fe9a387fcc5bd5bfd6af", "healthSummary": "GOOD", - "roleStatus": "NA" + "roleStatus": "STARTED" }, { "clusterName": "cod--qfdcinkqrzw", - "serviceName": "data_context_connector-8617", - "roleName": "datadefdc267-GATEWAY-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "serviceName": "zookeeper-e52d", + "roleName": "zookeeper-e52d-SERVER-dbb26169f4e1fe9a387fcc5bd5bfd6af", "healthSummary": "GOOD", - "roleStatus": "NA" + "roleStatus": "STARTED" }, { "clusterName": "cod--qfdcinkqrzw", @@ -645,6 +638,13 @@ "roleName": "hbase-GATEWAY-dbb26169f4e1fe9a387fcc5bd5bfd6af", "healthSummary": "GOOD", "roleStatus": "NA" + }, + { + "clusterName": "cod--qfdcinkqrzw", + "serviceName": "hdfs", + "roleName": "hdfs-FAILOVERCONTROLLER-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "healthSummary": "GOOD", + "roleStatus": "STOPPED" } ], "maintenanceOwners": [], @@ -653,7 +653,7 @@ "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", "rackId": "/ap-northeast-1c", "hostUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/hostRedirect/119115ab851aefe1429860d4255b3fab", - "lastHeartbeat": "2022-11-23T22:24:33.786Z", + "lastHeartbeat": "2022-12-02T08:06:25.405Z", "healthSummary": "GOOD", "maintenanceMode": false, "commissionState": "COMMISSIONED", @@ -741,27 +741,27 @@ "serviceName": "hbase", "roleName": "hbase-REGIONSERVER-145da1565b8e2c4165145d9ecc0c784e", "healthSummary": "GOOD", - "roleStatus": "STARTED" + "roleStatus": "STOPPED" }, { "clusterName": "cod--qfdcinkqrzw", "serviceName": "phoenix", "roleName": "phoenix-PHOENIX_QUERY_SERVER-145da1565b8e2c4165145d9ecc0c784e", "healthSummary": "GOOD", - "roleStatus": "STARTED" + "roleStatus": "STOPPED" }, { "clusterName": "cod--qfdcinkqrzw", "serviceName": "hdfs", "roleName": "hdfs-DATANODE-145da1565b8e2c4165145d9ecc0c784e", - "healthSummary": "BAD", + "healthSummary": "GOOD", "roleStatus": "STARTED" }, { "clusterName": "cod--qfdcinkqrzw", "serviceName": "yarn", "roleName": "yarn-NODEMANAGER-145da1565b8e2c4165145d9ecc0c784e", - "healthSummary": "BAD", + "healthSummary": "GOOD", "roleStatus": "STARTED" }, { @@ -799,7 +799,7 @@ "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", "rackId": "/ap-northeast-1d", "hostUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/hostRedirect/ed528836ae33e47e6657b95373571c33", - "lastHeartbeat": "2022-11-23T22:24:33.699Z", + "lastHeartbeat": "2022-12-02T08:06:25.114Z", "healthSummary": "GOOD", "maintenanceMode": false, "commissionState": "COMMISSIONED", @@ -901,7 +901,7 @@ "serviceName": "hbase", "roleName": "hbase-REGIONSERVER-7e9a53b768c95833df424c7d7b0ae857", "healthSummary": "GOOD", - "roleStatus": "STARTED" + "roleStatus": "STOPPED" }, { "clusterName": "cod--qfdcinkqrzw", @@ -936,7 +936,7 @@ "serviceName": "phoenix", "roleName": "phoenix-PHOENIX_QUERY_SERVER-7e9a53b768c95833df424c7d7b0ae857", "healthSummary": "GOOD", - "roleStatus": "STARTED" + "roleStatus": "STOPPED" } ], "maintenanceOwners": [], @@ -945,7 +945,7 @@ "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", "rackId": "/ap-northeast-1c", "hostUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/hostRedirect/22f6ab659c835d47bc13d6c8f3370110", - "lastHeartbeat": "2022-11-23T22:24:34.430Z", + "lastHeartbeat": "2022-12-02T08:06:26.321Z", "healthSummary": "GOOD", "maintenanceMode": false, "commissionState": "COMMISSIONED", @@ -1033,7 +1033,7 @@ "serviceName": "hbase", "roleName": "hbase-REGIONSERVER-3c658ac6009daca54192736b1502fae1", "healthSummary": "GOOD", - "roleStatus": "STARTED" + "roleStatus": "STOPPED" }, { "clusterName": "cod--qfdcinkqrzw", @@ -1054,7 +1054,7 @@ "serviceName": "phoenix", "roleName": "phoenix-PHOENIX_QUERY_SERVER-3c658ac6009daca54192736b1502fae1", "healthSummary": "GOOD", - "roleStatus": "STARTED" + "roleStatus": "STOPPED" }, { "clusterName": "cod--qfdcinkqrzw", @@ -1091,7 +1091,7 @@ "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", "rackId": "/ap-northeast-1c", "hostUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/hostRedirect/49adda80d1b98e9262ee146fd7fd798b", - "lastHeartbeat": "2022-11-23T22:24:35.255Z", + "lastHeartbeat": "2022-12-02T08:06:25.918Z", "healthSummary": "GOOD", "maintenanceMode": false, "commissionState": "COMMISSIONED", @@ -1207,14 +1207,14 @@ "serviceName": "hbase", "roleName": "hbase-REGIONSERVER-d51d3a03fc3294039de9c160b1013676", "healthSummary": "GOOD", - "roleStatus": "STARTED" + "roleStatus": "STOPPED" }, { "clusterName": "cod--qfdcinkqrzw", "serviceName": "phoenix", "roleName": "phoenix-PHOENIX_QUERY_SERVER-d51d3a03fc3294039de9c160b1013676", "healthSummary": "GOOD", - "roleStatus": "STARTED" + "roleStatus": "STOPPED" }, { "clusterName": "cod--qfdcinkqrzw", @@ -1237,7 +1237,7 @@ "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", "rackId": "/ap-northeast-1a", "hostUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/hostRedirect/88ae2611748383b5628d4aec94873da9", - "lastHeartbeat": "2022-11-23T22:24:33.808Z", + "lastHeartbeat": "2022-12-02T08:06:26.106Z", "healthSummary": "GOOD", "maintenanceMode": false, "commissionState": "COMMISSIONED", @@ -1325,7 +1325,7 @@ "serviceName": "phoenix", "roleName": "phoenix-PHOENIX_QUERY_SERVER-bf4b8e304dd0b549bcad6614d3129033", "healthSummary": "GOOD", - "roleStatus": "STARTED" + "roleStatus": "STOPPED" }, { "clusterName": "cod--qfdcinkqrzw", @@ -1339,7 +1339,7 @@ "serviceName": "hbase", "roleName": "hbase-REGIONSERVER-bf4b8e304dd0b549bcad6614d3129033", "healthSummary": "GOOD", - "roleStatus": "STARTED" + "roleStatus": "STOPPED" }, { "clusterName": "cod--qfdcinkqrzw", @@ -1383,7 +1383,7 @@ "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", "rackId": "/ap-northeast-1d", "hostUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/hostRedirect/9784d85849c7179b790d476c483fd905", - "lastHeartbeat": "2022-11-23T22:24:34.092Z", + "lastHeartbeat": "2022-12-02T08:06:25.955Z", "healthSummary": "GOOD", "maintenanceMode": false, "commissionState": "COMMISSIONED", diff --git a/cloudera/tests/docker/fixtures/api/v48/clusters/cod--qfdcinkqrzw/services?view=FULL b/cloudera/tests/docker/fixtures/api/v48/clusters/cod--qfdcinkqrzw/services?view=FULL deleted file mode 100644 index aaec48c72962f..0000000000000 --- a/cloudera/tests/docker/fixtures/api/v48/clusters/cod--qfdcinkqrzw/services?view=FULL +++ /dev/null @@ -1,291 +0,0 @@ -{ - "items": [ - { - "healthChecks": [ - { - "name": "PHOENIX_PHOENIX_QUERY_SERVER_HEALTHY", - "summary": "DISABLED", - "suppressed": false - } - ], - "maintenanceOwners": [], - "tags": [], - "name": "phoenix", - "type": "PHOENIX", - "clusterRef": { - "clusterName": "cod--qfdcinkqrzw", - "displayName": "cod--qfdcinkqrzw" - }, - "serviceUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/serviceRedirect/phoenix", - "serviceVersion": "CDH 7.2.15", - "roleInstancesUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/serviceRedirect/phoenix/instances", - "serviceState": "STOPPED", - "healthSummary": "DISABLED", - "configStalenessStatus": "FRESH", - "clientConfigStalenessStatus": "FRESH", - "maintenanceMode": false, - "displayName": "phoenix", - "entityStatus": "STOPPED" - }, - { - "healthChecks": [ - { - "name": "OMID_OMID_TSO_HEALTHY", - "summary": "DISABLED", - "suppressed": false - } - ], - "maintenanceOwners": [], - "tags": [], - "name": "omid", - "type": "OMID", - "clusterRef": { - "clusterName": "cod--qfdcinkqrzw", - "displayName": "cod--qfdcinkqrzw" - }, - "serviceUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/serviceRedirect/omid", - "serviceVersion": "CDH 7.2.15", - "roleInstancesUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/serviceRedirect/omid/instances", - "serviceState": "STOPPED", - "healthSummary": "DISABLED", - "configStalenessStatus": "FRESH", - "clientConfigStalenessStatus": "FRESH", - "maintenanceMode": false, - "displayName": "omid", - "entityStatus": "STOPPED" - }, - { - "healthChecks": [], - "maintenanceOwners": [], - "tags": [], - "name": "data_context_connector-8617", - "type": "DATA_CONTEXT_CONNECTOR", - "clusterRef": { - "clusterName": "cod--qfdcinkqrzw", - "displayName": "cod--qfdcinkqrzw" - }, - "serviceUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/serviceRedirect/data_context_connector-8617", - "serviceVersion": "CDH 7.2.15", - "roleInstancesUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/serviceRedirect/data_context_connector-8617/instances", - "serviceState": "STARTED", - "healthSummary": "NOT_AVAILABLE", - "configStalenessStatus": "FRESH", - "clientConfigStalenessStatus": "STALE", - "maintenanceMode": false, - "displayName": "agent-integ-cloudera-data-lake", - "entityStatus": "GOOD_HEALTH" - }, - { - "healthChecks": [ - { - "name": "ZOOKEEPER_CANARY_HEALTH", - "summary": "GOOD", - "suppressed": false - }, - { - "name": "ZOOKEEPER_SERVERS_HEALTHY", - "summary": "GOOD", - "suppressed": false - } - ], - "maintenanceOwners": [], - "tags": [], - "name": "zookeeper-e52d", - "type": "ZOOKEEPER", - "clusterRef": { - "clusterName": "cod--qfdcinkqrzw", - "displayName": "cod--qfdcinkqrzw" - }, - "serviceUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/serviceRedirect/zookeeper-e52d", - "serviceVersion": "CDH 7.2.15", - "roleInstancesUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/serviceRedirect/zookeeper-e52d/instances", - "serviceState": "STARTED", - "healthSummary": "GOOD", - "configStalenessStatus": "FRESH", - "clientConfigStalenessStatus": "FRESH", - "maintenanceMode": false, - "displayName": "ZooKeeper", - "entityStatus": "GOOD_HEALTH" - }, - { - "healthChecks": [], - "maintenanceOwners": [], - "tags": [], - "name": "hdfs", - "type": "HDFS", - "clusterRef": { - "clusterName": "cod--qfdcinkqrzw", - "displayName": "cod--qfdcinkqrzw" - }, - "serviceUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/serviceRedirect/hdfs", - "serviceVersion": "CDH 7.2.15", - "roleInstancesUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/serviceRedirect/hdfs/instances", - "serviceState": "STARTED", - "healthSummary": "BAD", - "configStalenessStatus": "FRESH", - "clientConfigStalenessStatus": "FRESH", - "maintenanceMode": false, - "displayName": "hdfs", - "entityStatus": "BAD_HEALTH" - }, - { - "healthChecks": [ - { - "name": "YARN_JOBHISTORY_HEALTH", - "summary": "BAD", - "suppressed": false - }, - { - "name": "YARN_NODE_MANAGERS_HEALTHY", - "summary": "GOOD", - "suppressed": false - }, - { - "name": "YARN_RESOURCEMANAGERS_HEALTH", - "summary": "BAD", - "suppressed": false - }, - { - "name": "YARN_USAGE_AGGREGATION_HEALTH", - "summary": "DISABLED", - "suppressed": false - } - ], - "maintenanceOwners": [], - "tags": [], - "name": "yarn", - "type": "YARN", - "clusterRef": { - "clusterName": "cod--qfdcinkqrzw", - "displayName": "cod--qfdcinkqrzw" - }, - "serviceUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/serviceRedirect/yarn", - "serviceVersion": "CDH 7.2.15", - "roleInstancesUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/serviceRedirect/yarn/instances", - "serviceState": "STARTED", - "healthSummary": "BAD", - "configStalenessStatus": "FRESH", - "clientConfigStalenessStatus": "FRESH", - "maintenanceMode": false, - "displayName": "yarn", - "entityStatus": "BAD_HEALTH" - }, - { - "healthChecks": [ - { - "name": "HBASE_MASTER_HEALTH", - "summary": "DISABLED", - "suppressed": false - }, - { - "name": "HBASE_REGION_SERVERS_HEALTHY", - "summary": "DISABLED", - "suppressed": false - } - ], - "maintenanceOwners": [], - "tags": [], - "name": "hbase", - "type": "HBASE", - "clusterRef": { - "clusterName": "cod--qfdcinkqrzw", - "displayName": "cod--qfdcinkqrzw" - }, - "serviceUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/serviceRedirect/hbase", - "serviceVersion": "CDH 7.2.15", - "roleInstancesUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/serviceRedirect/hbase/instances", - "serviceState": "STOPPED", - "healthSummary": "DISABLED", - "configStalenessStatus": "FRESH", - "clientConfigStalenessStatus": "FRESH", - "maintenanceMode": false, - "displayName": "hbase", - "entityStatus": "STOPPED" - }, - { - "healthChecks": [], - "maintenanceOwners": [], - "tags": [], - "name": "queuemanager", - "type": "QUEUEMANAGER", - "clusterRef": { - "clusterName": "cod--qfdcinkqrzw", - "displayName": "cod--qfdcinkqrzw" - }, - "serviceUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/serviceRedirect/queuemanager", - "serviceVersion": "CDH 7.2.15", - "roleInstancesUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/serviceRedirect/queuemanager/instances", - "serviceState": "STARTED", - "healthSummary": "GOOD", - "configStalenessStatus": "FRESH", - "clientConfigStalenessStatus": "FRESH", - "maintenanceMode": false, - "displayName": "queuemanager", - "entityStatus": "GOOD_HEALTH" - }, - { - "healthChecks": [ - { - "name": "KNOX_KNOX_GATEWAY_HEALTHY", - "summary": "GOOD", - "suppressed": false - } - ], - "maintenanceOwners": [], - "tags": [], - "name": "knox-e428", - "type": "KNOX", - "clusterRef": { - "clusterName": "cod--qfdcinkqrzw", - "displayName": "cod--qfdcinkqrzw" - }, - "serviceUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/serviceRedirect/knox-e428", - "serviceVersion": "CDH 7.2.15", - "roleInstancesUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/serviceRedirect/knox-e428/instances", - "serviceState": "STARTED", - "healthSummary": "GOOD", - "configStalenessStatus": "FRESH", - "clientConfigStalenessStatus": "FRESH", - "maintenanceMode": false, - "displayName": "Knox", - "entityStatus": "GOOD_HEALTH" - }, - { - "healthChecks": [ - { - "name": "HUE_HUE_SERVERS_HEALTHY", - "summary": "DISABLED", - "suppressed": false - }, - { - "name": "HUE_KT_RENEWERS_HEALTHY", - "summary": "DISABLED", - "suppressed": false - }, - { - "name": "HUE_LOAD_BALANCER_HEALTHY", - "summary": "DISABLED", - "suppressed": false - } - ], - "maintenanceOwners": [], - "tags": [], - "name": "hue", - "type": "HUE", - "clusterRef": { - "clusterName": "cod--qfdcinkqrzw", - "displayName": "cod--qfdcinkqrzw" - }, - "serviceUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/serviceRedirect/hue", - "serviceVersion": "CDH 7.2.15", - "roleInstancesUrl": "https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/cmf/serviceRedirect/hue/instances", - "serviceState": "STOPPED", - "healthSummary": "DISABLED", - "configStalenessStatus": "FRESH", - "clientConfigStalenessStatus": "FRESH", - "maintenanceMode": false, - "displayName": "hue", - "entityStatus": "STOPPED" - } - ] -} \ No newline at end of file diff --git a/cloudera/tests/docker/fixtures/api/v48/clusters/index.html b/cloudera/tests/docker/fixtures/api/v48/clusters/get similarity index 100% rename from cloudera/tests/docker/fixtures/api/v48/clusters/index.html rename to cloudera/tests/docker/fixtures/api/v48/clusters/get diff --git a/cloudera/tests/docker/fixtures/api/v48/cm/version/get b/cloudera/tests/docker/fixtures/api/v48/cm/version/get new file mode 100644 index 0000000000000..beca88e01a9aa --- /dev/null +++ b/cloudera/tests/docker/fixtures/api/v48/cm/version/get @@ -0,0 +1,3 @@ +{ + "version": "7.2.15" +} \ No newline at end of file diff --git a/cloudera/tests/docker/fixtures/api/v48/timeseries/get_metrics_from_cluster b/cloudera/tests/docker/fixtures/api/v48/timeseries/get_metrics_from_cluster new file mode 100644 index 0000000000000..6ef473e1ace70 --- /dev/null +++ b/cloudera/tests/docker/fixtures/api/v48/timeseries/get_metrics_from_cluster @@ -0,0 +1,168 @@ +{ + "items": [ + { + "timeSeries": [ + { + "metadata": { + "metricName": "last(cpu_percent_across_hosts)", + "entityName": "cod--qfdcinkqrzw", + "startTime": "2022-12-01T09:43:07.877Z", + "endTime": "2022-12-01T09:48:07.877Z", + "attributes": { + "active": "true", + "clusterDisplayName": "cod--qfdcinkqrzw", + "category": "CLUSTER", + "version": "CDH 7.2.15", + "entityName": "1546335201", + "clusterName": "cod--qfdcinkqrzw" + }, + "unitNumerators": [ + "percent" + ], + "unitDenominators": [], + "expression": "SELECT last(cpu_percent_across_hosts) WHERE entityName = \"1546335201\" AND category = CLUSTER", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-01T09:48:04.003Z", + "value": 0.6777777777777778, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(total_read_bytes_rate_across_disks)", + "entityName": "cod--qfdcinkqrzw", + "startTime": "2022-12-01T09:43:07.877Z", + "endTime": "2022-12-01T09:48:07.877Z", + "attributes": { + "active": "true", + "clusterDisplayName": "cod--qfdcinkqrzw", + "category": "CLUSTER", + "version": "CDH 7.2.15", + "entityName": "1546335201", + "clusterName": "cod--qfdcinkqrzw" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(total_read_bytes_rate_across_disks) WHERE entityName = \"1546335201\" AND category = CLUSTER", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-01T09:48:04.003Z", + "value": 0, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(total_write_bytes_rate_across_disks)", + "entityName": "cod--qfdcinkqrzw", + "startTime": "2022-12-01T09:43:07.877Z", + "endTime": "2022-12-01T09:48:07.877Z", + "attributes": { + "active": "true", + "clusterDisplayName": "cod--qfdcinkqrzw", + "category": "CLUSTER", + "version": "CDH 7.2.15", + "entityName": "1546335201", + "clusterName": "cod--qfdcinkqrzw" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(total_write_bytes_rate_across_disks) WHERE entityName = \"1546335201\" AND category = CLUSTER", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-01T09:48:04.003Z", + "value": 189704.53333333333, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(total_bytes_receive_rate_across_network_interfaces)", + "entityName": "cod--qfdcinkqrzw", + "startTime": "2022-12-01T09:43:07.877Z", + "endTime": "2022-12-01T09:48:07.877Z", + "attributes": { + "active": "true", + "clusterDisplayName": "cod--qfdcinkqrzw", + "category": "CLUSTER", + "version": "CDH 7.2.15", + "entityName": "1546335201", + "clusterName": "cod--qfdcinkqrzw" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(total_bytes_receive_rate_across_network_interfaces) WHERE entityName = \"1546335201\" AND category = CLUSTER", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-01T09:48:04.003Z", + "value": 552059.3499999999, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(total_bytes_transmit_rate_across_network_interfaces)", + "entityName": "cod--qfdcinkqrzw", + "startTime": "2022-12-01T09:43:07.877Z", + "endTime": "2022-12-01T09:48:07.877Z", + "attributes": { + "active": "true", + "clusterDisplayName": "cod--qfdcinkqrzw", + "category": "CLUSTER", + "version": "CDH 7.2.15", + "entityName": "1546335201", + "clusterName": "cod--qfdcinkqrzw" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(total_bytes_transmit_rate_across_network_interfaces) WHERE entityName = \"1546335201\" AND category = CLUSTER", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-01T09:48:04.003Z", + "value": 87188.91666666667, + "type": "SAMPLE" + } + ] + } + ], + "warnings": [], + "timeSeriesQuery": "SELECT last(cpu_percent_across_hosts),last(total_read_bytes_rate_across_disks),last(total_write_bytes_rate_across_disks),last(total_bytes_receive_rate_across_network_interfaces),last(total_bytes_transmit_rate_across_network_interfaces) WHERE clusterName=\"cod--qfdcinkqrzw\" AND category=CLUSTER" + } + ] +} \ No newline at end of file diff --git a/cloudera/tests/docker/fixtures/api/v48/timeseries/get_metrics_from_disk b/cloudera/tests/docker/fixtures/api/v48/timeseries/get_metrics_from_disk new file mode 100644 index 0000000000000..96905dda39b7b --- /dev/null +++ b/cloudera/tests/docker/fixtures/api/v48/timeseries/get_metrics_from_disk @@ -0,0 +1,430 @@ +{ + "items": [ + { + "timeSeries": [ + { + "metadata": { + "metricName": "last(service_time)", + "entityName": "nvme0n1p1 (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-02T08:19:51.812Z", + "endTime": "2022-12-02T08:24:51.812Z", + "attributes": { + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d:nvme0n1p1", + "clusterName": "cod--qfdcinkqrzw", + "logicalPartition": "true", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "DISK", + "device": "nvme0n1p1", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "ms" + ], + "unitDenominators": [], + "expression": "SELECT last(service_time) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d:nvme0n1p1\" AND category = DISK", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:24:27.000Z", + "value": 0.4460431654676259, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(service_time)", + "entityName": "nvme1n1 (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-02T08:19:51.812Z", + "endTime": "2022-12-02T08:24:51.812Z", + "attributes": { + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d:nvme1n1", + "clusterName": "cod--qfdcinkqrzw", + "logicalPartition": "false", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "DISK", + "device": "nvme1n1", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "ms" + ], + "unitDenominators": [], + "expression": "SELECT last(service_time) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d:nvme1n1\" AND category = DISK", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:24:27.000Z", + "value": 0.47752808988764045, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(service_time)", + "entityName": "nvme0n1 (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-02T08:19:51.812Z", + "endTime": "2022-12-02T08:24:51.812Z", + "attributes": { + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d:nvme0n1", + "clusterName": "cod--qfdcinkqrzw", + "logicalPartition": "false", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "DISK", + "device": "nvme0n1", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "ms" + ], + "unitDenominators": [], + "expression": "SELECT last(service_time) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d:nvme0n1\" AND category = DISK", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:24:27.000Z", + "value": 0.4460431654676259, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(await_time)", + "entityName": "nvme0n1p1 (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-02T08:19:51.812Z", + "endTime": "2022-12-02T08:24:51.812Z", + "attributes": { + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d:nvme0n1p1", + "clusterName": "cod--qfdcinkqrzw", + "logicalPartition": "true", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "DISK", + "device": "nvme0n1p1", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "ms" + ], + "unitDenominators": [], + "expression": "SELECT last(await_time) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d:nvme0n1p1\" AND category = DISK", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:24:27.000Z", + "value": 0.8705035971223022, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(await_time)", + "entityName": "nvme1n1 (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-02T08:19:51.812Z", + "endTime": "2022-12-02T08:24:51.812Z", + "attributes": { + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d:nvme1n1", + "clusterName": "cod--qfdcinkqrzw", + "logicalPartition": "false", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "DISK", + "device": "nvme1n1", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "ms" + ], + "unitDenominators": [], + "expression": "SELECT last(await_time) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d:nvme1n1\" AND category = DISK", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:24:27.000Z", + "value": 1.4157303370786516, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(await_time)", + "entityName": "nvme0n1 (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-02T08:19:51.812Z", + "endTime": "2022-12-02T08:24:51.812Z", + "attributes": { + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d:nvme0n1", + "clusterName": "cod--qfdcinkqrzw", + "logicalPartition": "false", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "DISK", + "device": "nvme0n1", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "ms" + ], + "unitDenominators": [], + "expression": "SELECT last(await_time) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d:nvme0n1\" AND category = DISK", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:24:27.000Z", + "value": 0.8705035971223022, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(await_read_time)", + "entityName": "nvme0n1p1 (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-02T08:19:51.812Z", + "endTime": "2022-12-02T08:24:51.812Z", + "attributes": { + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d:nvme0n1p1", + "clusterName": "cod--qfdcinkqrzw", + "logicalPartition": "true", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "DISK", + "device": "nvme0n1p1", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "ms" + ], + "unitDenominators": [], + "expression": "SELECT last(await_read_time) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d:nvme0n1p1\" AND category = DISK", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:24:27.000Z", + "value": 0, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(await_read_time)", + "entityName": "nvme1n1 (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-02T08:19:51.812Z", + "endTime": "2022-12-02T08:24:51.812Z", + "attributes": { + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d:nvme1n1", + "clusterName": "cod--qfdcinkqrzw", + "logicalPartition": "false", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "DISK", + "device": "nvme1n1", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "ms" + ], + "unitDenominators": [], + "expression": "SELECT last(await_read_time) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d:nvme1n1\" AND category = DISK", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:24:27.000Z", + "value": 0, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(await_read_time)", + "entityName": "nvme0n1 (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-02T08:19:51.812Z", + "endTime": "2022-12-02T08:24:51.812Z", + "attributes": { + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d:nvme0n1", + "clusterName": "cod--qfdcinkqrzw", + "logicalPartition": "false", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "DISK", + "device": "nvme0n1", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "ms" + ], + "unitDenominators": [], + "expression": "SELECT last(await_read_time) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d:nvme0n1\" AND category = DISK", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:24:27.000Z", + "value": 0, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(await_write_time)", + "entityName": "nvme0n1p1 (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-02T08:19:51.812Z", + "endTime": "2022-12-02T08:24:51.812Z", + "attributes": { + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d:nvme0n1p1", + "clusterName": "cod--qfdcinkqrzw", + "logicalPartition": "true", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "DISK", + "device": "nvme0n1p1", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "ms" + ], + "unitDenominators": [], + "expression": "SELECT last(await_write_time) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d:nvme0n1p1\" AND category = DISK", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:24:27.000Z", + "value": 0.8705035971223022, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(await_write_time)", + "entityName": "nvme1n1 (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-02T08:19:51.812Z", + "endTime": "2022-12-02T08:24:51.812Z", + "attributes": { + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d:nvme1n1", + "clusterName": "cod--qfdcinkqrzw", + "logicalPartition": "false", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "DISK", + "device": "nvme1n1", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "ms" + ], + "unitDenominators": [], + "expression": "SELECT last(await_write_time) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d:nvme1n1\" AND category = DISK", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:24:27.000Z", + "value": 1.4157303370786516, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(await_write_time)", + "entityName": "nvme0n1 (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-02T08:19:51.812Z", + "endTime": "2022-12-02T08:24:51.812Z", + "attributes": { + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d:nvme0n1", + "clusterName": "cod--qfdcinkqrzw", + "logicalPartition": "false", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "DISK", + "device": "nvme0n1", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "ms" + ], + "unitDenominators": [], + "expression": "SELECT last(await_write_time) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d:nvme0n1\" AND category = DISK", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:24:27.000Z", + "value": 0.8705035971223022, + "type": "SAMPLE" + } + ] + } + ], + "warnings": [], + "timeSeriesQuery": "SELECT last(service_time),last(await_time),last(await_read_time),last(await_write_time) WHERE hostId=\"d8623d9457f4db06c5637c4fd4c02f5d\" AND category=DISK" + } + ] +} \ No newline at end of file diff --git a/cloudera/tests/docker/fixtures/api/v48/timeseries/get_metrics_from_host b/cloudera/tests/docker/fixtures/api/v48/timeseries/get_metrics_from_host new file mode 100644 index 0000000000000..d957b0431509d --- /dev/null +++ b/cloudera/tests/docker/fixtures/api/v48/timeseries/get_metrics_from_host @@ -0,0 +1,1044 @@ +{ + "items": [ + { + "timeSeries": [ + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-12-02T08:10:42.925Z", + "endTime": "2022-12-02T08:15:42.925Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:15:27.000Z", + "value": 0.17600000000093133, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-12-02T08:10:42.925Z", + "endTime": "2022-12-02T08:15:42.925Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:15:27.000Z", + "value": 0.03316666666651145, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_nice_rate)", + "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-12-02T08:10:42.925Z", + "endTime": "2022-12-02T08:15:42.925Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_nice_rate) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:15:27.000Z", + "value": 0, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_iowait_rate)", + "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-12-02T08:10:42.925Z", + "endTime": "2022-12-02T08:15:42.925Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_iowait_rate) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:15:27.000Z", + "value": 0.0013333333333321207, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_irq_rate)", + "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-12-02T08:10:42.925Z", + "endTime": "2022-12-02T08:15:42.925Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_irq_rate) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:15:27.000Z", + "value": 0, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_soft_irq_rate)", + "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-12-02T08:10:42.925Z", + "endTime": "2022-12-02T08:15:42.925Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_soft_irq_rate) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:15:27.000Z", + "value": 0.0015000000000024254, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_steal_rate)", + "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-12-02T08:10:42.925Z", + "endTime": "2022-12-02T08:15:42.925Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_steal_rate) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:15:27.000Z", + "value": 0, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(load_1)", + "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-12-02T08:10:42.925Z", + "endTime": "2022-12-02T08:15:42.925Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "load average" + ], + "unitDenominators": [], + "expression": "SELECT last(load_1) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:15:27.000Z", + "value": 0.18, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(load_5)", + "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-12-02T08:10:42.925Z", + "endTime": "2022-12-02T08:15:42.925Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "load average" + ], + "unitDenominators": [], + "expression": "SELECT last(load_5) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:15:27.000Z", + "value": 0.21, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(load_15)", + "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-12-02T08:10:42.925Z", + "endTime": "2022-12-02T08:15:42.925Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "load average" + ], + "unitDenominators": [], + "expression": "SELECT last(load_15) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:15:27.000Z", + "value": 0.24, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(swap_used)", + "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-12-02T08:10:42.925Z", + "endTime": "2022-12-02T08:15:42.925Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(swap_used) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:15:27.000Z", + "value": 0, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(swap_out_rate)", + "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-12-02T08:10:42.925Z", + "endTime": "2022-12-02T08:15:42.925Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "pages" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(swap_out_rate) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:15:27.000Z", + "value": 0, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(physical_memory_used)", + "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-12-02T08:10:42.925Z", + "endTime": "2022-12-02T08:15:42.925Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(physical_memory_used) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:15:27.000Z", + "value": 17950400512, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(physical_memory_total)", + "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-12-02T08:10:42.925Z", + "endTime": "2022-12-02T08:15:42.925Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(physical_memory_total) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:15:27.000Z", + "value": 33079799808, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(physical_memory_cached)", + "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-12-02T08:10:42.925Z", + "endTime": "2022-12-02T08:15:42.925Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(physical_memory_cached) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:15:27.000Z", + "value": 14592753664, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(physical_memory_buffers)", + "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-12-02T08:10:42.925Z", + "endTime": "2022-12-02T08:15:42.925Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(physical_memory_buffers) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:15:27.000Z", + "value": 165232640, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(total_bytes_receive_rate_across_network_interfaces)", + "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-12-02T08:10:42.925Z", + "endTime": "2022-12-02T08:15:42.925Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(total_bytes_receive_rate_across_network_interfaces) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:15:04.129Z", + "value": 436889.36666666664, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(total_bytes_transmit_rate_across_network_interfaces)", + "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-12-02T08:10:42.925Z", + "endTime": "2022-12-02T08:15:42.925Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(total_bytes_transmit_rate_across_network_interfaces) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:15:04.129Z", + "value": 93503.15, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(total_read_bytes_rate_across_disks)", + "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-12-02T08:10:42.925Z", + "endTime": "2022-12-02T08:15:42.925Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(total_read_bytes_rate_across_disks) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:15:04.129Z", + "value": 0, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(total_write_bytes_rate_across_disks)", + "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-12-02T08:10:42.925Z", + "endTime": "2022-12-02T08:15:42.925Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(total_write_bytes_rate_across_disks) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:15:04.129Z", + "value": 139093.33333333334, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(total_read_ios_rate_across_disks)", + "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-12-02T08:10:42.925Z", + "endTime": "2022-12-02T08:15:42.925Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "ios" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(total_read_ios_rate_across_disks) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:15:04.129Z", + "value": 0, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(total_write_ios_rate_across_disks)", + "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-12-02T08:10:42.925Z", + "endTime": "2022-12-02T08:15:42.925Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "ios" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(total_write_ios_rate_across_disks) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:15:04.129Z", + "value": 5.1, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(health_good_rate)", + "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-12-02T08:10:42.925Z", + "endTime": "2022-12-02T08:15:42.925Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(health_good_rate) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:14:53.794Z", + "value": 0.9999999999923079, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(health_concerning_rate)", + "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-12-02T08:10:42.925Z", + "endTime": "2022-12-02T08:15:42.925Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(health_concerning_rate) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:14:53.794Z", + "value": 0, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(health_bad_rate)", + "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-12-02T08:10:42.925Z", + "endTime": "2022-12-02T08:15:42.925Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(health_bad_rate) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:14:53.794Z", + "value": 0, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(health_disabled_rate)", + "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-12-02T08:10:42.925Z", + "endTime": "2022-12-02T08:15:42.925Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(health_disabled_rate) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:14:53.794Z", + "value": 0, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(health_unknown_rate)", + "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-12-02T08:10:42.925Z", + "endTime": "2022-12-02T08:15:42.925Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(health_unknown_rate) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:14:53.794Z", + "value": 0, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(alerts_rate)", + "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-12-02T08:10:42.925Z", + "endTime": "2022-12-02T08:15:42.925Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "events" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(alerts_rate) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:15:38.898Z", + "value": 0, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(events_critical_rate)", + "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-12-02T08:10:42.925Z", + "endTime": "2022-12-02T08:15:42.925Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "events" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(events_critical_rate) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:15:38.898Z", + "value": 0, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(events_important_rate)", + "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "startTime": "2022-12-02T08:10:42.925Z", + "endTime": "2022-12-02T08:15:42.925Z", + "attributes": { + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "clusterDisplayName": "cod--qfdcinkqrzw", + "entityName": "d8623d9457f4db06c5637c4fd4c02f5d", + "clusterName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "category": "HOST", + "version": "CDH 7.2.15", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "events" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(events_important_rate) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:15:38.898Z", + "value": 0, + "type": "SAMPLE" + } + ] + } + ], + "warnings": [], + "timeSeriesQuery": "SELECT last(cpu_user_rate),last(cpu_system_rate),last(cpu_nice_rate),last(cpu_iowait_rate),last(cpu_irq_rate),last(cpu_soft_irq_rate),last(cpu_steal_rate),last(load_1),last(load_5),last(load_15),last(swap_used),last(swap_out_rate),last(physical_memory_used),last(physical_memory_total),last(physical_memory_cached),last(physical_memory_buffers),last(total_bytes_receive_rate_across_network_interfaces),last(total_bytes_transmit_rate_across_network_interfaces),last(total_read_bytes_rate_across_disks),last(total_write_bytes_rate_across_disks),last(total_read_ios_rate_across_disks),last(total_write_ios_rate_across_disks),last(health_good_rate),last(health_concerning_rate),last(health_bad_rate),last(health_disabled_rate),last(health_unknown_rate),last(alerts_rate),last(events_critical_rate),last(events_important_rate) WHERE hostId=\"d8623d9457f4db06c5637c4fd4c02f5d\" AND category=HOST" + } + ] +} \ No newline at end of file diff --git a/cloudera/tests/docker/fixtures/api/v48/timeseries/get_metrics_from_role b/cloudera/tests/docker/fixtures/api/v48/timeseries/get_metrics_from_role new file mode 100644 index 0000000000000..cf87c879cee5c --- /dev/null +++ b/cloudera/tests/docker/fixtures/api/v48/timeseries/get_metrics_from_role @@ -0,0 +1,1242 @@ +{ + "items": [ + { + "timeSeries": [ + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "Event Server (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-02T08:17:28.403Z", + "endTime": "2022-12-02T08:22:28.403Z", + "attributes": { + "serviceType": "MGMT", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "EVENTSERVER", + "roleName": "EVENTSERVER", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "roleConfigGroup": "Event Server Default Group", + "active": "true", + "serviceDisplayName": "MGMT", + "serviceName": "MGMT", + "roleType": "EVENTSERVER", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"EVENTSERVER\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:22:27.000Z", + "value": 1339686912, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "Telemetry Publisher (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-02T08:17:28.403Z", + "endTime": "2022-12-02T08:22:28.403Z", + "attributes": { + "serviceType": "MGMT", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "TELEMETRYPUBLISHER", + "roleName": "TELEMETRYPUBLISHER", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "roleConfigGroup": "Telemetry Publisher Default Group", + "active": "true", + "serviceDisplayName": "MGMT", + "serviceName": "MGMT", + "roleType": "TELEMETRYPUBLISHER", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"TELEMETRYPUBLISHER\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:22:27.000Z", + "value": 1488789504, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "Host Monitor (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-02T08:17:28.403Z", + "endTime": "2022-12-02T08:22:28.403Z", + "attributes": { + "serviceType": "MGMT", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "HOSTMONITOR", + "roleName": "HOSTMONITOR", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "roleConfigGroup": "Host Monitor Default Group", + "active": "true", + "serviceDisplayName": "MGMT", + "serviceName": "MGMT", + "roleType": "HOSTMONITOR", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"HOSTMONITOR\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:22:27.000Z", + "value": 1995448320, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "QUEUEMANAGER_WEBAPP (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-02T08:17:28.403Z", + "endTime": "2022-12-02T08:22:28.403Z", + "attributes": { + "serviceType": "QUEUEMANAGER", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "serviceDisplayName": "queuemanager", + "serviceName": "queuemanager", + "roleType": "QUEUEMANAGER_WEBAPP", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "queuc8af8526-QUEUEMANAGER_WEBAPP-7d0b6bba5cf23b4729586ee8d35ab76", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "queuc8af8526-QUEUEMANAGER_WEBAPP-7d0b6bba5cf23b4729586ee8d35ab76", + "roleConfigGroup": "YARN Queue Manager Webapp Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"queuc8af8526-QUEUEMANAGER_WEBAPP-7d0b6bba5cf23b4729586ee8d35ab76\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:22:28.000Z", + "value": 279879680, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "Load Balancer (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-02T08:17:28.403Z", + "endTime": "2022-12-02T08:22:28.403Z", + "attributes": { + "serviceType": "HUE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "serviceDisplayName": "hue", + "serviceName": "hue", + "roleType": "HUE_LOAD_BALANCER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hue-HUE_LOAD_BALANCER-7d0b6bba5cf23b4729586ee8d35ab766", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hue-HUE_LOAD_BALANCER-7d0b6bba5cf23b4729586ee8d35ab766", + "roleConfigGroup": "Load Balancer Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"hue-HUE_LOAD_BALANCER-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "Kerberos Ticket Renewer (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-02T08:17:28.403Z", + "endTime": "2022-12-02T08:22:28.403Z", + "attributes": { + "serviceType": "HUE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "serviceDisplayName": "hue", + "serviceName": "hue", + "roleType": "KT_RENEWER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hue-KT_RENEWER-7d0b6bba5cf23b4729586ee8d35ab766", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hue-KT_RENEWER-7d0b6bba5cf23b4729586ee8d35ab766", + "roleConfigGroup": "Kerberos Ticket Renewer Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"hue-KT_RENEWER-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "Hue Server (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-02T08:17:28.403Z", + "endTime": "2022-12-02T08:22:28.403Z", + "attributes": { + "serviceType": "HUE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "serviceDisplayName": "hue", + "serviceName": "hue", + "roleType": "HUE_SERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hue-HUE_SERVER-7d0b6bba5cf23b4729586ee8d35ab766", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hue-HUE_SERVER-7d0b6bba5cf23b4729586ee8d35ab766", + "roleConfigGroup": "Hue Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"hue-HUE_SERVER-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "QUEUEMANAGER_STORE (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-02T08:17:28.403Z", + "endTime": "2022-12-02T08:22:28.403Z", + "attributes": { + "serviceType": "QUEUEMANAGER", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "serviceDisplayName": "queuemanager", + "serviceName": "queuemanager", + "roleType": "QUEUEMANAGER_STORE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "queuemanager-QUEUEMANAGER_STORE-7d0b6bba5cf23b4729586ee8d35ab766", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "queuemanager-QUEUEMANAGER_STORE-7d0b6bba5cf23b4729586ee8d35ab766", + "roleConfigGroup": "YARN Queue Manager Store Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"queuemanager-QUEUEMANAGER_STORE-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:22:28.000Z", + "value": 988344320, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "KNOX_GATEWAY (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-02T08:17:28.403Z", + "endTime": "2022-12-02T08:22:28.403Z", + "attributes": { + "serviceType": "KNOX", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "serviceDisplayName": "Knox", + "serviceName": "knox-e428", + "roleType": "KNOX_GATEWAY", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "knox-e428-KNOX_GATEWAY-7d0b6bba5cf23b4729586ee8d35ab766", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "knox-e428-KNOX_GATEWAY-7d0b6bba5cf23b4729586ee8d35ab766", + "roleConfigGroup": "Knox Gateway Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"knox-e428-KNOX_GATEWAY-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:22:28.000Z", + "value": 961654784, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "Service Monitor (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-02T08:17:28.403Z", + "endTime": "2022-12-02T08:22:28.403Z", + "attributes": { + "serviceType": "MGMT", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "SERVICEMONITOR", + "roleName": "SERVICEMONITOR", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "roleConfigGroup": "Service Monitor Default Group", + "active": "true", + "serviceDisplayName": "MGMT", + "serviceName": "MGMT", + "roleType": "SERVICEMONITOR", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"SERVICEMONITOR\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:22:27.000Z", + "value": 3119345664, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "Alert Publisher (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-02T08:17:28.403Z", + "endTime": "2022-12-02T08:22:28.403Z", + "attributes": { + "serviceType": "MGMT", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "ALERTPUBLISHER", + "roleName": "ALERTPUBLISHER", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "roleConfigGroup": "Alert Publisher Default Group", + "active": "true", + "serviceDisplayName": "MGMT", + "serviceName": "MGMT", + "roleType": "ALERTPUBLISHER", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) WHERE entityName = \"ALERTPUBLISHER\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:22:28.000Z", + "value": 283766784, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "Event Server (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-02T08:17:28.403Z", + "endTime": "2022-12-02T08:22:28.403Z", + "attributes": { + "serviceType": "MGMT", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "EVENTSERVER", + "roleName": "EVENTSERVER", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "roleConfigGroup": "Event Server Default Group", + "active": "true", + "serviceDisplayName": "MGMT", + "serviceName": "MGMT", + "roleType": "EVENTSERVER", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) WHERE entityName = \"EVENTSERVER\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:22:27.000Z", + "value": 0.004000000000026678, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "Telemetry Publisher (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-02T08:17:28.403Z", + "endTime": "2022-12-02T08:22:28.403Z", + "attributes": { + "serviceType": "MGMT", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "TELEMETRYPUBLISHER", + "roleName": "TELEMETRYPUBLISHER", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "roleConfigGroup": "Telemetry Publisher Default Group", + "active": "true", + "serviceDisplayName": "MGMT", + "serviceName": "MGMT", + "roleType": "TELEMETRYPUBLISHER", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) WHERE entityName = \"TELEMETRYPUBLISHER\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:22:27.000Z", + "value": 0.07033333333335273, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "Host Monitor (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-02T08:17:28.403Z", + "endTime": "2022-12-02T08:22:28.403Z", + "attributes": { + "serviceType": "MGMT", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "HOSTMONITOR", + "roleName": "HOSTMONITOR", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "roleConfigGroup": "Host Monitor Default Group", + "active": "true", + "serviceDisplayName": "MGMT", + "serviceName": "MGMT", + "roleType": "HOSTMONITOR", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) WHERE entityName = \"HOSTMONITOR\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:22:27.000Z", + "value": 0.02950000000006791, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "QUEUEMANAGER_WEBAPP (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-02T08:17:28.403Z", + "endTime": "2022-12-02T08:22:28.403Z", + "attributes": { + "serviceType": "QUEUEMANAGER", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "serviceDisplayName": "queuemanager", + "serviceName": "queuemanager", + "roleType": "QUEUEMANAGER_WEBAPP", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "queuc8af8526-QUEUEMANAGER_WEBAPP-7d0b6bba5cf23b4729586ee8d35ab76", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "queuc8af8526-QUEUEMANAGER_WEBAPP-7d0b6bba5cf23b4729586ee8d35ab76", + "roleConfigGroup": "YARN Queue Manager Webapp Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) WHERE entityName = \"queuc8af8526-QUEUEMANAGER_WEBAPP-7d0b6bba5cf23b4729586ee8d35ab76\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:22:28.000Z", + "value": 0.0001666666666665151, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "Load Balancer (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-02T08:17:28.403Z", + "endTime": "2022-12-02T08:22:28.403Z", + "attributes": { + "serviceType": "HUE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "serviceDisplayName": "hue", + "serviceName": "hue", + "roleType": "HUE_LOAD_BALANCER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hue-HUE_LOAD_BALANCER-7d0b6bba5cf23b4729586ee8d35ab766", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hue-HUE_LOAD_BALANCER-7d0b6bba5cf23b4729586ee8d35ab766", + "roleConfigGroup": "Load Balancer Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) WHERE entityName = \"hue-HUE_LOAD_BALANCER-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "Kerberos Ticket Renewer (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-02T08:17:28.403Z", + "endTime": "2022-12-02T08:22:28.403Z", + "attributes": { + "serviceType": "HUE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "serviceDisplayName": "hue", + "serviceName": "hue", + "roleType": "KT_RENEWER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hue-KT_RENEWER-7d0b6bba5cf23b4729586ee8d35ab766", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hue-KT_RENEWER-7d0b6bba5cf23b4729586ee8d35ab766", + "roleConfigGroup": "Kerberos Ticket Renewer Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) WHERE entityName = \"hue-KT_RENEWER-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "Hue Server (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-02T08:17:28.403Z", + "endTime": "2022-12-02T08:22:28.403Z", + "attributes": { + "serviceType": "HUE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "serviceDisplayName": "hue", + "serviceName": "hue", + "roleType": "HUE_SERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hue-HUE_SERVER-7d0b6bba5cf23b4729586ee8d35ab766", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hue-HUE_SERVER-7d0b6bba5cf23b4729586ee8d35ab766", + "roleConfigGroup": "Hue Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) WHERE entityName = \"hue-HUE_SERVER-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "QUEUEMANAGER_STORE (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-02T08:17:28.403Z", + "endTime": "2022-12-02T08:22:28.403Z", + "attributes": { + "serviceType": "QUEUEMANAGER", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "serviceDisplayName": "queuemanager", + "serviceName": "queuemanager", + "roleType": "QUEUEMANAGER_STORE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "queuemanager-QUEUEMANAGER_STORE-7d0b6bba5cf23b4729586ee8d35ab766", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "queuemanager-QUEUEMANAGER_STORE-7d0b6bba5cf23b4729586ee8d35ab766", + "roleConfigGroup": "YARN Queue Manager Store Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) WHERE entityName = \"queuemanager-QUEUEMANAGER_STORE-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:22:28.000Z", + "value": 0.0006666666666660604, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "KNOX_GATEWAY (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-02T08:17:28.403Z", + "endTime": "2022-12-02T08:22:28.403Z", + "attributes": { + "serviceType": "KNOX", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "serviceDisplayName": "Knox", + "serviceName": "knox-e428", + "roleType": "KNOX_GATEWAY", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "knox-e428-KNOX_GATEWAY-7d0b6bba5cf23b4729586ee8d35ab766", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "knox-e428-KNOX_GATEWAY-7d0b6bba5cf23b4729586ee8d35ab766", + "roleConfigGroup": "Knox Gateway Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) WHERE entityName = \"knox-e428-KNOX_GATEWAY-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:22:28.000Z", + "value": 0.0013333333333321207, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "Service Monitor (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-02T08:17:28.403Z", + "endTime": "2022-12-02T08:22:28.403Z", + "attributes": { + "serviceType": "MGMT", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "SERVICEMONITOR", + "roleName": "SERVICEMONITOR", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "roleConfigGroup": "Service Monitor Default Group", + "active": "true", + "serviceDisplayName": "MGMT", + "serviceName": "MGMT", + "roleType": "SERVICEMONITOR", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) WHERE entityName = \"SERVICEMONITOR\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:22:27.000Z", + "value": 0.08650000000003881, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "Alert Publisher (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-02T08:17:28.403Z", + "endTime": "2022-12-02T08:22:28.403Z", + "attributes": { + "serviceType": "MGMT", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "ALERTPUBLISHER", + "roleName": "ALERTPUBLISHER", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "roleConfigGroup": "Alert Publisher Default Group", + "active": "true", + "serviceDisplayName": "MGMT", + "serviceName": "MGMT", + "roleType": "ALERTPUBLISHER", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) WHERE entityName = \"ALERTPUBLISHER\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:22:28.000Z", + "value": 0.0005000000000033348, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "Event Server (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-02T08:17:28.403Z", + "endTime": "2022-12-02T08:22:28.403Z", + "attributes": { + "serviceType": "MGMT", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "EVENTSERVER", + "roleName": "EVENTSERVER", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "roleConfigGroup": "Event Server Default Group", + "active": "true", + "serviceDisplayName": "MGMT", + "serviceName": "MGMT", + "roleType": "EVENTSERVER", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"EVENTSERVER\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:22:27.000Z", + "value": 0.0010000000000066696, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "Telemetry Publisher (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-02T08:17:28.403Z", + "endTime": "2022-12-02T08:22:28.403Z", + "attributes": { + "serviceType": "MGMT", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "TELEMETRYPUBLISHER", + "roleName": "TELEMETRYPUBLISHER", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "roleConfigGroup": "Telemetry Publisher Default Group", + "active": "true", + "serviceDisplayName": "MGMT", + "serviceName": "MGMT", + "roleType": "TELEMETRYPUBLISHER", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"TELEMETRYPUBLISHER\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:22:27.000Z", + "value": 0.002833333333334546, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "Host Monitor (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-02T08:17:28.403Z", + "endTime": "2022-12-02T08:22:28.403Z", + "attributes": { + "serviceType": "MGMT", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "HOSTMONITOR", + "roleName": "HOSTMONITOR", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "roleConfigGroup": "Host Monitor Default Group", + "active": "true", + "serviceDisplayName": "MGMT", + "serviceName": "MGMT", + "roleType": "HOSTMONITOR", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"HOSTMONITOR\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:22:27.000Z", + "value": 0.004833333333347885, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "QUEUEMANAGER_WEBAPP (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-02T08:17:28.403Z", + "endTime": "2022-12-02T08:22:28.403Z", + "attributes": { + "serviceType": "QUEUEMANAGER", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "serviceDisplayName": "queuemanager", + "serviceName": "queuemanager", + "roleType": "QUEUEMANAGER_WEBAPP", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "queuc8af8526-QUEUEMANAGER_WEBAPP-7d0b6bba5cf23b4729586ee8d35ab76", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "queuc8af8526-QUEUEMANAGER_WEBAPP-7d0b6bba5cf23b4729586ee8d35ab76", + "roleConfigGroup": "YARN Queue Manager Webapp Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"queuc8af8526-QUEUEMANAGER_WEBAPP-7d0b6bba5cf23b4729586ee8d35ab76\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:22:28.000Z", + "value": 0.00016666666666675193, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "Load Balancer (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-02T08:17:28.403Z", + "endTime": "2022-12-02T08:22:28.403Z", + "attributes": { + "serviceType": "HUE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "serviceDisplayName": "hue", + "serviceName": "hue", + "roleType": "HUE_LOAD_BALANCER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hue-HUE_LOAD_BALANCER-7d0b6bba5cf23b4729586ee8d35ab766", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hue-HUE_LOAD_BALANCER-7d0b6bba5cf23b4729586ee8d35ab766", + "roleConfigGroup": "Load Balancer Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hue-HUE_LOAD_BALANCER-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "Kerberos Ticket Renewer (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-02T08:17:28.403Z", + "endTime": "2022-12-02T08:22:28.403Z", + "attributes": { + "serviceType": "HUE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "serviceDisplayName": "hue", + "serviceName": "hue", + "roleType": "KT_RENEWER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hue-KT_RENEWER-7d0b6bba5cf23b4729586ee8d35ab766", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hue-KT_RENEWER-7d0b6bba5cf23b4729586ee8d35ab766", + "roleConfigGroup": "Kerberos Ticket Renewer Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hue-KT_RENEWER-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "Hue Server (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-02T08:17:28.403Z", + "endTime": "2022-12-02T08:22:28.403Z", + "attributes": { + "serviceType": "HUE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "serviceDisplayName": "hue", + "serviceName": "hue", + "roleType": "HUE_SERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hue-HUE_SERVER-7d0b6bba5cf23b4729586ee8d35ab766", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hue-HUE_SERVER-7d0b6bba5cf23b4729586ee8d35ab766", + "roleConfigGroup": "Hue Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hue-HUE_SERVER-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "QUEUEMANAGER_STORE (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-02T08:17:28.403Z", + "endTime": "2022-12-02T08:22:28.403Z", + "attributes": { + "serviceType": "QUEUEMANAGER", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "serviceDisplayName": "queuemanager", + "serviceName": "queuemanager", + "roleType": "QUEUEMANAGER_STORE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "queuemanager-QUEUEMANAGER_STORE-7d0b6bba5cf23b4729586ee8d35ab766", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "queuemanager-QUEUEMANAGER_STORE-7d0b6bba5cf23b4729586ee8d35ab766", + "roleConfigGroup": "YARN Queue Manager Store Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"queuemanager-QUEUEMANAGER_STORE-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:22:28.000Z", + "value": 0.0001666666666665151, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "KNOX_GATEWAY (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-02T08:17:28.403Z", + "endTime": "2022-12-02T08:22:28.403Z", + "attributes": { + "serviceType": "KNOX", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "serviceDisplayName": "Knox", + "serviceName": "knox-e428", + "roleType": "KNOX_GATEWAY", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "knox-e428-KNOX_GATEWAY-7d0b6bba5cf23b4729586ee8d35ab766", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "knox-e428-KNOX_GATEWAY-7d0b6bba5cf23b4729586ee8d35ab766", + "roleConfigGroup": "Knox Gateway Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"knox-e428-KNOX_GATEWAY-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:22:28.000Z", + "value": 0.0004999999999995453, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "Service Monitor (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-02T08:17:28.403Z", + "endTime": "2022-12-02T08:22:28.403Z", + "attributes": { + "serviceType": "MGMT", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "SERVICEMONITOR", + "roleName": "SERVICEMONITOR", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "roleConfigGroup": "Service Monitor Default Group", + "active": "true", + "serviceDisplayName": "MGMT", + "serviceName": "MGMT", + "roleType": "SERVICEMONITOR", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"SERVICEMONITOR\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:22:27.000Z", + "value": 0.0076666666666521145, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "Alert Publisher (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-02T08:17:28.403Z", + "endTime": "2022-12-02T08:22:28.403Z", + "attributes": { + "serviceType": "MGMT", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "ALERTPUBLISHER", + "roleName": "ALERTPUBLISHER", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "roleConfigGroup": "Alert Publisher Default Group", + "active": "true", + "serviceDisplayName": "MGMT", + "serviceName": "MGMT", + "roleType": "ALERTPUBLISHER", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"ALERTPUBLISHER\" AND category = ROLE", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-02T08:22:28.000Z", + "value": 0.0003333333333330302, + "type": "SAMPLE" + } + ] + } + ], + "warnings": [], + "timeSeriesQuery": "SELECT last(mem_rss),last(cpu_user_rate),last(cpu_system_rate) WHERE hostId=\"d8623d9457f4db06c5637c4fd4c02f5d\" AND category=ROLE" + } + ] +} \ No newline at end of file diff --git a/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(await_time)&to=now b/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(await_time)&to=now deleted file mode 100644 index e44b5b19f3610..0000000000000 --- a/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(await_time)&to=now +++ /dev/null @@ -1,955 +0,0 @@ -{ - "items": [ - { - "timeSeries": [ - { - "metadata": { - "metricName": "last(await_time)", - "entityName": "nvme0n1p1 (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:49:47.846Z", - "endTime": "2022-11-29T04:54:47.846Z", - "attributes": { - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "96efbf3e7279bf25ae44fe0a6398ee97:nvme0n1p1", - "clusterName": "cod--qfdcinkqrzw", - "logicalPartition": "true", - "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", - "active": "true", - "category": "DISK", - "device": "nvme0n1p1", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1a" - }, - "unitNumerators": [ - "ms" - ], - "unitDenominators": [], - "expression": "SELECT last(await_time) WHERE entityName = \"96efbf3e7279bf25ae44fe0a6398ee97:nvme0n1p1\" AND category = DISK", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:54:09.000Z", - "value": 0.3150684931506849, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(await_time)", - "entityName": "nvme0n1p1 (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:49:47.846Z", - "endTime": "2022-11-29T04:54:47.846Z", - "attributes": { - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "759451867dfde961d6adbeb21d9c13f9:nvme0n1p1", - "clusterName": "cod--qfdcinkqrzw", - "logicalPartition": "true", - "hostId": "759451867dfde961d6adbeb21d9c13f9", - "active": "true", - "category": "DISK", - "device": "nvme0n1p1", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "ms" - ], - "unitDenominators": [], - "expression": "SELECT last(await_time) WHERE entityName = \"759451867dfde961d6adbeb21d9c13f9:nvme0n1p1\" AND category = DISK", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:54:43.000Z", - "value": 0.15789473684210525, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(await_time)", - "entityName": "nvme0n1p1 (cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:49:47.846Z", - "endTime": "2022-11-29T04:54:47.846Z", - "attributes": { - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "49adda80d1b98e9262ee146fd7fd798b:nvme0n1p1", - "clusterName": "cod--qfdcinkqrzw", - "logicalPartition": "true", - "hostId": "49adda80d1b98e9262ee146fd7fd798b", - "active": "true", - "category": "DISK", - "device": "nvme0n1p1", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "ms" - ], - "unitDenominators": [], - "expression": "SELECT last(await_time) WHERE entityName = \"49adda80d1b98e9262ee146fd7fd798b:nvme0n1p1\" AND category = DISK", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:54:23.000Z", - "value": 0.46774193548387094, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(await_time)", - "entityName": "nvme0n1 (cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:49:47.846Z", - "endTime": "2022-11-29T04:54:47.846Z", - "attributes": { - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "22f6ab659c835d47bc13d6c8f3370110:nvme0n1", - "clusterName": "cod--qfdcinkqrzw", - "logicalPartition": "false", - "hostId": "22f6ab659c835d47bc13d6c8f3370110", - "active": "true", - "category": "DISK", - "device": "nvme0n1", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "ms" - ], - "unitDenominators": [], - "expression": "SELECT last(await_time) WHERE entityName = \"22f6ab659c835d47bc13d6c8f3370110:nvme0n1\" AND category = DISK", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:54:24.000Z", - "value": 0.12, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(await_time)", - "entityName": "nvme0n1 (cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:49:47.846Z", - "endTime": "2022-11-29T04:54:47.846Z", - "attributes": { - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "ed528836ae33e47e6657b95373571c33:nvme0n1", - "clusterName": "cod--qfdcinkqrzw", - "logicalPartition": "false", - "hostId": "ed528836ae33e47e6657b95373571c33", - "active": "true", - "category": "DISK", - "device": "nvme0n1", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "ms" - ], - "unitDenominators": [], - "expression": "SELECT last(await_time) WHERE entityName = \"ed528836ae33e47e6657b95373571c33:nvme0n1\" AND category = DISK", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:54:22.000Z", - "value": 0.48148148148148145, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(await_time)", - "entityName": "nvme1n1 (cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:49:47.846Z", - "endTime": "2022-11-29T04:54:47.846Z", - "attributes": { - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "ed528836ae33e47e6657b95373571c33:nvme1n1", - "clusterName": "cod--qfdcinkqrzw", - "logicalPartition": "false", - "hostId": "ed528836ae33e47e6657b95373571c33", - "active": "true", - "category": "DISK", - "device": "nvme1n1", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "ms" - ], - "unitDenominators": [], - "expression": "SELECT last(await_time) WHERE entityName = \"ed528836ae33e47e6657b95373571c33:nvme1n1\" AND category = DISK", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:54:22.000Z", - "value": 0, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(await_time)", - "entityName": "nvme0n1 (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:49:47.846Z", - "endTime": "2022-11-29T04:54:47.846Z", - "attributes": { - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "96efbf3e7279bf25ae44fe0a6398ee97:nvme0n1", - "clusterName": "cod--qfdcinkqrzw", - "logicalPartition": "false", - "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", - "active": "true", - "category": "DISK", - "device": "nvme0n1", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1a" - }, - "unitNumerators": [ - "ms" - ], - "unitDenominators": [], - "expression": "SELECT last(await_time) WHERE entityName = \"96efbf3e7279bf25ae44fe0a6398ee97:nvme0n1\" AND category = DISK", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:54:09.000Z", - "value": 0.3150684931506849, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(await_time)", - "entityName": "nvme0n1p1 (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:49:47.846Z", - "endTime": "2022-11-29T04:54:47.846Z", - "attributes": { - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "119115ab851aefe1429860d4255b3fab:nvme0n1p1", - "clusterName": "cod--qfdcinkqrzw", - "logicalPartition": "true", - "hostId": "119115ab851aefe1429860d4255b3fab", - "active": "true", - "category": "DISK", - "device": "nvme0n1p1", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "ms" - ], - "unitDenominators": [], - "expression": "SELECT last(await_time) WHERE entityName = \"119115ab851aefe1429860d4255b3fab:nvme0n1p1\" AND category = DISK", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:53:50.000Z", - "value": 0.40540540540540543, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(await_time)", - "entityName": "nvme0n1p1 (cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:49:47.846Z", - "endTime": "2022-11-29T04:54:47.846Z", - "attributes": { - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "9784d85849c7179b790d476c483fd905:nvme0n1p1", - "clusterName": "cod--qfdcinkqrzw", - "logicalPartition": "true", - "hostId": "9784d85849c7179b790d476c483fd905", - "active": "true", - "category": "DISK", - "device": "nvme0n1p1", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "ms" - ], - "unitDenominators": [], - "expression": "SELECT last(await_time) WHERE entityName = \"9784d85849c7179b790d476c483fd905:nvme0n1p1\" AND category = DISK", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:54:22.000Z", - "value": 0.4107142857142857, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(await_time)", - "entityName": "nvme1n1 (cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:49:47.846Z", - "endTime": "2022-11-29T04:54:47.846Z", - "attributes": { - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "22f6ab659c835d47bc13d6c8f3370110:nvme1n1", - "clusterName": "cod--qfdcinkqrzw", - "logicalPartition": "false", - "hostId": "22f6ab659c835d47bc13d6c8f3370110", - "active": "true", - "category": "DISK", - "device": "nvme1n1", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "ms" - ], - "unitDenominators": [], - "expression": "SELECT last(await_time) WHERE entityName = \"22f6ab659c835d47bc13d6c8f3370110:nvme1n1\" AND category = DISK", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:54:24.000Z", - "value": 1, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(await_time)", - "entityName": "nvme1n1 (cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:49:47.846Z", - "endTime": "2022-11-29T04:54:47.846Z", - "attributes": { - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "88ae2611748383b5628d4aec94873da9:nvme1n1", - "clusterName": "cod--qfdcinkqrzw", - "logicalPartition": "false", - "hostId": "88ae2611748383b5628d4aec94873da9", - "active": "true", - "category": "DISK", - "device": "nvme1n1", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1a" - }, - "unitNumerators": [ - "ms" - ], - "unitDenominators": [], - "expression": "SELECT last(await_time) WHERE entityName = \"88ae2611748383b5628d4aec94873da9:nvme1n1\" AND category = DISK", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:54:23.000Z", - "value": 0.6666666666666666, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(await_time)", - "entityName": "nvme0n1 (cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:49:47.846Z", - "endTime": "2022-11-29T04:54:47.846Z", - "attributes": { - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "88ae2611748383b5628d4aec94873da9:nvme0n1", - "clusterName": "cod--qfdcinkqrzw", - "logicalPartition": "false", - "hostId": "88ae2611748383b5628d4aec94873da9", - "active": "true", - "category": "DISK", - "device": "nvme0n1", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1a" - }, - "unitNumerators": [ - "ms" - ], - "unitDenominators": [], - "expression": "SELECT last(await_time) WHERE entityName = \"88ae2611748383b5628d4aec94873da9:nvme0n1\" AND category = DISK", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:54:23.000Z", - "value": 0.3157894736842105, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(await_time)", - "entityName": "nvme1n1 (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:49:47.846Z", - "endTime": "2022-11-29T04:54:47.846Z", - "attributes": { - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "96efbf3e7279bf25ae44fe0a6398ee97:nvme1n1", - "clusterName": "cod--qfdcinkqrzw", - "logicalPartition": "false", - "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", - "active": "true", - "category": "DISK", - "device": "nvme1n1", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1a" - }, - "unitNumerators": [ - "ms" - ], - "unitDenominators": [], - "expression": "SELECT last(await_time) WHERE entityName = \"96efbf3e7279bf25ae44fe0a6398ee97:nvme1n1\" AND category = DISK", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:54:09.000Z", - "value": 0.8947368421052632, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(await_time)", - "entityName": "nvme0n1p1 (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:49:47.846Z", - "endTime": "2022-11-29T04:54:47.846Z", - "attributes": { - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "d8623d9457f4db06c5637c4fd4c02f5d:nvme0n1p1", - "clusterName": "cod--qfdcinkqrzw", - "logicalPartition": "true", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "active": "true", - "category": "DISK", - "device": "nvme0n1p1", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "ms" - ], - "unitDenominators": [], - "expression": "SELECT last(await_time) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d:nvme0n1p1\" AND category = DISK", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:54:25.000Z", - "value": 0.9731543624161074, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(await_time)", - "entityName": "nvme1n1 (cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:49:47.846Z", - "endTime": "2022-11-29T04:54:47.846Z", - "attributes": { - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "9784d85849c7179b790d476c483fd905:nvme1n1", - "clusterName": "cod--qfdcinkqrzw", - "logicalPartition": "false", - "hostId": "9784d85849c7179b790d476c483fd905", - "active": "true", - "category": "DISK", - "device": "nvme1n1", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "ms" - ], - "unitDenominators": [], - "expression": "SELECT last(await_time) WHERE entityName = \"9784d85849c7179b790d476c483fd905:nvme1n1\" AND category = DISK", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:54:22.000Z", - "value": 0.8333333333333334, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(await_time)", - "entityName": "nvme1n1 (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:49:47.846Z", - "endTime": "2022-11-29T04:54:47.846Z", - "attributes": { - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "d8623d9457f4db06c5637c4fd4c02f5d:nvme1n1", - "clusterName": "cod--qfdcinkqrzw", - "logicalPartition": "false", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "active": "true", - "category": "DISK", - "device": "nvme1n1", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "ms" - ], - "unitDenominators": [], - "expression": "SELECT last(await_time) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d:nvme1n1\" AND category = DISK", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:54:25.000Z", - "value": 1.8879310344827587, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(await_time)", - "entityName": "nvme0n1 (cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:49:47.846Z", - "endTime": "2022-11-29T04:54:47.846Z", - "attributes": { - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "9784d85849c7179b790d476c483fd905:nvme0n1", - "clusterName": "cod--qfdcinkqrzw", - "logicalPartition": "false", - "hostId": "9784d85849c7179b790d476c483fd905", - "active": "true", - "category": "DISK", - "device": "nvme0n1", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "ms" - ], - "unitDenominators": [], - "expression": "SELECT last(await_time) WHERE entityName = \"9784d85849c7179b790d476c483fd905:nvme0n1\" AND category = DISK", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:54:22.000Z", - "value": 0.4107142857142857, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(await_time)", - "entityName": "nvme0n1 (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:49:47.846Z", - "endTime": "2022-11-29T04:54:47.846Z", - "attributes": { - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "d8623d9457f4db06c5637c4fd4c02f5d:nvme0n1", - "clusterName": "cod--qfdcinkqrzw", - "logicalPartition": "false", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "active": "true", - "category": "DISK", - "device": "nvme0n1", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "ms" - ], - "unitDenominators": [], - "expression": "SELECT last(await_time) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d:nvme0n1\" AND category = DISK", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:54:25.000Z", - "value": 0.9731543624161074, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(await_time)", - "entityName": "nvme1n1 (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:49:47.846Z", - "endTime": "2022-11-29T04:54:47.846Z", - "attributes": { - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "759451867dfde961d6adbeb21d9c13f9:nvme1n1", - "clusterName": "cod--qfdcinkqrzw", - "logicalPartition": "false", - "hostId": "759451867dfde961d6adbeb21d9c13f9", - "active": "true", - "category": "DISK", - "device": "nvme1n1", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "ms" - ], - "unitDenominators": [], - "expression": "SELECT last(await_time) WHERE entityName = \"759451867dfde961d6adbeb21d9c13f9:nvme1n1\" AND category = DISK", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:54:43.000Z", - "value": 0.8095238095238095, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(await_time)", - "entityName": "nvme0n1 (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:49:47.846Z", - "endTime": "2022-11-29T04:54:47.846Z", - "attributes": { - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "759451867dfde961d6adbeb21d9c13f9:nvme0n1", - "clusterName": "cod--qfdcinkqrzw", - "logicalPartition": "false", - "hostId": "759451867dfde961d6adbeb21d9c13f9", - "active": "true", - "category": "DISK", - "device": "nvme0n1", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "ms" - ], - "unitDenominators": [], - "expression": "SELECT last(await_time) WHERE entityName = \"759451867dfde961d6adbeb21d9c13f9:nvme0n1\" AND category = DISK", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:54:43.000Z", - "value": 0.15789473684210525, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(await_time)", - "entityName": "nvme0n1p1 (cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:49:47.846Z", - "endTime": "2022-11-29T04:54:47.846Z", - "attributes": { - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "22f6ab659c835d47bc13d6c8f3370110:nvme0n1p1", - "clusterName": "cod--qfdcinkqrzw", - "logicalPartition": "true", - "hostId": "22f6ab659c835d47bc13d6c8f3370110", - "active": "true", - "category": "DISK", - "device": "nvme0n1p1", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "ms" - ], - "unitDenominators": [], - "expression": "SELECT last(await_time) WHERE entityName = \"22f6ab659c835d47bc13d6c8f3370110:nvme0n1p1\" AND category = DISK", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:54:24.000Z", - "value": 0.12, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(await_time)", - "entityName": "nvme0n1p1 (cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:49:47.846Z", - "endTime": "2022-11-29T04:54:47.846Z", - "attributes": { - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "88ae2611748383b5628d4aec94873da9:nvme0n1p1", - "clusterName": "cod--qfdcinkqrzw", - "logicalPartition": "true", - "hostId": "88ae2611748383b5628d4aec94873da9", - "active": "true", - "category": "DISK", - "device": "nvme0n1p1", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1a" - }, - "unitNumerators": [ - "ms" - ], - "unitDenominators": [], - "expression": "SELECT last(await_time) WHERE entityName = \"88ae2611748383b5628d4aec94873da9:nvme0n1p1\" AND category = DISK", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:54:23.000Z", - "value": 0.3157894736842105, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(await_time)", - "entityName": "nvme1n1 (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:49:47.846Z", - "endTime": "2022-11-29T04:54:47.846Z", - "attributes": { - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "119115ab851aefe1429860d4255b3fab:nvme1n1", - "clusterName": "cod--qfdcinkqrzw", - "logicalPartition": "false", - "hostId": "119115ab851aefe1429860d4255b3fab", - "active": "true", - "category": "DISK", - "device": "nvme1n1", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "ms" - ], - "unitDenominators": [], - "expression": "SELECT last(await_time) WHERE entityName = \"119115ab851aefe1429860d4255b3fab:nvme1n1\" AND category = DISK", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:53:50.000Z", - "value": 1.0952380952380953, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(await_time)", - "entityName": "nvme0n1 (cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:49:47.846Z", - "endTime": "2022-11-29T04:54:47.846Z", - "attributes": { - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "49adda80d1b98e9262ee146fd7fd798b:nvme0n1", - "clusterName": "cod--qfdcinkqrzw", - "logicalPartition": "false", - "hostId": "49adda80d1b98e9262ee146fd7fd798b", - "active": "true", - "category": "DISK", - "device": "nvme0n1", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "ms" - ], - "unitDenominators": [], - "expression": "SELECT last(await_time) WHERE entityName = \"49adda80d1b98e9262ee146fd7fd798b:nvme0n1\" AND category = DISK", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:54:23.000Z", - "value": 0.46774193548387094, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(await_time)", - "entityName": "nvme1n1 (cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:49:47.846Z", - "endTime": "2022-11-29T04:54:47.846Z", - "attributes": { - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "49adda80d1b98e9262ee146fd7fd798b:nvme1n1", - "clusterName": "cod--qfdcinkqrzw", - "logicalPartition": "false", - "hostId": "49adda80d1b98e9262ee146fd7fd798b", - "active": "true", - "category": "DISK", - "device": "nvme1n1", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "ms" - ], - "unitDenominators": [], - "expression": "SELECT last(await_time) WHERE entityName = \"49adda80d1b98e9262ee146fd7fd798b:nvme1n1\" AND category = DISK", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:54:23.000Z", - "value": 0, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(await_time)", - "entityName": "nvme0n1p1 (cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:49:47.846Z", - "endTime": "2022-11-29T04:54:47.846Z", - "attributes": { - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "ed528836ae33e47e6657b95373571c33:nvme0n1p1", - "clusterName": "cod--qfdcinkqrzw", - "logicalPartition": "true", - "hostId": "ed528836ae33e47e6657b95373571c33", - "active": "true", - "category": "DISK", - "device": "nvme0n1p1", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "ms" - ], - "unitDenominators": [], - "expression": "SELECT last(await_time) WHERE entityName = \"ed528836ae33e47e6657b95373571c33:nvme0n1p1\" AND category = DISK", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:54:22.000Z", - "value": 0.48148148148148145, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(await_time)", - "entityName": "nvme0n1 (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:49:47.846Z", - "endTime": "2022-11-29T04:54:47.846Z", - "attributes": { - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "119115ab851aefe1429860d4255b3fab:nvme0n1", - "clusterName": "cod--qfdcinkqrzw", - "logicalPartition": "false", - "hostId": "119115ab851aefe1429860d4255b3fab", - "active": "true", - "category": "DISK", - "device": "nvme0n1", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "ms" - ], - "unitDenominators": [], - "expression": "SELECT last(await_time) WHERE entityName = \"119115ab851aefe1429860d4255b3fab:nvme0n1\" AND category = DISK", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:53:50.000Z", - "value": 0.40540540540540543, - "type": "SAMPLE" - } - ] - } - ], - "warnings": [], - "timeSeriesQuery": "select last(await_time)" - } - ] -} \ No newline at end of file diff --git a/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(cpu_soft_irq_rate)&to=now b/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(cpu_soft_irq_rate)&to=now deleted file mode 100644 index 1d38597592030..0000000000000 --- a/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(cpu_soft_irq_rate)&to=now +++ /dev/null @@ -1,325 +0,0 @@ -{ - "items": [ - { - "timeSeries": [ - { - "metadata": { - "metricName": "last(cpu_soft_irq_rate)", - "entityName": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:41:46.122Z", - "endTime": "2022-11-29T04:46:46.122Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "96efbf3e7279bf25ae44fe0a6398ee97", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1a" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_soft_irq_rate) WHERE entityName = \"96efbf3e7279bf25ae44fe0a6398ee97\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:46:09.000Z", - "value": 0, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_soft_irq_rate)", - "entityName": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:41:46.122Z", - "endTime": "2022-11-29T04:46:46.122Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "88ae2611748383b5628d4aec94873da9", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "88ae2611748383b5628d4aec94873da9", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1a" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_soft_irq_rate) WHERE entityName = \"88ae2611748383b5628d4aec94873da9\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:46:23.000Z", - "value": 0.0001666666666665151, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_soft_irq_rate)", - "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:41:46.122Z", - "endTime": "2022-11-29T04:46:46.122Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "d8623d9457f4db06c5637c4fd4c02f5d", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_soft_irq_rate) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:46:24.000Z", - "value": 0.0015000000000024254, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_soft_irq_rate)", - "entityName": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:41:46.122Z", - "endTime": "2022-11-29T04:46:46.122Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "22f6ab659c835d47bc13d6c8f3370110", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "22f6ab659c835d47bc13d6c8f3370110", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_soft_irq_rate) WHERE entityName = \"22f6ab659c835d47bc13d6c8f3370110\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:46:24.000Z", - "value": 0.0001666666666665151, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_soft_irq_rate)", - "entityName": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:41:46.122Z", - "endTime": "2022-11-29T04:46:46.122Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "49adda80d1b98e9262ee146fd7fd798b", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "49adda80d1b98e9262ee146fd7fd798b", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_soft_irq_rate) WHERE entityName = \"49adda80d1b98e9262ee146fd7fd798b\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:46:23.000Z", - "value": 0, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_soft_irq_rate)", - "entityName": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:41:46.122Z", - "endTime": "2022-11-29T04:46:46.122Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "9784d85849c7179b790d476c483fd905", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "9784d85849c7179b790d476c483fd905", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_soft_irq_rate) WHERE entityName = \"9784d85849c7179b790d476c483fd905\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:46:22.000Z", - "value": 0, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_soft_irq_rate)", - "entityName": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:41:46.122Z", - "endTime": "2022-11-29T04:46:46.122Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "119115ab851aefe1429860d4255b3fab", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "119115ab851aefe1429860d4255b3fab", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_soft_irq_rate) WHERE entityName = \"119115ab851aefe1429860d4255b3fab\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:45:50.000Z", - "value": 0, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_soft_irq_rate)", - "entityName": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:41:46.122Z", - "endTime": "2022-11-29T04:46:46.122Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "ed528836ae33e47e6657b95373571c33", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "ed528836ae33e47e6657b95373571c33", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_soft_irq_rate) WHERE entityName = \"ed528836ae33e47e6657b95373571c33\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:46:22.000Z", - "value": 0, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_soft_irq_rate)", - "entityName": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:41:46.122Z", - "endTime": "2022-11-29T04:46:46.122Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "759451867dfde961d6adbeb21d9c13f9", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "759451867dfde961d6adbeb21d9c13f9", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_soft_irq_rate) WHERE entityName = \"759451867dfde961d6adbeb21d9c13f9\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:46:43.000Z", - "value": 0.0001666666666665151, - "type": "SAMPLE" - } - ] - } - ], - "warnings": [], - "timeSeriesQuery": "select last(cpu_soft_irq_rate)" - } - ] -} \ No newline at end of file diff --git a/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(cpu_system_rate)&to=now b/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(cpu_system_rate)&to=now deleted file mode 100644 index f4d2ad33bf65b..0000000000000 --- a/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(cpu_system_rate)&to=now +++ /dev/null @@ -1,2175 +0,0 @@ -{ - "items": [ - { - "timeSeries": [ - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "96efbf3e7279bf25ae44fe0a6398ee97", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1a" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"96efbf3e7279bf25ae44fe0a6398ee97\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:48:09.000Z", - "value": 0.008166666666632712, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "88ae2611748383b5628d4aec94873da9", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "88ae2611748383b5628d4aec94873da9", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1a" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"88ae2611748383b5628d4aec94873da9\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:48:23.000Z", - "value": 0.00850000000015522, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "d8623d9457f4db06c5637c4fd4c02f5d", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:48:25.000Z", - "value": 0.03377049180324052, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "22f6ab659c835d47bc13d6c8f3370110", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "22f6ab659c835d47bc13d6c8f3370110", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"22f6ab659c835d47bc13d6c8f3370110\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:48:24.000Z", - "value": 0.008166666666753978, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "49adda80d1b98e9262ee146fd7fd798b", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "49adda80d1b98e9262ee146fd7fd798b", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"49adda80d1b98e9262ee146fd7fd798b\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:48:23.000Z", - "value": 0.008499999999912689, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "9784d85849c7179b790d476c483fd905", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "9784d85849c7179b790d476c483fd905", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"9784d85849c7179b790d476c483fd905\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:48:22.000Z", - "value": 0.009000000000135818, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "119115ab851aefe1429860d4255b3fab", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "119115ab851aefe1429860d4255b3fab", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"119115ab851aefe1429860d4255b3fab\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:47:50.000Z", - "value": 0.020833333333333332, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "ed528836ae33e47e6657b95373571c33", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "ed528836ae33e47e6657b95373571c33", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"ed528836ae33e47e6657b95373571c33\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:48:22.000Z", - "value": 0.010166666666676368, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "759451867dfde961d6adbeb21d9c13f9", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "759451867dfde961d6adbeb21d9c13f9", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"759451867dfde961d6adbeb21d9c13f9\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:47:43.000Z", - "value": 0.01916666666669092, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "DataNode (cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "HDFS", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "9784d85849c7179b790d476c483fd905", - "active": "true", - "serviceName": "hdfs", - "roleType": "DATANODE", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hdfs-DATANODE-bf4b8e304dd0b549bcad6614d3129033", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hdfs-DATANODE-bf4b8e304dd0b549bcad6614d3129033", - "roleConfigGroup": "DataNode Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hdfs-DATANODE-bf4b8e304dd0b549bcad6614d3129033\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:48:21.000Z", - "value": 0.0005084745762712057, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "Master (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "HBASE", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "119115ab851aefe1429860d4255b3fab", - "active": "true", - "serviceDisplayName": "hbase", - "serviceName": "hbase", - "roleType": "MASTER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hbase-MASTER-dbb26169f4e1fe9a387fcc5bd5bfd6af", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hbase-MASTER-dbb26169f4e1fe9a387fcc5bd5bfd6af", - "roleConfigGroup": "Master Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hbase-MASTER-dbb26169f4e1fe9a387fcc5bd5bfd6af\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "Server (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "ZOOKEEPER", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", - "active": "true", - "serviceDisplayName": "ZooKeeper", - "serviceName": "zookeeper-e52d", - "roleType": "SERVER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "zookeeper-e52d-SERVER-3bc8f544ef0c15a373bbe9f9790fefba", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "zookeeper-e52d-SERVER-3bc8f544ef0c15a373bbe9f9790fefba", - "roleConfigGroup": "Server Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1a" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"zookeeper-e52d-SERVER-3bc8f544ef0c15a373bbe9f9790fefba\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:48:09.000Z", - "value": 0.000500000000000019, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "JournalNode (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "HDFS", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "119115ab851aefe1429860d4255b3fab", - "active": "true", - "serviceName": "hdfs", - "roleType": "JOURNALNODE", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hdfs-JOURNALNODE-dbb26169f4e1fe9a387fcc5bd5bfd6af", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hdfs-JOURNALNODE-dbb26169f4e1fe9a387fcc5bd5bfd6af", - "roleConfigGroup": "JournalNode Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hdfs-JOURNALNODE-dbb26169f4e1fe9a387fcc5bd5bfd6af\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:47:49.000Z", - "value": 0.00033333333333350387, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "NameNode (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "HDFS", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "759451867dfde961d6adbeb21d9c13f9", - "active": "true", - "serviceName": "hdfs", - "roleType": "NAMENODE", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hdfs-NAMENODE-6e88fa1a7ad969e10ea41365cba9abc5", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hdfs-NAMENODE-6e88fa1a7ad969e10ea41365cba9abc5", - "roleConfigGroup": "NameNode Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hdfs-NAMENODE-6e88fa1a7ad969e10ea41365cba9abc5\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:47:43.000Z", - "value": 0.0014999999999986357, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "RegionServer (cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "HBASE", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "9784d85849c7179b790d476c483fd905", - "active": "true", - "serviceDisplayName": "hbase", - "serviceName": "hbase", - "roleType": "REGIONSERVER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hbase-REGIONSERVER-bf4b8e304dd0b549bcad6614d3129033", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hbase-REGIONSERVER-bf4b8e304dd0b549bcad6614d3129033", - "roleConfigGroup": "RegionServer Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hbase-REGIONSERVER-bf4b8e304dd0b549bcad6614d3129033\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "PHOENIX_QUERY_SERVER (cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "PHOENIX", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "49adda80d1b98e9262ee146fd7fd798b", - "active": "true", - "serviceDisplayName": "phoenix", - "serviceName": "phoenix", - "roleType": "PHOENIX_QUERY_SERVER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "phoenix-PHOENIX_QUERY_SERVER-3c658ac6009daca54192736b1502fae1", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "phoenix-PHOENIX_QUERY_SERVER-3c658ac6009daca54192736b1502fae1", - "roleConfigGroup": "Query Server Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"phoenix-PHOENIX_QUERY_SERVER-3c658ac6009daca54192736b1502fae1\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "PHOENIX_QUERY_SERVER (cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "PHOENIX", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "ed528836ae33e47e6657b95373571c33", - "active": "true", - "serviceDisplayName": "phoenix", - "serviceName": "phoenix", - "roleType": "PHOENIX_QUERY_SERVER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "phoenix-PHOENIX_QUERY_SERVER-145da1565b8e2c4165145d9ecc0c784e", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "phoenix-PHOENIX_QUERY_SERVER-145da1565b8e2c4165145d9ecc0c784e", - "roleConfigGroup": "Query Server Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"phoenix-PHOENIX_QUERY_SERVER-145da1565b8e2c4165145d9ecc0c784e\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "NodeManager (cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "YARN", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "88ae2611748383b5628d4aec94873da9", - "active": "true", - "serviceDisplayName": "yarn", - "serviceName": "yarn", - "roleType": "NODEMANAGER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "yarn-NODEMANAGER-d51d3a03fc3294039de9c160b1013676", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "yarn-NODEMANAGER-d51d3a03fc3294039de9c160b1013676", - "roleConfigGroup": "NodeManager Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1a" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"yarn-NODEMANAGER-d51d3a03fc3294039de9c160b1013676\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:48:23.000Z", - "value": 0.0005000000000000004, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "Server (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "ZOOKEEPER", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "119115ab851aefe1429860d4255b3fab", - "active": "true", - "serviceDisplayName": "ZooKeeper", - "serviceName": "zookeeper-e52d", - "roleType": "SERVER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "zookeeper-e52d-SERVER-dbb26169f4e1fe9a387fcc5bd5bfd6af", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "zookeeper-e52d-SERVER-dbb26169f4e1fe9a387fcc5bd5bfd6af", - "roleConfigGroup": "Server Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"zookeeper-e52d-SERVER-dbb26169f4e1fe9a387fcc5bd5bfd6af\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:47:50.000Z", - "value": 0.000333333333333267, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "RegionServer (cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "HBASE", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "22f6ab659c835d47bc13d6c8f3370110", - "active": "true", - "serviceDisplayName": "hbase", - "serviceName": "hbase", - "roleType": "REGIONSERVER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hbase-REGIONSERVER-7e9a53b768c95833df424c7d7b0ae857", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hbase-REGIONSERVER-7e9a53b768c95833df424c7d7b0ae857", - "roleConfigGroup": "hbase-REGIONSERVER", - "category": "ROLE", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hbase-REGIONSERVER-7e9a53b768c95833df424c7d7b0ae857\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "DataNode (cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "HDFS", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "ed528836ae33e47e6657b95373571c33", - "active": "true", - "serviceName": "hdfs", - "roleType": "DATANODE", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hdfs-DATANODE-145da1565b8e2c4165145d9ecc0c784e", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hdfs-DATANODE-145da1565b8e2c4165145d9ecc0c784e", - "roleConfigGroup": "DataNode Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hdfs-DATANODE-145da1565b8e2c4165145d9ecc0c784e\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:48:22.000Z", - "value": 0.000666666666666534, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "Host Monitor (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "MGMT", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "HOSTMONITOR", - "roleName": "HOSTMONITOR", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "roleConfigGroup": "Host Monitor Default Group", - "active": "true", - "serviceDisplayName": "MGMT", - "serviceName": "MGMT", - "roleType": "HOSTMONITOR", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"HOSTMONITOR\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:48:24.000Z", - "value": 0.0024999999999939368, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "ResourceManager (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "YARN", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "759451867dfde961d6adbeb21d9c13f9", - "active": "true", - "serviceDisplayName": "yarn", - "serviceName": "yarn", - "roleType": "RESOURCEMANAGER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "yarn-RESOURCEMANAGER-6e88fa1a7ad969e10ea41365cba9abc5", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "yarn-RESOURCEMANAGER-6e88fa1a7ad969e10ea41365cba9abc5", - "roleConfigGroup": "ResourceManager Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"yarn-RESOURCEMANAGER-6e88fa1a7ad969e10ea41365cba9abc5\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "PHOENIX_QUERY_SERVER (cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "PHOENIX", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "9784d85849c7179b790d476c483fd905", - "active": "true", - "serviceDisplayName": "phoenix", - "serviceName": "phoenix", - "roleType": "PHOENIX_QUERY_SERVER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "phoenix-PHOENIX_QUERY_SERVER-bf4b8e304dd0b549bcad6614d3129033", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "phoenix-PHOENIX_QUERY_SERVER-bf4b8e304dd0b549bcad6614d3129033", - "roleConfigGroup": "Query Server Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"phoenix-PHOENIX_QUERY_SERVER-bf4b8e304dd0b549bcad6614d3129033\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "RegionServer (cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "HBASE", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "ed528836ae33e47e6657b95373571c33", - "active": "true", - "serviceDisplayName": "hbase", - "serviceName": "hbase", - "roleType": "REGIONSERVER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hbase-REGIONSERVER-145da1565b8e2c4165145d9ecc0c784e", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hbase-REGIONSERVER-145da1565b8e2c4165145d9ecc0c784e", - "roleConfigGroup": "RegionServer Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hbase-REGIONSERVER-145da1565b8e2c4165145d9ecc0c784e\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "RegionServer (cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "HBASE", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "88ae2611748383b5628d4aec94873da9", - "active": "true", - "serviceDisplayName": "hbase", - "serviceName": "hbase", - "roleType": "REGIONSERVER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hbase-REGIONSERVER-d51d3a03fc3294039de9c160b1013676", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hbase-REGIONSERVER-d51d3a03fc3294039de9c160b1013676", - "roleConfigGroup": "RegionServer Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1a" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hbase-REGIONSERVER-d51d3a03fc3294039de9c160b1013676\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "Load Balancer (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "HUE", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "active": "true", - "serviceDisplayName": "hue", - "serviceName": "hue", - "roleType": "HUE_LOAD_BALANCER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hue-HUE_LOAD_BALANCER-7d0b6bba5cf23b4729586ee8d35ab766", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hue-HUE_LOAD_BALANCER-7d0b6bba5cf23b4729586ee8d35ab766", - "roleConfigGroup": "Load Balancer Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hue-HUE_LOAD_BALANCER-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "Kerberos Ticket Renewer (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "HUE", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "active": "true", - "serviceDisplayName": "hue", - "serviceName": "hue", - "roleType": "KT_RENEWER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hue-KT_RENEWER-7d0b6bba5cf23b4729586ee8d35ab766", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hue-KT_RENEWER-7d0b6bba5cf23b4729586ee8d35ab766", - "roleConfigGroup": "Kerberos Ticket Renewer Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hue-KT_RENEWER-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "HBase REST Server (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "HBASE", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", - "active": "true", - "serviceDisplayName": "hbase", - "serviceName": "hbase", - "roleType": "HBASERESTSERVER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hbase-HBASERESTSERVER-3bc8f544ef0c15a373bbe9f9790fefba", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hbase-HBASERESTSERVER-3bc8f544ef0c15a373bbe9f9790fefba", - "roleConfigGroup": "HBase REST Server Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1a" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hbase-HBASERESTSERVER-3bc8f544ef0c15a373bbe9f9790fefba\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "OMID_TSO (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "OMID", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", - "active": "true", - "serviceDisplayName": "omid", - "serviceName": "omid", - "roleType": "OMID_TSO", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "omid-OMID_TSO-3bc8f544ef0c15a373bbe9f9790fefba", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "omid-OMID_TSO-3bc8f544ef0c15a373bbe9f9790fefba", - "roleConfigGroup": "Omid tso server Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1a" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"omid-OMID_TSO-3bc8f544ef0c15a373bbe9f9790fefba\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "JournalNode (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "HDFS", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "759451867dfde961d6adbeb21d9c13f9", - "active": "true", - "serviceName": "hdfs", - "roleType": "JOURNALNODE", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hdfs-JOURNALNODE-6e88fa1a7ad969e10ea41365cba9abc5", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hdfs-JOURNALNODE-6e88fa1a7ad969e10ea41365cba9abc5", - "roleConfigGroup": "JournalNode Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hdfs-JOURNALNODE-6e88fa1a7ad969e10ea41365cba9abc5\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:47:43.000Z", - "value": 0.000500000000000019, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "JournalNode (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "HDFS", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", - "active": "true", - "serviceName": "hdfs", - "roleType": "JOURNALNODE", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hdfs-JOURNALNODE-3bc8f544ef0c15a373bbe9f9790fefba", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hdfs-JOURNALNODE-3bc8f544ef0c15a373bbe9f9790fefba", - "roleConfigGroup": "JournalNode Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1a" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hdfs-JOURNALNODE-3bc8f544ef0c15a373bbe9f9790fefba\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:48:09.000Z", - "value": 0.00033333333333350387, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "Server (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "ZOOKEEPER", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "759451867dfde961d6adbeb21d9c13f9", - "active": "true", - "serviceDisplayName": "ZooKeeper", - "serviceName": "zookeeper-e52d", - "roleType": "SERVER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "zookeeper-e52d-SERVER-6e88fa1a7ad969e10ea41365cba9abc5", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "zookeeper-e52d-SERVER-6e88fa1a7ad969e10ea41365cba9abc5", - "roleConfigGroup": "Server Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"zookeeper-e52d-SERVER-6e88fa1a7ad969e10ea41365cba9abc5\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:47:43.000Z", - "value": 0.000333333333333267, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "PHOENIX_QUERY_SERVER (cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "PHOENIX", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "88ae2611748383b5628d4aec94873da9", - "active": "true", - "serviceDisplayName": "phoenix", - "serviceName": "phoenix", - "roleType": "PHOENIX_QUERY_SERVER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "phoenix-PHOENIX_QUERY_SERVER-d51d3a03fc3294039de9c160b1013676", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "phoenix-PHOENIX_QUERY_SERVER-d51d3a03fc3294039de9c160b1013676", - "roleConfigGroup": "Query Server Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1a" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"phoenix-PHOENIX_QUERY_SERVER-d51d3a03fc3294039de9c160b1013676\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "Hue Server (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "HUE", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "active": "true", - "serviceDisplayName": "hue", - "serviceName": "hue", - "roleType": "HUE_SERVER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hue-HUE_SERVER-7d0b6bba5cf23b4729586ee8d35ab766", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hue-HUE_SERVER-7d0b6bba5cf23b4729586ee8d35ab766", - "roleConfigGroup": "Hue Server Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hue-HUE_SERVER-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "Master (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "HBASE", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "759451867dfde961d6adbeb21d9c13f9", - "active": "true", - "serviceDisplayName": "hbase", - "serviceName": "hbase", - "roleType": "MASTER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hbase-MASTER-6e88fa1a7ad969e10ea41365cba9abc5", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hbase-MASTER-6e88fa1a7ad969e10ea41365cba9abc5", - "roleConfigGroup": "Master Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hbase-MASTER-6e88fa1a7ad969e10ea41365cba9abc5\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "Event Server (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "MGMT", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "EVENTSERVER", - "roleName": "EVENTSERVER", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "roleConfigGroup": "Event Server Default Group", - "active": "true", - "serviceDisplayName": "MGMT", - "serviceName": "MGMT", - "roleType": "EVENTSERVER", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"EVENTSERVER\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:48:24.000Z", - "value": 0.001166666666661816, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "QUEUEMANAGER_STORE (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "QUEUEMANAGER", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "active": "true", - "serviceDisplayName": "queuemanager", - "serviceName": "queuemanager", - "roleType": "QUEUEMANAGER_STORE", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "queuemanager-QUEUEMANAGER_STORE-7d0b6bba5cf23b4729586ee8d35ab766", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "queuemanager-QUEUEMANAGER_STORE-7d0b6bba5cf23b4729586ee8d35ab766", - "roleConfigGroup": "YARN Queue Manager Store Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"queuemanager-QUEUEMANAGER_STORE-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:48:25.000Z", - "value": 0.000333333333333267, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "PHOENIX_QUERY_SERVER (cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "PHOENIX", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "22f6ab659c835d47bc13d6c8f3370110", - "active": "true", - "serviceDisplayName": "phoenix", - "serviceName": "phoenix", - "roleType": "PHOENIX_QUERY_SERVER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "phoenix-PHOENIX_QUERY_SERVER-7e9a53b768c95833df424c7d7b0ae857", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "phoenix-PHOENIX_QUERY_SERVER-7e9a53b768c95833df424c7d7b0ae857", - "roleConfigGroup": "Query Server Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"phoenix-PHOENIX_QUERY_SERVER-7e9a53b768c95833df424c7d7b0ae857\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "DataNode (cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "HDFS", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "88ae2611748383b5628d4aec94873da9", - "active": "true", - "serviceName": "hdfs", - "roleType": "DATANODE", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hdfs-DATANODE-d51d3a03fc3294039de9c160b1013676", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hdfs-DATANODE-d51d3a03fc3294039de9c160b1013676", - "roleConfigGroup": "DataNode Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1a" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hdfs-DATANODE-d51d3a03fc3294039de9c160b1013676\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:48:23.000Z", - "value": 0.000500000000000019, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "NodeManager (cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "YARN", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "ed528836ae33e47e6657b95373571c33", - "active": "true", - "serviceDisplayName": "yarn", - "serviceName": "yarn", - "roleType": "NODEMANAGER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "yarn-NODEMANAGER-145da1565b8e2c4165145d9ecc0c784e", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "yarn-NODEMANAGER-145da1565b8e2c4165145d9ecc0c784e", - "roleConfigGroup": "NodeManager Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"yarn-NODEMANAGER-145da1565b8e2c4165145d9ecc0c784e\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:48:22.000Z", - "value": 0.0008333333333333377, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "Failover Controller (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "HDFS", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "759451867dfde961d6adbeb21d9c13f9", - "active": "true", - "serviceName": "hdfs", - "roleType": "FAILOVERCONTROLLER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hdfs-FAILOVERCONTROLLER-6e88fa1a7ad969e10ea41365cba9abc5", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hdfs-FAILOVERCONTROLLER-6e88fa1a7ad969e10ea41365cba9abc5", - "roleConfigGroup": "Failover Controller Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hdfs-FAILOVERCONTROLLER-6e88fa1a7ad969e10ea41365cba9abc5\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "HBase Thrift Server (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "HBASE", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", - "active": "true", - "serviceDisplayName": "hbase", - "serviceName": "hbase", - "roleType": "HBASETHRIFTSERVER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hbase-HBASETHRIFTSERVER-3bc8f544ef0c15a373bbe9f9790fefba", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hbase-HBASETHRIFTSERVER-3bc8f544ef0c15a373bbe9f9790fefba", - "roleConfigGroup": "HBase Thrift Server Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1a" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hbase-HBASETHRIFTSERVER-3bc8f544ef0c15a373bbe9f9790fefba\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "NameNode (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "HDFS", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "119115ab851aefe1429860d4255b3fab", - "active": "true", - "serviceName": "hdfs", - "roleType": "NAMENODE", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hdfs-NAMENODE-dbb26169f4e1fe9a387fcc5bd5bfd6af", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hdfs-NAMENODE-dbb26169f4e1fe9a387fcc5bd5bfd6af", - "roleConfigGroup": "NameNode Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hdfs-NAMENODE-dbb26169f4e1fe9a387fcc5bd5bfd6af\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:47:49.000Z", - "value": 0.001166666666666553, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "JobHistory Server (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "YARN", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", - "active": "true", - "serviceDisplayName": "yarn", - "serviceName": "yarn", - "roleType": "JOBHISTORY", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "yarn-JOBHISTORY-3bc8f544ef0c15a373bbe9f9790fefba", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "yarn-JOBHISTORY-3bc8f544ef0c15a373bbe9f9790fefba", - "roleConfigGroup": "JobHistory Server Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1a" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"yarn-JOBHISTORY-3bc8f544ef0c15a373bbe9f9790fefba\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:48:09.000Z", - "value": 0.00016666666666666682, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "RegionServer (cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "HBASE", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "49adda80d1b98e9262ee146fd7fd798b", - "active": "true", - "serviceDisplayName": "hbase", - "serviceName": "hbase", - "roleType": "REGIONSERVER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hbase-REGIONSERVER-3c658ac6009daca54192736b1502fae1", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hbase-REGIONSERVER-3c658ac6009daca54192736b1502fae1", - "roleConfigGroup": "hbase-REGIONSERVER", - "category": "ROLE", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hbase-REGIONSERVER-3c658ac6009daca54192736b1502fae1\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "NodeManager (cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "YARN", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "9784d85849c7179b790d476c483fd905", - "active": "true", - "serviceDisplayName": "yarn", - "serviceName": "yarn", - "roleType": "NODEMANAGER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "yarn-NODEMANAGER-bf4b8e304dd0b549bcad6614d3129033", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "yarn-NODEMANAGER-bf4b8e304dd0b549bcad6614d3129033", - "roleConfigGroup": "NodeManager Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"yarn-NODEMANAGER-bf4b8e304dd0b549bcad6614d3129033\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:48:21.000Z", - "value": 0.0008474576271186486, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "QUEUEMANAGER_WEBAPP (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "QUEUEMANAGER", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "active": "true", - "serviceDisplayName": "queuemanager", - "serviceName": "queuemanager", - "roleType": "QUEUEMANAGER_WEBAPP", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "queuc8af8526-QUEUEMANAGER_WEBAPP-7d0b6bba5cf23b4729586ee8d35ab76", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "queuc8af8526-QUEUEMANAGER_WEBAPP-7d0b6bba5cf23b4729586ee8d35ab76", - "roleConfigGroup": "YARN Queue Manager Webapp Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"queuc8af8526-QUEUEMANAGER_WEBAPP-7d0b6bba5cf23b4729586ee8d35ab76\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:48:25.000Z", - "value": 0.0001666666666666335, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "KNOX_GATEWAY (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "KNOX", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "active": "true", - "serviceDisplayName": "Knox", - "serviceName": "knox-e428", - "roleType": "KNOX_GATEWAY", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "knox-e428-KNOX_GATEWAY-7d0b6bba5cf23b4729586ee8d35ab766", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "knox-e428-KNOX_GATEWAY-7d0b6bba5cf23b4729586ee8d35ab766", - "roleConfigGroup": "Knox Gateway Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"knox-e428-KNOX_GATEWAY-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:48:25.000Z", - "value": 0.0006666666666670077, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "Failover Controller (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "HDFS", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "119115ab851aefe1429860d4255b3fab", - "active": "true", - "serviceName": "hdfs", - "roleType": "FAILOVERCONTROLLER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hdfs-FAILOVERCONTROLLER-dbb26169f4e1fe9a387fcc5bd5bfd6af", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hdfs-FAILOVERCONTROLLER-dbb26169f4e1fe9a387fcc5bd5bfd6af", - "roleConfigGroup": "Failover Controller Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hdfs-FAILOVERCONTROLLER-dbb26169f4e1fe9a387fcc5bd5bfd6af\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "Alert Publisher (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "MGMT", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "ALERTPUBLISHER", - "roleName": "ALERTPUBLISHER", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "roleConfigGroup": "Alert Publisher Default Group", - "active": "true", - "serviceDisplayName": "MGMT", - "serviceName": "MGMT", - "roleType": "ALERTPUBLISHER", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"ALERTPUBLISHER\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:48:25.000Z", - "value": 0.0003333333333330302, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "ResourceManager (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "YARN", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "119115ab851aefe1429860d4255b3fab", - "active": "true", - "serviceDisplayName": "yarn", - "serviceName": "yarn", - "roleType": "RESOURCEMANAGER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "yarn-RESOURCEMANAGER-dbb26169f4e1fe9a387fcc5bd5bfd6af", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "yarn-RESOURCEMANAGER-dbb26169f4e1fe9a387fcc5bd5bfd6af", - "roleConfigGroup": "ResourceManager Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"yarn-RESOURCEMANAGER-dbb26169f4e1fe9a387fcc5bd5bfd6af\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "Telemetry Publisher (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "MGMT", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "TELEMETRYPUBLISHER", - "roleName": "TELEMETRYPUBLISHER", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "roleConfigGroup": "Telemetry Publisher Default Group", - "active": "true", - "serviceDisplayName": "MGMT", - "serviceName": "MGMT", - "roleType": "TELEMETRYPUBLISHER", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"TELEMETRYPUBLISHER\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:48:24.000Z", - "value": 0.00233333333333879, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "DataNode (cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "HDFS", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "22f6ab659c835d47bc13d6c8f3370110", - "active": "true", - "serviceName": "hdfs", - "roleType": "DATANODE", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hdfs-DATANODE-7e9a53b768c95833df424c7d7b0ae857", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hdfs-DATANODE-7e9a53b768c95833df424c7d7b0ae857", - "roleConfigGroup": "DataNode Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hdfs-DATANODE-7e9a53b768c95833df424c7d7b0ae857\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:48:24.000Z", - "value": 0.000500000000000019, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "DataNode (cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "HDFS", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "49adda80d1b98e9262ee146fd7fd798b", - "active": "true", - "serviceName": "hdfs", - "roleType": "DATANODE", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hdfs-DATANODE-3c658ac6009daca54192736b1502fae1", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hdfs-DATANODE-3c658ac6009daca54192736b1502fae1", - "roleConfigGroup": "DataNode Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hdfs-DATANODE-3c658ac6009daca54192736b1502fae1\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:48:23.000Z", - "value": 0.000666666666666534, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "NodeManager (cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "YARN", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "22f6ab659c835d47bc13d6c8f3370110", - "active": "true", - "serviceDisplayName": "yarn", - "serviceName": "yarn", - "roleType": "NODEMANAGER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "yarn-NODEMANAGER-7e9a53b768c95833df424c7d7b0ae857", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "yarn-NODEMANAGER-7e9a53b768c95833df424c7d7b0ae857", - "roleConfigGroup": "yarn-NODEMANAGER", - "category": "ROLE", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"yarn-NODEMANAGER-7e9a53b768c95833df424c7d7b0ae857\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:48:24.000Z", - "value": 0.0005000000000000041, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "NodeManager (cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "YARN", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "49adda80d1b98e9262ee146fd7fd798b", - "active": "true", - "serviceDisplayName": "yarn", - "serviceName": "yarn", - "roleType": "NODEMANAGER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "yarn-NODEMANAGER-3c658ac6009daca54192736b1502fae1", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "yarn-NODEMANAGER-3c658ac6009daca54192736b1502fae1", - "roleConfigGroup": "yarn-NODEMANAGER", - "category": "ROLE", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"yarn-NODEMANAGER-3c658ac6009daca54192736b1502fae1\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:48:23.000Z", - "value": 0.0006666666666666673, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(cpu_system_rate)", - "entityName": "Service Monitor (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:43:40.462Z", - "endTime": "2022-11-29T04:48:40.462Z", - "attributes": { - "serviceType": "MGMT", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "SERVICEMONITOR", - "roleName": "SERVICEMONITOR", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "roleConfigGroup": "Service Monitor Default Group", - "active": "true", - "serviceDisplayName": "MGMT", - "serviceName": "MGMT", - "roleType": "SERVICEMONITOR", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"SERVICEMONITOR\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:48:24.000Z", - "value": 0.004000000000026678, - "type": "SAMPLE" - } - ] - } - ], - "warnings": [], - "timeSeriesQuery": "select last(cpu_system_rate)" - } - ] -} \ No newline at end of file diff --git a/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(load_1)&to=now b/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(load_1)&to=now deleted file mode 100644 index 3ebc5bda9ff25..0000000000000 --- a/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(load_1)&to=now +++ /dev/null @@ -1,307 +0,0 @@ -{ - "items": [ - { - "timeSeries": [ - { - "metadata": { - "metricName": "last(load_1)", - "entityName": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:44:28.683Z", - "endTime": "2022-11-29T04:49:28.683Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "96efbf3e7279bf25ae44fe0a6398ee97", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1a" - }, - "unitNumerators": [ - "load average" - ], - "unitDenominators": [], - "expression": "SELECT last(load_1) WHERE entityName = \"96efbf3e7279bf25ae44fe0a6398ee97\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:49:09.000Z", - "value": 0.15, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(load_1)", - "entityName": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:44:28.683Z", - "endTime": "2022-11-29T04:49:28.683Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "88ae2611748383b5628d4aec94873da9", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "88ae2611748383b5628d4aec94873da9", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1a" - }, - "unitNumerators": [ - "load average" - ], - "unitDenominators": [], - "expression": "SELECT last(load_1) WHERE entityName = \"88ae2611748383b5628d4aec94873da9\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:49:23.000Z", - "value": 0, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(load_1)", - "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:44:28.683Z", - "endTime": "2022-11-29T04:49:28.683Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "d8623d9457f4db06c5637c4fd4c02f5d", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "load average" - ], - "unitDenominators": [], - "expression": "SELECT last(load_1) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:49:25.000Z", - "value": 0.2, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(load_1)", - "entityName": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:44:28.683Z", - "endTime": "2022-11-29T04:49:28.683Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "22f6ab659c835d47bc13d6c8f3370110", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "22f6ab659c835d47bc13d6c8f3370110", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "load average" - ], - "unitDenominators": [], - "expression": "SELECT last(load_1) WHERE entityName = \"22f6ab659c835d47bc13d6c8f3370110\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:49:24.000Z", - "value": 0, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(load_1)", - "entityName": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:44:28.683Z", - "endTime": "2022-11-29T04:49:28.683Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "49adda80d1b98e9262ee146fd7fd798b", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "49adda80d1b98e9262ee146fd7fd798b", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "load average" - ], - "unitDenominators": [], - "expression": "SELECT last(load_1) WHERE entityName = \"49adda80d1b98e9262ee146fd7fd798b\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:49:23.000Z", - "value": 0.05, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(load_1)", - "entityName": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:44:28.683Z", - "endTime": "2022-11-29T04:49:28.683Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "9784d85849c7179b790d476c483fd905", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "9784d85849c7179b790d476c483fd905", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "load average" - ], - "unitDenominators": [], - "expression": "SELECT last(load_1) WHERE entityName = \"9784d85849c7179b790d476c483fd905\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:49:22.000Z", - "value": 0, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(load_1)", - "entityName": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:44:28.683Z", - "endTime": "2022-11-29T04:49:28.683Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "119115ab851aefe1429860d4255b3fab", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "119115ab851aefe1429860d4255b3fab", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "load average" - ], - "unitDenominators": [], - "expression": "SELECT last(load_1) WHERE entityName = \"119115ab851aefe1429860d4255b3fab\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:48:50.000Z", - "value": 0, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(load_1)", - "entityName": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:44:28.683Z", - "endTime": "2022-11-29T04:49:28.683Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "ed528836ae33e47e6657b95373571c33", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "ed528836ae33e47e6657b95373571c33", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "load average" - ], - "unitDenominators": [], - "expression": "SELECT last(load_1) WHERE entityName = \"ed528836ae33e47e6657b95373571c33\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:49:22.000Z", - "value": 0.07, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(load_1)", - "entityName": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:44:28.683Z", - "endTime": "2022-11-29T04:49:28.683Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "759451867dfde961d6adbeb21d9c13f9", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "759451867dfde961d6adbeb21d9c13f9", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "load average" - ], - "unitDenominators": [], - "expression": "SELECT last(load_1) WHERE entityName = \"759451867dfde961d6adbeb21d9c13f9\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:48:43.000Z", - "value": 0.12, - "type": "SAMPLE" - } - ] - } - ], - "warnings": [], - "timeSeriesQuery": "select last(load_1)" - } - ] -} \ No newline at end of file diff --git a/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(mem_rss)&to=now b/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(mem_rss)&to=now deleted file mode 100644 index 6fe0e0e79eb16..0000000000000 --- a/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(mem_rss)&to=now +++ /dev/null @@ -1,1774 +0,0 @@ -{ - "items": [ - { - "timeSeries": [ - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "DataNode (cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "HDFS", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "9784d85849c7179b790d476c483fd905", - "active": "true", - "serviceDisplayName": "hdfs", - "serviceName": "hdfs", - "roleType": "DATANODE", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hdfs-DATANODE-bf4b8e304dd0b549bcad6614d3129033", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hdfs-DATANODE-bf4b8e304dd0b549bcad6614d3129033", - "roleConfigGroup": "DataNode Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"hdfs-DATANODE-bf4b8e304dd0b549bcad6614d3129033\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:52:21.000Z", - "value": 585314304, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "Master (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "HBASE", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "119115ab851aefe1429860d4255b3fab", - "active": "true", - "serviceDisplayName": "hbase", - "serviceName": "hbase", - "roleType": "MASTER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hbase-MASTER-dbb26169f4e1fe9a387fcc5bd5bfd6af", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hbase-MASTER-dbb26169f4e1fe9a387fcc5bd5bfd6af", - "roleConfigGroup": "Master Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"hbase-MASTER-dbb26169f4e1fe9a387fcc5bd5bfd6af\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "Server (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "ZOOKEEPER", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", - "active": "true", - "serviceDisplayName": "ZooKeeper", - "serviceName": "zookeeper-e52d", - "roleType": "SERVER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "zookeeper-e52d-SERVER-3bc8f544ef0c15a373bbe9f9790fefba", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "zookeeper-e52d-SERVER-3bc8f544ef0c15a373bbe9f9790fefba", - "roleConfigGroup": "Server Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1a" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"zookeeper-e52d-SERVER-3bc8f544ef0c15a373bbe9f9790fefba\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:52:09.000Z", - "value": 3064156160, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "JournalNode (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "HDFS", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "119115ab851aefe1429860d4255b3fab", - "active": "true", - "serviceDisplayName": "hdfs", - "serviceName": "hdfs", - "roleType": "JOURNALNODE", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hdfs-JOURNALNODE-dbb26169f4e1fe9a387fcc5bd5bfd6af", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hdfs-JOURNALNODE-dbb26169f4e1fe9a387fcc5bd5bfd6af", - "roleConfigGroup": "JournalNode Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"hdfs-JOURNALNODE-dbb26169f4e1fe9a387fcc5bd5bfd6af\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:52:49.000Z", - "value": 398761984, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "NameNode (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "HDFS", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "759451867dfde961d6adbeb21d9c13f9", - "active": "true", - "serviceDisplayName": "hdfs", - "serviceName": "hdfs", - "roleType": "NAMENODE", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hdfs-NAMENODE-6e88fa1a7ad969e10ea41365cba9abc5", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hdfs-NAMENODE-6e88fa1a7ad969e10ea41365cba9abc5", - "roleConfigGroup": "NameNode Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"hdfs-NAMENODE-6e88fa1a7ad969e10ea41365cba9abc5\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:52:43.000Z", - "value": 1083379712, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "RegionServer (cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "HBASE", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "9784d85849c7179b790d476c483fd905", - "active": "true", - "serviceDisplayName": "hbase", - "serviceName": "hbase", - "roleType": "REGIONSERVER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hbase-REGIONSERVER-bf4b8e304dd0b549bcad6614d3129033", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hbase-REGIONSERVER-bf4b8e304dd0b549bcad6614d3129033", - "roleConfigGroup": "RegionServer Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"hbase-REGIONSERVER-bf4b8e304dd0b549bcad6614d3129033\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "PHOENIX_QUERY_SERVER (cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "PHOENIX", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "49adda80d1b98e9262ee146fd7fd798b", - "active": "true", - "serviceDisplayName": "phoenix", - "serviceName": "phoenix", - "roleType": "PHOENIX_QUERY_SERVER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "phoenix-PHOENIX_QUERY_SERVER-3c658ac6009daca54192736b1502fae1", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "phoenix-PHOENIX_QUERY_SERVER-3c658ac6009daca54192736b1502fae1", - "roleConfigGroup": "Query Server Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"phoenix-PHOENIX_QUERY_SERVER-3c658ac6009daca54192736b1502fae1\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "PHOENIX_QUERY_SERVER (cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "PHOENIX", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "ed528836ae33e47e6657b95373571c33", - "active": "true", - "serviceDisplayName": "phoenix", - "serviceName": "phoenix", - "roleType": "PHOENIX_QUERY_SERVER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "phoenix-PHOENIX_QUERY_SERVER-145da1565b8e2c4165145d9ecc0c784e", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "phoenix-PHOENIX_QUERY_SERVER-145da1565b8e2c4165145d9ecc0c784e", - "roleConfigGroup": "Query Server Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"phoenix-PHOENIX_QUERY_SERVER-145da1565b8e2c4165145d9ecc0c784e\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "NodeManager (cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "YARN", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "88ae2611748383b5628d4aec94873da9", - "active": "true", - "serviceDisplayName": "yarn", - "serviceName": "yarn", - "roleType": "NODEMANAGER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "yarn-NODEMANAGER-d51d3a03fc3294039de9c160b1013676", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "yarn-NODEMANAGER-d51d3a03fc3294039de9c160b1013676", - "roleConfigGroup": "NodeManager Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1a" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"yarn-NODEMANAGER-d51d3a03fc3294039de9c160b1013676\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:52:23.000Z", - "value": 447881216, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "Server (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "ZOOKEEPER", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "119115ab851aefe1429860d4255b3fab", - "active": "true", - "serviceDisplayName": "ZooKeeper", - "serviceName": "zookeeper-e52d", - "roleType": "SERVER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "zookeeper-e52d-SERVER-dbb26169f4e1fe9a387fcc5bd5bfd6af", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "zookeeper-e52d-SERVER-dbb26169f4e1fe9a387fcc5bd5bfd6af", - "roleConfigGroup": "Server Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"zookeeper-e52d-SERVER-dbb26169f4e1fe9a387fcc5bd5bfd6af\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:52:50.000Z", - "value": 3064639488, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "RegionServer (cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "HBASE", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "22f6ab659c835d47bc13d6c8f3370110", - "active": "true", - "serviceDisplayName": "hbase", - "serviceName": "hbase", - "roleType": "REGIONSERVER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hbase-REGIONSERVER-7e9a53b768c95833df424c7d7b0ae857", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hbase-REGIONSERVER-7e9a53b768c95833df424c7d7b0ae857", - "roleConfigGroup": "hbase-REGIONSERVER", - "category": "ROLE", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"hbase-REGIONSERVER-7e9a53b768c95833df424c7d7b0ae857\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "DataNode (cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "HDFS", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "ed528836ae33e47e6657b95373571c33", - "active": "true", - "serviceDisplayName": "hdfs", - "serviceName": "hdfs", - "roleType": "DATANODE", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hdfs-DATANODE-145da1565b8e2c4165145d9ecc0c784e", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hdfs-DATANODE-145da1565b8e2c4165145d9ecc0c784e", - "roleConfigGroup": "DataNode Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"hdfs-DATANODE-145da1565b8e2c4165145d9ecc0c784e\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:52:22.000Z", - "value": 600510464, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "Host Monitor (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "MGMT", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "HOSTMONITOR", - "roleName": "HOSTMONITOR", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "roleConfigGroup": "Host Monitor Default Group", - "active": "true", - "serviceDisplayName": "MGMT", - "serviceName": "MGMT", - "roleType": "HOSTMONITOR", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"HOSTMONITOR\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:52:24.000Z", - "value": 1988956160, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "ResourceManager (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "YARN", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "759451867dfde961d6adbeb21d9c13f9", - "active": "true", - "serviceDisplayName": "yarn", - "serviceName": "yarn", - "roleType": "RESOURCEMANAGER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "yarn-RESOURCEMANAGER-6e88fa1a7ad969e10ea41365cba9abc5", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "yarn-RESOURCEMANAGER-6e88fa1a7ad969e10ea41365cba9abc5", - "roleConfigGroup": "ResourceManager Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"yarn-RESOURCEMANAGER-6e88fa1a7ad969e10ea41365cba9abc5\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "PHOENIX_QUERY_SERVER (cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "PHOENIX", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "9784d85849c7179b790d476c483fd905", - "active": "true", - "serviceDisplayName": "phoenix", - "serviceName": "phoenix", - "roleType": "PHOENIX_QUERY_SERVER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "phoenix-PHOENIX_QUERY_SERVER-bf4b8e304dd0b549bcad6614d3129033", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "phoenix-PHOENIX_QUERY_SERVER-bf4b8e304dd0b549bcad6614d3129033", - "roleConfigGroup": "Query Server Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"phoenix-PHOENIX_QUERY_SERVER-bf4b8e304dd0b549bcad6614d3129033\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "RegionServer (cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "HBASE", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "ed528836ae33e47e6657b95373571c33", - "active": "true", - "serviceDisplayName": "hbase", - "serviceName": "hbase", - "roleType": "REGIONSERVER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hbase-REGIONSERVER-145da1565b8e2c4165145d9ecc0c784e", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hbase-REGIONSERVER-145da1565b8e2c4165145d9ecc0c784e", - "roleConfigGroup": "RegionServer Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"hbase-REGIONSERVER-145da1565b8e2c4165145d9ecc0c784e\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "RegionServer (cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "HBASE", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "88ae2611748383b5628d4aec94873da9", - "active": "true", - "serviceDisplayName": "hbase", - "serviceName": "hbase", - "roleType": "REGIONSERVER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hbase-REGIONSERVER-d51d3a03fc3294039de9c160b1013676", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hbase-REGIONSERVER-d51d3a03fc3294039de9c160b1013676", - "roleConfigGroup": "RegionServer Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1a" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"hbase-REGIONSERVER-d51d3a03fc3294039de9c160b1013676\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "Load Balancer (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "HUE", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "active": "true", - "serviceDisplayName": "hue", - "serviceName": "hue", - "roleType": "HUE_LOAD_BALANCER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hue-HUE_LOAD_BALANCER-7d0b6bba5cf23b4729586ee8d35ab766", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hue-HUE_LOAD_BALANCER-7d0b6bba5cf23b4729586ee8d35ab766", - "roleConfigGroup": "Load Balancer Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"hue-HUE_LOAD_BALANCER-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "Kerberos Ticket Renewer (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "HUE", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "active": "true", - "serviceDisplayName": "hue", - "serviceName": "hue", - "roleType": "KT_RENEWER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hue-KT_RENEWER-7d0b6bba5cf23b4729586ee8d35ab766", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hue-KT_RENEWER-7d0b6bba5cf23b4729586ee8d35ab766", - "roleConfigGroup": "Kerberos Ticket Renewer Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"hue-KT_RENEWER-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "HBase REST Server (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "HBASE", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", - "active": "true", - "serviceDisplayName": "hbase", - "serviceName": "hbase", - "roleType": "HBASERESTSERVER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hbase-HBASERESTSERVER-3bc8f544ef0c15a373bbe9f9790fefba", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hbase-HBASERESTSERVER-3bc8f544ef0c15a373bbe9f9790fefba", - "roleConfigGroup": "HBase REST Server Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1a" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"hbase-HBASERESTSERVER-3bc8f544ef0c15a373bbe9f9790fefba\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "OMID_TSO (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "OMID", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", - "active": "true", - "serviceDisplayName": "omid", - "serviceName": "omid", - "roleType": "OMID_TSO", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "omid-OMID_TSO-3bc8f544ef0c15a373bbe9f9790fefba", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "omid-OMID_TSO-3bc8f544ef0c15a373bbe9f9790fefba", - "roleConfigGroup": "Omid tso server Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1a" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"omid-OMID_TSO-3bc8f544ef0c15a373bbe9f9790fefba\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "JournalNode (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "HDFS", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "759451867dfde961d6adbeb21d9c13f9", - "active": "true", - "serviceDisplayName": "hdfs", - "serviceName": "hdfs", - "roleType": "JOURNALNODE", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hdfs-JOURNALNODE-6e88fa1a7ad969e10ea41365cba9abc5", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hdfs-JOURNALNODE-6e88fa1a7ad969e10ea41365cba9abc5", - "roleConfigGroup": "JournalNode Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"hdfs-JOURNALNODE-6e88fa1a7ad969e10ea41365cba9abc5\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:52:43.000Z", - "value": 390250496, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "JournalNode (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "HDFS", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", - "active": "true", - "serviceDisplayName": "hdfs", - "serviceName": "hdfs", - "roleType": "JOURNALNODE", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hdfs-JOURNALNODE-3bc8f544ef0c15a373bbe9f9790fefba", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hdfs-JOURNALNODE-3bc8f544ef0c15a373bbe9f9790fefba", - "roleConfigGroup": "JournalNode Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1a" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"hdfs-JOURNALNODE-3bc8f544ef0c15a373bbe9f9790fefba\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:52:09.000Z", - "value": 397582336, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "Server (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "ZOOKEEPER", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "759451867dfde961d6adbeb21d9c13f9", - "active": "true", - "serviceDisplayName": "ZooKeeper", - "serviceName": "zookeeper-e52d", - "roleType": "SERVER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "zookeeper-e52d-SERVER-6e88fa1a7ad969e10ea41365cba9abc5", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "zookeeper-e52d-SERVER-6e88fa1a7ad969e10ea41365cba9abc5", - "roleConfigGroup": "Server Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"zookeeper-e52d-SERVER-6e88fa1a7ad969e10ea41365cba9abc5\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:52:43.000Z", - "value": 3058343936, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "PHOENIX_QUERY_SERVER (cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "PHOENIX", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "88ae2611748383b5628d4aec94873da9", - "active": "true", - "serviceDisplayName": "phoenix", - "serviceName": "phoenix", - "roleType": "PHOENIX_QUERY_SERVER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "phoenix-PHOENIX_QUERY_SERVER-d51d3a03fc3294039de9c160b1013676", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "phoenix-PHOENIX_QUERY_SERVER-d51d3a03fc3294039de9c160b1013676", - "roleConfigGroup": "Query Server Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1a" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"phoenix-PHOENIX_QUERY_SERVER-d51d3a03fc3294039de9c160b1013676\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "Hue Server (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "HUE", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "active": "true", - "serviceDisplayName": "hue", - "serviceName": "hue", - "roleType": "HUE_SERVER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hue-HUE_SERVER-7d0b6bba5cf23b4729586ee8d35ab766", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hue-HUE_SERVER-7d0b6bba5cf23b4729586ee8d35ab766", - "roleConfigGroup": "Hue Server Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"hue-HUE_SERVER-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "Master (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "HBASE", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "759451867dfde961d6adbeb21d9c13f9", - "active": "true", - "serviceDisplayName": "hbase", - "serviceName": "hbase", - "roleType": "MASTER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hbase-MASTER-6e88fa1a7ad969e10ea41365cba9abc5", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hbase-MASTER-6e88fa1a7ad969e10ea41365cba9abc5", - "roleConfigGroup": "Master Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"hbase-MASTER-6e88fa1a7ad969e10ea41365cba9abc5\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "Event Server (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "MGMT", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "EVENTSERVER", - "roleName": "EVENTSERVER", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "roleConfigGroup": "Event Server Default Group", - "active": "true", - "serviceDisplayName": "MGMT", - "serviceName": "MGMT", - "roleType": "EVENTSERVER", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"EVENTSERVER\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:52:24.000Z", - "value": 1334972416, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "QUEUEMANAGER_STORE (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "QUEUEMANAGER", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "active": "true", - "serviceDisplayName": "queuemanager", - "serviceName": "queuemanager", - "roleType": "QUEUEMANAGER_STORE", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "queuemanager-QUEUEMANAGER_STORE-7d0b6bba5cf23b4729586ee8d35ab766", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "queuemanager-QUEUEMANAGER_STORE-7d0b6bba5cf23b4729586ee8d35ab766", - "roleConfigGroup": "YARN Queue Manager Store Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"queuemanager-QUEUEMANAGER_STORE-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:52:25.000Z", - "value": 988344320, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "PHOENIX_QUERY_SERVER (cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "PHOENIX", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "22f6ab659c835d47bc13d6c8f3370110", - "active": "true", - "serviceDisplayName": "phoenix", - "serviceName": "phoenix", - "roleType": "PHOENIX_QUERY_SERVER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "phoenix-PHOENIX_QUERY_SERVER-7e9a53b768c95833df424c7d7b0ae857", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "phoenix-PHOENIX_QUERY_SERVER-7e9a53b768c95833df424c7d7b0ae857", - "roleConfigGroup": "Query Server Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"phoenix-PHOENIX_QUERY_SERVER-7e9a53b768c95833df424c7d7b0ae857\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "DataNode (cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "HDFS", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "88ae2611748383b5628d4aec94873da9", - "active": "true", - "serviceDisplayName": "hdfs", - "serviceName": "hdfs", - "roleType": "DATANODE", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hdfs-DATANODE-d51d3a03fc3294039de9c160b1013676", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hdfs-DATANODE-d51d3a03fc3294039de9c160b1013676", - "roleConfigGroup": "DataNode Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1a" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"hdfs-DATANODE-d51d3a03fc3294039de9c160b1013676\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:52:23.000Z", - "value": 589336576, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "NodeManager (cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "YARN", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "ed528836ae33e47e6657b95373571c33", - "active": "true", - "serviceDisplayName": "yarn", - "serviceName": "yarn", - "roleType": "NODEMANAGER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "yarn-NODEMANAGER-145da1565b8e2c4165145d9ecc0c784e", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "yarn-NODEMANAGER-145da1565b8e2c4165145d9ecc0c784e", - "roleConfigGroup": "NodeManager Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"yarn-NODEMANAGER-145da1565b8e2c4165145d9ecc0c784e\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:52:22.000Z", - "value": 432259072, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "Failover Controller (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "HDFS", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "759451867dfde961d6adbeb21d9c13f9", - "active": "true", - "serviceDisplayName": "hdfs", - "serviceName": "hdfs", - "roleType": "FAILOVERCONTROLLER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hdfs-FAILOVERCONTROLLER-6e88fa1a7ad969e10ea41365cba9abc5", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hdfs-FAILOVERCONTROLLER-6e88fa1a7ad969e10ea41365cba9abc5", - "roleConfigGroup": "Failover Controller Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"hdfs-FAILOVERCONTROLLER-6e88fa1a7ad969e10ea41365cba9abc5\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "HBase Thrift Server (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "HBASE", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", - "active": "true", - "serviceDisplayName": "hbase", - "serviceName": "hbase", - "roleType": "HBASETHRIFTSERVER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hbase-HBASETHRIFTSERVER-3bc8f544ef0c15a373bbe9f9790fefba", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hbase-HBASETHRIFTSERVER-3bc8f544ef0c15a373bbe9f9790fefba", - "roleConfigGroup": "HBase Thrift Server Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1a" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"hbase-HBASETHRIFTSERVER-3bc8f544ef0c15a373bbe9f9790fefba\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "NameNode (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "HDFS", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "119115ab851aefe1429860d4255b3fab", - "active": "true", - "serviceDisplayName": "hdfs", - "serviceName": "hdfs", - "roleType": "NAMENODE", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hdfs-NAMENODE-dbb26169f4e1fe9a387fcc5bd5bfd6af", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hdfs-NAMENODE-dbb26169f4e1fe9a387fcc5bd5bfd6af", - "roleConfigGroup": "NameNode Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"hdfs-NAMENODE-dbb26169f4e1fe9a387fcc5bd5bfd6af\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:52:49.000Z", - "value": 1088442368, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "JobHistory Server (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "YARN", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", - "active": "true", - "serviceDisplayName": "yarn", - "serviceName": "yarn", - "roleType": "JOBHISTORY", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "yarn-JOBHISTORY-3bc8f544ef0c15a373bbe9f9790fefba", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "yarn-JOBHISTORY-3bc8f544ef0c15a373bbe9f9790fefba", - "roleConfigGroup": "JobHistory Server Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1a" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"yarn-JOBHISTORY-3bc8f544ef0c15a373bbe9f9790fefba\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:52:09.000Z", - "value": 444329984, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "RegionServer (cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "HBASE", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "49adda80d1b98e9262ee146fd7fd798b", - "active": "true", - "serviceDisplayName": "hbase", - "serviceName": "hbase", - "roleType": "REGIONSERVER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hbase-REGIONSERVER-3c658ac6009daca54192736b1502fae1", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hbase-REGIONSERVER-3c658ac6009daca54192736b1502fae1", - "roleConfigGroup": "hbase-REGIONSERVER", - "category": "ROLE", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"hbase-REGIONSERVER-3c658ac6009daca54192736b1502fae1\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "NodeManager (cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "YARN", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "9784d85849c7179b790d476c483fd905", - "active": "true", - "serviceDisplayName": "yarn", - "serviceName": "yarn", - "roleType": "NODEMANAGER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "yarn-NODEMANAGER-bf4b8e304dd0b549bcad6614d3129033", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "yarn-NODEMANAGER-bf4b8e304dd0b549bcad6614d3129033", - "roleConfigGroup": "NodeManager Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"yarn-NODEMANAGER-bf4b8e304dd0b549bcad6614d3129033\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:52:21.000Z", - "value": 432128000, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "QUEUEMANAGER_WEBAPP (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "QUEUEMANAGER", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "active": "true", - "serviceDisplayName": "queuemanager", - "serviceName": "queuemanager", - "roleType": "QUEUEMANAGER_WEBAPP", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "queuc8af8526-QUEUEMANAGER_WEBAPP-7d0b6bba5cf23b4729586ee8d35ab76", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "queuc8af8526-QUEUEMANAGER_WEBAPP-7d0b6bba5cf23b4729586ee8d35ab76", - "roleConfigGroup": "YARN Queue Manager Webapp Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"queuc8af8526-QUEUEMANAGER_WEBAPP-7d0b6bba5cf23b4729586ee8d35ab76\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:52:25.000Z", - "value": 277598208, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "KNOX_GATEWAY (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "KNOX", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "active": "true", - "serviceDisplayName": "Knox", - "serviceName": "knox-e428", - "roleType": "KNOX_GATEWAY", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "knox-e428-KNOX_GATEWAY-7d0b6bba5cf23b4729586ee8d35ab766", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "knox-e428-KNOX_GATEWAY-7d0b6bba5cf23b4729586ee8d35ab766", - "roleConfigGroup": "Knox Gateway Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"knox-e428-KNOX_GATEWAY-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:52:25.000Z", - "value": 874676224, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "Failover Controller (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "HDFS", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "119115ab851aefe1429860d4255b3fab", - "active": "true", - "serviceDisplayName": "hdfs", - "serviceName": "hdfs", - "roleType": "FAILOVERCONTROLLER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hdfs-FAILOVERCONTROLLER-dbb26169f4e1fe9a387fcc5bd5bfd6af", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hdfs-FAILOVERCONTROLLER-dbb26169f4e1fe9a387fcc5bd5bfd6af", - "roleConfigGroup": "Failover Controller Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"hdfs-FAILOVERCONTROLLER-dbb26169f4e1fe9a387fcc5bd5bfd6af\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "Alert Publisher (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "MGMT", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "ALERTPUBLISHER", - "roleName": "ALERTPUBLISHER", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "roleConfigGroup": "Alert Publisher Default Group", - "active": "true", - "serviceDisplayName": "MGMT", - "serviceName": "MGMT", - "roleType": "ALERTPUBLISHER", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"ALERTPUBLISHER\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:52:25.000Z", - "value": 283770880, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "ResourceManager (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "YARN", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "119115ab851aefe1429860d4255b3fab", - "active": "true", - "serviceDisplayName": "yarn", - "serviceName": "yarn", - "roleType": "RESOURCEMANAGER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "yarn-RESOURCEMANAGER-dbb26169f4e1fe9a387fcc5bd5bfd6af", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "yarn-RESOURCEMANAGER-dbb26169f4e1fe9a387fcc5bd5bfd6af", - "roleConfigGroup": "ResourceManager Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"yarn-RESOURCEMANAGER-dbb26169f4e1fe9a387fcc5bd5bfd6af\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "Telemetry Publisher (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "MGMT", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "TELEMETRYPUBLISHER", - "roleName": "TELEMETRYPUBLISHER", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "roleConfigGroup": "Telemetry Publisher Default Group", - "active": "true", - "serviceDisplayName": "MGMT", - "serviceName": "MGMT", - "roleType": "TELEMETRYPUBLISHER", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"TELEMETRYPUBLISHER\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:52:24.000Z", - "value": 1248509952, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "DataNode (cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "HDFS", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "22f6ab659c835d47bc13d6c8f3370110", - "active": "true", - "serviceDisplayName": "hdfs", - "serviceName": "hdfs", - "roleType": "DATANODE", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hdfs-DATANODE-7e9a53b768c95833df424c7d7b0ae857", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hdfs-DATANODE-7e9a53b768c95833df424c7d7b0ae857", - "roleConfigGroup": "DataNode Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"hdfs-DATANODE-7e9a53b768c95833df424c7d7b0ae857\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:52:24.000Z", - "value": 604594176, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "DataNode (cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "HDFS", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "49adda80d1b98e9262ee146fd7fd798b", - "active": "true", - "serviceDisplayName": "hdfs", - "serviceName": "hdfs", - "roleType": "DATANODE", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hdfs-DATANODE-3c658ac6009daca54192736b1502fae1", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hdfs-DATANODE-3c658ac6009daca54192736b1502fae1", - "roleConfigGroup": "DataNode Default Group", - "category": "ROLE", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"hdfs-DATANODE-3c658ac6009daca54192736b1502fae1\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:52:23.000Z", - "value": 581242880, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "NodeManager (cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "YARN", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "22f6ab659c835d47bc13d6c8f3370110", - "active": "true", - "serviceDisplayName": "yarn", - "serviceName": "yarn", - "roleType": "NODEMANAGER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "yarn-NODEMANAGER-7e9a53b768c95833df424c7d7b0ae857", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "yarn-NODEMANAGER-7e9a53b768c95833df424c7d7b0ae857", - "roleConfigGroup": "yarn-NODEMANAGER", - "category": "ROLE", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"yarn-NODEMANAGER-7e9a53b768c95833df424c7d7b0ae857\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:52:24.000Z", - "value": 447143936, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "NodeManager (cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "YARN", - "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "49adda80d1b98e9262ee146fd7fd798b", - "active": "true", - "serviceDisplayName": "yarn", - "serviceName": "yarn", - "roleType": "NODEMANAGER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "yarn-NODEMANAGER-3c658ac6009daca54192736b1502fae1", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "yarn-NODEMANAGER-3c658ac6009daca54192736b1502fae1", - "roleConfigGroup": "yarn-NODEMANAGER", - "category": "ROLE", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"yarn-NODEMANAGER-3c658ac6009daca54192736b1502fae1\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:52:23.000Z", - "value": 443666432, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(mem_rss)", - "entityName": "Service Monitor (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-11-29T04:48:06.459Z", - "endTime": "2022-11-29T04:53:06.459Z", - "attributes": { - "serviceType": "MGMT", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "SERVICEMONITOR", - "roleName": "SERVICEMONITOR", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "roleConfigGroup": "Service Monitor Default Group", - "active": "true", - "serviceDisplayName": "MGMT", - "serviceName": "MGMT", - "roleType": "SERVICEMONITOR", - "category": "ROLE", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"SERVICEMONITOR\" AND category = ROLE", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:52:24.000Z", - "value": 3099918336, - "type": "SAMPLE" - } - ] - } - ], - "warnings": [], - "timeSeriesQuery": "select last(mem_rss)" - } - ] -} \ No newline at end of file diff --git a/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(physical_memory_cached)&to=now b/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(physical_memory_cached)&to=now deleted file mode 100644 index ccc7815e2c43f..0000000000000 --- a/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(physical_memory_cached)&to=now +++ /dev/null @@ -1,307 +0,0 @@ -{ - "items": [ - { - "timeSeries": [ - { - "metadata": { - "metricName": "last(physical_memory_cached)", - "entityName": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:45:02.415Z", - "endTime": "2022-11-29T04:50:02.415Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "96efbf3e7279bf25ae44fe0a6398ee97", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1a" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(physical_memory_cached) WHERE entityName = \"96efbf3e7279bf25ae44fe0a6398ee97\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:49:09.000Z", - "value": 2690670592, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(physical_memory_cached)", - "entityName": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:45:02.415Z", - "endTime": "2022-11-29T04:50:02.415Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "88ae2611748383b5628d4aec94873da9", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "88ae2611748383b5628d4aec94873da9", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1a" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(physical_memory_cached) WHERE entityName = \"88ae2611748383b5628d4aec94873da9\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:49:23.000Z", - "value": 2141118464, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(physical_memory_cached)", - "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:45:02.415Z", - "endTime": "2022-11-29T04:50:02.415Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "d8623d9457f4db06c5637c4fd4c02f5d", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(physical_memory_cached) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:49:25.000Z", - "value": 15145844736, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(physical_memory_cached)", - "entityName": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:45:02.415Z", - "endTime": "2022-11-29T04:50:02.415Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "22f6ab659c835d47bc13d6c8f3370110", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "22f6ab659c835d47bc13d6c8f3370110", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(physical_memory_cached) WHERE entityName = \"22f6ab659c835d47bc13d6c8f3370110\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:49:24.000Z", - "value": 3900317696, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(physical_memory_cached)", - "entityName": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:45:02.415Z", - "endTime": "2022-11-29T04:50:02.415Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "49adda80d1b98e9262ee146fd7fd798b", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "49adda80d1b98e9262ee146fd7fd798b", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(physical_memory_cached) WHERE entityName = \"49adda80d1b98e9262ee146fd7fd798b\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:49:23.000Z", - "value": 2180915200, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(physical_memory_cached)", - "entityName": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:45:02.415Z", - "endTime": "2022-11-29T04:50:02.415Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "9784d85849c7179b790d476c483fd905", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "9784d85849c7179b790d476c483fd905", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(physical_memory_cached) WHERE entityName = \"9784d85849c7179b790d476c483fd905\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:49:22.000Z", - "value": 2401472512, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(physical_memory_cached)", - "entityName": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:45:02.415Z", - "endTime": "2022-11-29T04:50:02.415Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "119115ab851aefe1429860d4255b3fab", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "119115ab851aefe1429860d4255b3fab", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(physical_memory_cached) WHERE entityName = \"119115ab851aefe1429860d4255b3fab\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:49:50.000Z", - "value": 1961009152, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(physical_memory_cached)", - "entityName": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:45:02.415Z", - "endTime": "2022-11-29T04:50:02.415Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "ed528836ae33e47e6657b95373571c33", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "ed528836ae33e47e6657b95373571c33", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(physical_memory_cached) WHERE entityName = \"ed528836ae33e47e6657b95373571c33\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:49:22.000Z", - "value": 2140213248, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(physical_memory_cached)", - "entityName": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:45:02.415Z", - "endTime": "2022-11-29T04:50:02.415Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "759451867dfde961d6adbeb21d9c13f9", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "759451867dfde961d6adbeb21d9c13f9", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [], - "expression": "SELECT last(physical_memory_cached) WHERE entityName = \"759451867dfde961d6adbeb21d9c13f9\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:49:43.000Z", - "value": 1256312832, - "type": "SAMPLE" - } - ] - } - ], - "warnings": [], - "timeSeriesQuery": "select last(physical_memory_cached)" - } - ] -} \ No newline at end of file diff --git a/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(swap_out_rate)&to=now b/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(swap_out_rate)&to=now deleted file mode 100644 index 6073559d67abb..0000000000000 --- a/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(swap_out_rate)&to=now +++ /dev/null @@ -1,325 +0,0 @@ -{ - "items": [ - { - "timeSeries": [ - { - "metadata": { - "metricName": "last(swap_out_rate)", - "entityName": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:48:31.349Z", - "endTime": "2022-11-29T04:53:31.349Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "96efbf3e7279bf25ae44fe0a6398ee97", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1a" - }, - "unitNumerators": [ - "pages" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(swap_out_rate) WHERE entityName = \"96efbf3e7279bf25ae44fe0a6398ee97\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:53:09.000Z", - "value": 0, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(swap_out_rate)", - "entityName": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:48:31.349Z", - "endTime": "2022-11-29T04:53:31.349Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "88ae2611748383b5628d4aec94873da9", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "88ae2611748383b5628d4aec94873da9", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1a" - }, - "unitNumerators": [ - "pages" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(swap_out_rate) WHERE entityName = \"88ae2611748383b5628d4aec94873da9\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:53:23.000Z", - "value": 0, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(swap_out_rate)", - "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:48:31.349Z", - "endTime": "2022-11-29T04:53:31.349Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "d8623d9457f4db06c5637c4fd4c02f5d", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "pages" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(swap_out_rate) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:53:25.000Z", - "value": 0, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(swap_out_rate)", - "entityName": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:48:31.349Z", - "endTime": "2022-11-29T04:53:31.349Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "22f6ab659c835d47bc13d6c8f3370110", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "22f6ab659c835d47bc13d6c8f3370110", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "pages" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(swap_out_rate) WHERE entityName = \"22f6ab659c835d47bc13d6c8f3370110\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:53:24.000Z", - "value": 0, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(swap_out_rate)", - "entityName": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:48:31.349Z", - "endTime": "2022-11-29T04:53:31.349Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "49adda80d1b98e9262ee146fd7fd798b", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "49adda80d1b98e9262ee146fd7fd798b", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "pages" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(swap_out_rate) WHERE entityName = \"49adda80d1b98e9262ee146fd7fd798b\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:53:23.000Z", - "value": 0, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(swap_out_rate)", - "entityName": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:48:31.349Z", - "endTime": "2022-11-29T04:53:31.349Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "9784d85849c7179b790d476c483fd905", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "9784d85849c7179b790d476c483fd905", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "pages" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(swap_out_rate) WHERE entityName = \"9784d85849c7179b790d476c483fd905\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:53:22.000Z", - "value": 0, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(swap_out_rate)", - "entityName": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:48:31.349Z", - "endTime": "2022-11-29T04:53:31.349Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "119115ab851aefe1429860d4255b3fab", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "119115ab851aefe1429860d4255b3fab", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "pages" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(swap_out_rate) WHERE entityName = \"119115ab851aefe1429860d4255b3fab\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:52:50.000Z", - "value": 0, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(swap_out_rate)", - "entityName": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:48:31.349Z", - "endTime": "2022-11-29T04:53:31.349Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "ed528836ae33e47e6657b95373571c33", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "ed528836ae33e47e6657b95373571c33", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "pages" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(swap_out_rate) WHERE entityName = \"ed528836ae33e47e6657b95373571c33\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:53:22.000Z", - "value": 0, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(swap_out_rate)", - "entityName": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:48:31.349Z", - "endTime": "2022-11-29T04:53:31.349Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "759451867dfde961d6adbeb21d9c13f9", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "759451867dfde961d6adbeb21d9c13f9", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "pages" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(swap_out_rate) WHERE entityName = \"759451867dfde961d6adbeb21d9c13f9\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:52:43.000Z", - "value": 0, - "type": "SAMPLE" - } - ] - } - ], - "warnings": [], - "timeSeriesQuery": "select last(swap_out_rate)" - } - ] -} \ No newline at end of file diff --git a/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(total_bytes_receive_rate_across_network_interfaces)&to=now b/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(total_bytes_receive_rate_across_network_interfaces)&to=now deleted file mode 100644 index 79d4b7b1264fb..0000000000000 --- a/cloudera/tests/docker/fixtures/api/v48/timeseries?contentType=application%2Fjson&desiredRollup=RAW&mustUseDesiredRollup=false&query=select%20last(total_bytes_receive_rate_across_network_interfaces)&to=now +++ /dev/null @@ -1,447 +0,0 @@ -{ - "items": [ - { - "timeSeries": [ - { - "metadata": { - "metricName": "last(total_bytes_receive_rate_across_network_interfaces)", - "entityName": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:49:12.024Z", - "endTime": "2022-11-29T04:54:12.024Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "96efbf3e7279bf25ae44fe0a6398ee97", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1a" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(total_bytes_receive_rate_across_network_interfaces) WHERE entityName = \"96efbf3e7279bf25ae44fe0a6398ee97\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:54:03.770Z", - "value": 1032.2, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(total_bytes_receive_rate_across_network_interfaces)", - "entityName": "/ap-northeast-1a", - "startTime": "2022-11-29T04:49:12.024Z", - "endTime": "2022-11-29T04:54:12.024Z", - "attributes": { - "active": "true", - "category": "RACK", - "entityName": "/ap-northeast-1a", - "rackId": "/ap-northeast-1a" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(total_bytes_receive_rate_across_network_interfaces) WHERE entityName = \"/ap-northeast-1a\" AND category = RACK", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:54:03.770Z", - "value": 1447.9833333333333, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(total_bytes_receive_rate_across_network_interfaces)", - "entityName": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:49:12.024Z", - "endTime": "2022-11-29T04:54:12.024Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "88ae2611748383b5628d4aec94873da9", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "88ae2611748383b5628d4aec94873da9", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1a" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(total_bytes_receive_rate_across_network_interfaces) WHERE entityName = \"88ae2611748383b5628d4aec94873da9\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:54:03.770Z", - "value": 415.78333333333336, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(total_bytes_receive_rate_across_network_interfaces)", - "entityName": "/ap-northeast-1c", - "startTime": "2022-11-29T04:49:12.024Z", - "endTime": "2022-11-29T04:54:12.024Z", - "attributes": { - "active": "true", - "category": "RACK", - "entityName": "/ap-northeast-1c", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(total_bytes_receive_rate_across_network_interfaces) WHERE entityName = \"/ap-northeast-1c\" AND category = RACK", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:54:03.770Z", - "value": 3130.9833333333336, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(total_bytes_receive_rate_across_network_interfaces)", - "entityName": "/ap-northeast-1d", - "startTime": "2022-11-29T04:49:12.024Z", - "endTime": "2022-11-29T04:54:12.024Z", - "attributes": { - "active": "true", - "category": "RACK", - "entityName": "/ap-northeast-1d", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(total_bytes_receive_rate_across_network_interfaces) WHERE entityName = \"/ap-northeast-1d\" AND category = RACK", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:54:03.770Z", - "value": 534756.65, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(total_bytes_receive_rate_across_network_interfaces)", - "entityName": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:49:12.024Z", - "endTime": "2022-11-29T04:54:12.024Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "22f6ab659c835d47bc13d6c8f3370110", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "22f6ab659c835d47bc13d6c8f3370110", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(total_bytes_receive_rate_across_network_interfaces) WHERE entityName = \"22f6ab659c835d47bc13d6c8f3370110\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:54:03.770Z", - "value": 348.53333333333336, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(total_bytes_receive_rate_across_network_interfaces)", - "entityName": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:49:12.024Z", - "endTime": "2022-11-29T04:54:12.024Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "49adda80d1b98e9262ee146fd7fd798b", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "49adda80d1b98e9262ee146fd7fd798b", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(total_bytes_receive_rate_across_network_interfaces) WHERE entityName = \"49adda80d1b98e9262ee146fd7fd798b\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:54:03.770Z", - "value": 339.93333333333334, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(total_bytes_receive_rate_across_network_interfaces)", - "entityName": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:49:12.024Z", - "endTime": "2022-11-29T04:54:12.024Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "119115ab851aefe1429860d4255b3fab", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "119115ab851aefe1429860d4255b3fab", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1c" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(total_bytes_receive_rate_across_network_interfaces) WHERE entityName = \"119115ab851aefe1429860d4255b3fab\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:54:03.770Z", - "value": 2442.516666666667, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(total_bytes_receive_rate_across_network_interfaces)", - "entityName": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:49:12.024Z", - "endTime": "2022-11-29T04:54:12.024Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "ed528836ae33e47e6657b95373571c33", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "ed528836ae33e47e6657b95373571c33", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(total_bytes_receive_rate_across_network_interfaces) WHERE entityName = \"ed528836ae33e47e6657b95373571c33\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:54:03.770Z", - "value": 344.5, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(total_bytes_receive_rate_across_network_interfaces)", - "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:49:12.024Z", - "endTime": "2022-11-29T04:54:12.024Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "d8623d9457f4db06c5637c4fd4c02f5d", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(total_bytes_receive_rate_across_network_interfaces) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:54:03.770Z", - "value": 531573.2833333333, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(total_bytes_receive_rate_across_network_interfaces)", - "entityName": "cod--qfdcinkqrzw", - "startTime": "2022-11-29T04:49:12.024Z", - "endTime": "2022-11-29T04:54:12.024Z", - "attributes": { - "active": "true", - "clusterDisplayName": "cod--qfdcinkqrzw", - "category": "CLUSTER", - "version": "CDH 7.2.15", - "entityName": "1546335201", - "clusterName": "cod--qfdcinkqrzw" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(total_bytes_receive_rate_across_network_interfaces) WHERE entityName = \"1546335201\" AND category = CLUSTER", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:54:03.770Z", - "value": 539335.6166666667, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(total_bytes_receive_rate_across_network_interfaces)", - "entityName": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:49:12.024Z", - "endTime": "2022-11-29T04:54:12.024Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "9784d85849c7179b790d476c483fd905", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "9784d85849c7179b790d476c483fd905", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(total_bytes_receive_rate_across_network_interfaces) WHERE entityName = \"9784d85849c7179b790d476c483fd905\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:54:03.770Z", - "value": 441.18333333333334, - "type": "SAMPLE" - } - ] - }, - { - "metadata": { - "metricName": "last(total_bytes_receive_rate_across_network_interfaces)", - "entityName": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-11-29T04:49:12.024Z", - "endTime": "2022-11-29T04:54:12.024Z", - "attributes": { - "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", - "clusterDisplayName": "cod--qfdcinkqrzw", - "entityName": "759451867dfde961d6adbeb21d9c13f9", - "clusterName": "cod--qfdcinkqrzw", - "hostId": "759451867dfde961d6adbeb21d9c13f9", - "active": "true", - "category": "HOST", - "version": "CDH 7.2.15", - "rackId": "/ap-northeast-1d" - }, - "unitNumerators": [ - "bytes" - ], - "unitDenominators": [ - "seconds" - ], - "expression": "SELECT last(total_bytes_receive_rate_across_network_interfaces) WHERE entityName = \"759451867dfde961d6adbeb21d9c13f9\" AND category = HOST", - "metricCollectionFrequencyMs": 0, - "rollupUsed": "RAW" - }, - "data": [ - { - "timestamp": "2022-11-29T04:54:03.770Z", - "value": 2397.6833333333334, - "type": "SAMPLE" - } - ] - } - ], - "warnings": [], - "timeSeriesQuery": "select last(total_bytes_receive_rate_across_network_interfaces)" - } - ] -} \ No newline at end of file diff --git a/cloudera/tests/test_integration.py b/cloudera/tests/test_integration.py index 5319b039577e2..09693d9f35ddf 100644 --- a/cloudera/tests/test_integration.py +++ b/cloudera/tests/test_integration.py @@ -4,58 +4,33 @@ from datadog_checks.cloudera.metrics import METRICS +@pytest.mark.usefixtures('dd_environment') @pytest.mark.integration def test_given_bad_url_when_check_runs_then_service_check_critical( aggregator, dd_run_check, cloudera_check, + instance, ): - # Given - instance = { - 'api_url': 'bad_url', - } - check = cloudera_check(instance) - # When - dd_run_check(check) - # Then - aggregator.assert_service_check('cloudera.can_connect', ClouderaCheck.CRITICAL) - - -# @pytest.mark.usefixtures('dd_environment') -# @pytest.mark.integration -# def test_given_api_v12_endpoint_when_check_runs_then_service_check_ok_and_metrics( -# aggregator, -# dd_run_check, -# cloudera_check, -# ): -# # Given -# instance = { -# 'username': 'cloudera', -# 'password': 'cloudera', -# 'api_url': 'http://localhost:7180/api/v12', -# } -# check = cloudera_check(instance) -# # When -# dd_run_check(check) -# # Then -# for category, metrics in METRICS.items(): -# for metric in metrics: -# aggregator.assert_metric(f'cloudera.{category}.{metric}') -# aggregator.assert_service_check('cloudera.can_connect', ClouderaCheck.OK) + with pytest.raises(Exception): + # Given + check = cloudera_check(instance) + # When + dd_run_check(check) + # Then + aggregator.assert_service_check('cloudera.can_connect', ClouderaCheck.CRITICAL) +@pytest.mark.usefixtures('dd_environment') @pytest.mark.integration def test_given_api_v48_endpoint_when_check_runs_then_service_check_ok_and_metrics( aggregator, dd_run_check, cloudera_check, + instance, ): # Given - instance = { - 'username': 'cloudera', - 'password': 'cloudera', - 'api_url': 'http://localhost:7180/api/v12', - } + instance['api_url'] = "http://localhost:8080/api/v48" check = cloudera_check(instance) # When dd_run_check(check) From cdff2001c3fc69cc9545d7ce65c729336c8bb7b5 Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Fri, 2 Dec 2022 14:08:37 -0500 Subject: [PATCH 30/71] Fix license validation --- LICENSE-3rdparty.csv | 2 +- .../datadog_checks/dev/tooling/commands/validate/licenses.py | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/LICENSE-3rdparty.csv b/LICENSE-3rdparty.csv index d75b7daa7444d..5c97dc066b630 100644 --- a/LICENSE-3rdparty.csv +++ b/LICENSE-3rdparty.csv @@ -19,7 +19,7 @@ cachetools,PyPI,MIT,Thomas Kemmer check-postgres,"https://github.com/bucardo/",BSD-2-Clause,Greg Sabino Mullane clickhouse-cityhash,PyPI,MIT,Alexander [Amper] Marshalov clickhouse-driver,PyPI,MIT,Konstantin Lebedev -cm-client,PyPI,Apache-2.0,Cloudera team +cm-client,PyPI,Apache-2.0, contextlib2,PyPI,PSF,Nick Coghlan cryptography,PyPI,Apache-2.0,The Python Cryptographic Authority and individual contributors | The cryptography developers cryptography,PyPI,BSD-3-Clause,The Python Cryptographic Authority and individual contributors | The cryptography developers diff --git a/datadog_checks_dev/datadog_checks/dev/tooling/commands/validate/licenses.py b/datadog_checks_dev/datadog_checks/dev/tooling/commands/validate/licenses.py index 4f7a6366f2fde..682a9fabc2f8a 100644 --- a/datadog_checks_dev/datadog_checks/dev/tooling/commands/validate/licenses.py +++ b/datadog_checks_dev/datadog_checks/dev/tooling/commands/validate/licenses.py @@ -28,6 +28,8 @@ 'gssapi': ['ISC'], # https://github.com/cannatag/ldap3/blob/dev/COPYING.txt 'ldap3': ['LGPL-3.0-only'], + # https://cloudera.github.io/cm_api/ + 'cm-client': ['Apache-2.0'], # https://github.com/oauthlib/oauthlib/blob/master/LICENSE 'oauthlib': ['BSD-3-Clause'], # https://github.com/paramiko/paramiko/blob/master/LICENSE From 8de24cc4f51a8d72e82eeda6715ab71eda6e441f Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Fri, 2 Dec 2022 14:49:38 -0500 Subject: [PATCH 31/71] Remove unused constants --- cloudera/datadog_checks/cloudera/common.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/cloudera/datadog_checks/cloudera/common.py b/cloudera/datadog_checks/cloudera/common.py index 2d76ed33f0760..6533b4d3e002a 100644 --- a/cloudera/datadog_checks/cloudera/common.py +++ b/cloudera/datadog_checks/cloudera/common.py @@ -1,6 +1,3 @@ CAN_CONNECT = "can_connect" CLUSTER_HEALTH = "cluster.health" -ROLE_HEALTH = "role.health" HOST_HEALTH = "host.health" - -# mock all of the methods and classes of the cloudera client From 4432ccb46592853e69add6806894b75937b00c1a Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Fri, 2 Dec 2022 14:49:54 -0500 Subject: [PATCH 32/71] Add e2e test --- cloudera/tests/test_e2e.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 cloudera/tests/test_e2e.py diff --git a/cloudera/tests/test_e2e.py b/cloudera/tests/test_e2e.py new file mode 100644 index 0000000000000..0ce7f38a1ac53 --- /dev/null +++ b/cloudera/tests/test_e2e.py @@ -0,0 +1,19 @@ +import pytest + +from datadog_checks.cloudera import ClouderaCheck +from datadog_checks.cloudera.metrics import METRICS + + +@pytest.mark.e2e +def test_e2e(dd_agent_check, instance): + # Given + instance['api_url'] = "http://localhost:8080/api/v48" + # When + aggregator = dd_agent_check(instance) + # Then + for category, metrics in METRICS.items(): + for metric in metrics: + aggregator.assert_metric(f'cloudera.{category}.{metric}') + aggregator.assert_service_check('cloudera.can_connect', ClouderaCheck.OK) + aggregator.assert_service_check('cloudera.cluster.health', ClouderaCheck.CRITICAL, message="BAD_HEALTH") # test env is in BAD_HEALTH + aggregator.assert_service_check('cloudera.host.health', ClouderaCheck.OK) From 4ed276d1d67056b5c1510e8e0b6ce894b1ff43c0 Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Fri, 2 Dec 2022 15:00:01 -0500 Subject: [PATCH 33/71] Use master's change --- .github/workflows/config/labeler.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/config/labeler.yml b/.github/workflows/config/labeler.yml index 2e3db4765fffd..f1a08e6af77cc 100644 --- a/.github/workflows/config/labeler.yml +++ b/.github/workflows/config/labeler.yml @@ -2,11 +2,13 @@ base_package: - datadog_checks_base/**/* changelog/no-changelog: - requirements-agent-release.txt -- datadog_checks_dev/datadog_checks/dev/__about__.py +- '*/__about__.py' - all: - '*/!(datadog_checks)/**' - all: - '*/!(pyproject.toml)' +- all: + - '*/(!ddev)/**' ddev: - ddev/**/* dependencies: From bbfe02301b562b6459c97f9e468530d6e23c9d0a Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Fri, 2 Dec 2022 15:42:18 -0500 Subject: [PATCH 34/71] Fix e2e and integration test style --- cloudera/tests/test_e2e.py | 3 ++- cloudera/tests/test_integration.py | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/cloudera/tests/test_e2e.py b/cloudera/tests/test_e2e.py index 0ce7f38a1ac53..278a7bb0b81f9 100644 --- a/cloudera/tests/test_e2e.py +++ b/cloudera/tests/test_e2e.py @@ -15,5 +15,6 @@ def test_e2e(dd_agent_check, instance): for metric in metrics: aggregator.assert_metric(f'cloudera.{category}.{metric}') aggregator.assert_service_check('cloudera.can_connect', ClouderaCheck.OK) - aggregator.assert_service_check('cloudera.cluster.health', ClouderaCheck.CRITICAL, message="BAD_HEALTH") # test env is in BAD_HEALTH + # caddy test env is supposed to be in BAD_HEALTH + aggregator.assert_service_check('cloudera.cluster.health', ClouderaCheck.CRITICAL, message="BAD_HEALTH") aggregator.assert_service_check('cloudera.host.health', ClouderaCheck.OK) diff --git a/cloudera/tests/test_integration.py b/cloudera/tests/test_integration.py index 09693d9f35ddf..083e22abf327f 100644 --- a/cloudera/tests/test_integration.py +++ b/cloudera/tests/test_integration.py @@ -39,3 +39,6 @@ def test_given_api_v48_endpoint_when_check_runs_then_service_check_ok_and_metric for metric in metrics: aggregator.assert_metric(f'cloudera.{category}.{metric}') aggregator.assert_service_check('cloudera.can_connect', ClouderaCheck.OK) + # caddy test env is supposed to be in BAD_HEALTH + aggregator.assert_service_check('cloudera.cluster.health', ClouderaCheck.CRITICAL, message="BAD_HEALTH") + aggregator.assert_service_check('cloudera.host.health', ClouderaCheck.OK) From 65e44c1c71b0ce2447d2891046b756e17d144504 Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Fri, 2 Dec 2022 16:25:10 -0500 Subject: [PATCH 35/71] Add temporary gitlab change --- .gitlab-ci.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1125163f75b3a..38283ed14f3e0 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -63,8 +63,10 @@ trigger-agent-build: changes: - datadog_checks_base/datadog_checks/base/data/agent_requirements.in when: always - - if: ($CI_COMMIT_BRANCH !~ /^7.[0-9]{2}.x/) - when: always + # TODO: Add this back once Cloudera is ready to merge + # This is stopping the trigger-agent-build to run since all pipelines run when cm-client is added + # - if: ($CI_COMMIT_BRANCH !~ /^7.[0-9]{2}.x/) + # when: always cache: <<: *slack-cache script: From f1de60f80ff10a111569e736ef57abc3df26e7e9 Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Fri, 2 Dec 2022 16:33:50 -0500 Subject: [PATCH 36/71] Temporarily add default dep --- cloudera/hatch.toml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/cloudera/hatch.toml b/cloudera/hatch.toml index 4293e03e3b5f0..c0c471576321b 100644 --- a/cloudera/hatch.toml +++ b/cloudera/hatch.toml @@ -2,3 +2,11 @@ [[envs.default.matrix]] python = ["38"] + + +# TODO: Remove this when cloudera is ready to merge +# This is temporary to stop CI complaining +[envs.default] +dependencies = [ + "cm-client", +] \ No newline at end of file From 01499aa52bdc47d72e4119238652ae85f1d18c61 Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Fri, 2 Dec 2022 17:08:09 -0500 Subject: [PATCH 37/71] Wait for Cloudera is up --- cloudera/tests/conftest.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/cloudera/tests/conftest.py b/cloudera/tests/conftest.py index a55039b1b540b..15343a9edd384 100644 --- a/cloudera/tests/conftest.py +++ b/cloudera/tests/conftest.py @@ -8,6 +8,7 @@ from datadog_checks.cloudera import ClouderaCheck from datadog_checks.dev import docker_run +from datadog_checks.dev.conditions import CheckDockerLogs from . import common @@ -31,7 +32,13 @@ def dd_environment(): # yield common.INSTANCE compose_file = common.COMPOSE_FILE - with docker_run(compose_file): + conditions = [ + CheckDockerLogs(identifier='cloudera', patterns=['server running']), + ] + with docker_run( + compose_file, + conditions=conditions, + ): yield common.INSTANCE From 21a909cbc6f54405125e13dca454d3630da8e889 Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Wed, 7 Dec 2022 11:55:37 -0800 Subject: [PATCH 38/71] Refactor Cloudera (#13460) * Add native host metrics * Remove unused function name * Refactor Cloudera * Remove native metric support * Fix style * Update refactor from feedback --- .../datadog_checks/cloudera/api_client_v5.py | 106 - .../datadog_checks/cloudera/api_client_v7.py | 142 +- cloudera/datadog_checks/cloudera/check.py | 9 +- cloudera/datadog_checks/cloudera/queries.py | 104 - cloudera/tests/common.py | 2 +- cloudera/tests/conftest.py | 43 +- cloudera/tests/docker/Dockerfile | 6 - cloudera/tests/docker/docker-compose.yaml.v5 | 31 - .../v48/timeseries/get_metrics_from_cluster | 55 +- .../api/v48/timeseries/get_metrics_from_disk | 128 +- .../api/v48/timeseries/get_metrics_from_host | 300 +- .../api/v48/timeseries/get_metrics_from_role | 5449 +++++++++++++++-- cloudera/tests/docker/start_cloudera.sh | 55 - cloudera/tests/test_config.py | 0 cloudera/tests/test_e2e.py | 1 - cloudera/tests/test_integration.py | 1 - cloudera/tests/test_unit.py | 179 +- 17 files changed, 5356 insertions(+), 1255 deletions(-) delete mode 100644 cloudera/datadog_checks/cloudera/api_client_v5.py delete mode 100644 cloudera/datadog_checks/cloudera/queries.py delete mode 100644 cloudera/tests/docker/Dockerfile delete mode 100644 cloudera/tests/docker/docker-compose.yaml.v5 delete mode 100644 cloudera/tests/docker/start_cloudera.sh delete mode 100644 cloudera/tests/test_config.py diff --git a/cloudera/datadog_checks/cloudera/api_client_v5.py b/cloudera/datadog_checks/cloudera/api_client_v5.py deleted file mode 100644 index ebd0e3f4808ab..0000000000000 --- a/cloudera/datadog_checks/cloudera/api_client_v5.py +++ /dev/null @@ -1,106 +0,0 @@ -# import cm_client -# from cm_client.rest import ApiException - -# from datadog_checks.base import AgentCheck -# from datadog_checks.cloudera.api_client import ApiClient -# from datadog_checks.cloudera.entity_status import ENTITY_STATUS -# from datadog_checks.cloudera.health_summary import HEALTH_SUMMARY -# from datadog_checks.cloudera.metrics import METRICS - - -# class ApiClientV5(ApiClient): -# def __init__(self, check, instance, api_client): -# super(ApiClientV5, self).__init__(check, instance, api_client) - -# def collect_data(self): -# self._collect_clusters() - -# def _collect_clusters(self): -# clusters_resource_api = cm_client.ClustersResourceApi(self._api_client) -# read_clusters_response = clusters_resource_api.read_clusters(cluster_type='any', view='full') -# self._log.debug('read_clusters_response: %s', read_clusters_response) -# for cluster in read_clusters_response.items: -# self._collect_cluster(cluster) - -# def _collect_cluster(self, cluster): -# self._log.debug('cluster: %s', cluster) -# cluster_entity_status = ENTITY_STATUS[cluster.entity_status] if cluster.entity_status else None -# cluster_name = cluster.name -# cluster_tags = cluster.tags -# self._log.debug('cluster_entity_status: %s', cluster_entity_status) -# self._log.debug('cluster_name: %s', cluster_name) -# self._log.debug('cluster_tags: %s', cluster_tags) -# if cluster_name: -# tags = [f'cloudera_cluster:{cluster_name}'] -# if cluster_tags: -# for cluster_tag in cluster_tags: -# tags.append(f"{cluster_tag.name}:{cluster_tag.value}") -# self._check.service_check("cluster_status", cluster_entity_status, tags=tags) -# if cluster_name: -# self._collect_cluster_metrics(cluster_name, tags) -# self._collect_cluster_hosts(cluster_name) - -# def _collect_cluster_metrics(self, cluster_name, tags): -# time_series_resource_api = cm_client.TimeSeriesResourceApi(self._api_client) -# metric_names = ','.join(f'last({metric})' for metric in METRICS['cluster']) -# query = f'SELECT {metric_names} WHERE clusterName="{cluster_name}" AND category=CLUSTER' -# self._log.debug('query: %s', query) -# query_time_series_response = time_series_resource_api.query_time_series(query=query) -# self._log.debug('query_time_series_response: %s', query_time_series_response) -# index = 0 -# while index < len(query_time_series_response.items[0].time_series): -# metric_name = METRICS['cluster'][index] -# value = query_time_series_response.items[0].time_series[index].data[0].value -# self._log.debug('metric_name: %s', f'cluster.{metric_name}') -# self._log.debug('value: %s', value) -# self._log.debug('tags: %s', tags) -# self._check.gauge(f'cluster.{metric_name}', value, tags=tags) -# index += 1 - -# def _collect_cluster_hosts(self, cluster_name): -# clusters_resource_api = cm_client.ClustersResourceApi(self._api_client) -# list_hosts_response = clusters_resource_api.list_hosts(cluster_name, view='full') -# self._log.debug('list_hosts_response: %s', list_hosts_response) -# for host in list_hosts_response.items: -# self._collect_cluster_host(host) - -# def _collect_cluster_host(self, host): -# self._log.debug('host: %s', host) -# host_health_summary = HEALTH_SUMMARY[host.health_summary] if host.health_summary else None -# host_id = host.host_id -# host_name = host.hostname -# host_ip_address = host.ip_address -# host_tags = host.tags -# self._log.debug('host_status: %s', host_health_summary) -# self._log.debug('host_id: %s', host_id) -# self._log.debug('host_tags: %s', host_tags) -# tags = [] -# if host_id: -# tags.append(f'cloudera_host_id:{host_id}') -# if host_name: -# tags.append(f'cloudera_host_id:{host_name}') -# if host_ip_address: -# tags.append(f'cloudera_host_id:{host_ip_address}') -# if host_tags: -# tags.extend([f"{host_tag.name}:{host_tag.value}" for host_tag in host_tags]) -# self._log.debug('host_tags: %s', tags) -# self._check.service_check("host_status", host_health_summary, tags=tags) -# if host_id: -# self._collect_host_metrics(host_id, tags) - -# def _collect_host_metrics(self, host_id, tags): -# time_series_resource_api = cm_client.TimeSeriesResourceApi(self._api_client) -# metric_names = ','.join(f'last({metric})' for metric in METRICS['host']) -# query = f'SELECT {metric_names} WHERE hostId="{host_id}" AND category=HOST' -# self._log.debug('query: %s', query) -# query_time_series_response = time_series_resource_api.query_time_series(query=query) -# self._log.debug('query_time_series_response: %s', query_time_series_response) -# index = 0 -# while index < len(query_time_series_response.items[0].time_series): -# metric_name = METRICS['host'][index] -# value = query_time_series_response.items[0].time_series[index].data[0].value -# self._log.debug('metric_name: %s', f'host.{metric_name}') -# self._log.debug('value: %s', value) -# self._log.debug('tags: %s', tags) -# self._check.gauge(f'host.{metric_name}', value, tags=tags) -# index += 1 diff --git a/cloudera/datadog_checks/cloudera/api_client_v7.py b/cloudera/datadog_checks/cloudera/api_client_v7.py index 6cf058cd8542f..3f52763d7ba20 100644 --- a/cloudera/datadog_checks/cloudera/api_client_v7.py +++ b/cloudera/datadog_checks/cloudera/api_client_v7.py @@ -8,7 +8,6 @@ from .common import CLUSTER_HEALTH, HOST_HEALTH -# TODO: Refactor this to abstract out timeseries queries using composite pattern class ApiClientV7(ApiClient): def __init__(self, check, api_client): super(ApiClientV7, self).__init__(check, api_client) @@ -22,118 +21,95 @@ def _collect_clusters(self): self._log.debug("Full clusters response:") self._log.debug(read_clusters_response) for cluster in read_clusters_response.items: - self._collect_cluster_metrics_and_service_check(cluster) + cluster_name = cluster.name + self._log.debug('cluster_name: %s', cluster_name) + self._log.debug('cluster: %s', cluster) - def _collect_cluster_metrics_and_service_check(self, cluster): - self._log.debug('cluster: %s', cluster) - cluster_entity_status = ENTITY_STATUS[cluster.entity_status] - cluster_name = cluster.name - cluster_tags = cluster.tags - self._log.debug('cluster_entity_status: %s', cluster_entity_status) - self._log.debug('cluster_name: %s', cluster_name) - self._log.debug('cluster_tags: %s', cluster_tags) + tags = self._collect_cluster_tags(cluster) - if cluster_name: - tags = [f'cloudera_cluster:{cluster_name}'] + self._collect_cluster_metrics(cluster_name, tags) + self._collect_cluster_service_check(cluster, tags) + self._collect_hosts(cluster_name) - if cluster_tags: - for cluster_tag in cluster_tags: + def _collect_cluster_tags(self, cluster): + tags = [] + if cluster.name: + for cluster_tag in cluster.tags: tags.append(f"{cluster_tag.name}:{cluster_tag.value}") + return tags + def _collect_cluster_service_check(self, cluster, tags): + cluster_entity_status = ENTITY_STATUS[cluster.entity_status] message = cluster.entity_status if cluster_entity_status != AgentCheck.OK else None - self._check.service_check(CLUSTER_HEALTH, cluster_entity_status, tags=tags, message=message) - - if cluster_name: - self._collect_cluster_metrics(cluster_name, tags) - self._collect_hosts_metrics_and_service_check(cluster_name) + self._check.service_check( + CLUSTER_HEALTH, cluster_entity_status, tags=tags + [f'cloudera_cluster:{cluster.name}'], message=message + ) def _collect_cluster_metrics(self, cluster_name, tags): - time_series_resource_api = cm_client.TimeSeriesResourceApi(self._api_client) - metric_names = ','.join(f'last({metric})' for metric in TIMESERIES_METRICS['cluster']) + metric_names = ','.join(f'last({metric}) AS {metric}' for metric in TIMESERIES_METRICS['cluster']) query = f'SELECT {metric_names} WHERE clusterName="{cluster_name}" AND category=CLUSTER' - self._log.debug('query: %s', query) - query_time_series_response = time_series_resource_api.query_time_series(query=query) - self._log.debug("Full timeseries response:") - self._log.debug(query_time_series_response) - self._collect_query_time_series(query_time_series_response, 'cluster', []) + self._query_time_series(query, category='cluster', tags=tags) - def _collect_hosts_metrics_and_service_check(self, cluster_name): + def _collect_hosts(self, cluster_name): clusters_resource_api = cm_client.ClustersResourceApi(self._api_client) list_hosts_response = clusters_resource_api.list_hosts(cluster_name, view='full') self._log.debug("Full hosts response:") self._log.debug(list_hosts_response) - for host in list_hosts_response.items: - self._collect_host_metrics_and_service_check(host) - - def _collect_host_metrics_and_service_check(self, host): - self._log.debug('host: %s', host) + tags = self._collect_host_tags(host) + + if host.host_id: + self._collect_host_metrics(host, tags) + self._collect_role_metrics(host, tags) + self._collect_disk_metrics(host, tags) + self._collect_host_service_check(host, tags) + + def _collect_host_tags(self, host): + tags = [ + f'cloudera_rack_id:{host.rack_id}', + f'cloudera_cluster:{host.cluster_ref.cluster_name}', + ] + + host_tags = host.tags + if host_tags: + for host_tag in host_tags: + tags.append(f"{host_tag.name}:{host_tag.value}") + return tags + + def _collect_host_service_check(self, host, tags): host_entity_status = ENTITY_STATUS[host.entity_status] if host.entity_status else None - - host_id = host.host_id self._log.debug('host_entity_status: %s', host_entity_status) - self._log.debug('host_id: %s', host_id) + self._check.service_check(HOST_HEALTH, host_entity_status, tags=tags) - if host_id: - tags = [f"{tag.name}:{tag.value}" for tag in host.tags] if host.tags else [] - self._collect_host_metrics(host_id, tags) - self._collect_role_metrics(host_id, tags) - self._collect_host_disks(host_id) - self._log.debug('host tags: %s', tags) - self._check.service_check(HOST_HEALTH, host_entity_status, tags=tags) + def _collect_host_metrics(self, host, tags): + metric_names = ','.join(f'last({metric}) AS {metric}' for metric in TIMESERIES_METRICS['host']) + query = f'SELECT {metric_names} WHERE hostId="{host.host_id}" AND category=HOST' + self._query_time_series(query, category='host', tags=tags) - def _collect_host_metrics(self, host_id, tags): - time_series_resource_api = cm_client.TimeSeriesResourceApi(self._api_client) - metric_names = ','.join(f'last({metric})' for metric in TIMESERIES_METRICS['host']) - query = f'SELECT {metric_names} WHERE hostId="{host_id}" AND category=HOST' - self._log.debug('query: %s', query) - query_time_series_response = time_series_resource_api.query_time_series(query=query) - self._log.debug("Full timeseries response:") - self._log.debug(query_time_series_response) + def _collect_role_metrics(self, host, tags): + metric_names = ','.join(f'last({metric}) AS {metric}' for metric in TIMESERIES_METRICS['role']) + query = f'SELECT {metric_names} WHERE hostId="{host.host_id}" AND category=ROLE' + self._query_time_series(query, category='role', tags=tags) - self._collect_query_time_series(query_time_series_response, 'host', tags) + def _collect_disk_metrics(self, host, tags): + metric_names = ','.join(f'last({metric}) AS {metric}' for metric in TIMESERIES_METRICS['disk']) + query = f'SELECT {metric_names} WHERE hostId="{host.host_id}" AND category=DISK' + self._query_time_series(query, category='disk', tags=tags) - def _collect_role_metrics(self, host_id, tags): - time_series_resource_api = cm_client.TimeSeriesResourceApi(self._api_client) - metric_names = ','.join(f'last({metric})' for metric in TIMESERIES_METRICS['role']) - query = f'SELECT {metric_names} WHERE hostId="{host_id}" AND category=ROLE' + def _query_time_series(self, query, category, tags): self._log.debug('query: %s', query) - query_time_series_response = time_series_resource_api.query_time_series(query=query) - self._log.debug("Full timeseries response:") - self._log.debug(query_time_series_response) - self._collect_query_time_series(query_time_series_response, 'role', []) - - def _collect_host_disks(self, host_id): time_series_resource_api = cm_client.TimeSeriesResourceApi(self._api_client) - metric_names = ','.join(f'last({metric})' for metric in TIMESERIES_METRICS['disk']) - query = f'SELECT {metric_names} WHERE hostId="{host_id}" AND category=DISK' - self._log.debug('query: %s', query) query_time_series_response = time_series_resource_api.query_time_series(query=query) self._log.debug('query_time_series_response: %s', query_time_series_response) - self._collect_query_time_series(query_time_series_response, 'disk', []) - - def _collect_query_time_series(self, query_time_series_response, category, tags): for item in query_time_series_response.items: - last_metadata_metric_name = None for ts in item.time_series: self._log.debug('ts: %s', ts) - if last_metadata_metric_name is None: - index = 0 - elif last_metadata_metric_name != ts.metadata.metric_name: - index += 1 - last_metadata_metric_name = ts.metadata.metric_name - metric_name = TIMESERIES_METRICS[category][index] - metric_tags = tags + [f'cloudera_{category}:{ts.metadata.entity_name}'] + metric_name = ts.metadata.alias full_metric_name = f'{category}.{metric_name}' - new_tag = f'cloudera_{category}:{ts.metadata.entity_name}' - if new_tag not in tags: - tags.append(new_tag) - new_tag = f'cloudera_{category}:{ts.metadata.entity_name}' - if new_tag not in tags: - tags.append(new_tag) for d in ts.data: value = d.value self._log.debug('full_metric_name: %s', full_metric_name) self._log.debug('value: %s', value) - self._log.debug('metric_tags: %s', metric_tags) - self._check.gauge(full_metric_name, value, tags=metric_tags) + self._check.gauge( + full_metric_name, value, tags=tags + [f'cloudera_{category}:{ts.metadata.entity_name}'] + ) diff --git a/cloudera/datadog_checks/cloudera/check.py b/cloudera/datadog_checks/cloudera/check.py index e6804e179d00e..37a81b92b9802 100644 --- a/cloudera/datadog_checks/cloudera/check.py +++ b/cloudera/datadog_checks/cloudera/check.py @@ -28,8 +28,8 @@ def _create_client(self): try: self.client = make_api_client(self, self.config) except Exception as e: - self.log.error("Cloudera API Client is none: %s", e) - self.service_check(CAN_CONNECT, AgentCheck.CRITICAL) + message = f"Cloudera API Client is none: {e}", e + self.service_check(CAN_CONNECT, AgentCheck.CRITICAL, message=message) raise def check(self, _): @@ -37,5 +37,6 @@ def check(self, _): self.client.collect_data() self.service_check(CAN_CONNECT, AgentCheck.OK) except Exception as e: - self.log.error('Cloudera check raised an exception: %s', e) - self.service_check(CAN_CONNECT, AgentCheck.CRITICAL) + message = f'Cloudera check raised an exception: {e}' + self.service_check(CAN_CONNECT, AgentCheck.CRITICAL, message=message) + self.log.error(message) diff --git a/cloudera/datadog_checks/cloudera/queries.py b/cloudera/datadog_checks/cloudera/queries.py deleted file mode 100644 index 01eba7f9b6ce7..0000000000000 --- a/cloudera/datadog_checks/cloudera/queries.py +++ /dev/null @@ -1,104 +0,0 @@ -# Each query is of format: -# query - the actual query -# tags - a list of tuples containing (datadog_tag_name, cloudera_attribute_name) -# metric_name - the name of the Datadog metric name -TIMESERIES_QUERIES = [ - { - 'query_string': 'select last(cpu_soft_irq_rate)', - 'tags': [ - ('cloudera_hostname', 'hostname'), - ('cluster_display_name', 'clusterDisplayName'), - ('entity_name', 'entityName'), - ('cluster_name', 'clusterName'), - ('host_id', 'hostId'), - ('rack_id', 'rackId'), - ], - 'metric_name': 'cpu_soft_irq_rate', - }, - { - 'query_string': 'select last(cpu_system_rate)', - 'tags': [ - ('cloudera_hostname', 'hostname'), - ('entity_name', 'entityName'), - ('host_id', 'hostId'), - ('rack_id', 'rackId'), - ('cluster_display_name', 'clusterDisplayName'), - ], - 'metric_name': 'cpu_system_rate', - }, - { - 'query_string': 'select last(load_1)', - 'tags': [ - ('cloudera_hostname', 'hostname'), - ('entity_name', 'entityName'), - ('host_id', 'hostId'), - ('rack_id', 'rackId'), - ('cluster_display_name', 'clusterDisplayName'), - ], - 'metric_name': 'load_1', - }, - { - 'query_string': 'select last(physical_memory_cached)', - 'tags': [ - ('cloudera_hostname', 'hostname'), - ('entity_name', 'entityName'), - ('host_id', 'hostId'), - ('rack_id', 'rackId'), - ('cluster_display_name', 'clusterDisplayName'), - ], - 'metric_name': 'physical_memory_cached', - }, - { - 'query_string': 'select last(mem_rss)', - 'tags': [ - ('cloudera_hostname', 'hostname'), - ('entity_name', 'entityName'), - ('host_id', 'hostId'), - ('rack_id', 'rackId'), - ('cluster_display_name', 'clusterDisplayName'), - ('role_type', 'roleType'), - ('service_display_name', 'serviceDisplayName'), - ], - 'metric_name': 'mem_rss', - }, - { - 'query_string': 'select last(swap_out_rate)', - 'tags': [ - ('cloudera_hostname', 'hostname'), - ('entity_name', 'entityName'), - ('host_id', 'hostId'), - ('rack_id', 'rackId'), - ('cluster_display_name', 'clusterDisplayName'), - ('role_type', 'roleType'), - ('service_display_name', 'serviceDisplayName'), - ], - 'metric_name': 'swap_out_rate', - }, - { - 'query_string': 'select last(total_bytes_receive_rate_across_network_interfaces)', - 'tags': [ - ('cloudera_hostname', 'hostname'), - ('entity_name', 'entityName'), - ('host_id', 'hostId'), - ('rack_id', 'rackId'), - ('cluster_display_name', 'clusterDisplayName'), - ('role_type', 'roleType'), - ('service_display_name', 'serviceDisplayName'), - ('role_config_group', 'roleConfigGroup'), - ], - 'metric_name': 'total_bytes_receive_rate_across_network_interfaces', - }, - { - 'query_string': 'select last(await_time)', - 'tags': [ - ('cloudera_hostname', 'hostname'), - ('entity_name', 'entityName'), - ('host_id', 'hostId'), - ('rack_id', 'rackId'), - ('cluster_display_name', 'clusterDisplayName'), - ('role_type', 'roleType'), - ('service_display_name', 'serviceDisplayName'), - ], - 'metric_name': 'await_time', - }, -] diff --git a/cloudera/tests/common.py b/cloudera/tests/common.py index 8f6ab58b7f7ad..6aabaa2896f43 100644 --- a/cloudera/tests/common.py +++ b/cloudera/tests/common.py @@ -8,7 +8,7 @@ INSTANCE = { 'workload_username': '~', 'workload_password': '~', - 'api_url': '~', + 'api_url': 'http://localhost:8080/api/v48/', } HERE = get_here() diff --git a/cloudera/tests/conftest.py b/cloudera/tests/conftest.py index 15343a9edd384..f4f46f3744b6f 100644 --- a/cloudera/tests/conftest.py +++ b/cloudera/tests/conftest.py @@ -5,32 +5,22 @@ import os import pytest +from cm_client.models.api_time_series import ApiTimeSeries +from cm_client.models.api_time_series_data import ApiTimeSeriesData +from cm_client.models.api_time_series_metadata import ApiTimeSeriesMetadata +from cm_client.models.api_time_series_response import ApiTimeSeriesResponse +from cm_client.models.api_time_series_response_list import ApiTimeSeriesResponseList from datadog_checks.cloudera import ClouderaCheck +from datadog_checks.cloudera.metrics import TIMESERIES_METRICS from datadog_checks.dev import docker_run from datadog_checks.dev.conditions import CheckDockerLogs from . import common -# from datadog_checks.dev.conditions import CheckDockerLogs - @pytest.fixture(scope='session') def dd_environment(): - # FIXME: Commenting out v12 Cloudera Docker image until confirmation this version should be supported - - # compose_file = os.path.join(common.HERE, 'compose', common.COMPOSE_FILE) - # conditions = [ - # CheckDockerLogs( - # identifier='cloudera', patterns=['Success! You can now log into Cloudera Manager'], attempts=180, wait=5 - # ), - # ] - # with docker_run( - # compose_file, - # conditions=conditions, - # ): - # yield common.INSTANCE - compose_file = common.COMPOSE_FILE conditions = [ CheckDockerLogs(identifier='cloudera', patterns=['server running']), @@ -59,3 +49,24 @@ def _response(filename): return json.load(f) return _response + + +def get_timeseries_resource(): + return [ + ApiTimeSeriesResponseList( + items=[ + ApiTimeSeriesResponse( + time_series=[ + ApiTimeSeries( + data=[ + ApiTimeSeriesData(value=49.7), + ], + metadata=ApiTimeSeriesMetadata(entity_name=category, alias=metric), + ) + for metric in metrics + ] + ), + ], + ) + for category, metrics in TIMESERIES_METRICS.items() + ] diff --git a/cloudera/tests/docker/Dockerfile b/cloudera/tests/docker/Dockerfile deleted file mode 100644 index 465eaf886eda1..0000000000000 --- a/cloudera/tests/docker/Dockerfile +++ /dev/null @@ -1,6 +0,0 @@ -FROM cloudera/quickstart:latest - -COPY start_cloudera.sh /home/cloudera - -ENTRYPOINT ["/usr/bin/env"] -CMD ["bash", "/home/cloudera/start_cloudera.sh"] diff --git a/cloudera/tests/docker/docker-compose.yaml.v5 b/cloudera/tests/docker/docker-compose.yaml.v5 deleted file mode 100644 index 0c05c9de4c25c..0000000000000 --- a/cloudera/tests/docker/docker-compose.yaml.v5 +++ /dev/null @@ -1,31 +0,0 @@ -version: '2' -services: - cloudera: - container_name: cloudera - build: . - privileged: true - hostname: quickstart.cloudera - ports: - - "8020:8020" # HDFS - - "8022:22" # SSH - - "7180:7180" # Cloudera Manager - - "8888:8888" # Hue - - "11000:11000" # Oozie - - "50070:50070" # HDFS Rest Namenode - - "50075:50075" # HDFS Rest Datanode - - "2181:2181" # Zookeeper - - "8088:8088" # YARN Resource Manager - - "19888:19888" # MapReduce Job History - - "50030:50030" # MapReduce Job Tracker - - "8983:8983" # Solr - - "16000:16000" # Sqoop Metastore - - "8042:8042" # YARN Node Manager - - "60010:60010" # HBase Master - - "60030:60030" # HBase Region - - "9090:9090" # HBase Thrift - - "8080:8080" # HBase Rest - - "7077:7077" # Spark Master - tty: true - stdin_open: true - volumes: - - /var/shared_cloudera_quickstart:/media/shared_from_local diff --git a/cloudera/tests/docker/fixtures/api/v48/timeseries/get_metrics_from_cluster b/cloudera/tests/docker/fixtures/api/v48/timeseries/get_metrics_from_cluster index 6ef473e1ace70..d6dd89d0b22f0 100644 --- a/cloudera/tests/docker/fixtures/api/v48/timeseries/get_metrics_from_cluster +++ b/cloudera/tests/docker/fixtures/api/v48/timeseries/get_metrics_from_cluster @@ -6,8 +6,8 @@ "metadata": { "metricName": "last(cpu_percent_across_hosts)", "entityName": "cod--qfdcinkqrzw", - "startTime": "2022-12-01T09:43:07.877Z", - "endTime": "2022-12-01T09:48:07.877Z", + "startTime": "2022-12-07T18:58:21.447Z", + "endTime": "2022-12-07T19:03:21.447Z", "attributes": { "active": "true", "clusterDisplayName": "cod--qfdcinkqrzw", @@ -20,14 +20,15 @@ "percent" ], "unitDenominators": [], - "expression": "SELECT last(cpu_percent_across_hosts) WHERE entityName = \"1546335201\" AND category = CLUSTER", + "expression": "SELECT last(cpu_percent_across_hosts) AS \"cpu_percent_across_hosts\" WHERE entityName = \"1546335201\" AND category = CLUSTER", + "alias": "cpu_percent_across_hosts", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-01T09:48:04.003Z", - "value": 0.6777777777777778, + "timestamp": "2022-12-07T19:03:04.690Z", + "value": 1.3333333333333335, "type": "SAMPLE" } ] @@ -36,8 +37,8 @@ "metadata": { "metricName": "last(total_read_bytes_rate_across_disks)", "entityName": "cod--qfdcinkqrzw", - "startTime": "2022-12-01T09:43:07.877Z", - "endTime": "2022-12-01T09:48:07.877Z", + "startTime": "2022-12-07T18:58:21.447Z", + "endTime": "2022-12-07T19:03:21.447Z", "attributes": { "active": "true", "clusterDisplayName": "cod--qfdcinkqrzw", @@ -52,13 +53,14 @@ "unitDenominators": [ "seconds" ], - "expression": "SELECT last(total_read_bytes_rate_across_disks) WHERE entityName = \"1546335201\" AND category = CLUSTER", + "expression": "SELECT last(total_read_bytes_rate_across_disks) AS \"total_read_bytes_rate_across_disks\" WHERE entityName = \"1546335201\" AND category = CLUSTER", + "alias": "total_read_bytes_rate_across_disks", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-01T09:48:04.003Z", + "timestamp": "2022-12-07T19:03:04.690Z", "value": 0, "type": "SAMPLE" } @@ -68,8 +70,8 @@ "metadata": { "metricName": "last(total_write_bytes_rate_across_disks)", "entityName": "cod--qfdcinkqrzw", - "startTime": "2022-12-01T09:43:07.877Z", - "endTime": "2022-12-01T09:48:07.877Z", + "startTime": "2022-12-07T18:58:21.447Z", + "endTime": "2022-12-07T19:03:21.447Z", "attributes": { "active": "true", "clusterDisplayName": "cod--qfdcinkqrzw", @@ -84,14 +86,15 @@ "unitDenominators": [ "seconds" ], - "expression": "SELECT last(total_write_bytes_rate_across_disks) WHERE entityName = \"1546335201\" AND category = CLUSTER", + "expression": "SELECT last(total_write_bytes_rate_across_disks) AS \"total_write_bytes_rate_across_disks\" WHERE entityName = \"1546335201\" AND category = CLUSTER", + "alias": "total_write_bytes_rate_across_disks", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-01T09:48:04.003Z", - "value": 189704.53333333333, + "timestamp": "2022-12-07T19:03:04.690Z", + "value": 731110.4, "type": "SAMPLE" } ] @@ -100,8 +103,8 @@ "metadata": { "metricName": "last(total_bytes_receive_rate_across_network_interfaces)", "entityName": "cod--qfdcinkqrzw", - "startTime": "2022-12-01T09:43:07.877Z", - "endTime": "2022-12-01T09:48:07.877Z", + "startTime": "2022-12-07T18:58:21.447Z", + "endTime": "2022-12-07T19:03:21.447Z", "attributes": { "active": "true", "clusterDisplayName": "cod--qfdcinkqrzw", @@ -116,14 +119,15 @@ "unitDenominators": [ "seconds" ], - "expression": "SELECT last(total_bytes_receive_rate_across_network_interfaces) WHERE entityName = \"1546335201\" AND category = CLUSTER", + "expression": "SELECT last(total_bytes_receive_rate_across_network_interfaces) AS \"total_bytes_receive_rate_across_network_interfaces\" WHERE entityName = \"1546335201\" AND category = CLUSTER", + "alias": "total_bytes_receive_rate_across_network_interfaces", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-01T09:48:04.003Z", - "value": 552059.3499999999, + "timestamp": "2022-12-07T19:03:04.690Z", + "value": 456726.2666666666, "type": "SAMPLE" } ] @@ -132,8 +136,8 @@ "metadata": { "metricName": "last(total_bytes_transmit_rate_across_network_interfaces)", "entityName": "cod--qfdcinkqrzw", - "startTime": "2022-12-01T09:43:07.877Z", - "endTime": "2022-12-01T09:48:07.877Z", + "startTime": "2022-12-07T18:58:21.447Z", + "endTime": "2022-12-07T19:03:21.447Z", "attributes": { "active": "true", "clusterDisplayName": "cod--qfdcinkqrzw", @@ -148,21 +152,22 @@ "unitDenominators": [ "seconds" ], - "expression": "SELECT last(total_bytes_transmit_rate_across_network_interfaces) WHERE entityName = \"1546335201\" AND category = CLUSTER", + "expression": "SELECT last(total_bytes_transmit_rate_across_network_interfaces) AS \"total_bytes_transmit_rate_across_network_interfaces\" WHERE entityName = \"1546335201\" AND category = CLUSTER", + "alias": "total_bytes_transmit_rate_across_network_interfaces", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-01T09:48:04.003Z", - "value": 87188.91666666667, + "timestamp": "2022-12-07T19:03:04.690Z", + "value": 83818.2, "type": "SAMPLE" } ] } ], "warnings": [], - "timeSeriesQuery": "SELECT last(cpu_percent_across_hosts),last(total_read_bytes_rate_across_disks),last(total_write_bytes_rate_across_disks),last(total_bytes_receive_rate_across_network_interfaces),last(total_bytes_transmit_rate_across_network_interfaces) WHERE clusterName=\"cod--qfdcinkqrzw\" AND category=CLUSTER" + "timeSeriesQuery": "SELECT last(cpu_percent_across_hosts) AS cpu_percent_across_hosts,last(total_read_bytes_rate_across_disks) AS total_read_bytes_rate_across_disks,last(total_write_bytes_rate_across_disks) AS total_write_bytes_rate_across_disks,last(total_bytes_receive_rate_across_network_interfaces) AS total_bytes_receive_rate_across_network_interfaces,last(total_bytes_transmit_rate_across_network_interfaces) AS total_bytes_transmit_rate_across_network_interfaces WHERE clusterName=\"cod--qfdcinkqrzw\" AND category=CLUSTER" } ] } \ No newline at end of file diff --git a/cloudera/tests/docker/fixtures/api/v48/timeseries/get_metrics_from_disk b/cloudera/tests/docker/fixtures/api/v48/timeseries/get_metrics_from_disk index 96905dda39b7b..63bb61b4bafed 100644 --- a/cloudera/tests/docker/fixtures/api/v48/timeseries/get_metrics_from_disk +++ b/cloudera/tests/docker/fixtures/api/v48/timeseries/get_metrics_from_disk @@ -6,8 +6,8 @@ "metadata": { "metricName": "last(service_time)", "entityName": "nvme0n1p1 (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-12-02T08:19:51.812Z", - "endTime": "2022-12-02T08:24:51.812Z", + "startTime": "2022-12-07T18:53:13.265Z", + "endTime": "2022-12-07T18:58:13.265Z", "attributes": { "clusterDisplayName": "cod--qfdcinkqrzw", "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", @@ -25,14 +25,15 @@ "ms" ], "unitDenominators": [], - "expression": "SELECT last(service_time) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d:nvme0n1p1\" AND category = DISK", + "expression": "SELECT last(service_time) AS \"service_time\" WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d:nvme0n1p1\" AND category = DISK", + "alias": "service_time", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:24:27.000Z", - "value": 0.4460431654676259, + "timestamp": "2022-12-07T18:57:31.000Z", + "value": 0.4357142857142857, "type": "SAMPLE" } ] @@ -41,8 +42,8 @@ "metadata": { "metricName": "last(service_time)", "entityName": "nvme1n1 (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-12-02T08:19:51.812Z", - "endTime": "2022-12-02T08:24:51.812Z", + "startTime": "2022-12-07T18:53:13.265Z", + "endTime": "2022-12-07T18:58:13.265Z", "attributes": { "clusterDisplayName": "cod--qfdcinkqrzw", "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", @@ -60,14 +61,15 @@ "ms" ], "unitDenominators": [], - "expression": "SELECT last(service_time) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d:nvme1n1\" AND category = DISK", + "expression": "SELECT last(service_time) AS \"service_time\" WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d:nvme1n1\" AND category = DISK", + "alias": "service_time", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:24:27.000Z", - "value": 0.47752808988764045, + "timestamp": "2022-12-07T18:57:31.000Z", + "value": 0.74375, "type": "SAMPLE" } ] @@ -76,8 +78,8 @@ "metadata": { "metricName": "last(service_time)", "entityName": "nvme0n1 (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-12-02T08:19:51.812Z", - "endTime": "2022-12-02T08:24:51.812Z", + "startTime": "2022-12-07T18:53:13.265Z", + "endTime": "2022-12-07T18:58:13.265Z", "attributes": { "clusterDisplayName": "cod--qfdcinkqrzw", "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", @@ -95,14 +97,15 @@ "ms" ], "unitDenominators": [], - "expression": "SELECT last(service_time) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d:nvme0n1\" AND category = DISK", + "expression": "SELECT last(service_time) AS \"service_time\" WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d:nvme0n1\" AND category = DISK", + "alias": "service_time", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:24:27.000Z", - "value": 0.4460431654676259, + "timestamp": "2022-12-07T18:57:31.000Z", + "value": 0.4357142857142857, "type": "SAMPLE" } ] @@ -111,8 +114,8 @@ "metadata": { "metricName": "last(await_time)", "entityName": "nvme0n1p1 (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-12-02T08:19:51.812Z", - "endTime": "2022-12-02T08:24:51.812Z", + "startTime": "2022-12-07T18:53:13.265Z", + "endTime": "2022-12-07T18:58:13.265Z", "attributes": { "clusterDisplayName": "cod--qfdcinkqrzw", "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", @@ -130,14 +133,15 @@ "ms" ], "unitDenominators": [], - "expression": "SELECT last(await_time) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d:nvme0n1p1\" AND category = DISK", + "expression": "SELECT last(await_time) AS \"await_time\" WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d:nvme0n1p1\" AND category = DISK", + "alias": "await_time", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:24:27.000Z", - "value": 0.8705035971223022, + "timestamp": "2022-12-07T18:57:31.000Z", + "value": 0.6071428571428571, "type": "SAMPLE" } ] @@ -146,8 +150,8 @@ "metadata": { "metricName": "last(await_time)", "entityName": "nvme1n1 (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-12-02T08:19:51.812Z", - "endTime": "2022-12-02T08:24:51.812Z", + "startTime": "2022-12-07T18:53:13.265Z", + "endTime": "2022-12-07T18:58:13.265Z", "attributes": { "clusterDisplayName": "cod--qfdcinkqrzw", "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", @@ -165,14 +169,15 @@ "ms" ], "unitDenominators": [], - "expression": "SELECT last(await_time) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d:nvme1n1\" AND category = DISK", + "expression": "SELECT last(await_time) AS \"await_time\" WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d:nvme1n1\" AND category = DISK", + "alias": "await_time", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:24:27.000Z", - "value": 1.4157303370786516, + "timestamp": "2022-12-07T18:57:31.000Z", + "value": 1.775, "type": "SAMPLE" } ] @@ -181,8 +186,8 @@ "metadata": { "metricName": "last(await_time)", "entityName": "nvme0n1 (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-12-02T08:19:51.812Z", - "endTime": "2022-12-02T08:24:51.812Z", + "startTime": "2022-12-07T18:53:13.265Z", + "endTime": "2022-12-07T18:58:13.265Z", "attributes": { "clusterDisplayName": "cod--qfdcinkqrzw", "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", @@ -200,14 +205,15 @@ "ms" ], "unitDenominators": [], - "expression": "SELECT last(await_time) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d:nvme0n1\" AND category = DISK", + "expression": "SELECT last(await_time) AS \"await_time\" WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d:nvme0n1\" AND category = DISK", + "alias": "await_time", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:24:27.000Z", - "value": 0.8705035971223022, + "timestamp": "2022-12-07T18:57:31.000Z", + "value": 0.6071428571428571, "type": "SAMPLE" } ] @@ -216,8 +222,8 @@ "metadata": { "metricName": "last(await_read_time)", "entityName": "nvme0n1p1 (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-12-02T08:19:51.812Z", - "endTime": "2022-12-02T08:24:51.812Z", + "startTime": "2022-12-07T18:53:13.265Z", + "endTime": "2022-12-07T18:58:13.265Z", "attributes": { "clusterDisplayName": "cod--qfdcinkqrzw", "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", @@ -235,13 +241,14 @@ "ms" ], "unitDenominators": [], - "expression": "SELECT last(await_read_time) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d:nvme0n1p1\" AND category = DISK", + "expression": "SELECT last(await_read_time) AS \"await_read_time\" WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d:nvme0n1p1\" AND category = DISK", + "alias": "await_read_time", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:24:27.000Z", + "timestamp": "2022-12-07T18:57:31.000Z", "value": 0, "type": "SAMPLE" } @@ -251,8 +258,8 @@ "metadata": { "metricName": "last(await_read_time)", "entityName": "nvme1n1 (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-12-02T08:19:51.812Z", - "endTime": "2022-12-02T08:24:51.812Z", + "startTime": "2022-12-07T18:53:13.265Z", + "endTime": "2022-12-07T18:58:13.265Z", "attributes": { "clusterDisplayName": "cod--qfdcinkqrzw", "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", @@ -270,13 +277,14 @@ "ms" ], "unitDenominators": [], - "expression": "SELECT last(await_read_time) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d:nvme1n1\" AND category = DISK", + "expression": "SELECT last(await_read_time) AS \"await_read_time\" WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d:nvme1n1\" AND category = DISK", + "alias": "await_read_time", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:24:27.000Z", + "timestamp": "2022-12-07T18:57:31.000Z", "value": 0, "type": "SAMPLE" } @@ -286,8 +294,8 @@ "metadata": { "metricName": "last(await_read_time)", "entityName": "nvme0n1 (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-12-02T08:19:51.812Z", - "endTime": "2022-12-02T08:24:51.812Z", + "startTime": "2022-12-07T18:53:13.265Z", + "endTime": "2022-12-07T18:58:13.265Z", "attributes": { "clusterDisplayName": "cod--qfdcinkqrzw", "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", @@ -305,13 +313,14 @@ "ms" ], "unitDenominators": [], - "expression": "SELECT last(await_read_time) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d:nvme0n1\" AND category = DISK", + "expression": "SELECT last(await_read_time) AS \"await_read_time\" WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d:nvme0n1\" AND category = DISK", + "alias": "await_read_time", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:24:27.000Z", + "timestamp": "2022-12-07T18:57:31.000Z", "value": 0, "type": "SAMPLE" } @@ -321,8 +330,8 @@ "metadata": { "metricName": "last(await_write_time)", "entityName": "nvme0n1p1 (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-12-02T08:19:51.812Z", - "endTime": "2022-12-02T08:24:51.812Z", + "startTime": "2022-12-07T18:53:13.265Z", + "endTime": "2022-12-07T18:58:13.265Z", "attributes": { "clusterDisplayName": "cod--qfdcinkqrzw", "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", @@ -340,14 +349,15 @@ "ms" ], "unitDenominators": [], - "expression": "SELECT last(await_write_time) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d:nvme0n1p1\" AND category = DISK", + "expression": "SELECT last(await_write_time) AS \"await_write_time\" WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d:nvme0n1p1\" AND category = DISK", + "alias": "await_write_time", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:24:27.000Z", - "value": 0.8705035971223022, + "timestamp": "2022-12-07T18:57:31.000Z", + "value": 0.6071428571428571, "type": "SAMPLE" } ] @@ -356,8 +366,8 @@ "metadata": { "metricName": "last(await_write_time)", "entityName": "nvme1n1 (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-12-02T08:19:51.812Z", - "endTime": "2022-12-02T08:24:51.812Z", + "startTime": "2022-12-07T18:53:13.265Z", + "endTime": "2022-12-07T18:58:13.265Z", "attributes": { "clusterDisplayName": "cod--qfdcinkqrzw", "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", @@ -375,14 +385,15 @@ "ms" ], "unitDenominators": [], - "expression": "SELECT last(await_write_time) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d:nvme1n1\" AND category = DISK", + "expression": "SELECT last(await_write_time) AS \"await_write_time\" WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d:nvme1n1\" AND category = DISK", + "alias": "await_write_time", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:24:27.000Z", - "value": 1.4157303370786516, + "timestamp": "2022-12-07T18:57:31.000Z", + "value": 1.775, "type": "SAMPLE" } ] @@ -391,8 +402,8 @@ "metadata": { "metricName": "last(await_write_time)", "entityName": "nvme0n1 (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-12-02T08:19:51.812Z", - "endTime": "2022-12-02T08:24:51.812Z", + "startTime": "2022-12-07T18:53:13.265Z", + "endTime": "2022-12-07T18:58:13.265Z", "attributes": { "clusterDisplayName": "cod--qfdcinkqrzw", "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", @@ -410,21 +421,22 @@ "ms" ], "unitDenominators": [], - "expression": "SELECT last(await_write_time) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d:nvme0n1\" AND category = DISK", + "expression": "SELECT last(await_write_time) AS \"await_write_time\" WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d:nvme0n1\" AND category = DISK", + "alias": "await_write_time", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:24:27.000Z", - "value": 0.8705035971223022, + "timestamp": "2022-12-07T18:57:31.000Z", + "value": 0.6071428571428571, "type": "SAMPLE" } ] } ], "warnings": [], - "timeSeriesQuery": "SELECT last(service_time),last(await_time),last(await_read_time),last(await_write_time) WHERE hostId=\"d8623d9457f4db06c5637c4fd4c02f5d\" AND category=DISK" + "timeSeriesQuery": "SELECT last(service_time) AS service_time,last(await_time) AS await_time,last(await_read_time) AS await_read_time,last(await_write_time) AS await_write_time WHERE hostId=\"d8623d9457f4db06c5637c4fd4c02f5d\" AND category=DISK" } ] } \ No newline at end of file diff --git a/cloudera/tests/docker/fixtures/api/v48/timeseries/get_metrics_from_host b/cloudera/tests/docker/fixtures/api/v48/timeseries/get_metrics_from_host index d957b0431509d..f5b523f7ff61b 100644 --- a/cloudera/tests/docker/fixtures/api/v48/timeseries/get_metrics_from_host +++ b/cloudera/tests/docker/fixtures/api/v48/timeseries/get_metrics_from_host @@ -6,8 +6,8 @@ "metadata": { "metricName": "last(cpu_user_rate)", "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-12-02T08:10:42.925Z", - "endTime": "2022-12-02T08:15:42.925Z", + "startTime": "2022-12-07T18:52:18.322Z", + "endTime": "2022-12-07T18:57:18.322Z", "attributes": { "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", "clusterDisplayName": "cod--qfdcinkqrzw", @@ -25,14 +25,15 @@ "unitDenominators": [ "seconds" ], - "expression": "SELECT last(cpu_user_rate) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "alias": "cpu_user_rate", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:15:27.000Z", - "value": 0.17600000000093133, + "timestamp": "2022-12-07T18:56:31.000Z", + "value": 0.2525000000023283, "type": "SAMPLE" } ] @@ -41,8 +42,8 @@ "metadata": { "metricName": "last(cpu_system_rate)", "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-12-02T08:10:42.925Z", - "endTime": "2022-12-02T08:15:42.925Z", + "startTime": "2022-12-07T18:52:18.322Z", + "endTime": "2022-12-07T18:57:18.322Z", "attributes": { "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", "clusterDisplayName": "cod--qfdcinkqrzw", @@ -60,14 +61,15 @@ "unitDenominators": [ "seconds" ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "alias": "cpu_system_rate", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:15:27.000Z", - "value": 0.03316666666651145, + "timestamp": "2022-12-07T18:56:31.000Z", + "value": 0.036333333333216915, "type": "SAMPLE" } ] @@ -76,8 +78,8 @@ "metadata": { "metricName": "last(cpu_nice_rate)", "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-12-02T08:10:42.925Z", - "endTime": "2022-12-02T08:15:42.925Z", + "startTime": "2022-12-07T18:52:18.322Z", + "endTime": "2022-12-07T18:57:18.322Z", "attributes": { "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", "clusterDisplayName": "cod--qfdcinkqrzw", @@ -95,13 +97,14 @@ "unitDenominators": [ "seconds" ], - "expression": "SELECT last(cpu_nice_rate) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "expression": "SELECT last(cpu_nice_rate) AS \"cpu_nice_rate\" WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "alias": "cpu_nice_rate", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:15:27.000Z", + "timestamp": "2022-12-07T18:56:31.000Z", "value": 0, "type": "SAMPLE" } @@ -111,8 +114,8 @@ "metadata": { "metricName": "last(cpu_iowait_rate)", "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-12-02T08:10:42.925Z", - "endTime": "2022-12-02T08:15:42.925Z", + "startTime": "2022-12-07T18:52:18.322Z", + "endTime": "2022-12-07T18:57:18.322Z", "attributes": { "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", "clusterDisplayName": "cod--qfdcinkqrzw", @@ -130,14 +133,15 @@ "unitDenominators": [ "seconds" ], - "expression": "SELECT last(cpu_iowait_rate) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "expression": "SELECT last(cpu_iowait_rate) AS \"cpu_iowait_rate\" WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "alias": "cpu_iowait_rate", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:15:27.000Z", - "value": 0.0013333333333321207, + "timestamp": "2022-12-07T18:56:31.000Z", + "value": 0.0008333333333212067, "type": "SAMPLE" } ] @@ -146,8 +150,8 @@ "metadata": { "metricName": "last(cpu_irq_rate)", "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-12-02T08:10:42.925Z", - "endTime": "2022-12-02T08:15:42.925Z", + "startTime": "2022-12-07T18:52:18.322Z", + "endTime": "2022-12-07T18:57:18.322Z", "attributes": { "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", "clusterDisplayName": "cod--qfdcinkqrzw", @@ -165,13 +169,14 @@ "unitDenominators": [ "seconds" ], - "expression": "SELECT last(cpu_irq_rate) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "expression": "SELECT last(cpu_irq_rate) AS \"cpu_irq_rate\" WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "alias": "cpu_irq_rate", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:15:27.000Z", + "timestamp": "2022-12-07T18:56:31.000Z", "value": 0, "type": "SAMPLE" } @@ -181,8 +186,8 @@ "metadata": { "metricName": "last(cpu_soft_irq_rate)", "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-12-02T08:10:42.925Z", - "endTime": "2022-12-02T08:15:42.925Z", + "startTime": "2022-12-07T18:52:18.322Z", + "endTime": "2022-12-07T18:57:18.322Z", "attributes": { "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", "clusterDisplayName": "cod--qfdcinkqrzw", @@ -200,14 +205,15 @@ "unitDenominators": [ "seconds" ], - "expression": "SELECT last(cpu_soft_irq_rate) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "expression": "SELECT last(cpu_soft_irq_rate) AS \"cpu_soft_irq_rate\" WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "alias": "cpu_soft_irq_rate", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:15:27.000Z", - "value": 0.0015000000000024254, + "timestamp": "2022-12-07T18:56:31.000Z", + "value": 0.00166666666667273, "type": "SAMPLE" } ] @@ -216,8 +222,8 @@ "metadata": { "metricName": "last(cpu_steal_rate)", "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-12-02T08:10:42.925Z", - "endTime": "2022-12-02T08:15:42.925Z", + "startTime": "2022-12-07T18:52:18.322Z", + "endTime": "2022-12-07T18:57:18.322Z", "attributes": { "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", "clusterDisplayName": "cod--qfdcinkqrzw", @@ -235,13 +241,14 @@ "unitDenominators": [ "seconds" ], - "expression": "SELECT last(cpu_steal_rate) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "expression": "SELECT last(cpu_steal_rate) AS \"cpu_steal_rate\" WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "alias": "cpu_steal_rate", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:15:27.000Z", + "timestamp": "2022-12-07T18:56:31.000Z", "value": 0, "type": "SAMPLE" } @@ -251,8 +258,8 @@ "metadata": { "metricName": "last(load_1)", "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-12-02T08:10:42.925Z", - "endTime": "2022-12-02T08:15:42.925Z", + "startTime": "2022-12-07T18:52:18.322Z", + "endTime": "2022-12-07T18:57:18.322Z", "attributes": { "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", "clusterDisplayName": "cod--qfdcinkqrzw", @@ -268,14 +275,15 @@ "load average" ], "unitDenominators": [], - "expression": "SELECT last(load_1) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "expression": "SELECT last(load_1) AS \"load_1\" WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "alias": "load_1", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:15:27.000Z", - "value": 0.18, + "timestamp": "2022-12-07T18:56:31.000Z", + "value": 0.09, "type": "SAMPLE" } ] @@ -284,8 +292,8 @@ "metadata": { "metricName": "last(load_5)", "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-12-02T08:10:42.925Z", - "endTime": "2022-12-02T08:15:42.925Z", + "startTime": "2022-12-07T18:52:18.322Z", + "endTime": "2022-12-07T18:57:18.322Z", "attributes": { "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", "clusterDisplayName": "cod--qfdcinkqrzw", @@ -301,13 +309,14 @@ "load average" ], "unitDenominators": [], - "expression": "SELECT last(load_5) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "expression": "SELECT last(load_5) AS \"load_5\" WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "alias": "load_5", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:15:27.000Z", + "timestamp": "2022-12-07T18:56:31.000Z", "value": 0.21, "type": "SAMPLE" } @@ -317,8 +326,8 @@ "metadata": { "metricName": "last(load_15)", "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-12-02T08:10:42.925Z", - "endTime": "2022-12-02T08:15:42.925Z", + "startTime": "2022-12-07T18:52:18.322Z", + "endTime": "2022-12-07T18:57:18.322Z", "attributes": { "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", "clusterDisplayName": "cod--qfdcinkqrzw", @@ -334,14 +343,15 @@ "load average" ], "unitDenominators": [], - "expression": "SELECT last(load_15) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "expression": "SELECT last(load_15) AS \"load_15\" WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "alias": "load_15", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:15:27.000Z", - "value": 0.24, + "timestamp": "2022-12-07T18:56:31.000Z", + "value": 0.28, "type": "SAMPLE" } ] @@ -350,8 +360,8 @@ "metadata": { "metricName": "last(swap_used)", "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-12-02T08:10:42.925Z", - "endTime": "2022-12-02T08:15:42.925Z", + "startTime": "2022-12-07T18:52:18.322Z", + "endTime": "2022-12-07T18:57:18.322Z", "attributes": { "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", "clusterDisplayName": "cod--qfdcinkqrzw", @@ -367,13 +377,14 @@ "bytes" ], "unitDenominators": [], - "expression": "SELECT last(swap_used) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "expression": "SELECT last(swap_used) AS \"swap_used\" WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "alias": "swap_used", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:15:27.000Z", + "timestamp": "2022-12-07T18:56:31.000Z", "value": 0, "type": "SAMPLE" } @@ -383,8 +394,8 @@ "metadata": { "metricName": "last(swap_out_rate)", "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-12-02T08:10:42.925Z", - "endTime": "2022-12-02T08:15:42.925Z", + "startTime": "2022-12-07T18:52:18.322Z", + "endTime": "2022-12-07T18:57:18.322Z", "attributes": { "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", "clusterDisplayName": "cod--qfdcinkqrzw", @@ -402,13 +413,14 @@ "unitDenominators": [ "seconds" ], - "expression": "SELECT last(swap_out_rate) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "expression": "SELECT last(swap_out_rate) AS \"swap_out_rate\" WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "alias": "swap_out_rate", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:15:27.000Z", + "timestamp": "2022-12-07T18:56:31.000Z", "value": 0, "type": "SAMPLE" } @@ -418,8 +430,8 @@ "metadata": { "metricName": "last(physical_memory_used)", "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-12-02T08:10:42.925Z", - "endTime": "2022-12-02T08:15:42.925Z", + "startTime": "2022-12-07T18:52:18.322Z", + "endTime": "2022-12-07T18:57:18.322Z", "attributes": { "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", "clusterDisplayName": "cod--qfdcinkqrzw", @@ -435,14 +447,15 @@ "bytes" ], "unitDenominators": [], - "expression": "SELECT last(physical_memory_used) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "expression": "SELECT last(physical_memory_used) AS \"physical_memory_used\" WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "alias": "physical_memory_used", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:15:27.000Z", - "value": 17950400512, + "timestamp": "2022-12-07T18:56:31.000Z", + "value": 18751393792, "type": "SAMPLE" } ] @@ -451,8 +464,8 @@ "metadata": { "metricName": "last(physical_memory_total)", "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-12-02T08:10:42.925Z", - "endTime": "2022-12-02T08:15:42.925Z", + "startTime": "2022-12-07T18:52:18.322Z", + "endTime": "2022-12-07T18:57:18.322Z", "attributes": { "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", "clusterDisplayName": "cod--qfdcinkqrzw", @@ -468,13 +481,14 @@ "bytes" ], "unitDenominators": [], - "expression": "SELECT last(physical_memory_total) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "expression": "SELECT last(physical_memory_total) AS \"physical_memory_total\" WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "alias": "physical_memory_total", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:15:27.000Z", + "timestamp": "2022-12-07T18:56:31.000Z", "value": 33079799808, "type": "SAMPLE" } @@ -484,8 +498,8 @@ "metadata": { "metricName": "last(physical_memory_cached)", "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-12-02T08:10:42.925Z", - "endTime": "2022-12-02T08:15:42.925Z", + "startTime": "2022-12-07T18:52:18.322Z", + "endTime": "2022-12-07T18:57:18.322Z", "attributes": { "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", "clusterDisplayName": "cod--qfdcinkqrzw", @@ -501,14 +515,15 @@ "bytes" ], "unitDenominators": [], - "expression": "SELECT last(physical_memory_cached) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "expression": "SELECT last(physical_memory_cached) AS \"physical_memory_cached\" WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "alias": "physical_memory_cached", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:15:27.000Z", - "value": 14592753664, + "timestamp": "2022-12-07T18:56:31.000Z", + "value": 13541650432, "type": "SAMPLE" } ] @@ -517,8 +532,8 @@ "metadata": { "metricName": "last(physical_memory_buffers)", "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-12-02T08:10:42.925Z", - "endTime": "2022-12-02T08:15:42.925Z", + "startTime": "2022-12-07T18:52:18.322Z", + "endTime": "2022-12-07T18:57:18.322Z", "attributes": { "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", "clusterDisplayName": "cod--qfdcinkqrzw", @@ -534,14 +549,15 @@ "bytes" ], "unitDenominators": [], - "expression": "SELECT last(physical_memory_buffers) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "expression": "SELECT last(physical_memory_buffers) AS \"physical_memory_buffers\" WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "alias": "physical_memory_buffers", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:15:27.000Z", - "value": 165232640, + "timestamp": "2022-12-07T18:56:31.000Z", + "value": 160317440, "type": "SAMPLE" } ] @@ -550,8 +566,8 @@ "metadata": { "metricName": "last(total_bytes_receive_rate_across_network_interfaces)", "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-12-02T08:10:42.925Z", - "endTime": "2022-12-02T08:15:42.925Z", + "startTime": "2022-12-07T18:52:18.322Z", + "endTime": "2022-12-07T18:57:18.322Z", "attributes": { "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", "clusterDisplayName": "cod--qfdcinkqrzw", @@ -569,14 +585,15 @@ "unitDenominators": [ "seconds" ], - "expression": "SELECT last(total_bytes_receive_rate_across_network_interfaces) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "expression": "SELECT last(total_bytes_receive_rate_across_network_interfaces) AS \"total_bytes_receive_rate_across_network_interfaces\" WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "alias": "total_bytes_receive_rate_across_network_interfaces", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:15:04.129Z", - "value": 436889.36666666664, + "timestamp": "2022-12-07T18:57:04.689Z", + "value": 446328.4666666667, "type": "SAMPLE" } ] @@ -585,8 +602,8 @@ "metadata": { "metricName": "last(total_bytes_transmit_rate_across_network_interfaces)", "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-12-02T08:10:42.925Z", - "endTime": "2022-12-02T08:15:42.925Z", + "startTime": "2022-12-07T18:52:18.322Z", + "endTime": "2022-12-07T18:57:18.322Z", "attributes": { "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", "clusterDisplayName": "cod--qfdcinkqrzw", @@ -604,14 +621,15 @@ "unitDenominators": [ "seconds" ], - "expression": "SELECT last(total_bytes_transmit_rate_across_network_interfaces) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "expression": "SELECT last(total_bytes_transmit_rate_across_network_interfaces) AS \"total_bytes_transmit_rate_across_network_interfaces\" WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "alias": "total_bytes_transmit_rate_across_network_interfaces", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:15:04.129Z", - "value": 93503.15, + "timestamp": "2022-12-07T18:57:04.689Z", + "value": 71121.76666666666, "type": "SAMPLE" } ] @@ -620,8 +638,8 @@ "metadata": { "metricName": "last(total_read_bytes_rate_across_disks)", "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-12-02T08:10:42.925Z", - "endTime": "2022-12-02T08:15:42.925Z", + "startTime": "2022-12-07T18:52:18.322Z", + "endTime": "2022-12-07T18:57:18.322Z", "attributes": { "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", "clusterDisplayName": "cod--qfdcinkqrzw", @@ -639,13 +657,14 @@ "unitDenominators": [ "seconds" ], - "expression": "SELECT last(total_read_bytes_rate_across_disks) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "expression": "SELECT last(total_read_bytes_rate_across_disks) AS \"total_read_bytes_rate_across_disks\" WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "alias": "total_read_bytes_rate_across_disks", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:15:04.129Z", + "timestamp": "2022-12-07T18:57:04.689Z", "value": 0, "type": "SAMPLE" } @@ -655,8 +674,8 @@ "metadata": { "metricName": "last(total_write_bytes_rate_across_disks)", "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-12-02T08:10:42.925Z", - "endTime": "2022-12-02T08:15:42.925Z", + "startTime": "2022-12-07T18:52:18.322Z", + "endTime": "2022-12-07T18:57:18.322Z", "attributes": { "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", "clusterDisplayName": "cod--qfdcinkqrzw", @@ -674,14 +693,15 @@ "unitDenominators": [ "seconds" ], - "expression": "SELECT last(total_write_bytes_rate_across_disks) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "expression": "SELECT last(total_write_bytes_rate_across_disks) AS \"total_write_bytes_rate_across_disks\" WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "alias": "total_write_bytes_rate_across_disks", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:15:04.129Z", - "value": 139093.33333333334, + "timestamp": "2022-12-07T18:57:04.689Z", + "value": 130193.06666666667, "type": "SAMPLE" } ] @@ -690,8 +710,8 @@ "metadata": { "metricName": "last(total_read_ios_rate_across_disks)", "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-12-02T08:10:42.925Z", - "endTime": "2022-12-02T08:15:42.925Z", + "startTime": "2022-12-07T18:52:18.322Z", + "endTime": "2022-12-07T18:57:18.322Z", "attributes": { "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", "clusterDisplayName": "cod--qfdcinkqrzw", @@ -709,13 +729,14 @@ "unitDenominators": [ "seconds" ], - "expression": "SELECT last(total_read_ios_rate_across_disks) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "expression": "SELECT last(total_read_ios_rate_across_disks) AS \"total_read_ios_rate_across_disks\" WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "alias": "total_read_ios_rate_across_disks", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:15:04.129Z", + "timestamp": "2022-12-07T18:57:04.689Z", "value": 0, "type": "SAMPLE" } @@ -725,8 +746,8 @@ "metadata": { "metricName": "last(total_write_ios_rate_across_disks)", "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-12-02T08:10:42.925Z", - "endTime": "2022-12-02T08:15:42.925Z", + "startTime": "2022-12-07T18:52:18.322Z", + "endTime": "2022-12-07T18:57:18.322Z", "attributes": { "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", "clusterDisplayName": "cod--qfdcinkqrzw", @@ -744,14 +765,15 @@ "unitDenominators": [ "seconds" ], - "expression": "SELECT last(total_write_ios_rate_across_disks) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "expression": "SELECT last(total_write_ios_rate_across_disks) AS \"total_write_ios_rate_across_disks\" WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "alias": "total_write_ios_rate_across_disks", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:15:04.129Z", - "value": 5.1, + "timestamp": "2022-12-07T18:57:04.689Z", + "value": 4.433333333333334, "type": "SAMPLE" } ] @@ -760,8 +782,8 @@ "metadata": { "metricName": "last(health_good_rate)", "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-12-02T08:10:42.925Z", - "endTime": "2022-12-02T08:15:42.925Z", + "startTime": "2022-12-07T18:52:18.322Z", + "endTime": "2022-12-07T18:57:18.322Z", "attributes": { "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", "clusterDisplayName": "cod--qfdcinkqrzw", @@ -779,14 +801,15 @@ "unitDenominators": [ "seconds" ], - "expression": "SELECT last(health_good_rate) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "expression": "SELECT last(health_good_rate) AS \"health_good_rate\" WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "alias": "health_good_rate", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:14:53.794Z", - "value": 0.9999999999923079, + "timestamp": "2022-12-07T18:56:44.520Z", + "value": 1.0000000000096778, "type": "SAMPLE" } ] @@ -795,8 +818,8 @@ "metadata": { "metricName": "last(health_concerning_rate)", "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-12-02T08:10:42.925Z", - "endTime": "2022-12-02T08:15:42.925Z", + "startTime": "2022-12-07T18:52:18.322Z", + "endTime": "2022-12-07T18:57:18.322Z", "attributes": { "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", "clusterDisplayName": "cod--qfdcinkqrzw", @@ -814,13 +837,14 @@ "unitDenominators": [ "seconds" ], - "expression": "SELECT last(health_concerning_rate) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "expression": "SELECT last(health_concerning_rate) AS \"health_concerning_rate\" WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "alias": "health_concerning_rate", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:14:53.794Z", + "timestamp": "2022-12-07T18:56:44.520Z", "value": 0, "type": "SAMPLE" } @@ -830,8 +854,8 @@ "metadata": { "metricName": "last(health_bad_rate)", "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-12-02T08:10:42.925Z", - "endTime": "2022-12-02T08:15:42.925Z", + "startTime": "2022-12-07T18:52:18.322Z", + "endTime": "2022-12-07T18:57:18.322Z", "attributes": { "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", "clusterDisplayName": "cod--qfdcinkqrzw", @@ -849,13 +873,14 @@ "unitDenominators": [ "seconds" ], - "expression": "SELECT last(health_bad_rate) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "expression": "SELECT last(health_bad_rate) AS \"health_bad_rate\" WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "alias": "health_bad_rate", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:14:53.794Z", + "timestamp": "2022-12-07T18:56:44.520Z", "value": 0, "type": "SAMPLE" } @@ -865,8 +890,8 @@ "metadata": { "metricName": "last(health_disabled_rate)", "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-12-02T08:10:42.925Z", - "endTime": "2022-12-02T08:15:42.925Z", + "startTime": "2022-12-07T18:52:18.322Z", + "endTime": "2022-12-07T18:57:18.322Z", "attributes": { "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", "clusterDisplayName": "cod--qfdcinkqrzw", @@ -884,13 +909,14 @@ "unitDenominators": [ "seconds" ], - "expression": "SELECT last(health_disabled_rate) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "expression": "SELECT last(health_disabled_rate) AS \"health_disabled_rate\" WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "alias": "health_disabled_rate", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:14:53.794Z", + "timestamp": "2022-12-07T18:56:44.520Z", "value": 0, "type": "SAMPLE" } @@ -900,8 +926,8 @@ "metadata": { "metricName": "last(health_unknown_rate)", "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-12-02T08:10:42.925Z", - "endTime": "2022-12-02T08:15:42.925Z", + "startTime": "2022-12-07T18:52:18.322Z", + "endTime": "2022-12-07T18:57:18.322Z", "attributes": { "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", "clusterDisplayName": "cod--qfdcinkqrzw", @@ -919,13 +945,14 @@ "unitDenominators": [ "seconds" ], - "expression": "SELECT last(health_unknown_rate) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "expression": "SELECT last(health_unknown_rate) AS \"health_unknown_rate\" WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "alias": "health_unknown_rate", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:14:53.794Z", + "timestamp": "2022-12-07T18:56:44.520Z", "value": 0, "type": "SAMPLE" } @@ -935,8 +962,8 @@ "metadata": { "metricName": "last(alerts_rate)", "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-12-02T08:10:42.925Z", - "endTime": "2022-12-02T08:15:42.925Z", + "startTime": "2022-12-07T18:52:18.322Z", + "endTime": "2022-12-07T18:57:18.322Z", "attributes": { "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", "clusterDisplayName": "cod--qfdcinkqrzw", @@ -954,13 +981,14 @@ "unitDenominators": [ "seconds" ], - "expression": "SELECT last(alerts_rate) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "expression": "SELECT last(alerts_rate) AS \"alerts_rate\" WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "alias": "alerts_rate", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:15:38.898Z", + "timestamp": "2022-12-07T18:56:39.526Z", "value": 0, "type": "SAMPLE" } @@ -970,8 +998,8 @@ "metadata": { "metricName": "last(events_critical_rate)", "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-12-02T08:10:42.925Z", - "endTime": "2022-12-02T08:15:42.925Z", + "startTime": "2022-12-07T18:52:18.322Z", + "endTime": "2022-12-07T18:57:18.322Z", "attributes": { "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", "clusterDisplayName": "cod--qfdcinkqrzw", @@ -989,13 +1017,14 @@ "unitDenominators": [ "seconds" ], - "expression": "SELECT last(events_critical_rate) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "expression": "SELECT last(events_critical_rate) AS \"events_critical_rate\" WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "alias": "events_critical_rate", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:15:38.898Z", + "timestamp": "2022-12-07T18:56:39.526Z", "value": 0, "type": "SAMPLE" } @@ -1005,8 +1034,8 @@ "metadata": { "metricName": "last(events_important_rate)", "entityName": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "startTime": "2022-12-02T08:10:42.925Z", - "endTime": "2022-12-02T08:15:42.925Z", + "startTime": "2022-12-07T18:52:18.322Z", + "endTime": "2022-12-07T18:57:18.322Z", "attributes": { "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", "clusterDisplayName": "cod--qfdcinkqrzw", @@ -1024,13 +1053,14 @@ "unitDenominators": [ "seconds" ], - "expression": "SELECT last(events_important_rate) WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "expression": "SELECT last(events_important_rate) AS \"events_important_rate\" WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category = HOST", + "alias": "events_important_rate", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:15:38.898Z", + "timestamp": "2022-12-07T18:56:39.526Z", "value": 0, "type": "SAMPLE" } @@ -1038,7 +1068,7 @@ } ], "warnings": [], - "timeSeriesQuery": "SELECT last(cpu_user_rate),last(cpu_system_rate),last(cpu_nice_rate),last(cpu_iowait_rate),last(cpu_irq_rate),last(cpu_soft_irq_rate),last(cpu_steal_rate),last(load_1),last(load_5),last(load_15),last(swap_used),last(swap_out_rate),last(physical_memory_used),last(physical_memory_total),last(physical_memory_cached),last(physical_memory_buffers),last(total_bytes_receive_rate_across_network_interfaces),last(total_bytes_transmit_rate_across_network_interfaces),last(total_read_bytes_rate_across_disks),last(total_write_bytes_rate_across_disks),last(total_read_ios_rate_across_disks),last(total_write_ios_rate_across_disks),last(health_good_rate),last(health_concerning_rate),last(health_bad_rate),last(health_disabled_rate),last(health_unknown_rate),last(alerts_rate),last(events_critical_rate),last(events_important_rate) WHERE hostId=\"d8623d9457f4db06c5637c4fd4c02f5d\" AND category=HOST" + "timeSeriesQuery": "SELECT last(cpu_user_rate) AS cpu_user_rate,last(cpu_system_rate) AS cpu_system_rate,last(cpu_nice_rate) AS cpu_nice_rate,last(cpu_iowait_rate) AS cpu_iowait_rate,last(cpu_irq_rate) AS cpu_irq_rate,last(cpu_soft_irq_rate) AS cpu_soft_irq_rate,last(cpu_steal_rate) AS cpu_steal_rate,last(load_1) AS load_1,last(load_5) AS load_5,last(load_15) AS load_15,last(swap_used) AS swap_used,last(swap_out_rate) AS swap_out_rate,last(physical_memory_used) AS physical_memory_used,last(physical_memory_total) AS physical_memory_total,last(physical_memory_cached) AS physical_memory_cached,last(physical_memory_buffers) AS physical_memory_buffers,last(total_bytes_receive_rate_across_network_interfaces) AS total_bytes_receive_rate_across_network_interfaces,last(total_bytes_transmit_rate_across_network_interfaces) AS total_bytes_transmit_rate_across_network_interfaces,last(total_read_bytes_rate_across_disks) AS total_read_bytes_rate_across_disks,last(total_write_bytes_rate_across_disks) AS total_write_bytes_rate_across_disks,last(total_read_ios_rate_across_disks) AS total_read_ios_rate_across_disks,last(total_write_ios_rate_across_disks) AS total_write_ios_rate_across_disks,last(health_good_rate) AS health_good_rate,last(health_concerning_rate) AS health_concerning_rate,last(health_bad_rate) AS health_bad_rate,last(health_disabled_rate) AS health_disabled_rate,last(health_unknown_rate) AS health_unknown_rate,last(alerts_rate) AS alerts_rate,last(events_critical_rate) AS events_critical_rate,last(events_important_rate) AS events_important_rate WHERE entityName = \"d8623d9457f4db06c5637c4fd4c02f5d\" AND category=HOST" } ] } \ No newline at end of file diff --git a/cloudera/tests/docker/fixtures/api/v48/timeseries/get_metrics_from_role b/cloudera/tests/docker/fixtures/api/v48/timeseries/get_metrics_from_role index cf87c879cee5c..a7b13f1023a05 100644 --- a/cloudera/tests/docker/fixtures/api/v48/timeseries/get_metrics_from_role +++ b/cloudera/tests/docker/fixtures/api/v48/timeseries/get_metrics_from_role @@ -5,20 +5,23 @@ { "metadata": { "metricName": "last(mem_rss)", - "entityName": "Event Server (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-12-02T08:17:28.403Z", - "endTime": "2022-12-02T08:22:28.403Z", + "entityName": "DataNode (cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", "attributes": { - "serviceType": "MGMT", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "EVENTSERVER", - "roleName": "EVENTSERVER", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "roleConfigGroup": "Event Server Default Group", + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "9784d85849c7179b790d476c483fd905", "active": "true", - "serviceDisplayName": "MGMT", - "serviceName": "MGMT", - "roleType": "EVENTSERVER", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "DATANODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-DATANODE-bf4b8e304dd0b549bcad6614d3129033", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-DATANODE-bf4b8e304dd0b549bcad6614d3129033", + "roleConfigGroup": "DataNode Default Group", "category": "ROLE", "rackId": "/ap-northeast-1d" }, @@ -26,14 +29,15 @@ "bytes" ], "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"EVENTSERVER\" AND category = ROLE", + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"hdfs-DATANODE-bf4b8e304dd0b549bcad6614d3129033\" AND category = ROLE", + "alias": "mem_rss", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:22:27.000Z", - "value": 1339686912, + "timestamp": "2022-12-07T18:59:26.000Z", + "value": 598151168, "type": "SAMPLE" } ] @@ -41,35 +45,73 @@ { "metadata": { "metricName": "last(mem_rss)", - "entityName": "Telemetry Publisher (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-12-02T08:17:28.403Z", - "endTime": "2022-12-02T08:22:28.403Z", + "entityName": "Master (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", "attributes": { - "serviceType": "MGMT", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "TELEMETRYPUBLISHER", - "roleName": "TELEMETRYPUBLISHER", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "roleConfigGroup": "Telemetry Publisher Default Group", + "serviceType": "HBASE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "119115ab851aefe1429860d4255b3fab", "active": "true", - "serviceDisplayName": "MGMT", - "serviceName": "MGMT", - "roleType": "TELEMETRYPUBLISHER", + "serviceDisplayName": "hbase", + "serviceName": "hbase", + "roleType": "MASTER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hbase-MASTER-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hbase-MASTER-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "roleConfigGroup": "Master Default Group", "category": "ROLE", - "rackId": "/ap-northeast-1d" + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"hbase-MASTER-dbb26169f4e1fe9a387fcc5bd5bfd6af\" AND category = ROLE", + "alias": "mem_rss", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "Server (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "ZOOKEEPER", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", + "active": "true", + "serviceDisplayName": "ZooKeeper", + "serviceName": "zookeeper-e52d", + "roleType": "SERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "zookeeper-e52d-SERVER-3bc8f544ef0c15a373bbe9f9790fefba", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "zookeeper-e52d-SERVER-3bc8f544ef0c15a373bbe9f9790fefba", + "roleConfigGroup": "Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" }, "unitNumerators": [ "bytes" ], "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"TELEMETRYPUBLISHER\" AND category = ROLE", + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"zookeeper-e52d-SERVER-3bc8f544ef0c15a373bbe9f9790fefba\" AND category = ROLE", + "alias": "mem_rss", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:22:27.000Z", - "value": 1488789504, + "timestamp": "2022-12-07T18:59:15.000Z", + "value": 3068948480, "type": "SAMPLE" } ] @@ -77,35 +119,39 @@ { "metadata": { "metricName": "last(mem_rss)", - "entityName": "Host Monitor (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-12-02T08:17:28.403Z", - "endTime": "2022-12-02T08:22:28.403Z", + "entityName": "JournalNode (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", "attributes": { - "serviceType": "MGMT", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "HOSTMONITOR", - "roleName": "HOSTMONITOR", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "roleConfigGroup": "Host Monitor Default Group", + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "119115ab851aefe1429860d4255b3fab", "active": "true", - "serviceDisplayName": "MGMT", - "serviceName": "MGMT", - "roleType": "HOSTMONITOR", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "JOURNALNODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-JOURNALNODE-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-JOURNALNODE-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "roleConfigGroup": "JournalNode Default Group", "category": "ROLE", - "rackId": "/ap-northeast-1d" + "rackId": "/ap-northeast-1c" }, "unitNumerators": [ "bytes" ], "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"HOSTMONITOR\" AND category = ROLE", + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"hdfs-JOURNALNODE-dbb26169f4e1fe9a387fcc5bd5bfd6af\" AND category = ROLE", + "alias": "mem_rss", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:22:27.000Z", - "value": 1995448320, + "timestamp": "2022-12-07T18:58:56.000Z", + "value": 408899584, "type": "SAMPLE" } ] @@ -113,23 +159,23 @@ { "metadata": { "metricName": "last(mem_rss)", - "entityName": "QUEUEMANAGER_WEBAPP (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-12-02T08:17:28.403Z", - "endTime": "2022-12-02T08:22:28.403Z", + "entityName": "NameNode (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", "attributes": { - "serviceType": "QUEUEMANAGER", + "serviceType": "HDFS", "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "hostId": "759451867dfde961d6adbeb21d9c13f9", "active": "true", - "serviceDisplayName": "queuemanager", - "serviceName": "queuemanager", - "roleType": "QUEUEMANAGER_WEBAPP", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "NAMENODE", "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "queuc8af8526-QUEUEMANAGER_WEBAPP-7d0b6bba5cf23b4729586ee8d35ab76", + "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-NAMENODE-6e88fa1a7ad969e10ea41365cba9abc5", "clusterName": "cod--qfdcinkqrzw", - "roleName": "queuc8af8526-QUEUEMANAGER_WEBAPP-7d0b6bba5cf23b4729586ee8d35ab76", - "roleConfigGroup": "YARN Queue Manager Webapp Default Group", + "roleName": "hdfs-NAMENODE-6e88fa1a7ad969e10ea41365cba9abc5", + "roleConfigGroup": "NameNode Default Group", "category": "ROLE", "rackId": "/ap-northeast-1d" }, @@ -137,14 +183,15 @@ "bytes" ], "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"queuc8af8526-QUEUEMANAGER_WEBAPP-7d0b6bba5cf23b4729586ee8d35ab76\" AND category = ROLE", + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"hdfs-NAMENODE-6e88fa1a7ad969e10ea41365cba9abc5\" AND category = ROLE", + "alias": "mem_rss", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:22:28.000Z", - "value": 279879680, + "timestamp": "2022-12-07T18:58:49.000Z", + "value": 1093173248, "type": "SAMPLE" } ] @@ -152,23 +199,23 @@ { "metadata": { "metricName": "last(mem_rss)", - "entityName": "Load Balancer (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-12-02T08:17:28.403Z", - "endTime": "2022-12-02T08:22:28.403Z", + "entityName": "RegionServer (cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", "attributes": { - "serviceType": "HUE", + "serviceType": "HBASE", "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "hostId": "9784d85849c7179b790d476c483fd905", "active": "true", - "serviceDisplayName": "hue", - "serviceName": "hue", - "roleType": "HUE_LOAD_BALANCER", + "serviceDisplayName": "hbase", + "serviceName": "hbase", + "roleType": "REGIONSERVER", "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hue-HUE_LOAD_BALANCER-7d0b6bba5cf23b4729586ee8d35ab766", + "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hbase-REGIONSERVER-bf4b8e304dd0b549bcad6614d3129033", "clusterName": "cod--qfdcinkqrzw", - "roleName": "hue-HUE_LOAD_BALANCER-7d0b6bba5cf23b4729586ee8d35ab766", - "roleConfigGroup": "Load Balancer Default Group", + "roleName": "hbase-REGIONSERVER-bf4b8e304dd0b549bcad6614d3129033", + "roleConfigGroup": "RegionServer Default Group", "category": "ROLE", "rackId": "/ap-northeast-1d" }, @@ -176,7 +223,8 @@ "bytes" ], "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"hue-HUE_LOAD_BALANCER-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"hbase-REGIONSERVER-bf4b8e304dd0b549bcad6614d3129033\" AND category = ROLE", + "alias": "mem_rss", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, @@ -185,31 +233,32 @@ { "metadata": { "metricName": "last(mem_rss)", - "entityName": "Kerberos Ticket Renewer (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-12-02T08:17:28.403Z", - "endTime": "2022-12-02T08:22:28.403Z", + "entityName": "PHOENIX_QUERY_SERVER (cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", "attributes": { - "serviceType": "HUE", + "serviceType": "PHOENIX", "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "hostId": "49adda80d1b98e9262ee146fd7fd798b", "active": "true", - "serviceDisplayName": "hue", - "serviceName": "hue", - "roleType": "KT_RENEWER", + "serviceDisplayName": "phoenix", + "serviceName": "phoenix", + "roleType": "PHOENIX_QUERY_SERVER", "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hue-KT_RENEWER-7d0b6bba5cf23b4729586ee8d35ab766", + "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "phoenix-PHOENIX_QUERY_SERVER-3c658ac6009daca54192736b1502fae1", "clusterName": "cod--qfdcinkqrzw", - "roleName": "hue-KT_RENEWER-7d0b6bba5cf23b4729586ee8d35ab766", - "roleConfigGroup": "Kerberos Ticket Renewer Default Group", + "roleName": "phoenix-PHOENIX_QUERY_SERVER-3c658ac6009daca54192736b1502fae1", + "roleConfigGroup": "Query Server Default Group", "category": "ROLE", - "rackId": "/ap-northeast-1d" + "rackId": "/ap-northeast-1c" }, "unitNumerators": [ "bytes" ], "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"hue-KT_RENEWER-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"phoenix-PHOENIX_QUERY_SERVER-3c658ac6009daca54192736b1502fae1\" AND category = ROLE", + "alias": "mem_rss", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, @@ -218,23 +267,23 @@ { "metadata": { "metricName": "last(mem_rss)", - "entityName": "Hue Server (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-12-02T08:17:28.403Z", - "endTime": "2022-12-02T08:22:28.403Z", + "entityName": "PHOENIX_QUERY_SERVER (cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", "attributes": { - "serviceType": "HUE", + "serviceType": "PHOENIX", "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "hostId": "ed528836ae33e47e6657b95373571c33", "active": "true", - "serviceDisplayName": "hue", - "serviceName": "hue", - "roleType": "HUE_SERVER", + "serviceDisplayName": "phoenix", + "serviceName": "phoenix", + "roleType": "PHOENIX_QUERY_SERVER", "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hue-HUE_SERVER-7d0b6bba5cf23b4729586ee8d35ab766", + "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "phoenix-PHOENIX_QUERY_SERVER-145da1565b8e2c4165145d9ecc0c784e", "clusterName": "cod--qfdcinkqrzw", - "roleName": "hue-HUE_SERVER-7d0b6bba5cf23b4729586ee8d35ab766", - "roleConfigGroup": "Hue Server Default Group", + "roleName": "phoenix-PHOENIX_QUERY_SERVER-145da1565b8e2c4165145d9ecc0c784e", + "roleConfigGroup": "Query Server Default Group", "category": "ROLE", "rackId": "/ap-northeast-1d" }, @@ -242,7 +291,8 @@ "bytes" ], "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"hue-HUE_SERVER-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"phoenix-PHOENIX_QUERY_SERVER-145da1565b8e2c4165145d9ecc0c784e\" AND category = ROLE", + "alias": "mem_rss", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, @@ -251,38 +301,39 @@ { "metadata": { "metricName": "last(mem_rss)", - "entityName": "QUEUEMANAGER_STORE (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-12-02T08:17:28.403Z", - "endTime": "2022-12-02T08:22:28.403Z", + "entityName": "NodeManager (cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", "attributes": { - "serviceType": "QUEUEMANAGER", + "serviceType": "YARN", "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "hostId": "88ae2611748383b5628d4aec94873da9", "active": "true", - "serviceDisplayName": "queuemanager", - "serviceName": "queuemanager", - "roleType": "QUEUEMANAGER_STORE", + "serviceDisplayName": "yarn", + "serviceName": "yarn", + "roleType": "NODEMANAGER", "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "queuemanager-QUEUEMANAGER_STORE-7d0b6bba5cf23b4729586ee8d35ab766", + "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "yarn-NODEMANAGER-d51d3a03fc3294039de9c160b1013676", "clusterName": "cod--qfdcinkqrzw", - "roleName": "queuemanager-QUEUEMANAGER_STORE-7d0b6bba5cf23b4729586ee8d35ab766", - "roleConfigGroup": "YARN Queue Manager Store Default Group", + "roleName": "yarn-NODEMANAGER-d51d3a03fc3294039de9c160b1013676", + "roleConfigGroup": "NodeManager Default Group", "category": "ROLE", - "rackId": "/ap-northeast-1d" + "rackId": "/ap-northeast-1a" }, "unitNumerators": [ "bytes" ], "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"queuemanager-QUEUEMANAGER_STORE-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"yarn-NODEMANAGER-d51d3a03fc3294039de9c160b1013676\" AND category = ROLE", + "alias": "mem_rss", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:22:28.000Z", - "value": 988344320, + "timestamp": "2022-12-07T18:59:28.000Z", + "value": 454737920, "type": "SAMPLE" } ] @@ -290,38 +341,39 @@ { "metadata": { "metricName": "last(mem_rss)", - "entityName": "KNOX_GATEWAY (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-12-02T08:17:28.403Z", - "endTime": "2022-12-02T08:22:28.403Z", + "entityName": "Server (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", "attributes": { - "serviceType": "KNOX", + "serviceType": "ZOOKEEPER", "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "hostId": "119115ab851aefe1429860d4255b3fab", "active": "true", - "serviceDisplayName": "Knox", - "serviceName": "knox-e428", - "roleType": "KNOX_GATEWAY", + "serviceDisplayName": "ZooKeeper", + "serviceName": "zookeeper-e52d", + "roleType": "SERVER", "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "knox-e428-KNOX_GATEWAY-7d0b6bba5cf23b4729586ee8d35ab766", + "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "zookeeper-e52d-SERVER-dbb26169f4e1fe9a387fcc5bd5bfd6af", "clusterName": "cod--qfdcinkqrzw", - "roleName": "knox-e428-KNOX_GATEWAY-7d0b6bba5cf23b4729586ee8d35ab766", - "roleConfigGroup": "Knox Gateway Default Group", + "roleName": "zookeeper-e52d-SERVER-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "roleConfigGroup": "Server Default Group", "category": "ROLE", - "rackId": "/ap-northeast-1d" + "rackId": "/ap-northeast-1c" }, "unitNumerators": [ "bytes" ], "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"knox-e428-KNOX_GATEWAY-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"zookeeper-e52d-SERVER-dbb26169f4e1fe9a387fcc5bd5bfd6af\" AND category = ROLE", + "alias": "mem_rss", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:22:28.000Z", - "value": 961654784, + "timestamp": "2022-12-07T18:58:56.000Z", + "value": 3067695104, "type": "SAMPLE" } ] @@ -329,56 +381,57 @@ { "metadata": { "metricName": "last(mem_rss)", - "entityName": "Service Monitor (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-12-02T08:17:28.403Z", - "endTime": "2022-12-02T08:22:28.403Z", + "entityName": "RegionServer (cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", "attributes": { - "serviceType": "MGMT", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "SERVICEMONITOR", - "roleName": "SERVICEMONITOR", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "roleConfigGroup": "Service Monitor Default Group", + "serviceType": "HBASE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "22f6ab659c835d47bc13d6c8f3370110", "active": "true", - "serviceDisplayName": "MGMT", - "serviceName": "MGMT", - "roleType": "SERVICEMONITOR", + "serviceDisplayName": "hbase", + "serviceName": "hbase", + "roleType": "REGIONSERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hbase-REGIONSERVER-7e9a53b768c95833df424c7d7b0ae857", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hbase-REGIONSERVER-7e9a53b768c95833df424c7d7b0ae857", + "roleConfigGroup": "hbase-REGIONSERVER", "category": "ROLE", - "rackId": "/ap-northeast-1d" + "rackId": "/ap-northeast-1c" }, "unitNumerators": [ "bytes" ], "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"SERVICEMONITOR\" AND category = ROLE", + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"hbase-REGIONSERVER-7e9a53b768c95833df424c7d7b0ae857\" AND category = ROLE", + "alias": "mem_rss", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, - "data": [ - { - "timestamp": "2022-12-02T08:22:27.000Z", - "value": 3119345664, - "type": "SAMPLE" - } - ] + "data": [] }, { "metadata": { "metricName": "last(mem_rss)", - "entityName": "Alert Publisher (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-12-02T08:17:28.403Z", - "endTime": "2022-12-02T08:22:28.403Z", + "entityName": "DataNode (cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", "attributes": { - "serviceType": "MGMT", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "ALERTPUBLISHER", - "roleName": "ALERTPUBLISHER", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "roleConfigGroup": "Alert Publisher Default Group", + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "ed528836ae33e47e6657b95373571c33", "active": "true", - "serviceDisplayName": "MGMT", - "serviceName": "MGMT", - "roleType": "ALERTPUBLISHER", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "DATANODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-DATANODE-145da1565b8e2c4165145d9ecc0c784e", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-DATANODE-145da1565b8e2c4165145d9ecc0c784e", + "roleConfigGroup": "DataNode Default Group", "category": "ROLE", "rackId": "/ap-northeast-1d" }, @@ -386,179 +439,198 @@ "bytes" ], "unitDenominators": [], - "expression": "SELECT last(mem_rss) WHERE entityName = \"ALERTPUBLISHER\" AND category = ROLE", + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"hdfs-DATANODE-145da1565b8e2c4165145d9ecc0c784e\" AND category = ROLE", + "alias": "mem_rss", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:22:28.000Z", - "value": 283766784, + "timestamp": "2022-12-07T18:59:27.000Z", + "value": 601690112, "type": "SAMPLE" } ] }, { "metadata": { - "metricName": "last(cpu_user_rate)", - "entityName": "Event Server (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-12-02T08:17:28.403Z", - "endTime": "2022-12-02T08:22:28.403Z", + "metricName": "last(mem_rss)", + "entityName": "Host Monitor (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", "attributes": { "serviceType": "MGMT", "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "EVENTSERVER", - "roleName": "EVENTSERVER", + "entityName": "HOSTMONITOR", + "roleName": "HOSTMONITOR", "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "roleConfigGroup": "Event Server Default Group", + "roleConfigGroup": "Host Monitor Default Group", "active": "true", "serviceDisplayName": "MGMT", "serviceName": "MGMT", - "roleType": "EVENTSERVER", + "roleType": "HOSTMONITOR", "category": "ROLE", "rackId": "/ap-northeast-1d" }, "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" + "bytes" ], - "expression": "SELECT last(cpu_user_rate) WHERE entityName = \"EVENTSERVER\" AND category = ROLE", + "unitDenominators": [], + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"HOSTMONITOR\" AND category = ROLE", + "alias": "mem_rss", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:22:27.000Z", - "value": 0.004000000000026678, + "timestamp": "2022-12-07T18:59:31.000Z", + "value": 2023608320, "type": "SAMPLE" } ] }, { "metadata": { - "metricName": "last(cpu_user_rate)", - "entityName": "Telemetry Publisher (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-12-02T08:17:28.403Z", - "endTime": "2022-12-02T08:22:28.403Z", + "metricName": "last(mem_rss)", + "entityName": "ResourceManager (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", "attributes": { - "serviceType": "MGMT", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "TELEMETRYPUBLISHER", - "roleName": "TELEMETRYPUBLISHER", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "roleConfigGroup": "Telemetry Publisher Default Group", + "serviceType": "YARN", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "759451867dfde961d6adbeb21d9c13f9", "active": "true", - "serviceDisplayName": "MGMT", - "serviceName": "MGMT", - "roleType": "TELEMETRYPUBLISHER", + "serviceDisplayName": "yarn", + "serviceName": "yarn", + "roleType": "RESOURCEMANAGER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "yarn-RESOURCEMANAGER-6e88fa1a7ad969e10ea41365cba9abc5", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "yarn-RESOURCEMANAGER-6e88fa1a7ad969e10ea41365cba9abc5", + "roleConfigGroup": "ResourceManager Default Group", "category": "ROLE", "rackId": "/ap-northeast-1d" }, "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" + "bytes" ], - "expression": "SELECT last(cpu_user_rate) WHERE entityName = \"TELEMETRYPUBLISHER\" AND category = ROLE", + "unitDenominators": [], + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"yarn-RESOURCEMANAGER-6e88fa1a7ad969e10ea41365cba9abc5\" AND category = ROLE", + "alias": "mem_rss", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, - "data": [ - { - "timestamp": "2022-12-02T08:22:27.000Z", - "value": 0.07033333333335273, - "type": "SAMPLE" - } - ] + "data": [] }, { "metadata": { - "metricName": "last(cpu_user_rate)", - "entityName": "Host Monitor (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-12-02T08:17:28.403Z", - "endTime": "2022-12-02T08:22:28.403Z", + "metricName": "last(mem_rss)", + "entityName": "PHOENIX_QUERY_SERVER (cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", "attributes": { - "serviceType": "MGMT", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "HOSTMONITOR", - "roleName": "HOSTMONITOR", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "roleConfigGroup": "Host Monitor Default Group", + "serviceType": "PHOENIX", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "9784d85849c7179b790d476c483fd905", "active": "true", - "serviceDisplayName": "MGMT", - "serviceName": "MGMT", - "roleType": "HOSTMONITOR", + "serviceDisplayName": "phoenix", + "serviceName": "phoenix", + "roleType": "PHOENIX_QUERY_SERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "phoenix-PHOENIX_QUERY_SERVER-bf4b8e304dd0b549bcad6614d3129033", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "phoenix-PHOENIX_QUERY_SERVER-bf4b8e304dd0b549bcad6614d3129033", + "roleConfigGroup": "Query Server Default Group", "category": "ROLE", "rackId": "/ap-northeast-1d" }, "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" + "bytes" ], - "expression": "SELECT last(cpu_user_rate) WHERE entityName = \"HOSTMONITOR\" AND category = ROLE", + "unitDenominators": [], + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"phoenix-PHOENIX_QUERY_SERVER-bf4b8e304dd0b549bcad6614d3129033\" AND category = ROLE", + "alias": "mem_rss", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, - "data": [ - { - "timestamp": "2022-12-02T08:22:27.000Z", - "value": 0.02950000000006791, - "type": "SAMPLE" - } - ] + "data": [] }, { "metadata": { - "metricName": "last(cpu_user_rate)", - "entityName": "QUEUEMANAGER_WEBAPP (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-12-02T08:17:28.403Z", - "endTime": "2022-12-02T08:22:28.403Z", + "metricName": "last(mem_rss)", + "entityName": "RegionServer (cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", "attributes": { - "serviceType": "QUEUEMANAGER", + "serviceType": "HBASE", "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "hostId": "ed528836ae33e47e6657b95373571c33", "active": "true", - "serviceDisplayName": "queuemanager", - "serviceName": "queuemanager", - "roleType": "QUEUEMANAGER_WEBAPP", + "serviceDisplayName": "hbase", + "serviceName": "hbase", + "roleType": "REGIONSERVER", "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "queuc8af8526-QUEUEMANAGER_WEBAPP-7d0b6bba5cf23b4729586ee8d35ab76", + "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hbase-REGIONSERVER-145da1565b8e2c4165145d9ecc0c784e", "clusterName": "cod--qfdcinkqrzw", - "roleName": "queuc8af8526-QUEUEMANAGER_WEBAPP-7d0b6bba5cf23b4729586ee8d35ab76", - "roleConfigGroup": "YARN Queue Manager Webapp Default Group", + "roleName": "hbase-REGIONSERVER-145da1565b8e2c4165145d9ecc0c784e", + "roleConfigGroup": "RegionServer Default Group", "category": "ROLE", "rackId": "/ap-northeast-1d" }, "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" + "bytes" ], - "expression": "SELECT last(cpu_user_rate) WHERE entityName = \"queuc8af8526-QUEUEMANAGER_WEBAPP-7d0b6bba5cf23b4729586ee8d35ab76\" AND category = ROLE", + "unitDenominators": [], + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"hbase-REGIONSERVER-145da1565b8e2c4165145d9ecc0c784e\" AND category = ROLE", + "alias": "mem_rss", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, - "data": [ - { - "timestamp": "2022-12-02T08:22:28.000Z", - "value": 0.0001666666666665151, - "type": "SAMPLE" - } - ] + "data": [] }, { "metadata": { - "metricName": "last(cpu_user_rate)", - "entityName": "Load Balancer (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-12-02T08:17:28.403Z", - "endTime": "2022-12-02T08:22:28.403Z", + "metricName": "last(mem_rss)", + "entityName": "RegionServer (cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HBASE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "88ae2611748383b5628d4aec94873da9", + "active": "true", + "serviceDisplayName": "hbase", + "serviceName": "hbase", + "roleType": "REGIONSERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hbase-REGIONSERVER-d51d3a03fc3294039de9c160b1013676", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hbase-REGIONSERVER-d51d3a03fc3294039de9c160b1013676", + "roleConfigGroup": "RegionServer Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"hbase-REGIONSERVER-d51d3a03fc3294039de9c160b1013676\" AND category = ROLE", + "alias": "mem_rss", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "Load Balancer (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", "attributes": { "serviceType": "HUE", "clusterDisplayName": "cod--qfdcinkqrzw", @@ -577,12 +649,11 @@ "rackId": "/ap-northeast-1d" }, "unitNumerators": [ - "seconds" - ], - "unitDenominators": [ - "seconds" + "bytes" ], - "expression": "SELECT last(cpu_user_rate) WHERE entityName = \"hue-HUE_LOAD_BALANCER-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "unitDenominators": [], + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"hue-HUE_LOAD_BALANCER-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "alias": "mem_rss", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, @@ -590,10 +661,10 @@ }, { "metadata": { - "metricName": "last(cpu_user_rate)", + "metricName": "last(mem_rss)", "entityName": "Kerberos Ticket Renewer (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-12-02T08:17:28.403Z", - "endTime": "2022-12-02T08:22:28.403Z", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", "attributes": { "serviceType": "HUE", "clusterDisplayName": "cod--qfdcinkqrzw", @@ -612,12 +683,45 @@ "rackId": "/ap-northeast-1d" }, "unitNumerators": [ - "seconds" + "bytes" ], - "unitDenominators": [ - "seconds" + "unitDenominators": [], + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"hue-KT_RENEWER-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "alias": "mem_rss", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "HBase REST Server (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HBASE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", + "active": "true", + "serviceDisplayName": "hbase", + "serviceName": "hbase", + "roleType": "HBASERESTSERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hbase-HBASERESTSERVER-3bc8f544ef0c15a373bbe9f9790fefba", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hbase-HBASERESTSERVER-3bc8f544ef0c15a373bbe9f9790fefba", + "roleConfigGroup": "HBase REST Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "bytes" ], - "expression": "SELECT last(cpu_user_rate) WHERE entityName = \"hue-KT_RENEWER-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "unitDenominators": [], + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"hbase-HBASERESTSERVER-3bc8f544ef0c15a373bbe9f9790fefba\" AND category = ROLE", + "alias": "mem_rss", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, @@ -625,10 +729,198 @@ }, { "metadata": { - "metricName": "last(cpu_user_rate)", + "metricName": "last(mem_rss)", + "entityName": "OMID_TSO (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "OMID", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", + "active": "true", + "serviceDisplayName": "omid", + "serviceName": "omid", + "roleType": "OMID_TSO", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "omid-OMID_TSO-3bc8f544ef0c15a373bbe9f9790fefba", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "omid-OMID_TSO-3bc8f544ef0c15a373bbe9f9790fefba", + "roleConfigGroup": "Omid tso server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"omid-OMID_TSO-3bc8f544ef0c15a373bbe9f9790fefba\" AND category = ROLE", + "alias": "mem_rss", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "JournalNode (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "759451867dfde961d6adbeb21d9c13f9", + "active": "true", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "JOURNALNODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-JOURNALNODE-6e88fa1a7ad969e10ea41365cba9abc5", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-JOURNALNODE-6e88fa1a7ad969e10ea41365cba9abc5", + "roleConfigGroup": "JournalNode Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"hdfs-JOURNALNODE-6e88fa1a7ad969e10ea41365cba9abc5\" AND category = ROLE", + "alias": "mem_rss", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:58:49.000Z", + "value": 404697088, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "JournalNode (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", + "active": "true", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "JOURNALNODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-JOURNALNODE-3bc8f544ef0c15a373bbe9f9790fefba", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-JOURNALNODE-3bc8f544ef0c15a373bbe9f9790fefba", + "roleConfigGroup": "JournalNode Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"hdfs-JOURNALNODE-3bc8f544ef0c15a373bbe9f9790fefba\" AND category = ROLE", + "alias": "mem_rss", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:15.000Z", + "value": 407121920, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "Server (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "ZOOKEEPER", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "759451867dfde961d6adbeb21d9c13f9", + "active": "true", + "serviceDisplayName": "ZooKeeper", + "serviceName": "zookeeper-e52d", + "roleType": "SERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "zookeeper-e52d-SERVER-6e88fa1a7ad969e10ea41365cba9abc5", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "zookeeper-e52d-SERVER-6e88fa1a7ad969e10ea41365cba9abc5", + "roleConfigGroup": "Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"zookeeper-e52d-SERVER-6e88fa1a7ad969e10ea41365cba9abc5\" AND category = ROLE", + "alias": "mem_rss", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:58:49.000Z", + "value": 3066593280, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "PHOENIX_QUERY_SERVER (cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "PHOENIX", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "88ae2611748383b5628d4aec94873da9", + "active": "true", + "serviceDisplayName": "phoenix", + "serviceName": "phoenix", + "roleType": "PHOENIX_QUERY_SERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "phoenix-PHOENIX_QUERY_SERVER-d51d3a03fc3294039de9c160b1013676", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "phoenix-PHOENIX_QUERY_SERVER-d51d3a03fc3294039de9c160b1013676", + "roleConfigGroup": "Query Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"phoenix-PHOENIX_QUERY_SERVER-d51d3a03fc3294039de9c160b1013676\" AND category = ROLE", + "alias": "mem_rss", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(mem_rss)", "entityName": "Hue Server (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-12-02T08:17:28.403Z", - "endTime": "2022-12-02T08:22:28.403Z", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", "attributes": { "serviceType": "HUE", "clusterDisplayName": "cod--qfdcinkqrzw", @@ -644,7 +936,4090 @@ "roleName": "hue-HUE_SERVER-7d0b6bba5cf23b4729586ee8d35ab766", "roleConfigGroup": "Hue Server Default Group", "category": "ROLE", - "rackId": "/ap-northeast-1d" + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"hue-HUE_SERVER-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "alias": "mem_rss", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "Master (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HBASE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "759451867dfde961d6adbeb21d9c13f9", + "active": "true", + "serviceDisplayName": "hbase", + "serviceName": "hbase", + "roleType": "MASTER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hbase-MASTER-6e88fa1a7ad969e10ea41365cba9abc5", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hbase-MASTER-6e88fa1a7ad969e10ea41365cba9abc5", + "roleConfigGroup": "Master Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"hbase-MASTER-6e88fa1a7ad969e10ea41365cba9abc5\" AND category = ROLE", + "alias": "mem_rss", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "Event Server (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "MGMT", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "EVENTSERVER", + "roleName": "EVENTSERVER", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "roleConfigGroup": "Event Server Default Group", + "active": "true", + "serviceDisplayName": "MGMT", + "serviceName": "MGMT", + "roleType": "EVENTSERVER", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"EVENTSERVER\" AND category = ROLE", + "alias": "mem_rss", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:31.000Z", + "value": 1339445248, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "QUEUEMANAGER_STORE (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "QUEUEMANAGER", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "serviceDisplayName": "queuemanager", + "serviceName": "queuemanager", + "roleType": "QUEUEMANAGER_STORE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "queuemanager-QUEUEMANAGER_STORE-7d0b6bba5cf23b4729586ee8d35ab766", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "queuemanager-QUEUEMANAGER_STORE-7d0b6bba5cf23b4729586ee8d35ab766", + "roleConfigGroup": "YARN Queue Manager Store Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"queuemanager-QUEUEMANAGER_STORE-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "alias": "mem_rss", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:32.000Z", + "value": 984682496, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "PHOENIX_QUERY_SERVER (cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "PHOENIX", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "22f6ab659c835d47bc13d6c8f3370110", + "active": "true", + "serviceDisplayName": "phoenix", + "serviceName": "phoenix", + "roleType": "PHOENIX_QUERY_SERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "phoenix-PHOENIX_QUERY_SERVER-7e9a53b768c95833df424c7d7b0ae857", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "phoenix-PHOENIX_QUERY_SERVER-7e9a53b768c95833df424c7d7b0ae857", + "roleConfigGroup": "Query Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"phoenix-PHOENIX_QUERY_SERVER-7e9a53b768c95833df424c7d7b0ae857\" AND category = ROLE", + "alias": "mem_rss", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "DataNode (cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "88ae2611748383b5628d4aec94873da9", + "active": "true", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "DATANODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-DATANODE-d51d3a03fc3294039de9c160b1013676", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-DATANODE-d51d3a03fc3294039de9c160b1013676", + "roleConfigGroup": "DataNode Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"hdfs-DATANODE-d51d3a03fc3294039de9c160b1013676\" AND category = ROLE", + "alias": "mem_rss", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:28.000Z", + "value": 591917056, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "NodeManager (cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "YARN", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "ed528836ae33e47e6657b95373571c33", + "active": "true", + "serviceDisplayName": "yarn", + "serviceName": "yarn", + "roleType": "NODEMANAGER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "yarn-NODEMANAGER-145da1565b8e2c4165145d9ecc0c784e", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "yarn-NODEMANAGER-145da1565b8e2c4165145d9ecc0c784e", + "roleConfigGroup": "NodeManager Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"yarn-NODEMANAGER-145da1565b8e2c4165145d9ecc0c784e\" AND category = ROLE", + "alias": "mem_rss", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:27.000Z", + "value": 445399040, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "Failover Controller (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "759451867dfde961d6adbeb21d9c13f9", + "active": "true", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "FAILOVERCONTROLLER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-FAILOVERCONTROLLER-6e88fa1a7ad969e10ea41365cba9abc5", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-FAILOVERCONTROLLER-6e88fa1a7ad969e10ea41365cba9abc5", + "roleConfigGroup": "Failover Controller Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"hdfs-FAILOVERCONTROLLER-6e88fa1a7ad969e10ea41365cba9abc5\" AND category = ROLE", + "alias": "mem_rss", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "HBase Thrift Server (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HBASE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", + "active": "true", + "serviceDisplayName": "hbase", + "serviceName": "hbase", + "roleType": "HBASETHRIFTSERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hbase-HBASETHRIFTSERVER-3bc8f544ef0c15a373bbe9f9790fefba", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hbase-HBASETHRIFTSERVER-3bc8f544ef0c15a373bbe9f9790fefba", + "roleConfigGroup": "HBase Thrift Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"hbase-HBASETHRIFTSERVER-3bc8f544ef0c15a373bbe9f9790fefba\" AND category = ROLE", + "alias": "mem_rss", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "NameNode (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "119115ab851aefe1429860d4255b3fab", + "active": "true", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "NAMENODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-NAMENODE-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-NAMENODE-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "roleConfigGroup": "NameNode Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"hdfs-NAMENODE-dbb26169f4e1fe9a387fcc5bd5bfd6af\" AND category = ROLE", + "alias": "mem_rss", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:58:56.000Z", + "value": 1086214144, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "JobHistory Server (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "YARN", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", + "active": "true", + "serviceDisplayName": "yarn", + "serviceName": "yarn", + "roleType": "JOBHISTORY", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "yarn-JOBHISTORY-3bc8f544ef0c15a373bbe9f9790fefba", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "yarn-JOBHISTORY-3bc8f544ef0c15a373bbe9f9790fefba", + "roleConfigGroup": "JobHistory Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"yarn-JOBHISTORY-3bc8f544ef0c15a373bbe9f9790fefba\" AND category = ROLE", + "alias": "mem_rss", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:15.000Z", + "value": 455372800, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "RegionServer (cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HBASE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "49adda80d1b98e9262ee146fd7fd798b", + "active": "true", + "serviceDisplayName": "hbase", + "serviceName": "hbase", + "roleType": "REGIONSERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hbase-REGIONSERVER-3c658ac6009daca54192736b1502fae1", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hbase-REGIONSERVER-3c658ac6009daca54192736b1502fae1", + "roleConfigGroup": "hbase-REGIONSERVER", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"hbase-REGIONSERVER-3c658ac6009daca54192736b1502fae1\" AND category = ROLE", + "alias": "mem_rss", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "NodeManager (cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "YARN", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "9784d85849c7179b790d476c483fd905", + "active": "true", + "serviceDisplayName": "yarn", + "serviceName": "yarn", + "roleType": "NODEMANAGER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "yarn-NODEMANAGER-bf4b8e304dd0b549bcad6614d3129033", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "yarn-NODEMANAGER-bf4b8e304dd0b549bcad6614d3129033", + "roleConfigGroup": "NodeManager Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"yarn-NODEMANAGER-bf4b8e304dd0b549bcad6614d3129033\" AND category = ROLE", + "alias": "mem_rss", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:26.000Z", + "value": 446013440, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "QUEUEMANAGER_WEBAPP (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "QUEUEMANAGER", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "serviceDisplayName": "queuemanager", + "serviceName": "queuemanager", + "roleType": "QUEUEMANAGER_WEBAPP", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "queuc8af8526-QUEUEMANAGER_WEBAPP-7d0b6bba5cf23b4729586ee8d35ab76", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "queuc8af8526-QUEUEMANAGER_WEBAPP-7d0b6bba5cf23b4729586ee8d35ab76", + "roleConfigGroup": "YARN Queue Manager Webapp Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"queuc8af8526-QUEUEMANAGER_WEBAPP-7d0b6bba5cf23b4729586ee8d35ab76\" AND category = ROLE", + "alias": "mem_rss", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:33.000Z", + "value": 283578368, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "KNOX_GATEWAY (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "KNOX", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "serviceDisplayName": "Knox", + "serviceName": "knox-e428", + "roleType": "KNOX_GATEWAY", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "knox-e428-KNOX_GATEWAY-7d0b6bba5cf23b4729586ee8d35ab766", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "knox-e428-KNOX_GATEWAY-7d0b6bba5cf23b4729586ee8d35ab766", + "roleConfigGroup": "Knox Gateway Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"knox-e428-KNOX_GATEWAY-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "alias": "mem_rss", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:32.000Z", + "value": 998563840, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "Failover Controller (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "119115ab851aefe1429860d4255b3fab", + "active": "true", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "FAILOVERCONTROLLER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-FAILOVERCONTROLLER-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-FAILOVERCONTROLLER-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "roleConfigGroup": "Failover Controller Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"hdfs-FAILOVERCONTROLLER-dbb26169f4e1fe9a387fcc5bd5bfd6af\" AND category = ROLE", + "alias": "mem_rss", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "Alert Publisher (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "MGMT", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "ALERTPUBLISHER", + "roleName": "ALERTPUBLISHER", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "roleConfigGroup": "Alert Publisher Default Group", + "active": "true", + "serviceDisplayName": "MGMT", + "serviceName": "MGMT", + "roleType": "ALERTPUBLISHER", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"ALERTPUBLISHER\" AND category = ROLE", + "alias": "mem_rss", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:32.000Z", + "value": 283766784, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "ResourceManager (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "YARN", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "119115ab851aefe1429860d4255b3fab", + "active": "true", + "serviceDisplayName": "yarn", + "serviceName": "yarn", + "roleType": "RESOURCEMANAGER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "yarn-RESOURCEMANAGER-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "yarn-RESOURCEMANAGER-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "roleConfigGroup": "ResourceManager Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"yarn-RESOURCEMANAGER-dbb26169f4e1fe9a387fcc5bd5bfd6af\" AND category = ROLE", + "alias": "mem_rss", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "Telemetry Publisher (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "MGMT", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "TELEMETRYPUBLISHER", + "roleName": "TELEMETRYPUBLISHER", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "roleConfigGroup": "Telemetry Publisher Default Group", + "active": "true", + "serviceDisplayName": "MGMT", + "serviceName": "MGMT", + "roleType": "TELEMETRYPUBLISHER", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"TELEMETRYPUBLISHER\" AND category = ROLE", + "alias": "mem_rss", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:31.000Z", + "value": 1905250304, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "DataNode (cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "22f6ab659c835d47bc13d6c8f3370110", + "active": "true", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "DATANODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-DATANODE-7e9a53b768c95833df424c7d7b0ae857", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-DATANODE-7e9a53b768c95833df424c7d7b0ae857", + "roleConfigGroup": "DataNode Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"hdfs-DATANODE-7e9a53b768c95833df424c7d7b0ae857\" AND category = ROLE", + "alias": "mem_rss", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:29.000Z", + "value": 606642176, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "DataNode (cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "49adda80d1b98e9262ee146fd7fd798b", + "active": "true", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "DATANODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-DATANODE-3c658ac6009daca54192736b1502fae1", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-DATANODE-3c658ac6009daca54192736b1502fae1", + "roleConfigGroup": "DataNode Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"hdfs-DATANODE-3c658ac6009daca54192736b1502fae1\" AND category = ROLE", + "alias": "mem_rss", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:29.000Z", + "value": 587558912, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "NodeManager (cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "YARN", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "22f6ab659c835d47bc13d6c8f3370110", + "active": "true", + "serviceDisplayName": "yarn", + "serviceName": "yarn", + "roleType": "NODEMANAGER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "yarn-NODEMANAGER-7e9a53b768c95833df424c7d7b0ae857", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "yarn-NODEMANAGER-7e9a53b768c95833df424c7d7b0ae857", + "roleConfigGroup": "yarn-NODEMANAGER", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"yarn-NODEMANAGER-7e9a53b768c95833df424c7d7b0ae857\" AND category = ROLE", + "alias": "mem_rss", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:29.000Z", + "value": 447733760, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "NodeManager (cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "YARN", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "49adda80d1b98e9262ee146fd7fd798b", + "active": "true", + "serviceDisplayName": "yarn", + "serviceName": "yarn", + "roleType": "NODEMANAGER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "yarn-NODEMANAGER-3c658ac6009daca54192736b1502fae1", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "yarn-NODEMANAGER-3c658ac6009daca54192736b1502fae1", + "roleConfigGroup": "yarn-NODEMANAGER", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"yarn-NODEMANAGER-3c658ac6009daca54192736b1502fae1\" AND category = ROLE", + "alias": "mem_rss", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:29.000Z", + "value": 459161600, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(mem_rss)", + "entityName": "Service Monitor (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "MGMT", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "SERVICEMONITOR", + "roleName": "SERVICEMONITOR", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "roleConfigGroup": "Service Monitor Default Group", + "active": "true", + "serviceDisplayName": "MGMT", + "serviceName": "MGMT", + "roleType": "SERVICEMONITOR", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "bytes" + ], + "unitDenominators": [], + "expression": "SELECT last(mem_rss) AS \"mem_rss\" WHERE entityName = \"SERVICEMONITOR\" AND category = ROLE", + "alias": "mem_rss", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:31.000Z", + "value": 3143000064, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "DataNode (cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "9784d85849c7179b790d476c483fd905", + "active": "true", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "DATANODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-DATANODE-bf4b8e304dd0b549bcad6614d3129033", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-DATANODE-bf4b8e304dd0b549bcad6614d3129033", + "roleConfigGroup": "DataNode Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"hdfs-DATANODE-bf4b8e304dd0b549bcad6614d3129033\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:26.000Z", + "value": 0.0006666666666660604, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "Master (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HBASE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "119115ab851aefe1429860d4255b3fab", + "active": "true", + "serviceDisplayName": "hbase", + "serviceName": "hbase", + "roleType": "MASTER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hbase-MASTER-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hbase-MASTER-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "roleConfigGroup": "Master Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"hbase-MASTER-dbb26169f4e1fe9a387fcc5bd5bfd6af\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "Server (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "ZOOKEEPER", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", + "active": "true", + "serviceDisplayName": "ZooKeeper", + "serviceName": "zookeeper-e52d", + "roleType": "SERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "zookeeper-e52d-SERVER-3bc8f544ef0c15a373bbe9f9790fefba", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "zookeeper-e52d-SERVER-3bc8f544ef0c15a373bbe9f9790fefba", + "roleConfigGroup": "Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"zookeeper-e52d-SERVER-3bc8f544ef0c15a373bbe9f9790fefba\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:15.000Z", + "value": 0.0006666666666679551, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "JournalNode (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "119115ab851aefe1429860d4255b3fab", + "active": "true", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "JOURNALNODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-JOURNALNODE-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-JOURNALNODE-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "roleConfigGroup": "JournalNode Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"hdfs-JOURNALNODE-dbb26169f4e1fe9a387fcc5bd5bfd6af\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:58:56.000Z", + "value": 0.0008333333333325754, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "NameNode (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "759451867dfde961d6adbeb21d9c13f9", + "active": "true", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "NAMENODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-NAMENODE-6e88fa1a7ad969e10ea41365cba9abc5", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-NAMENODE-6e88fa1a7ad969e10ea41365cba9abc5", + "roleConfigGroup": "NameNode Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"hdfs-NAMENODE-6e88fa1a7ad969e10ea41365cba9abc5\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:58:49.000Z", + "value": 0.002333333333331211, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "RegionServer (cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HBASE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "9784d85849c7179b790d476c483fd905", + "active": "true", + "serviceDisplayName": "hbase", + "serviceName": "hbase", + "roleType": "REGIONSERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hbase-REGIONSERVER-bf4b8e304dd0b549bcad6614d3129033", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hbase-REGIONSERVER-bf4b8e304dd0b549bcad6614d3129033", + "roleConfigGroup": "RegionServer Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"hbase-REGIONSERVER-bf4b8e304dd0b549bcad6614d3129033\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "PHOENIX_QUERY_SERVER (cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "PHOENIX", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "49adda80d1b98e9262ee146fd7fd798b", + "active": "true", + "serviceDisplayName": "phoenix", + "serviceName": "phoenix", + "roleType": "PHOENIX_QUERY_SERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "phoenix-PHOENIX_QUERY_SERVER-3c658ac6009daca54192736b1502fae1", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "phoenix-PHOENIX_QUERY_SERVER-3c658ac6009daca54192736b1502fae1", + "roleConfigGroup": "Query Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"phoenix-PHOENIX_QUERY_SERVER-3c658ac6009daca54192736b1502fae1\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "PHOENIX_QUERY_SERVER (cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "PHOENIX", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "ed528836ae33e47e6657b95373571c33", + "active": "true", + "serviceDisplayName": "phoenix", + "serviceName": "phoenix", + "roleType": "PHOENIX_QUERY_SERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "phoenix-PHOENIX_QUERY_SERVER-145da1565b8e2c4165145d9ecc0c784e", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "phoenix-PHOENIX_QUERY_SERVER-145da1565b8e2c4165145d9ecc0c784e", + "roleConfigGroup": "Query Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"phoenix-PHOENIX_QUERY_SERVER-145da1565b8e2c4165145d9ecc0c784e\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "NodeManager (cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "YARN", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "88ae2611748383b5628d4aec94873da9", + "active": "true", + "serviceDisplayName": "yarn", + "serviceName": "yarn", + "roleType": "NODEMANAGER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "yarn-NODEMANAGER-d51d3a03fc3294039de9c160b1013676", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "yarn-NODEMANAGER-d51d3a03fc3294039de9c160b1013676", + "roleConfigGroup": "NodeManager Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"yarn-NODEMANAGER-d51d3a03fc3294039de9c160b1013676\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:28.000Z", + "value": 0.0011666666666666713, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "Server (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "ZOOKEEPER", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "119115ab851aefe1429860d4255b3fab", + "active": "true", + "serviceDisplayName": "ZooKeeper", + "serviceName": "zookeeper-e52d", + "roleType": "SERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "zookeeper-e52d-SERVER-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "zookeeper-e52d-SERVER-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "roleConfigGroup": "Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"zookeeper-e52d-SERVER-dbb26169f4e1fe9a387fcc5bd5bfd6af\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:58:56.000Z", + "value": 0.0003333333333330302, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "RegionServer (cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HBASE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "22f6ab659c835d47bc13d6c8f3370110", + "active": "true", + "serviceDisplayName": "hbase", + "serviceName": "hbase", + "roleType": "REGIONSERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hbase-REGIONSERVER-7e9a53b768c95833df424c7d7b0ae857", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hbase-REGIONSERVER-7e9a53b768c95833df424c7d7b0ae857", + "roleConfigGroup": "hbase-REGIONSERVER", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"hbase-REGIONSERVER-7e9a53b768c95833df424c7d7b0ae857\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "DataNode (cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "ed528836ae33e47e6657b95373571c33", + "active": "true", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "DATANODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-DATANODE-145da1565b8e2c4165145d9ecc0c784e", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-DATANODE-145da1565b8e2c4165145d9ecc0c784e", + "roleConfigGroup": "DataNode Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"hdfs-DATANODE-145da1565b8e2c4165145d9ecc0c784e\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:27.000Z", + "value": 0.0009999999999990906, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "Host Monitor (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "MGMT", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "HOSTMONITOR", + "roleName": "HOSTMONITOR", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "roleConfigGroup": "Host Monitor Default Group", + "active": "true", + "serviceDisplayName": "MGMT", + "serviceName": "MGMT", + "roleType": "HOSTMONITOR", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"HOSTMONITOR\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:31.000Z", + "value": 0.008166666666753978, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "ResourceManager (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "YARN", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "759451867dfde961d6adbeb21d9c13f9", + "active": "true", + "serviceDisplayName": "yarn", + "serviceName": "yarn", + "roleType": "RESOURCEMANAGER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "yarn-RESOURCEMANAGER-6e88fa1a7ad969e10ea41365cba9abc5", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "yarn-RESOURCEMANAGER-6e88fa1a7ad969e10ea41365cba9abc5", + "roleConfigGroup": "ResourceManager Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"yarn-RESOURCEMANAGER-6e88fa1a7ad969e10ea41365cba9abc5\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "PHOENIX_QUERY_SERVER (cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "PHOENIX", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "9784d85849c7179b790d476c483fd905", + "active": "true", + "serviceDisplayName": "phoenix", + "serviceName": "phoenix", + "roleType": "PHOENIX_QUERY_SERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "phoenix-PHOENIX_QUERY_SERVER-bf4b8e304dd0b549bcad6614d3129033", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "phoenix-PHOENIX_QUERY_SERVER-bf4b8e304dd0b549bcad6614d3129033", + "roleConfigGroup": "Query Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"phoenix-PHOENIX_QUERY_SERVER-bf4b8e304dd0b549bcad6614d3129033\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "RegionServer (cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HBASE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "ed528836ae33e47e6657b95373571c33", + "active": "true", + "serviceDisplayName": "hbase", + "serviceName": "hbase", + "roleType": "REGIONSERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hbase-REGIONSERVER-145da1565b8e2c4165145d9ecc0c784e", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hbase-REGIONSERVER-145da1565b8e2c4165145d9ecc0c784e", + "roleConfigGroup": "RegionServer Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"hbase-REGIONSERVER-145da1565b8e2c4165145d9ecc0c784e\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "RegionServer (cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HBASE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "88ae2611748383b5628d4aec94873da9", + "active": "true", + "serviceDisplayName": "hbase", + "serviceName": "hbase", + "roleType": "REGIONSERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hbase-REGIONSERVER-d51d3a03fc3294039de9c160b1013676", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hbase-REGIONSERVER-d51d3a03fc3294039de9c160b1013676", + "roleConfigGroup": "RegionServer Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"hbase-REGIONSERVER-d51d3a03fc3294039de9c160b1013676\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "Load Balancer (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HUE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "serviceDisplayName": "hue", + "serviceName": "hue", + "roleType": "HUE_LOAD_BALANCER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hue-HUE_LOAD_BALANCER-7d0b6bba5cf23b4729586ee8d35ab766", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hue-HUE_LOAD_BALANCER-7d0b6bba5cf23b4729586ee8d35ab766", + "roleConfigGroup": "Load Balancer Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"hue-HUE_LOAD_BALANCER-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "Kerberos Ticket Renewer (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HUE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "serviceDisplayName": "hue", + "serviceName": "hue", + "roleType": "KT_RENEWER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hue-KT_RENEWER-7d0b6bba5cf23b4729586ee8d35ab766", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hue-KT_RENEWER-7d0b6bba5cf23b4729586ee8d35ab766", + "roleConfigGroup": "Kerberos Ticket Renewer Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"hue-KT_RENEWER-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "HBase REST Server (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HBASE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", + "active": "true", + "serviceDisplayName": "hbase", + "serviceName": "hbase", + "roleType": "HBASERESTSERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hbase-HBASERESTSERVER-3bc8f544ef0c15a373bbe9f9790fefba", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hbase-HBASERESTSERVER-3bc8f544ef0c15a373bbe9f9790fefba", + "roleConfigGroup": "HBase REST Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"hbase-HBASERESTSERVER-3bc8f544ef0c15a373bbe9f9790fefba\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "OMID_TSO (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "OMID", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", + "active": "true", + "serviceDisplayName": "omid", + "serviceName": "omid", + "roleType": "OMID_TSO", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "omid-OMID_TSO-3bc8f544ef0c15a373bbe9f9790fefba", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "omid-OMID_TSO-3bc8f544ef0c15a373bbe9f9790fefba", + "roleConfigGroup": "Omid tso server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"omid-OMID_TSO-3bc8f544ef0c15a373bbe9f9790fefba\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "JournalNode (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "759451867dfde961d6adbeb21d9c13f9", + "active": "true", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "JOURNALNODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-JOURNALNODE-6e88fa1a7ad969e10ea41365cba9abc5", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-JOURNALNODE-6e88fa1a7ad969e10ea41365cba9abc5", + "roleConfigGroup": "JournalNode Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"hdfs-JOURNALNODE-6e88fa1a7ad969e10ea41365cba9abc5\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:58:49.000Z", + "value": 0.0009999999999990906, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "JournalNode (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", + "active": "true", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "JOURNALNODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-JOURNALNODE-3bc8f544ef0c15a373bbe9f9790fefba", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-JOURNALNODE-3bc8f544ef0c15a373bbe9f9790fefba", + "roleConfigGroup": "JournalNode Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"hdfs-JOURNALNODE-3bc8f544ef0c15a373bbe9f9790fefba\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:15.000Z", + "value": 0.0009999999999990906, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "Server (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "ZOOKEEPER", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "759451867dfde961d6adbeb21d9c13f9", + "active": "true", + "serviceDisplayName": "ZooKeeper", + "serviceName": "zookeeper-e52d", + "roleType": "SERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "zookeeper-e52d-SERVER-6e88fa1a7ad969e10ea41365cba9abc5", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "zookeeper-e52d-SERVER-6e88fa1a7ad969e10ea41365cba9abc5", + "roleConfigGroup": "Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"zookeeper-e52d-SERVER-6e88fa1a7ad969e10ea41365cba9abc5\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:58:49.000Z", + "value": 0.00033333333333492493, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "PHOENIX_QUERY_SERVER (cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "PHOENIX", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "88ae2611748383b5628d4aec94873da9", + "active": "true", + "serviceDisplayName": "phoenix", + "serviceName": "phoenix", + "roleType": "PHOENIX_QUERY_SERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "phoenix-PHOENIX_QUERY_SERVER-d51d3a03fc3294039de9c160b1013676", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "phoenix-PHOENIX_QUERY_SERVER-d51d3a03fc3294039de9c160b1013676", + "roleConfigGroup": "Query Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"phoenix-PHOENIX_QUERY_SERVER-d51d3a03fc3294039de9c160b1013676\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "Hue Server (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HUE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "serviceDisplayName": "hue", + "serviceName": "hue", + "roleType": "HUE_SERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hue-HUE_SERVER-7d0b6bba5cf23b4729586ee8d35ab766", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hue-HUE_SERVER-7d0b6bba5cf23b4729586ee8d35ab766", + "roleConfigGroup": "Hue Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"hue-HUE_SERVER-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "Master (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HBASE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "759451867dfde961d6adbeb21d9c13f9", + "active": "true", + "serviceDisplayName": "hbase", + "serviceName": "hbase", + "roleType": "MASTER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hbase-MASTER-6e88fa1a7ad969e10ea41365cba9abc5", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hbase-MASTER-6e88fa1a7ad969e10ea41365cba9abc5", + "roleConfigGroup": "Master Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"hbase-MASTER-6e88fa1a7ad969e10ea41365cba9abc5\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "Event Server (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "MGMT", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "EVENTSERVER", + "roleName": "EVENTSERVER", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "roleConfigGroup": "Event Server Default Group", + "active": "true", + "serviceDisplayName": "MGMT", + "serviceName": "MGMT", + "roleType": "EVENTSERVER", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"EVENTSERVER\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:31.000Z", + "value": 0.003666666666686069, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "QUEUEMANAGER_STORE (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "QUEUEMANAGER", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "serviceDisplayName": "queuemanager", + "serviceName": "queuemanager", + "roleType": "QUEUEMANAGER_STORE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "queuemanager-QUEUEMANAGER_STORE-7d0b6bba5cf23b4729586ee8d35ab766", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "queuemanager-QUEUEMANAGER_STORE-7d0b6bba5cf23b4729586ee8d35ab766", + "roleConfigGroup": "YARN Queue Manager Store Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"queuemanager-QUEUEMANAGER_STORE-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:32.000Z", + "value": 0.0003333333333330302, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "PHOENIX_QUERY_SERVER (cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "PHOENIX", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "22f6ab659c835d47bc13d6c8f3370110", + "active": "true", + "serviceDisplayName": "phoenix", + "serviceName": "phoenix", + "roleType": "PHOENIX_QUERY_SERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "phoenix-PHOENIX_QUERY_SERVER-7e9a53b768c95833df424c7d7b0ae857", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "phoenix-PHOENIX_QUERY_SERVER-7e9a53b768c95833df424c7d7b0ae857", + "roleConfigGroup": "Query Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"phoenix-PHOENIX_QUERY_SERVER-7e9a53b768c95833df424c7d7b0ae857\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "DataNode (cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "88ae2611748383b5628d4aec94873da9", + "active": "true", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "DATANODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-DATANODE-d51d3a03fc3294039de9c160b1013676", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-DATANODE-d51d3a03fc3294039de9c160b1013676", + "roleConfigGroup": "DataNode Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"hdfs-DATANODE-d51d3a03fc3294039de9c160b1013676\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:28.000Z", + "value": 0.0006666666666660604, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "NodeManager (cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "YARN", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "ed528836ae33e47e6657b95373571c33", + "active": "true", + "serviceDisplayName": "yarn", + "serviceName": "yarn", + "roleType": "NODEMANAGER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "yarn-NODEMANAGER-145da1565b8e2c4165145d9ecc0c784e", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "yarn-NODEMANAGER-145da1565b8e2c4165145d9ecc0c784e", + "roleConfigGroup": "NodeManager Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"yarn-NODEMANAGER-145da1565b8e2c4165145d9ecc0c784e\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:27.000Z", + "value": 0.0029999999999999953, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "Failover Controller (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "759451867dfde961d6adbeb21d9c13f9", + "active": "true", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "FAILOVERCONTROLLER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-FAILOVERCONTROLLER-6e88fa1a7ad969e10ea41365cba9abc5", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-FAILOVERCONTROLLER-6e88fa1a7ad969e10ea41365cba9abc5", + "roleConfigGroup": "Failover Controller Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"hdfs-FAILOVERCONTROLLER-6e88fa1a7ad969e10ea41365cba9abc5\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "HBase Thrift Server (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HBASE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", + "active": "true", + "serviceDisplayName": "hbase", + "serviceName": "hbase", + "roleType": "HBASETHRIFTSERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hbase-HBASETHRIFTSERVER-3bc8f544ef0c15a373bbe9f9790fefba", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hbase-HBASETHRIFTSERVER-3bc8f544ef0c15a373bbe9f9790fefba", + "roleConfigGroup": "HBase Thrift Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"hbase-HBASETHRIFTSERVER-3bc8f544ef0c15a373bbe9f9790fefba\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "NameNode (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "119115ab851aefe1429860d4255b3fab", + "active": "true", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "NAMENODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-NAMENODE-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-NAMENODE-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "roleConfigGroup": "NameNode Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"hdfs-NAMENODE-dbb26169f4e1fe9a387fcc5bd5bfd6af\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:58:56.000Z", + "value": 0.0016666666666651508, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "JobHistory Server (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "YARN", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", + "active": "true", + "serviceDisplayName": "yarn", + "serviceName": "yarn", + "roleType": "JOBHISTORY", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "yarn-JOBHISTORY-3bc8f544ef0c15a373bbe9f9790fefba", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "yarn-JOBHISTORY-3bc8f544ef0c15a373bbe9f9790fefba", + "roleConfigGroup": "JobHistory Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"yarn-JOBHISTORY-3bc8f544ef0c15a373bbe9f9790fefba\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:15.000Z", + "value": 0.003333333333333336, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "RegionServer (cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HBASE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "49adda80d1b98e9262ee146fd7fd798b", + "active": "true", + "serviceDisplayName": "hbase", + "serviceName": "hbase", + "roleType": "REGIONSERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hbase-REGIONSERVER-3c658ac6009daca54192736b1502fae1", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hbase-REGIONSERVER-3c658ac6009daca54192736b1502fae1", + "roleConfigGroup": "hbase-REGIONSERVER", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"hbase-REGIONSERVER-3c658ac6009daca54192736b1502fae1\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "NodeManager (cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "YARN", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "9784d85849c7179b790d476c483fd905", + "active": "true", + "serviceDisplayName": "yarn", + "serviceName": "yarn", + "roleType": "NODEMANAGER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "yarn-NODEMANAGER-bf4b8e304dd0b549bcad6614d3129033", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "yarn-NODEMANAGER-bf4b8e304dd0b549bcad6614d3129033", + "roleConfigGroup": "NodeManager Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"yarn-NODEMANAGER-bf4b8e304dd0b549bcad6614d3129033\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:26.000Z", + "value": 0.01683333333333342, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "QUEUEMANAGER_WEBAPP (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "QUEUEMANAGER", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "serviceDisplayName": "queuemanager", + "serviceName": "queuemanager", + "roleType": "QUEUEMANAGER_WEBAPP", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "queuc8af8526-QUEUEMANAGER_WEBAPP-7d0b6bba5cf23b4729586ee8d35ab76", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "queuc8af8526-QUEUEMANAGER_WEBAPP-7d0b6bba5cf23b4729586ee8d35ab76", + "roleConfigGroup": "YARN Queue Manager Webapp Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"queuc8af8526-QUEUEMANAGER_WEBAPP-7d0b6bba5cf23b4729586ee8d35ab76\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:33.000Z", + "value": 0.0001666666666665151, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "KNOX_GATEWAY (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "KNOX", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "serviceDisplayName": "Knox", + "serviceName": "knox-e428", + "roleType": "KNOX_GATEWAY", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "knox-e428-KNOX_GATEWAY-7d0b6bba5cf23b4729586ee8d35ab766", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "knox-e428-KNOX_GATEWAY-7d0b6bba5cf23b4729586ee8d35ab766", + "roleConfigGroup": "Knox Gateway Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"knox-e428-KNOX_GATEWAY-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:32.000Z", + "value": 0.0036666666666671215, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "Failover Controller (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "119115ab851aefe1429860d4255b3fab", + "active": "true", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "FAILOVERCONTROLLER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-FAILOVERCONTROLLER-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-FAILOVERCONTROLLER-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "roleConfigGroup": "Failover Controller Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"hdfs-FAILOVERCONTROLLER-dbb26169f4e1fe9a387fcc5bd5bfd6af\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "Alert Publisher (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "MGMT", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "ALERTPUBLISHER", + "roleName": "ALERTPUBLISHER", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "roleConfigGroup": "Alert Publisher Default Group", + "active": "true", + "serviceDisplayName": "MGMT", + "serviceName": "MGMT", + "roleType": "ALERTPUBLISHER", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"ALERTPUBLISHER\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:32.000Z", + "value": 0.0004999999999957557, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "ResourceManager (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "YARN", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "119115ab851aefe1429860d4255b3fab", + "active": "true", + "serviceDisplayName": "yarn", + "serviceName": "yarn", + "roleType": "RESOURCEMANAGER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "yarn-RESOURCEMANAGER-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "yarn-RESOURCEMANAGER-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "roleConfigGroup": "ResourceManager Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"yarn-RESOURCEMANAGER-dbb26169f4e1fe9a387fcc5bd5bfd6af\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "Telemetry Publisher (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "MGMT", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "TELEMETRYPUBLISHER", + "roleName": "TELEMETRYPUBLISHER", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "roleConfigGroup": "Telemetry Publisher Default Group", + "active": "true", + "serviceDisplayName": "MGMT", + "serviceName": "MGMT", + "roleType": "TELEMETRYPUBLISHER", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"TELEMETRYPUBLISHER\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:31.000Z", + "value": 0.029166666666666667, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "DataNode (cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "22f6ab659c835d47bc13d6c8f3370110", + "active": "true", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "DATANODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-DATANODE-7e9a53b768c95833df424c7d7b0ae857", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-DATANODE-7e9a53b768c95833df424c7d7b0ae857", + "roleConfigGroup": "DataNode Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"hdfs-DATANODE-7e9a53b768c95833df424c7d7b0ae857\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:29.000Z", + "value": 0.0010000000000009853, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "DataNode (cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "49adda80d1b98e9262ee146fd7fd798b", + "active": "true", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "DATANODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-DATANODE-3c658ac6009daca54192736b1502fae1", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-DATANODE-3c658ac6009daca54192736b1502fae1", + "roleConfigGroup": "DataNode Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"hdfs-DATANODE-3c658ac6009daca54192736b1502fae1\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:29.000Z", + "value": 0.0006666666666660604, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "NodeManager (cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "YARN", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "22f6ab659c835d47bc13d6c8f3370110", + "active": "true", + "serviceDisplayName": "yarn", + "serviceName": "yarn", + "roleType": "NODEMANAGER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "yarn-NODEMANAGER-7e9a53b768c95833df424c7d7b0ae857", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "yarn-NODEMANAGER-7e9a53b768c95833df424c7d7b0ae857", + "roleConfigGroup": "yarn-NODEMANAGER", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"yarn-NODEMANAGER-7e9a53b768c95833df424c7d7b0ae857\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:29.000Z", + "value": 0.0023333333333333426, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "NodeManager (cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "YARN", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "49adda80d1b98e9262ee146fd7fd798b", + "active": "true", + "serviceDisplayName": "yarn", + "serviceName": "yarn", + "roleType": "NODEMANAGER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "yarn-NODEMANAGER-3c658ac6009daca54192736b1502fae1", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "yarn-NODEMANAGER-3c658ac6009daca54192736b1502fae1", + "roleConfigGroup": "yarn-NODEMANAGER", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"yarn-NODEMANAGER-3c658ac6009daca54192736b1502fae1\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:29.000Z", + "value": 0.004166666666666667, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_user_rate)", + "entityName": "Service Monitor (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "MGMT", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "SERVICEMONITOR", + "roleName": "SERVICEMONITOR", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "roleConfigGroup": "Service Monitor Default Group", + "active": "true", + "serviceDisplayName": "MGMT", + "serviceName": "MGMT", + "roleType": "SERVICEMONITOR", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_user_rate) AS \"cpu_user_rate\" WHERE entityName = \"SERVICEMONITOR\" AND category = ROLE", + "alias": "cpu_user_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:31.000Z", + "value": 0.022333333333275127, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "DataNode (cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "9784d85849c7179b790d476c483fd905", + "active": "true", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "DATANODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-DATANODE-bf4b8e304dd0b549bcad6614d3129033", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-DATANODE-bf4b8e304dd0b549bcad6614d3129033", + "roleConfigGroup": "DataNode Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"hdfs-DATANODE-bf4b8e304dd0b549bcad6614d3129033\" AND category = ROLE", + "alias": "cpu_system_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:26.000Z", + "value": 0.0006666666666660604, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "Master (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HBASE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "119115ab851aefe1429860d4255b3fab", + "active": "true", + "serviceDisplayName": "hbase", + "serviceName": "hbase", + "roleType": "MASTER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hbase-MASTER-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hbase-MASTER-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "roleConfigGroup": "Master Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"hbase-MASTER-dbb26169f4e1fe9a387fcc5bd5bfd6af\" AND category = ROLE", + "alias": "cpu_system_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "Server (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "ZOOKEEPER", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", + "active": "true", + "serviceDisplayName": "ZooKeeper", + "serviceName": "zookeeper-e52d", + "roleType": "SERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "zookeeper-e52d-SERVER-3bc8f544ef0c15a373bbe9f9790fefba", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "zookeeper-e52d-SERVER-3bc8f544ef0c15a373bbe9f9790fefba", + "roleConfigGroup": "Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"zookeeper-e52d-SERVER-3bc8f544ef0c15a373bbe9f9790fefba\" AND category = ROLE", + "alias": "cpu_system_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:15.000Z", + "value": 0.0006666666666670077, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "JournalNode (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "119115ab851aefe1429860d4255b3fab", + "active": "true", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "JOURNALNODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-JOURNALNODE-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-JOURNALNODE-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "roleConfigGroup": "JournalNode Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"hdfs-JOURNALNODE-dbb26169f4e1fe9a387fcc5bd5bfd6af\" AND category = ROLE", + "alias": "cpu_system_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:58:56.000Z", + "value": 0.0004999999999995453, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "NameNode (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "759451867dfde961d6adbeb21d9c13f9", + "active": "true", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "NAMENODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-NAMENODE-6e88fa1a7ad969e10ea41365cba9abc5", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-NAMENODE-6e88fa1a7ad969e10ea41365cba9abc5", + "roleConfigGroup": "NameNode Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"hdfs-NAMENODE-6e88fa1a7ad969e10ea41365cba9abc5\" AND category = ROLE", + "alias": "cpu_system_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:58:49.000Z", + "value": 0.0016666666666651508, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "RegionServer (cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HBASE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "9784d85849c7179b790d476c483fd905", + "active": "true", + "serviceDisplayName": "hbase", + "serviceName": "hbase", + "roleType": "REGIONSERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hbase-REGIONSERVER-bf4b8e304dd0b549bcad6614d3129033", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hbase-REGIONSERVER-bf4b8e304dd0b549bcad6614d3129033", + "roleConfigGroup": "RegionServer Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"hbase-REGIONSERVER-bf4b8e304dd0b549bcad6614d3129033\" AND category = ROLE", + "alias": "cpu_system_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "PHOENIX_QUERY_SERVER (cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "PHOENIX", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "49adda80d1b98e9262ee146fd7fd798b", + "active": "true", + "serviceDisplayName": "phoenix", + "serviceName": "phoenix", + "roleType": "PHOENIX_QUERY_SERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "phoenix-PHOENIX_QUERY_SERVER-3c658ac6009daca54192736b1502fae1", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "phoenix-PHOENIX_QUERY_SERVER-3c658ac6009daca54192736b1502fae1", + "roleConfigGroup": "Query Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"phoenix-PHOENIX_QUERY_SERVER-3c658ac6009daca54192736b1502fae1\" AND category = ROLE", + "alias": "cpu_system_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "PHOENIX_QUERY_SERVER (cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "PHOENIX", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "ed528836ae33e47e6657b95373571c33", + "active": "true", + "serviceDisplayName": "phoenix", + "serviceName": "phoenix", + "roleType": "PHOENIX_QUERY_SERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "phoenix-PHOENIX_QUERY_SERVER-145da1565b8e2c4165145d9ecc0c784e", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "phoenix-PHOENIX_QUERY_SERVER-145da1565b8e2c4165145d9ecc0c784e", + "roleConfigGroup": "Query Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"phoenix-PHOENIX_QUERY_SERVER-145da1565b8e2c4165145d9ecc0c784e\" AND category = ROLE", + "alias": "cpu_system_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "NodeManager (cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "YARN", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "88ae2611748383b5628d4aec94873da9", + "active": "true", + "serviceDisplayName": "yarn", + "serviceName": "yarn", + "roleType": "NODEMANAGER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "yarn-NODEMANAGER-d51d3a03fc3294039de9c160b1013676", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "yarn-NODEMANAGER-d51d3a03fc3294039de9c160b1013676", + "roleConfigGroup": "NodeManager Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"yarn-NODEMANAGER-d51d3a03fc3294039de9c160b1013676\" AND category = ROLE", + "alias": "cpu_system_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:28.000Z", + "value": 0.0006666666666666673, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "Server (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "ZOOKEEPER", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "119115ab851aefe1429860d4255b3fab", + "active": "true", + "serviceDisplayName": "ZooKeeper", + "serviceName": "zookeeper-e52d", + "roleType": "SERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "zookeeper-e52d-SERVER-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "zookeeper-e52d-SERVER-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "roleConfigGroup": "Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"zookeeper-e52d-SERVER-dbb26169f4e1fe9a387fcc5bd5bfd6af\" AND category = ROLE", + "alias": "cpu_system_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:58:56.000Z", + "value": 0.0004999999999995453, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "RegionServer (cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HBASE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "22f6ab659c835d47bc13d6c8f3370110", + "active": "true", + "serviceDisplayName": "hbase", + "serviceName": "hbase", + "roleType": "REGIONSERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hbase-REGIONSERVER-7e9a53b768c95833df424c7d7b0ae857", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hbase-REGIONSERVER-7e9a53b768c95833df424c7d7b0ae857", + "roleConfigGroup": "hbase-REGIONSERVER", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"hbase-REGIONSERVER-7e9a53b768c95833df424c7d7b0ae857\" AND category = ROLE", + "alias": "cpu_system_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "DataNode (cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "ed528836ae33e47e6657b95373571c33", + "active": "true", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "DATANODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-DATANODE-145da1565b8e2c4165145d9ecc0c784e", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-DATANODE-145da1565b8e2c4165145d9ecc0c784e", + "roleConfigGroup": "DataNode Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"hdfs-DATANODE-145da1565b8e2c4165145d9ecc0c784e\" AND category = ROLE", + "alias": "cpu_system_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:27.000Z", + "value": 0.0004999999999995453, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "Host Monitor (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "MGMT", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "HOSTMONITOR", + "roleName": "HOSTMONITOR", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "roleConfigGroup": "Host Monitor Default Group", + "active": "true", + "serviceDisplayName": "MGMT", + "serviceName": "MGMT", + "roleType": "HOSTMONITOR", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"HOSTMONITOR\" AND category = ROLE", + "alias": "cpu_system_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:31.000Z", + "value": 0.0024999999999939368, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "ResourceManager (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "YARN", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "759451867dfde961d6adbeb21d9c13f9", + "active": "true", + "serviceDisplayName": "yarn", + "serviceName": "yarn", + "roleType": "RESOURCEMANAGER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "yarn-RESOURCEMANAGER-6e88fa1a7ad969e10ea41365cba9abc5", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "yarn-RESOURCEMANAGER-6e88fa1a7ad969e10ea41365cba9abc5", + "roleConfigGroup": "ResourceManager Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"yarn-RESOURCEMANAGER-6e88fa1a7ad969e10ea41365cba9abc5\" AND category = ROLE", + "alias": "cpu_system_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "PHOENIX_QUERY_SERVER (cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "PHOENIX", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "9784d85849c7179b790d476c483fd905", + "active": "true", + "serviceDisplayName": "phoenix", + "serviceName": "phoenix", + "roleType": "PHOENIX_QUERY_SERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "phoenix-PHOENIX_QUERY_SERVER-bf4b8e304dd0b549bcad6614d3129033", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "phoenix-PHOENIX_QUERY_SERVER-bf4b8e304dd0b549bcad6614d3129033", + "roleConfigGroup": "Query Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"phoenix-PHOENIX_QUERY_SERVER-bf4b8e304dd0b549bcad6614d3129033\" AND category = ROLE", + "alias": "cpu_system_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "RegionServer (cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HBASE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "ed528836ae33e47e6657b95373571c33", + "active": "true", + "serviceDisplayName": "hbase", + "serviceName": "hbase", + "roleType": "REGIONSERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hbase-REGIONSERVER-145da1565b8e2c4165145d9ecc0c784e", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hbase-REGIONSERVER-145da1565b8e2c4165145d9ecc0c784e", + "roleConfigGroup": "RegionServer Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"hbase-REGIONSERVER-145da1565b8e2c4165145d9ecc0c784e\" AND category = ROLE", + "alias": "cpu_system_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "RegionServer (cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HBASE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "88ae2611748383b5628d4aec94873da9", + "active": "true", + "serviceDisplayName": "hbase", + "serviceName": "hbase", + "roleType": "REGIONSERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hbase-REGIONSERVER-d51d3a03fc3294039de9c160b1013676", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hbase-REGIONSERVER-d51d3a03fc3294039de9c160b1013676", + "roleConfigGroup": "RegionServer Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"hbase-REGIONSERVER-d51d3a03fc3294039de9c160b1013676\" AND category = ROLE", + "alias": "cpu_system_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "Load Balancer (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HUE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "serviceDisplayName": "hue", + "serviceName": "hue", + "roleType": "HUE_LOAD_BALANCER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hue-HUE_LOAD_BALANCER-7d0b6bba5cf23b4729586ee8d35ab766", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hue-HUE_LOAD_BALANCER-7d0b6bba5cf23b4729586ee8d35ab766", + "roleConfigGroup": "Load Balancer Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"hue-HUE_LOAD_BALANCER-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "alias": "cpu_system_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "Kerberos Ticket Renewer (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HUE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "serviceDisplayName": "hue", + "serviceName": "hue", + "roleType": "KT_RENEWER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hue-KT_RENEWER-7d0b6bba5cf23b4729586ee8d35ab766", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hue-KT_RENEWER-7d0b6bba5cf23b4729586ee8d35ab766", + "roleConfigGroup": "Kerberos Ticket Renewer Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"hue-KT_RENEWER-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "alias": "cpu_system_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "HBase REST Server (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HBASE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", + "active": "true", + "serviceDisplayName": "hbase", + "serviceName": "hbase", + "roleType": "HBASERESTSERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hbase-HBASERESTSERVER-3bc8f544ef0c15a373bbe9f9790fefba", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hbase-HBASERESTSERVER-3bc8f544ef0c15a373bbe9f9790fefba", + "roleConfigGroup": "HBase REST Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"hbase-HBASERESTSERVER-3bc8f544ef0c15a373bbe9f9790fefba\" AND category = ROLE", + "alias": "cpu_system_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "OMID_TSO (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "OMID", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", + "active": "true", + "serviceDisplayName": "omid", + "serviceName": "omid", + "roleType": "OMID_TSO", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "omid-OMID_TSO-3bc8f544ef0c15a373bbe9f9790fefba", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "omid-OMID_TSO-3bc8f544ef0c15a373bbe9f9790fefba", + "roleConfigGroup": "Omid tso server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"omid-OMID_TSO-3bc8f544ef0c15a373bbe9f9790fefba\" AND category = ROLE", + "alias": "cpu_system_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "JournalNode (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "759451867dfde961d6adbeb21d9c13f9", + "active": "true", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "JOURNALNODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-JOURNALNODE-6e88fa1a7ad969e10ea41365cba9abc5", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-JOURNALNODE-6e88fa1a7ad969e10ea41365cba9abc5", + "roleConfigGroup": "JournalNode Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"hdfs-JOURNALNODE-6e88fa1a7ad969e10ea41365cba9abc5\" AND category = ROLE", + "alias": "cpu_system_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:58:49.000Z", + "value": 0.0003333333333330302, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "JournalNode (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", + "active": "true", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "JOURNALNODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-JOURNALNODE-3bc8f544ef0c15a373bbe9f9790fefba", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-JOURNALNODE-3bc8f544ef0c15a373bbe9f9790fefba", + "roleConfigGroup": "JournalNode Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"hdfs-JOURNALNODE-3bc8f544ef0c15a373bbe9f9790fefba\" AND category = ROLE", + "alias": "cpu_system_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:15.000Z", + "value": 0.0006666666666660604, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "Server (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "ZOOKEEPER", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "759451867dfde961d6adbeb21d9c13f9", + "active": "true", + "serviceDisplayName": "ZooKeeper", + "serviceName": "zookeeper-e52d", + "roleType": "SERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "zookeeper-e52d-SERVER-6e88fa1a7ad969e10ea41365cba9abc5", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "zookeeper-e52d-SERVER-6e88fa1a7ad969e10ea41365cba9abc5", + "roleConfigGroup": "Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"zookeeper-e52d-SERVER-6e88fa1a7ad969e10ea41365cba9abc5\" AND category = ROLE", + "alias": "cpu_system_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:58:49.000Z", + "value": 0.0004999999999995453, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "PHOENIX_QUERY_SERVER (cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "PHOENIX", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "88ae2611748383b5628d4aec94873da9", + "active": "true", + "serviceDisplayName": "phoenix", + "serviceName": "phoenix", + "roleType": "PHOENIX_QUERY_SERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "phoenix-PHOENIX_QUERY_SERVER-d51d3a03fc3294039de9c160b1013676", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "phoenix-PHOENIX_QUERY_SERVER-d51d3a03fc3294039de9c160b1013676", + "roleConfigGroup": "Query Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"phoenix-PHOENIX_QUERY_SERVER-d51d3a03fc3294039de9c160b1013676\" AND category = ROLE", + "alias": "cpu_system_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "Hue Server (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HUE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "serviceDisplayName": "hue", + "serviceName": "hue", + "roleType": "HUE_SERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hue-HUE_SERVER-7d0b6bba5cf23b4729586ee8d35ab766", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hue-HUE_SERVER-7d0b6bba5cf23b4729586ee8d35ab766", + "roleConfigGroup": "Hue Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"hue-HUE_SERVER-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "alias": "cpu_system_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "Master (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HBASE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "759451867dfde961d6adbeb21d9c13f9", + "active": "true", + "serviceDisplayName": "hbase", + "serviceName": "hbase", + "roleType": "MASTER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hbase-MASTER-6e88fa1a7ad969e10ea41365cba9abc5", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hbase-MASTER-6e88fa1a7ad969e10ea41365cba9abc5", + "roleConfigGroup": "Master Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"hbase-MASTER-6e88fa1a7ad969e10ea41365cba9abc5\" AND category = ROLE", + "alias": "cpu_system_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "Event Server (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "MGMT", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "EVENTSERVER", + "roleName": "EVENTSERVER", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "roleConfigGroup": "Event Server Default Group", + "active": "true", + "serviceDisplayName": "MGMT", + "serviceName": "MGMT", + "roleType": "EVENTSERVER", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"EVENTSERVER\" AND category = ROLE", + "alias": "cpu_system_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:31.000Z", + "value": 0.0010000000000066696, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "QUEUEMANAGER_STORE (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "QUEUEMANAGER", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "active": "true", + "serviceDisplayName": "queuemanager", + "serviceName": "queuemanager", + "roleType": "QUEUEMANAGER_STORE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "queuemanager-QUEUEMANAGER_STORE-7d0b6bba5cf23b4729586ee8d35ab766", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "queuemanager-QUEUEMANAGER_STORE-7d0b6bba5cf23b4729586ee8d35ab766", + "roleConfigGroup": "YARN Queue Manager Store Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"queuemanager-QUEUEMANAGER_STORE-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "alias": "cpu_system_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:32.000Z", + "value": 0.0003333333333330302, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "PHOENIX_QUERY_SERVER (cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "PHOENIX", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "22f6ab659c835d47bc13d6c8f3370110", + "active": "true", + "serviceDisplayName": "phoenix", + "serviceName": "phoenix", + "roleType": "PHOENIX_QUERY_SERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "phoenix-PHOENIX_QUERY_SERVER-7e9a53b768c95833df424c7d7b0ae857", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "phoenix-PHOENIX_QUERY_SERVER-7e9a53b768c95833df424c7d7b0ae857", + "roleConfigGroup": "Query Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1c" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"phoenix-PHOENIX_QUERY_SERVER-7e9a53b768c95833df424c7d7b0ae857\" AND category = ROLE", + "alias": "cpu_system_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "DataNode (cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "88ae2611748383b5628d4aec94873da9", + "active": "true", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "DATANODE", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker3.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-DATANODE-d51d3a03fc3294039de9c160b1013676", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-DATANODE-d51d3a03fc3294039de9c160b1013676", + "roleConfigGroup": "DataNode Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"hdfs-DATANODE-d51d3a03fc3294039de9c160b1013676\" AND category = ROLE", + "alias": "cpu_system_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:28.000Z", + "value": 0.0003333333333330302, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "NodeManager (cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "YARN", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "ed528836ae33e47e6657b95373571c33", + "active": "true", + "serviceDisplayName": "yarn", + "serviceName": "yarn", + "roleType": "NODEMANAGER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "yarn-NODEMANAGER-145da1565b8e2c4165145d9ecc0c784e", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "yarn-NODEMANAGER-145da1565b8e2c4165145d9ecc0c784e", + "roleConfigGroup": "NodeManager Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"yarn-NODEMANAGER-145da1565b8e2c4165145d9ecc0c784e\" AND category = ROLE", + "alias": "cpu_system_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [ + { + "timestamp": "2022-12-07T18:59:27.000Z", + "value": 0.0006666666666666673, + "type": "SAMPLE" + } + ] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "Failover Controller (cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "759451867dfde961d6adbeb21d9c13f9", + "active": "true", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "FAILOVERCONTROLLER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-FAILOVERCONTROLLER-6e88fa1a7ad969e10ea41365cba9abc5", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-FAILOVERCONTROLLER-6e88fa1a7ad969e10ea41365cba9abc5", + "roleConfigGroup": "Failover Controller Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1d" + }, + "unitNumerators": [ + "seconds" + ], + "unitDenominators": [ + "seconds" + ], + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"hdfs-FAILOVERCONTROLLER-6e88fa1a7ad969e10ea41365cba9abc5\" AND category = ROLE", + "alias": "cpu_system_rate", + "metricCollectionFrequencyMs": 0, + "rollupUsed": "RAW" + }, + "data": [] + }, + { + "metadata": { + "metricName": "last(cpu_system_rate)", + "entityName": "HBase Thrift Server (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", + "attributes": { + "serviceType": "HBASE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", + "active": "true", + "serviceDisplayName": "hbase", + "serviceName": "hbase", + "roleType": "HBASETHRIFTSERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hbase-HBASETHRIFTSERVER-3bc8f544ef0c15a373bbe9f9790fefba", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hbase-HBASETHRIFTSERVER-3bc8f544ef0c15a373bbe9f9790fefba", + "roleConfigGroup": "HBase Thrift Server Default Group", + "category": "ROLE", + "rackId": "/ap-northeast-1a" }, "unitNumerators": [ "seconds" @@ -652,7 +5027,8 @@ "unitDenominators": [ "seconds" ], - "expression": "SELECT last(cpu_user_rate) WHERE entityName = \"hue-HUE_SERVER-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"hbase-HBASETHRIFTSERVER-3bc8f544ef0c15a373bbe9f9790fefba\" AND category = ROLE", + "alias": "cpu_system_rate", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, @@ -660,26 +5036,26 @@ }, { "metadata": { - "metricName": "last(cpu_user_rate)", - "entityName": "QUEUEMANAGER_STORE (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-12-02T08:17:28.403Z", - "endTime": "2022-12-02T08:22:28.403Z", + "metricName": "last(cpu_system_rate)", + "entityName": "NameNode (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", "attributes": { - "serviceType": "QUEUEMANAGER", + "serviceType": "HDFS", "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "hostId": "119115ab851aefe1429860d4255b3fab", "active": "true", - "serviceDisplayName": "queuemanager", - "serviceName": "queuemanager", - "roleType": "QUEUEMANAGER_STORE", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "NAMENODE", "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "queuemanager-QUEUEMANAGER_STORE-7d0b6bba5cf23b4729586ee8d35ab766", + "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-NAMENODE-dbb26169f4e1fe9a387fcc5bd5bfd6af", "clusterName": "cod--qfdcinkqrzw", - "roleName": "queuemanager-QUEUEMANAGER_STORE-7d0b6bba5cf23b4729586ee8d35ab766", - "roleConfigGroup": "YARN Queue Manager Store Default Group", + "roleName": "hdfs-NAMENODE-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "roleConfigGroup": "NameNode Default Group", "category": "ROLE", - "rackId": "/ap-northeast-1d" + "rackId": "/ap-northeast-1c" }, "unitNumerators": [ "seconds" @@ -687,40 +5063,41 @@ "unitDenominators": [ "seconds" ], - "expression": "SELECT last(cpu_user_rate) WHERE entityName = \"queuemanager-QUEUEMANAGER_STORE-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"hdfs-NAMENODE-dbb26169f4e1fe9a387fcc5bd5bfd6af\" AND category = ROLE", + "alias": "cpu_system_rate", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:22:28.000Z", - "value": 0.0006666666666660604, + "timestamp": "2022-12-07T18:58:56.000Z", + "value": 0.0013333333333359102, "type": "SAMPLE" } ] }, { "metadata": { - "metricName": "last(cpu_user_rate)", - "entityName": "KNOX_GATEWAY (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-12-02T08:17:28.403Z", - "endTime": "2022-12-02T08:22:28.403Z", + "metricName": "last(cpu_system_rate)", + "entityName": "JobHistory Server (cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", "attributes": { - "serviceType": "KNOX", + "serviceType": "YARN", "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "hostId": "96efbf3e7279bf25ae44fe0a6398ee97", "active": "true", - "serviceDisplayName": "Knox", - "serviceName": "knox-e428", - "roleType": "KNOX_GATEWAY", + "serviceDisplayName": "yarn", + "serviceName": "yarn", + "roleType": "JOBHISTORY", "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "knox-e428-KNOX_GATEWAY-7d0b6bba5cf23b4729586ee8d35ab766", + "hostname": "cod--qfdcinkqrzw-leader0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "yarn-JOBHISTORY-3bc8f544ef0c15a373bbe9f9790fefba", "clusterName": "cod--qfdcinkqrzw", - "roleName": "knox-e428-KNOX_GATEWAY-7d0b6bba5cf23b4729586ee8d35ab766", - "roleConfigGroup": "Knox Gateway Default Group", + "roleName": "yarn-JOBHISTORY-3bc8f544ef0c15a373bbe9f9790fefba", + "roleConfigGroup": "JobHistory Server Default Group", "category": "ROLE", - "rackId": "/ap-northeast-1d" + "rackId": "/ap-northeast-1a" }, "unitNumerators": [ "seconds" @@ -728,37 +5105,41 @@ "unitDenominators": [ "seconds" ], - "expression": "SELECT last(cpu_user_rate) WHERE entityName = \"knox-e428-KNOX_GATEWAY-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"yarn-JOBHISTORY-3bc8f544ef0c15a373bbe9f9790fefba\" AND category = ROLE", + "alias": "cpu_system_rate", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:22:28.000Z", - "value": 0.0013333333333321207, + "timestamp": "2022-12-07T18:58:15.000Z", + "value": 0.0003333333333333327, "type": "SAMPLE" } ] }, { "metadata": { - "metricName": "last(cpu_user_rate)", - "entityName": "Service Monitor (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-12-02T08:17:28.403Z", - "endTime": "2022-12-02T08:22:28.403Z", + "metricName": "last(cpu_system_rate)", + "entityName": "RegionServer (cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", "attributes": { - "serviceType": "MGMT", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "SERVICEMONITOR", - "roleName": "SERVICEMONITOR", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "roleConfigGroup": "Service Monitor Default Group", + "serviceType": "HBASE", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "49adda80d1b98e9262ee146fd7fd798b", "active": "true", - "serviceDisplayName": "MGMT", - "serviceName": "MGMT", - "roleType": "SERVICEMONITOR", + "serviceDisplayName": "hbase", + "serviceName": "hbase", + "roleType": "REGIONSERVER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hbase-REGIONSERVER-3c658ac6009daca54192736b1502fae1", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hbase-REGIONSERVER-3c658ac6009daca54192736b1502fae1", + "roleConfigGroup": "hbase-REGIONSERVER", "category": "ROLE", - "rackId": "/ap-northeast-1d" + "rackId": "/ap-northeast-1c" }, "unitNumerators": [ "seconds" @@ -766,35 +5147,33 @@ "unitDenominators": [ "seconds" ], - "expression": "SELECT last(cpu_user_rate) WHERE entityName = \"SERVICEMONITOR\" AND category = ROLE", + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"hbase-REGIONSERVER-3c658ac6009daca54192736b1502fae1\" AND category = ROLE", + "alias": "cpu_system_rate", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, - "data": [ - { - "timestamp": "2022-12-02T08:22:27.000Z", - "value": 0.08650000000003881, - "type": "SAMPLE" - } - ] + "data": [] }, { "metadata": { - "metricName": "last(cpu_user_rate)", - "entityName": "Alert Publisher (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-12-02T08:17:28.403Z", - "endTime": "2022-12-02T08:22:28.403Z", + "metricName": "last(cpu_system_rate)", + "entityName": "NodeManager (cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", "attributes": { - "serviceType": "MGMT", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "ALERTPUBLISHER", - "roleName": "ALERTPUBLISHER", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "roleConfigGroup": "Alert Publisher Default Group", + "serviceType": "YARN", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "9784d85849c7179b790d476c483fd905", "active": "true", - "serviceDisplayName": "MGMT", - "serviceName": "MGMT", - "roleType": "ALERTPUBLISHER", + "serviceDisplayName": "yarn", + "serviceName": "yarn", + "roleType": "NODEMANAGER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker4.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "yarn-NODEMANAGER-bf4b8e304dd0b549bcad6614d3129033", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "yarn-NODEMANAGER-bf4b8e304dd0b549bcad6614d3129033", + "roleConfigGroup": "NodeManager Default Group", "category": "ROLE", "rackId": "/ap-northeast-1d" }, @@ -804,14 +5183,15 @@ "unitDenominators": [ "seconds" ], - "expression": "SELECT last(cpu_user_rate) WHERE entityName = \"ALERTPUBLISHER\" AND category = ROLE", + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"yarn-NODEMANAGER-bf4b8e304dd0b549bcad6614d3129033\" AND category = ROLE", + "alias": "cpu_system_rate", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:22:28.000Z", - "value": 0.0005000000000033348, + "timestamp": "2022-12-07T18:59:26.000Z", + "value": 0.0005000000000000041, "type": "SAMPLE" } ] @@ -819,20 +5199,23 @@ { "metadata": { "metricName": "last(cpu_system_rate)", - "entityName": "Event Server (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-12-02T08:17:28.403Z", - "endTime": "2022-12-02T08:22:28.403Z", + "entityName": "QUEUEMANAGER_WEBAPP (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", "attributes": { - "serviceType": "MGMT", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "EVENTSERVER", - "roleName": "EVENTSERVER", + "serviceType": "QUEUEMANAGER", + "clusterDisplayName": "cod--qfdcinkqrzw", "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "roleConfigGroup": "Event Server Default Group", "active": "true", - "serviceDisplayName": "MGMT", - "serviceName": "MGMT", - "roleType": "EVENTSERVER", + "serviceDisplayName": "queuemanager", + "serviceName": "queuemanager", + "roleType": "QUEUEMANAGER_WEBAPP", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "queuc8af8526-QUEUEMANAGER_WEBAPP-7d0b6bba5cf23b4729586ee8d35ab76", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "queuc8af8526-QUEUEMANAGER_WEBAPP-7d0b6bba5cf23b4729586ee8d35ab76", + "roleConfigGroup": "YARN Queue Manager Webapp Default Group", "category": "ROLE", "rackId": "/ap-northeast-1d" }, @@ -842,14 +5225,15 @@ "unitDenominators": [ "seconds" ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"EVENTSERVER\" AND category = ROLE", + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"queuc8af8526-QUEUEMANAGER_WEBAPP-7d0b6bba5cf23b4729586ee8d35ab76\" AND category = ROLE", + "alias": "cpu_system_rate", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:22:27.000Z", - "value": 0.0010000000000066696, + "timestamp": "2022-12-07T18:59:33.000Z", + "value": 0.00016666666666698878, "type": "SAMPLE" } ] @@ -857,20 +5241,23 @@ { "metadata": { "metricName": "last(cpu_system_rate)", - "entityName": "Telemetry Publisher (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-12-02T08:17:28.403Z", - "endTime": "2022-12-02T08:22:28.403Z", + "entityName": "KNOX_GATEWAY (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", "attributes": { - "serviceType": "MGMT", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "TELEMETRYPUBLISHER", - "roleName": "TELEMETRYPUBLISHER", + "serviceType": "KNOX", + "clusterDisplayName": "cod--qfdcinkqrzw", "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "roleConfigGroup": "Telemetry Publisher Default Group", "active": "true", - "serviceDisplayName": "MGMT", - "serviceName": "MGMT", - "roleType": "TELEMETRYPUBLISHER", + "serviceDisplayName": "Knox", + "serviceName": "knox-e428", + "roleType": "KNOX_GATEWAY", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "knox-e428-KNOX_GATEWAY-7d0b6bba5cf23b4729586ee8d35ab766", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "knox-e428-KNOX_GATEWAY-7d0b6bba5cf23b4729586ee8d35ab766", + "roleConfigGroup": "Knox Gateway Default Group", "category": "ROLE", "rackId": "/ap-northeast-1d" }, @@ -880,14 +5267,15 @@ "unitDenominators": [ "seconds" ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"TELEMETRYPUBLISHER\" AND category = ROLE", + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"knox-e428-KNOX_GATEWAY-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "alias": "cpu_system_rate", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:22:27.000Z", - "value": 0.002833333333334546, + "timestamp": "2022-12-07T18:59:32.000Z", + "value": 0.0006666666666670077, "type": "SAMPLE" } ] @@ -895,22 +5283,25 @@ { "metadata": { "metricName": "last(cpu_system_rate)", - "entityName": "Host Monitor (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-12-02T08:17:28.403Z", - "endTime": "2022-12-02T08:22:28.403Z", + "entityName": "Failover Controller (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", "attributes": { - "serviceType": "MGMT", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "HOSTMONITOR", - "roleName": "HOSTMONITOR", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "roleConfigGroup": "Host Monitor Default Group", + "serviceType": "HDFS", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "119115ab851aefe1429860d4255b3fab", "active": "true", - "serviceDisplayName": "MGMT", - "serviceName": "MGMT", - "roleType": "HOSTMONITOR", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "FAILOVERCONTROLLER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-FAILOVERCONTROLLER-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "hdfs-FAILOVERCONTROLLER-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "roleConfigGroup": "Failover Controller Default Group", "category": "ROLE", - "rackId": "/ap-northeast-1d" + "rackId": "/ap-northeast-1c" }, "unitNumerators": [ "seconds" @@ -918,38 +5309,30 @@ "unitDenominators": [ "seconds" ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"HOSTMONITOR\" AND category = ROLE", + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"hdfs-FAILOVERCONTROLLER-dbb26169f4e1fe9a387fcc5bd5bfd6af\" AND category = ROLE", + "alias": "cpu_system_rate", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, - "data": [ - { - "timestamp": "2022-12-02T08:22:27.000Z", - "value": 0.004833333333347885, - "type": "SAMPLE" - } - ] + "data": [] }, { "metadata": { "metricName": "last(cpu_system_rate)", - "entityName": "QUEUEMANAGER_WEBAPP (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-12-02T08:17:28.403Z", - "endTime": "2022-12-02T08:22:28.403Z", + "entityName": "Alert Publisher (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", "attributes": { - "serviceType": "QUEUEMANAGER", - "clusterDisplayName": "cod--qfdcinkqrzw", + "serviceType": "MGMT", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "ALERTPUBLISHER", + "roleName": "ALERTPUBLISHER", "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "roleConfigGroup": "Alert Publisher Default Group", "active": "true", - "serviceDisplayName": "queuemanager", - "serviceName": "queuemanager", - "roleType": "QUEUEMANAGER_WEBAPP", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "queuc8af8526-QUEUEMANAGER_WEBAPP-7d0b6bba5cf23b4729586ee8d35ab76", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "queuc8af8526-QUEUEMANAGER_WEBAPP-7d0b6bba5cf23b4729586ee8d35ab76", - "roleConfigGroup": "YARN Queue Manager Webapp Default Group", + "serviceDisplayName": "MGMT", + "serviceName": "MGMT", + "roleType": "ALERTPUBLISHER", "category": "ROLE", "rackId": "/ap-northeast-1d" }, @@ -959,14 +5342,15 @@ "unitDenominators": [ "seconds" ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"queuc8af8526-QUEUEMANAGER_WEBAPP-7d0b6bba5cf23b4729586ee8d35ab76\" AND category = ROLE", + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"ALERTPUBLISHER\" AND category = ROLE", + "alias": "cpu_system_rate", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:22:28.000Z", - "value": 0.00016666666666675193, + "timestamp": "2022-12-07T18:59:32.000Z", + "value": 0.0001666666666665151, "type": "SAMPLE" } ] @@ -974,25 +5358,25 @@ { "metadata": { "metricName": "last(cpu_system_rate)", - "entityName": "Load Balancer (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-12-02T08:17:28.403Z", - "endTime": "2022-12-02T08:22:28.403Z", + "entityName": "ResourceManager (cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", "attributes": { - "serviceType": "HUE", + "serviceType": "YARN", "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "hostId": "119115ab851aefe1429860d4255b3fab", "active": "true", - "serviceDisplayName": "hue", - "serviceName": "hue", - "roleType": "HUE_LOAD_BALANCER", + "serviceDisplayName": "yarn", + "serviceName": "yarn", + "roleType": "RESOURCEMANAGER", "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hue-HUE_LOAD_BALANCER-7d0b6bba5cf23b4729586ee8d35ab766", + "hostname": "cod--qfdcinkqrzw-master1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "yarn-RESOURCEMANAGER-dbb26169f4e1fe9a387fcc5bd5bfd6af", "clusterName": "cod--qfdcinkqrzw", - "roleName": "hue-HUE_LOAD_BALANCER-7d0b6bba5cf23b4729586ee8d35ab766", - "roleConfigGroup": "Load Balancer Default Group", + "roleName": "yarn-RESOURCEMANAGER-dbb26169f4e1fe9a387fcc5bd5bfd6af", + "roleConfigGroup": "ResourceManager Default Group", "category": "ROLE", - "rackId": "/ap-northeast-1d" + "rackId": "/ap-northeast-1c" }, "unitNumerators": [ "seconds" @@ -1000,7 +5384,8 @@ "unitDenominators": [ "seconds" ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hue-HUE_LOAD_BALANCER-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"yarn-RESOURCEMANAGER-dbb26169f4e1fe9a387fcc5bd5bfd6af\" AND category = ROLE", + "alias": "cpu_system_rate", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, @@ -1009,23 +5394,20 @@ { "metadata": { "metricName": "last(cpu_system_rate)", - "entityName": "Kerberos Ticket Renewer (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-12-02T08:17:28.403Z", - "endTime": "2022-12-02T08:22:28.403Z", + "entityName": "Telemetry Publisher (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", "attributes": { - "serviceType": "HUE", - "clusterDisplayName": "cod--qfdcinkqrzw", + "serviceType": "MGMT", + "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "TELEMETRYPUBLISHER", + "roleName": "TELEMETRYPUBLISHER", "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "roleConfigGroup": "Telemetry Publisher Default Group", "active": "true", - "serviceDisplayName": "hue", - "serviceName": "hue", - "roleType": "KT_RENEWER", - "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hue-KT_RENEWER-7d0b6bba5cf23b4729586ee8d35ab766", - "clusterName": "cod--qfdcinkqrzw", - "roleName": "hue-KT_RENEWER-7d0b6bba5cf23b4729586ee8d35ab766", - "roleConfigGroup": "Kerberos Ticket Renewer Default Group", + "serviceDisplayName": "MGMT", + "serviceName": "MGMT", + "roleType": "TELEMETRYPUBLISHER", "category": "ROLE", "rackId": "/ap-northeast-1d" }, @@ -1035,34 +5417,41 @@ "unitDenominators": [ "seconds" ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hue-KT_RENEWER-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"TELEMETRYPUBLISHER\" AND category = ROLE", + "alias": "cpu_system_rate", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, - "data": [] + "data": [ + { + "timestamp": "2022-12-07T18:59:31.000Z", + "value": 0.003999999999996362, + "type": "SAMPLE" + } + ] }, { "metadata": { "metricName": "last(cpu_system_rate)", - "entityName": "Hue Server (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-12-02T08:17:28.403Z", - "endTime": "2022-12-02T08:22:28.403Z", + "entityName": "DataNode (cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", "attributes": { - "serviceType": "HUE", + "serviceType": "HDFS", "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "hostId": "22f6ab659c835d47bc13d6c8f3370110", "active": "true", - "serviceDisplayName": "hue", - "serviceName": "hue", - "roleType": "HUE_SERVER", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "DATANODE", "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "hue-HUE_SERVER-7d0b6bba5cf23b4729586ee8d35ab766", + "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-DATANODE-7e9a53b768c95833df424c7d7b0ae857", "clusterName": "cod--qfdcinkqrzw", - "roleName": "hue-HUE_SERVER-7d0b6bba5cf23b4729586ee8d35ab766", - "roleConfigGroup": "Hue Server Default Group", + "roleName": "hdfs-DATANODE-7e9a53b768c95833df424c7d7b0ae857", + "roleConfigGroup": "DataNode Default Group", "category": "ROLE", - "rackId": "/ap-northeast-1d" + "rackId": "/ap-northeast-1c" }, "unitNumerators": [ "seconds" @@ -1070,34 +5459,41 @@ "unitDenominators": [ "seconds" ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"hue-HUE_SERVER-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"hdfs-DATANODE-7e9a53b768c95833df424c7d7b0ae857\" AND category = ROLE", + "alias": "cpu_system_rate", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, - "data": [] + "data": [ + { + "timestamp": "2022-12-07T18:59:29.000Z", + "value": 0.0004999999999995453, + "type": "SAMPLE" + } + ] }, { "metadata": { "metricName": "last(cpu_system_rate)", - "entityName": "QUEUEMANAGER_STORE (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-12-02T08:17:28.403Z", - "endTime": "2022-12-02T08:22:28.403Z", + "entityName": "DataNode (cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", "attributes": { - "serviceType": "QUEUEMANAGER", + "serviceType": "HDFS", "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "hostId": "49adda80d1b98e9262ee146fd7fd798b", "active": "true", - "serviceDisplayName": "queuemanager", - "serviceName": "queuemanager", - "roleType": "QUEUEMANAGER_STORE", + "serviceDisplayName": "hdfs", + "serviceName": "hdfs", + "roleType": "DATANODE", "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "queuemanager-QUEUEMANAGER_STORE-7d0b6bba5cf23b4729586ee8d35ab766", + "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "hdfs-DATANODE-3c658ac6009daca54192736b1502fae1", "clusterName": "cod--qfdcinkqrzw", - "roleName": "queuemanager-QUEUEMANAGER_STORE-7d0b6bba5cf23b4729586ee8d35ab766", - "roleConfigGroup": "YARN Queue Manager Store Default Group", + "roleName": "hdfs-DATANODE-3c658ac6009daca54192736b1502fae1", + "roleConfigGroup": "DataNode Default Group", "category": "ROLE", - "rackId": "/ap-northeast-1d" + "rackId": "/ap-northeast-1c" }, "unitNumerators": [ "seconds" @@ -1105,14 +5501,15 @@ "unitDenominators": [ "seconds" ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"queuemanager-QUEUEMANAGER_STORE-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"hdfs-DATANODE-3c658ac6009daca54192736b1502fae1\" AND category = ROLE", + "alias": "cpu_system_rate", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:22:28.000Z", - "value": 0.0001666666666665151, + "timestamp": "2022-12-07T18:59:29.000Z", + "value": 0.0004999999999995453, "type": "SAMPLE" } ] @@ -1120,25 +5517,25 @@ { "metadata": { "metricName": "last(cpu_system_rate)", - "entityName": "KNOX_GATEWAY (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-12-02T08:17:28.403Z", - "endTime": "2022-12-02T08:22:28.403Z", + "entityName": "NodeManager (cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", "attributes": { - "serviceType": "KNOX", + "serviceType": "YARN", "clusterDisplayName": "cod--qfdcinkqrzw", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", + "hostId": "22f6ab659c835d47bc13d6c8f3370110", "active": "true", - "serviceDisplayName": "Knox", - "serviceName": "knox-e428", - "roleType": "KNOX_GATEWAY", + "serviceDisplayName": "yarn", + "serviceName": "yarn", + "roleType": "NODEMANAGER", "version": "CDH 7.2.15", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "knox-e428-KNOX_GATEWAY-7d0b6bba5cf23b4729586ee8d35ab766", + "hostname": "cod--qfdcinkqrzw-worker1.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "yarn-NODEMANAGER-7e9a53b768c95833df424c7d7b0ae857", "clusterName": "cod--qfdcinkqrzw", - "roleName": "knox-e428-KNOX_GATEWAY-7d0b6bba5cf23b4729586ee8d35ab766", - "roleConfigGroup": "Knox Gateway Default Group", + "roleName": "yarn-NODEMANAGER-7e9a53b768c95833df424c7d7b0ae857", + "roleConfigGroup": "yarn-NODEMANAGER", "category": "ROLE", - "rackId": "/ap-northeast-1d" + "rackId": "/ap-northeast-1c" }, "unitNumerators": [ "seconds" @@ -1146,14 +5543,15 @@ "unitDenominators": [ "seconds" ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"knox-e428-KNOX_GATEWAY-7d0b6bba5cf23b4729586ee8d35ab766\" AND category = ROLE", + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"yarn-NODEMANAGER-7e9a53b768c95833df424c7d7b0ae857\" AND category = ROLE", + "alias": "cpu_system_rate", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:22:28.000Z", - "value": 0.0004999999999995453, + "timestamp": "2022-12-07T18:59:29.000Z", + "value": 0.0008333333333333304, "type": "SAMPLE" } ] @@ -1161,22 +5559,25 @@ { "metadata": { "metricName": "last(cpu_system_rate)", - "entityName": "Service Monitor (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-12-02T08:17:28.403Z", - "endTime": "2022-12-02T08:22:28.403Z", + "entityName": "NodeManager (cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", "attributes": { - "serviceType": "MGMT", - "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "SERVICEMONITOR", - "roleName": "SERVICEMONITOR", - "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "roleConfigGroup": "Service Monitor Default Group", + "serviceType": "YARN", + "clusterDisplayName": "cod--qfdcinkqrzw", + "hostId": "49adda80d1b98e9262ee146fd7fd798b", "active": "true", - "serviceDisplayName": "MGMT", - "serviceName": "MGMT", - "roleType": "SERVICEMONITOR", + "serviceDisplayName": "yarn", + "serviceName": "yarn", + "roleType": "NODEMANAGER", + "version": "CDH 7.2.15", + "hostname": "cod--qfdcinkqrzw-worker2.agent-in.jfha-h5rc.a0.cloudera.site", + "entityName": "yarn-NODEMANAGER-3c658ac6009daca54192736b1502fae1", + "clusterName": "cod--qfdcinkqrzw", + "roleName": "yarn-NODEMANAGER-3c658ac6009daca54192736b1502fae1", + "roleConfigGroup": "yarn-NODEMANAGER", "category": "ROLE", - "rackId": "/ap-northeast-1d" + "rackId": "/ap-northeast-1c" }, "unitNumerators": [ "seconds" @@ -1184,14 +5585,15 @@ "unitDenominators": [ "seconds" ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"SERVICEMONITOR\" AND category = ROLE", + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"yarn-NODEMANAGER-3c658ac6009daca54192736b1502fae1\" AND category = ROLE", + "alias": "cpu_system_rate", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:22:27.000Z", - "value": 0.0076666666666521145, + "timestamp": "2022-12-07T18:59:29.000Z", + "value": 0.0006666666666666673, "type": "SAMPLE" } ] @@ -1199,20 +5601,20 @@ { "metadata": { "metricName": "last(cpu_system_rate)", - "entityName": "Alert Publisher (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", - "startTime": "2022-12-02T08:17:28.403Z", - "endTime": "2022-12-02T08:22:28.403Z", + "entityName": "Service Monitor (cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site)", + "startTime": "2022-12-07T18:54:36.539Z", + "endTime": "2022-12-07T18:59:36.539Z", "attributes": { "serviceType": "MGMT", "hostname": "cod--qfdcinkqrzw-gateway0.agent-in.jfha-h5rc.a0.cloudera.site", - "entityName": "ALERTPUBLISHER", - "roleName": "ALERTPUBLISHER", + "entityName": "SERVICEMONITOR", + "roleName": "SERVICEMONITOR", "hostId": "d8623d9457f4db06c5637c4fd4c02f5d", - "roleConfigGroup": "Alert Publisher Default Group", + "roleConfigGroup": "Service Monitor Default Group", "active": "true", "serviceDisplayName": "MGMT", "serviceName": "MGMT", - "roleType": "ALERTPUBLISHER", + "roleType": "SERVICEMONITOR", "category": "ROLE", "rackId": "/ap-northeast-1d" }, @@ -1222,21 +5624,22 @@ "unitDenominators": [ "seconds" ], - "expression": "SELECT last(cpu_system_rate) WHERE entityName = \"ALERTPUBLISHER\" AND category = ROLE", + "expression": "SELECT last(cpu_system_rate) AS \"cpu_system_rate\" WHERE entityName = \"SERVICEMONITOR\" AND category = ROLE", + "alias": "cpu_system_rate", "metricCollectionFrequencyMs": 0, "rollupUsed": "RAW" }, "data": [ { - "timestamp": "2022-12-02T08:22:28.000Z", - "value": 0.0003333333333330302, + "timestamp": "2022-12-07T18:59:31.000Z", + "value": 0.0039999999999660455, "type": "SAMPLE" } ] } ], "warnings": [], - "timeSeriesQuery": "SELECT last(mem_rss),last(cpu_user_rate),last(cpu_system_rate) WHERE hostId=\"d8623d9457f4db06c5637c4fd4c02f5d\" AND category=ROLE" + "timeSeriesQuery": "SELECT last(mem_rss) AS mem_rss,last(cpu_user_rate) AS cpu_user_rate,last(cpu_system_rate) AS cpu_system_rate WHERE category=ROLE" } ] } \ No newline at end of file diff --git a/cloudera/tests/docker/start_cloudera.sh b/cloudera/tests/docker/start_cloudera.sh deleted file mode 100644 index 2b082348d5f4f..0000000000000 --- a/cloudera/tests/docker/start_cloudera.sh +++ /dev/null @@ -1,55 +0,0 @@ -#! /usr/bin/env bash - -echo 'starting cloudera quickstart' - -DAEMONS="\ - mysqld \ - cloudera-quickstart-init" - -if [ -e /var/lib/cloudera-quickstart/.kerberos ]; then - DAEMONS="${DAEMONS} \ - krb5kdc \ - kadmin" -fi - -if [ -e /var/lib/cloudera-quickstart/.cloudera-manager ]; then - DAEMONS="${DAEMONS} \ - cloudera-scm-server-db \ - cloudera-scb-server \ - cloudera-scm-server-db" -else - DAEMONS="${DAEMONS} \ - zookeeper-server \ - hadoop-hdfs-datanode \ - hadoop-hdfs-journalnode \ - hadoop-hdfs-namenode \ - hadoop-hdfs-secondarynamenode \ - hadoop-httpfs \ - hadoop-mapreduce-historyserver \ - hadoop-yarn-nodemanager \ - hadoop-yarn-resourcemanager \ - hbase-master \ - hbase-rest \ - hbase-thrift \ - hive-metastore \ - hive-server2 \ - sqoop2-server \ - spark-history-server \ - hbase-regionserver \ - hue \ - impala-state-store \ - oozie \ - solr-server \ - impala-catalog \ - impala-server" -fi - -for daemon in ${DAEMONS}; do - sudo service ${daemon} start -done - -echo 'starting cloudera manager' - -/home/cloudera/cloudera-manager --express --force - -exec bash \ No newline at end of file diff --git a/cloudera/tests/test_config.py b/cloudera/tests/test_config.py deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/cloudera/tests/test_e2e.py b/cloudera/tests/test_e2e.py index 278a7bb0b81f9..9364a9a2a453e 100644 --- a/cloudera/tests/test_e2e.py +++ b/cloudera/tests/test_e2e.py @@ -7,7 +7,6 @@ @pytest.mark.e2e def test_e2e(dd_agent_check, instance): # Given - instance['api_url'] = "http://localhost:8080/api/v48" # When aggregator = dd_agent_check(instance) # Then diff --git a/cloudera/tests/test_integration.py b/cloudera/tests/test_integration.py index 083e22abf327f..4e944461c2893 100644 --- a/cloudera/tests/test_integration.py +++ b/cloudera/tests/test_integration.py @@ -30,7 +30,6 @@ def test_given_api_v48_endpoint_when_check_runs_then_service_check_ok_and_metric instance, ): # Given - instance['api_url'] = "http://localhost:8080/api/v48" check = cloudera_check(instance) # When dd_run_check(check) diff --git a/cloudera/tests/test_unit.py b/cloudera/tests/test_unit.py index d5af7042f6162..0a12f1f4d42b8 100644 --- a/cloudera/tests/test_unit.py +++ b/cloudera/tests/test_unit.py @@ -7,20 +7,18 @@ import six from cm_client.models.api_cluster import ApiCluster from cm_client.models.api_cluster_list import ApiClusterList +from cm_client.models.api_cluster_ref import ApiClusterRef from cm_client.models.api_entity_tag import ApiEntityTag from cm_client.models.api_host import ApiHost from cm_client.models.api_host_list import ApiHostList -from cm_client.models.api_time_series import ApiTimeSeries -from cm_client.models.api_time_series_data import ApiTimeSeriesData -from cm_client.models.api_time_series_metadata import ApiTimeSeriesMetadata -from cm_client.models.api_time_series_response import ApiTimeSeriesResponse -from cm_client.models.api_time_series_response_list import ApiTimeSeriesResponseList from cm_client.models.api_version_info import ApiVersionInfo from cm_client.rest import ApiException from datadog_checks.base import AgentCheck, ConfigurationError from datadog_checks.cloudera.metrics import METRICS +from .conftest import get_timeseries_resource + pytestmark = [pytest.mark.unit] @@ -39,6 +37,7 @@ def test_given_cloudera_check_when_get_version_exception_from_cloudera_client_th dd_run_check, cloudera_check, instance, + aggregator, ): with mock.patch( 'cm_client.ClouderaManagerResourceApi.get_version', @@ -51,12 +50,15 @@ def test_given_cloudera_check_when_get_version_exception_from_cloudera_client_th check = cloudera_check(instance) # When dd_run_check(check) + # Then + aggregator.assert_service_check('cloudera.can_connect', AgentCheck.CRITICAL) def test_given_cloudera_check_when_version_field_not_found_then_emits_critical_service( dd_run_check, cloudera_check, instance, + aggregator, ): with mock.patch('cm_client.ClouderaManagerResourceApi.get_version', return_value=ApiVersionInfo(),), pytest.raises( Exception, @@ -66,13 +68,18 @@ def test_given_cloudera_check_when_version_field_not_found_then_emits_critical_s check = cloudera_check(instance) # When dd_run_check(check) + # Then + aggregator.assert_service_check( + 'cloudera.can_connect', + AgentCheck.CRITICAL, + message='Cloudera API Client is none: Cloudera Manager Version is unsupported or unknown', + ) def test_given_cloudera_check_when_not_supported_version_then_emits_critical_service( aggregator, dd_run_check, cloudera_check, - api_response, instance, ): with mock.patch( @@ -87,7 +94,11 @@ def test_given_cloudera_check_when_not_supported_version_then_emits_critical_ser # When dd_run_check(check) # Then - aggregator.assert_service_check('cloudera.can_connect', AgentCheck.CRITICAL) + aggregator.assert_service_check( + 'cloudera.can_connect', + AgentCheck.CRITICAL, + message='Cloudera API Client is none: Cloudera Manager Version is unsupported or unknown', + ) def test_given_cloudera_check_when_supported_version_then_emits_ok_service( @@ -117,28 +128,19 @@ def test_given_cloudera_check_when_supported_version_then_emits_ok_service( ), ), mock.patch( 'cm_client.TimeSeriesResourceApi.query_time_series', - side_effect=[ - ApiTimeSeriesResponseList( - items=[ - ApiTimeSeriesResponse( - time_series=[ - ApiTimeSeries( - data=[ - ApiTimeSeriesData(value=49.7), - ], - metadata=ApiTimeSeriesMetadata(metric_name=metric, entity_name=category), - ) - for metric in metrics - ] - ), - ], - ) - for category, metrics in METRICS.items() - ], + side_effect=get_timeseries_resource(), ), mock.patch( 'cm_client.ClustersResourceApi.list_hosts', return_value=ApiHostList( - items=[ApiHost(host_id='host_1')], + items=[ + ApiHost( + host_id='host_1', + cluster_ref=ApiClusterRef( + cluster_name="cluster_1", + display_name="cluster_1", + ), + ) + ], ), ): # Given @@ -153,7 +155,6 @@ def test_given_cloudera_check_when_v7_read_clusters_exception_from_cloudera_clie aggregator, dd_run_check, cloudera_check, - api_response, instance, ): with mock.patch( @@ -168,7 +169,11 @@ def test_given_cloudera_check_when_v7_read_clusters_exception_from_cloudera_clie # When dd_run_check(check) # Then - aggregator.assert_service_check('cloudera.can_connect', AgentCheck.CRITICAL) + aggregator.assert_service_check( + 'cloudera.can_connect', + AgentCheck.CRITICAL, + message="Cloudera check raised an exception: (Service not available)\nReason: None\n", + ) def test_given_cloudera_check_when_bad_health_cluster_then_emits_cluster_health_critical( @@ -198,28 +203,19 @@ def test_given_cloudera_check_when_bad_health_cluster_then_emits_cluster_health_ ), ), mock.patch( 'cm_client.TimeSeriesResourceApi.query_time_series', - side_effect=[ - ApiTimeSeriesResponseList( - items=[ - ApiTimeSeriesResponse( - time_series=[ - ApiTimeSeries( - data=[ - ApiTimeSeriesData(value=49.7), - ], - metadata=ApiTimeSeriesMetadata(metric_name=metric, entity_name=category), - ) - for metric in metrics - ] - ), - ], - ) - for category, metrics in METRICS.items() - ], + side_effect=get_timeseries_resource(), ), mock.patch( 'cm_client.ClustersResourceApi.list_hosts', return_value=ApiHostList( - items=[ApiHost(host_id='host_1')], + items=[ + ApiHost( + host_id='host_1', + cluster_ref=ApiClusterRef( + cluster_name="cluster_1", + display_name="cluster_1", + ), + ) + ], ), ): # Given @@ -233,6 +229,8 @@ def test_given_cloudera_check_when_bad_health_cluster_then_emits_cluster_health_ tags=['_cldr_cb_clustertype:Data Hub', '_cldr_cb_origin:cloudbreak', 'cloudera_cluster:cluster_1'], ) + aggregator.assert_service_check('cloudera.can_connect', AgentCheck.OK) + def test_given_cloudera_check_when_good_health_cluster_then_emits_cluster_health_ok( aggregator, @@ -261,28 +259,19 @@ def test_given_cloudera_check_when_good_health_cluster_then_emits_cluster_health ), ), mock.patch( 'cm_client.TimeSeriesResourceApi.query_time_series', - side_effect=[ - ApiTimeSeriesResponseList( - items=[ - ApiTimeSeriesResponse( - time_series=[ - ApiTimeSeries( - data=[ - ApiTimeSeriesData(value=49.7), - ], - metadata=ApiTimeSeriesMetadata(metric_name=metric, entity_name=category), - ) - for metric in metrics - ] - ), - ], - ) - for category, metrics in METRICS.items() - ], + side_effect=get_timeseries_resource(), ), mock.patch( 'cm_client.ClustersResourceApi.list_hosts', return_value=ApiHostList( - items=[ApiHost(host_id='host_1')], + items=[ + ApiHost( + host_id='host_1', + cluster_ref=ApiClusterRef( + cluster_name="cluster_1", + display_name="cluster_1", + ), + ) + ], ), ): # Given @@ -296,6 +285,8 @@ def test_given_cloudera_check_when_good_health_cluster_then_emits_cluster_health tags=['_cldr_cb_clustertype:Data Hub', '_cldr_cb_origin:cloudbreak', 'cloudera_cluster:cluster_1'], ) + aggregator.assert_service_check('cloudera.can_connect', AgentCheck.OK) + def test_given_cloudera_check_when_good_health_cluster_then_emits_cluster_metrics( aggregator, @@ -324,28 +315,19 @@ def test_given_cloudera_check_when_good_health_cluster_then_emits_cluster_metric ), ), mock.patch( 'cm_client.TimeSeriesResourceApi.query_time_series', - side_effect=[ - ApiTimeSeriesResponseList( - items=[ - ApiTimeSeriesResponse( - time_series=[ - ApiTimeSeries( - data=[ - ApiTimeSeriesData(value=49.7), - ], - metadata=ApiTimeSeriesMetadata(metric_name=metric, entity_name=category), - ) - for metric in metrics - ] - ), - ], - ) - for category, metrics in METRICS.items() - ], + side_effect=get_timeseries_resource(), ), mock.patch( 'cm_client.ClustersResourceApi.list_hosts', return_value=ApiHostList( - items=[ApiHost(host_id='host_1')], + items=[ + ApiHost( + host_id='host_1', + cluster_ref=ApiClusterRef( + cluster_name="cluster_1", + display_name="cluster_1", + ), + ) + ], ), ): # Given @@ -357,25 +339,10 @@ def test_given_cloudera_check_when_good_health_cluster_then_emits_cluster_metric for metric in metrics: aggregator.assert_metric(f'cloudera.{category}.{metric}') + aggregator.assert_service_check('cloudera.can_connect', AgentCheck.OK) -# def test_run_timeseries_checks( -# aggregator, -# dd_run_check, -# cloudera_check, -# ): -# # Given -# instance = { -# 'run_timeseries': True, -# 'username': 'csso_shri.subramanian', -# 'password': 'wyz*xbw7cej*mbh9VUW', -# 'api_url': 'https://cod--qfdcinkqrzw-gateway.agent-in.jfha-h5rc.a0.cloudera.site/' -# 'cod--qfdcinkqrzw/cdp-proxy-api/cm-api/v48', -# } -# check = cloudera_check(instance) -# # When -# dd_run_check(check) -# # Then -# for metric in TIMESERIES_QUERIES: -# metric_name = metric['metric_name'] -# for category in metric['categories']: -# aggregator.assert_metric(f'cloudera.{category}.{metric_name}') + aggregator.assert_service_check( + 'cloudera.cluster.health', + AgentCheck.OK, + tags=['_cldr_cb_clustertype:Data Hub', '_cldr_cb_origin:cloudbreak', 'cloudera_cluster:cluster_1'], + ) From 8c0c2cf44df6a18956c1c93d57489d8bc9ba62ba Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Thu, 8 Dec 2022 17:50:06 -0500 Subject: [PATCH 39/71] Update service checks and update metadata.csv --- cloudera/assets/service_checks.json | 52 ++++++++++++++++++- .../datadog_checks/cloudera/api_client_v7.py | 2 +- cloudera/datadog_checks/cloudera/check.py | 10 ++-- .../datadog_checks/cloudera/entity_status.py | 16 +++--- cloudera/metadata.csv | 46 +++++++++++++++- 5 files changed, 112 insertions(+), 14 deletions(-) diff --git a/cloudera/assets/service_checks.json b/cloudera/assets/service_checks.json index fe51488c7066f..a7f0b168675a1 100644 --- a/cloudera/assets/service_checks.json +++ b/cloudera/assets/service_checks.json @@ -1 +1,51 @@ -[] +[ + { + "agent_version": "7.43.0", + "integration": "Cloudera", + "check": "cloudera.can_connect", + "statuses": [ + "ok", + "critical" + ], + "groups": [ + "api_url" + ], + "name": "Cloudera Manager Can Connect", + "description": "Returns `OK` if the check is able to connect to the Cloudera Manager API and collect metrics, `CRITICAL` otherwise." + }, + { + "agent_version": "7.43.0", + "integration": "Cloudera", + "check": "cloudera.cluster.health", + "statuses": [ + "ok", + "critical", + "warning", + "unknown" + ], + "groups": [ + "cloudera_cluster" + ], + "name": "Can Authenticate with UAA", + "description": "Returns `OK` if the cluster is in good health or is starting, `WARNING` if the cluster is stopping or the health is concerning, `CRITICAL` if the cluster is down or in bad health, and `UNKNOWN` otherwise." + }, + { + "agent_version": "7.43.0", + "integration": "Cloudera", + "check": "cloudera.host.health", + "statuses": [ + "ok", + "critical", + "warning", + "unknown" + ], + "groups": [ + "cloudera_cluster", + "cloudera_rack_id", + "cloudera_hostname" + ], + "name": "Can Authenticate with UAA", + "description": "Returns `OK` if the host is in good health or is starting, `WARNING` if the host is stopping or the health is concerning, `CRITICAL` if the host is down or in bad health, and `UNKNOWN` otherwise." + } + ] + \ No newline at end of file diff --git a/cloudera/datadog_checks/cloudera/api_client_v7.py b/cloudera/datadog_checks/cloudera/api_client_v7.py index 3f52763d7ba20..ba505cf0d0774 100644 --- a/cloudera/datadog_checks/cloudera/api_client_v7.py +++ b/cloudera/datadog_checks/cloudera/api_client_v7.py @@ -79,7 +79,7 @@ def _collect_host_tags(self, host): def _collect_host_service_check(self, host, tags): host_entity_status = ENTITY_STATUS[host.entity_status] if host.entity_status else None self._log.debug('host_entity_status: %s', host_entity_status) - self._check.service_check(HOST_HEALTH, host_entity_status, tags=tags) + self._check.service_check(HOST_HEALTH, host_entity_status, tags=tags + [f'cloudera_hostname:{host.hostname}']) def _collect_host_metrics(self, host, tags): metric_names = ','.join(f'last({metric}) AS {metric}' for metric in TIMESERIES_METRICS['host']) diff --git a/cloudera/datadog_checks/cloudera/check.py b/cloudera/datadog_checks/cloudera/check.py index 37a81b92b9802..ab53fb414de71 100644 --- a/cloudera/datadog_checks/cloudera/check.py +++ b/cloudera/datadog_checks/cloudera/check.py @@ -29,14 +29,18 @@ def _create_client(self): self.client = make_api_client(self, self.config) except Exception as e: message = f"Cloudera API Client is none: {e}", e - self.service_check(CAN_CONNECT, AgentCheck.CRITICAL, message=message) + self.service_check( + CAN_CONNECT, AgentCheck.CRITICAL, message=message, tags=[f'api_url={self.config.api_url}'] + ) raise def check(self, _): try: self.client.collect_data() - self.service_check(CAN_CONNECT, AgentCheck.OK) + self.service_check(CAN_CONNECT, AgentCheck.OK, tags=[f'api_url={self.config.api_url}']) except Exception as e: message = f'Cloudera check raised an exception: {e}' - self.service_check(CAN_CONNECT, AgentCheck.CRITICAL, message=message) + self.service_check( + CAN_CONNECT, AgentCheck.CRITICAL, message=message, tags=[f'api_url={self.config.api_url}'] + ) self.log.error(message) diff --git a/cloudera/datadog_checks/cloudera/entity_status.py b/cloudera/datadog_checks/cloudera/entity_status.py index 36b975ed670ae..1f98b51630182 100644 --- a/cloudera/datadog_checks/cloudera/entity_status.py +++ b/cloudera/datadog_checks/cloudera/entity_status.py @@ -2,16 +2,16 @@ # Based on ApiEntityStatus: https://archive.cloudera.com/cm7/7.7.1/generic/jar/cm_api/apidocs/json_ApiEntityStatus.html ENTITY_STATUS = { - 'UNKNOWN': AgentCheck.UNKNOWN, - 'NONE': AgentCheck.UNKNOWN, - 'STOPPED': AgentCheck.UNKNOWN, + 'GOOD_HEALTH': AgentCheck.OK, + 'STARTING': AgentCheck.OK, + 'STOPPING': AgentCheck.WARNING, + 'CONCERNING_HEALTH': AgentCheck.WARNING, 'DOWN': AgentCheck.CRITICAL, - 'UNKNOWN_HEALTH': AgentCheck.UNKNOWN, 'DISABLED_HEALTH': AgentCheck.CRITICAL, - 'CONCERNING_HEALTH': AgentCheck.WARNING, 'BAD_HEALTH': AgentCheck.CRITICAL, - 'GOOD_HEALTH': AgentCheck.OK, - 'STARTING': AgentCheck.OK, - 'STOPPING': AgentCheck.OK, + 'STOPPED': AgentCheck.CRITICAL, + 'UNKNOWN_HEALTH': AgentCheck.UNKNOWN, 'HISTORY_NOT_AVAILABLE': AgentCheck.UNKNOWN, + 'UNKNOWN': AgentCheck.UNKNOWN, + 'NONE': AgentCheck.UNKNOWN, } diff --git a/cloudera/metadata.csv b/cloudera/metadata.csv index 51dba090b4b49..158612b1facf5 100644 --- a/cloudera/metadata.csv +++ b/cloudera/metadata.csv @@ -1,2 +1,46 @@ metric_name,metric_type,interval,unit_name,per_unit_name,description,orientation,integration,short_name,curated_metric -cloudera.cluster.cpu_percent_across_hosts,gauge,,percent,,CPU usage in percent across hosts for this cluster,0,cloudera,cluster cpu percent across hosts, +cloudera.cluster.cpu_percent_across_hosts,gauge,,percent,,Percent of the Host CPU Usage metric computed across all this entity's descendant Host entities,0,cloudera,cluster cpu percent across hosts, +cloudera.cluster.total_bytes_receive_rate_across_network_interfaces,gauge,,byte,,The sum of the Bytes Received metric computed across all this entity's descendant Network Interface entities,0,cloudera,cluster total bytes rcv rate across network interfaces, +cloudera.cluster.total_bytes_transmit_rate_across_network_interfaces,gauge,,byte,,The sum of the Bytes Transmitted metric computed across all this entity's descendant Network Interface entities,0,cloudera,cluster total bytes transmit rate across network interfaces, +cloudera.cluster.total_read_bytes_rate_across_disks,gauge,,byte,,The sum of the Disk Bytes Read metric computed across all this entity's descendant Disk entities,0,cloudera,cluster total read bytes rate across disks, +cloudera.cluster.total_write_bytes_rate_across_disks,gauge,,byte,,The sum of the Disk Bytes Written metric computed across all this entity's descendant Disk entities,0,cloudera,cluster total write bytes rate across disks, +cloudera.disk.await_read_time,gauge,,millisecond,,The average disk await read time of the entity,0,cloudera,disk await read time, +cloudera.disk.await_time,gauge,,millisecond,,The average disk await time of the entity,0,cloudera,disk await time, +cloudera.disk.await_write_time,gauge,,millisecond,,The average disk await write time of the entity,0,cloudera,disk await write time, +cloudera.disk.service_time,gauge,,millisecond,,The average disk service time of the entity,0,cloudera,disk service time, +cloudera.host.alerts_rate,gauge,,event,second,The number of alerts per second,0,cloudera,host alerts rate, +cloudera.host.cpu_iowait_rate,gauge,,,,Total CPU iowait time,0,cloudera,host cpu iowait rate, +cloudera.host.cpu_irq_rate,gauge,,,,Total CPU IRQ time,0,cloudera,host cpu irq rate, +cloudera.host.cpu_nice_rate,gauge,,,,Total CPU nice time,0,cloudera,host cpu nice rate, +cloudera.host.cpu_soft_irq_rate,gauge,,,,Total CPU soft IRQ time,0,cloudera,host cpu soft irq rate, +cloudera.host.cpu_steal_rate,gauge,,,,"Stolen time, which is the time spent in other operating systems when running in a virtualized environment",0,cloudera,host cpu steal rate, +cloudera.host.cpu_system_rate,gauge,,,,Total System CPU,0,cloudera,host cpu system rate, +cloudera.host.cpu_user_rate,gauge,,,,Total CPU user time,0,cloudera,host cpu user rate, +cloudera.host.events_critical_rate,gauge,,,,The number of critical events,0,cloudera,host events critical rate, +cloudera.host.events_important_rate,gauge,,,,The number of important events,0,cloudera,host events important rate, +cloudera.host.health_bad_rate,gauge,,,,Percentage of Time with Bad Health,0,cloudera,host health bad rate, +cloudera.host.health_concerning_rate,gauge,,,,Percentage of Time with Concerning Health,0,cloudera,host health concerning rate, +cloudera.host.health_disabled_rate,gauge,,,,Percentage of Time with Disabled Health,0,cloudera,host health disabled rate, +cloudera.host.health_good_rate,gauge,,,,Percentage of Time with Good Health,0,cloudera,host health good rate, +cloudera.host.health_unknown_rate,gauge,,,,Percentage of Time with Unknown Health,0,cloudera,host health unknown rate, +cloudera.host.load_15,gauge,,,,Load Average over 15 minutes,0,cloudera,host load 15, +cloudera.host.load_1,gauge,,,,Load Average over 1 minute,0,cloudera,host load 1, +cloudera.host.load_5,gauge,,,,Load Average over 5 minutes,0,cloudera,host load 5, +cloudera.host.num_cores,gauge,,,,Total number of cores,0,cloudera,host num cores, +cloudera.host.num_physical_cores,gauge,,,,Total number of physical cores,0,cloudera,host num physical cores, +cloudera.host.physical_memory_buffers,gauge,,byte,,The amount of physical memory devoted to temporary storage for raw disk blocks,0,cloudera,host physical memory buffers, +cloudera.host.physical_memory_cached,gauge,,byte,,The amount of physical memory used for files read from the disk. This is commonly referred to as the pagecache,0,cloudera,host physical memory cached, +cloudera.host.physical_memory_total,gauge,,byte,,The total physical memory available,0,cloudera,host physical memory total, +cloudera.host.physical_memory_used,gauge,,byte,,"The total amount of memory being used, excluding buffers and cache",0,cloudera,host physical memory used, +cloudera.host.swap_out_rate,gauge,,page,second,Memory swapped out to disk,0,cloudera,host swap out rate, +cloudera.host.swap_used,gauge,,byte,,Swap used,0,cloudera,host swap used, +cloudera.host.total_bytes_receive_rate_across_network_interfaces,gauge,,byte,second,The sum of the Bytes Received metric computed across all this entity's descendant Network Interface entities,0,cloudera,host total bytes rcv rate across network interfaces, +cloudera.host.total_bytes_transmit_rate_across_network_interfaces,gauge,,byte,second,The sum of the Bytes Transmitted metric computed across all this entity's descendant Network Interface entities,0,cloudera,host total bytes transmit rate across network interfaces, +cloudera.host.total_phys_mem_bytes,gauge,,byte,,Total physical memory in bytes,0,cloudera,host total phys mem bytes, +cloudera.host.total_read_bytes_rate_across_disks,gauge,,byte,second,The sum of the Disk Bytes Read metric computed across all this entity's descendant Disk entities,0,cloudera,host total read bytes rate across disks, +cloudera.host.total_read_ios_rate_across_disks,gauge,,io,second,The sum of the Disk Reads metric computed across all this entity's descendant Disk entities,0,cloudera,host total read ios rate across disks, +cloudera.host.total_write_bytes_rate_across_disks,gauge,,byte,second,The sum of the Disk Bytes Written metric computed across all this entity's descendant Disk entities,0,cloudera,host total write bytes rate across disks, +cloudera.host.total_write_ios_rate_across_disks,gauge,,io,second,The sum of the Disk Writes metric computed across all this entity's descendant Disk entities,0,cloudera,host total write ios rate across disks, +cloudera.role.cpu_system_rate,gauge,,,,Total System CPU,0,cloudera,role cpu system rate, +cloudera.role.cpu_user_rate,gauge,,,,Total CPU user time,0,cloudera,role cpu user rate, +cloudera.role.mem_rss,gauge,,byte,,Resident memory used,0,cloudera,role mem rss, From ae6d76e6fc2fc83c945f16878431c47fc73e3309 Mon Sep 17 00:00:00 2001 From: Jose Manuel Almaza Date: Fri, 9 Dec 2022 08:45:58 +0100 Subject: [PATCH 40/71] Fixed missing coverage --- cloudera/tests/test_unit.py | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/cloudera/tests/test_unit.py b/cloudera/tests/test_unit.py index 0a12f1f4d42b8..b97f6792533c3 100644 --- a/cloudera/tests/test_unit.py +++ b/cloudera/tests/test_unit.py @@ -50,8 +50,6 @@ def test_given_cloudera_check_when_get_version_exception_from_cloudera_client_th check = cloudera_check(instance) # When dd_run_check(check) - # Then - aggregator.assert_service_check('cloudera.can_connect', AgentCheck.CRITICAL) def test_given_cloudera_check_when_version_field_not_found_then_emits_critical_service( @@ -68,12 +66,6 @@ def test_given_cloudera_check_when_version_field_not_found_then_emits_critical_s check = cloudera_check(instance) # When dd_run_check(check) - # Then - aggregator.assert_service_check( - 'cloudera.can_connect', - AgentCheck.CRITICAL, - message='Cloudera API Client is none: Cloudera Manager Version is unsupported or unknown', - ) def test_given_cloudera_check_when_not_supported_version_then_emits_critical_service( @@ -93,12 +85,6 @@ def test_given_cloudera_check_when_not_supported_version_then_emits_critical_ser check = cloudera_check(instance) # When dd_run_check(check) - # Then - aggregator.assert_service_check( - 'cloudera.can_connect', - AgentCheck.CRITICAL, - message='Cloudera API Client is none: Cloudera Manager Version is unsupported or unknown', - ) def test_given_cloudera_check_when_supported_version_then_emits_ok_service( From e8a922dd61e4ef9f8dabc40774c2c666369b68cc Mon Sep 17 00:00:00 2001 From: Jose Manuel Almaza Date: Fri, 9 Dec 2022 09:00:48 +0100 Subject: [PATCH 41/71] Added 'io' to VALID_UNIT_NAMES --- .../datadog_checks/dev/tooling/commands/validate/metadata.py | 1 + 1 file changed, 1 insertion(+) diff --git a/datadog_checks_dev/datadog_checks/dev/tooling/commands/validate/metadata.py b/datadog_checks_dev/datadog_checks/dev/tooling/commands/validate/metadata.py index 55dcf3454fcb3..74acb83533922 100644 --- a/datadog_checks_dev/datadog_checks/dev/tooling/commands/validate/metadata.py +++ b/datadog_checks_dev/datadog_checks/dev/tooling/commands/validate/metadata.py @@ -225,6 +225,7 @@ 'exception', 'run', 'hop', + 'io' } ALLOWED_PREFIXES = ['system', 'jvm', 'http', 'datadog', 'sftp'] From 1f245f055fd45a364143b9171fac72a0872955fb Mon Sep 17 00:00:00 2001 From: Jose Manuel Almaza Date: Fri, 9 Dec 2022 09:15:07 +0100 Subject: [PATCH 42/71] Added some tag checks to tests --- .../datadog_checks/cloudera/api_client_v7.py | 9 +++------ cloudera/tests/test_unit.py | 19 ++++++++++++------- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/cloudera/datadog_checks/cloudera/api_client_v7.py b/cloudera/datadog_checks/cloudera/api_client_v7.py index ba505cf0d0774..64eb0284fa0c2 100644 --- a/cloudera/datadog_checks/cloudera/api_client_v7.py +++ b/cloudera/datadog_checks/cloudera/api_client_v7.py @@ -31,12 +31,9 @@ def _collect_clusters(self): self._collect_cluster_service_check(cluster, tags) self._collect_hosts(cluster_name) - def _collect_cluster_tags(self, cluster): - tags = [] - if cluster.name: - for cluster_tag in cluster.tags: - tags.append(f"{cluster_tag.name}:{cluster_tag.value}") - return tags + @staticmethod + def _collect_cluster_tags(cluster): + return [f"{cluster_tag.name}:{cluster_tag.value}" for cluster_tag in cluster.tags] def _collect_cluster_service_check(self, cluster, tags): cluster_entity_status = ENTITY_STATUS[cluster.entity_status] diff --git a/cloudera/tests/test_unit.py b/cloudera/tests/test_unit.py index b97f6792533c3..56566f202da32 100644 --- a/cloudera/tests/test_unit.py +++ b/cloudera/tests/test_unit.py @@ -16,6 +16,7 @@ from datadog_checks.base import AgentCheck, ConfigurationError from datadog_checks.cloudera.metrics import METRICS +from datadog_checks.dev.utils import get_metadata_metrics from .conftest import get_timeseries_resource @@ -130,11 +131,13 @@ def test_given_cloudera_check_when_supported_version_then_emits_ok_service( ), ): # Given + api_url = instance['api_url'] check = cloudera_check(instance) # When dd_run_check(check) # Then - aggregator.assert_service_check('cloudera.can_connect', AgentCheck.OK) + aggregator.assert_metrics_using_metadata(get_metadata_metrics(), check_submission_type=True) + aggregator.assert_service_check('cloudera.can_connect', AgentCheck.OK, tags=[f'api_url={api_url}']) def test_given_cloudera_check_when_v7_read_clusters_exception_from_cloudera_client_then_emits_critical_service( @@ -151,6 +154,7 @@ def test_given_cloudera_check_when_v7_read_clusters_exception_from_cloudera_clie side_effect=ApiException('Service not available'), ): # Given + api_url = instance['api_url'] check = cloudera_check(instance) # When dd_run_check(check) @@ -158,6 +162,7 @@ def test_given_cloudera_check_when_v7_read_clusters_exception_from_cloudera_clie aggregator.assert_service_check( 'cloudera.can_connect', AgentCheck.CRITICAL, + tags=[f'api_url={api_url}'], message="Cloudera check raised an exception: (Service not available)\nReason: None\n", ) @@ -205,6 +210,7 @@ def test_given_cloudera_check_when_bad_health_cluster_then_emits_cluster_health_ ), ): # Given + api_url = instance['api_url'] check = cloudera_check(instance) # When dd_run_check(check) @@ -214,8 +220,7 @@ def test_given_cloudera_check_when_bad_health_cluster_then_emits_cluster_health_ AgentCheck.CRITICAL, tags=['_cldr_cb_clustertype:Data Hub', '_cldr_cb_origin:cloudbreak', 'cloudera_cluster:cluster_1'], ) - - aggregator.assert_service_check('cloudera.can_connect', AgentCheck.OK) + aggregator.assert_service_check('cloudera.can_connect', AgentCheck.OK, tags=[f'api_url={api_url}']) def test_given_cloudera_check_when_good_health_cluster_then_emits_cluster_health_ok( @@ -261,6 +266,7 @@ def test_given_cloudera_check_when_good_health_cluster_then_emits_cluster_health ), ): # Given + api_url = instance['api_url'] check = cloudera_check(instance) # When dd_run_check(check) @@ -270,8 +276,7 @@ def test_given_cloudera_check_when_good_health_cluster_then_emits_cluster_health AgentCheck.OK, tags=['_cldr_cb_clustertype:Data Hub', '_cldr_cb_origin:cloudbreak', 'cloudera_cluster:cluster_1'], ) - - aggregator.assert_service_check('cloudera.can_connect', AgentCheck.OK) + aggregator.assert_service_check('cloudera.can_connect', AgentCheck.OK, tags=[f'api_url={api_url}']) def test_given_cloudera_check_when_good_health_cluster_then_emits_cluster_metrics( @@ -317,6 +322,7 @@ def test_given_cloudera_check_when_good_health_cluster_then_emits_cluster_metric ), ): # Given + api_url = instance['api_url'] check = cloudera_check(instance) # When dd_run_check(check) @@ -325,8 +331,7 @@ def test_given_cloudera_check_when_good_health_cluster_then_emits_cluster_metric for metric in metrics: aggregator.assert_metric(f'cloudera.{category}.{metric}') - aggregator.assert_service_check('cloudera.can_connect', AgentCheck.OK) - + aggregator.assert_service_check('cloudera.can_connect', AgentCheck.OK, tags=[f'api_url={api_url}']) aggregator.assert_service_check( 'cloudera.cluster.health', AgentCheck.OK, From 214084f983ea24822e202fe0e91c7cdb3de8a5db Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Fri, 9 Dec 2022 09:58:38 -0500 Subject: [PATCH 43/71] Fix service checks and add comma --- cloudera/assets/service_checks.json | 4 ++-- .../datadog_checks/dev/tooling/commands/validate/metadata.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cloudera/assets/service_checks.json b/cloudera/assets/service_checks.json index a7f0b168675a1..a362c90cd3f04 100644 --- a/cloudera/assets/service_checks.json +++ b/cloudera/assets/service_checks.json @@ -26,7 +26,7 @@ "groups": [ "cloudera_cluster" ], - "name": "Can Authenticate with UAA", + "name": "Cloudera Cluster Health", "description": "Returns `OK` if the cluster is in good health or is starting, `WARNING` if the cluster is stopping or the health is concerning, `CRITICAL` if the cluster is down or in bad health, and `UNKNOWN` otherwise." }, { @@ -44,7 +44,7 @@ "cloudera_rack_id", "cloudera_hostname" ], - "name": "Can Authenticate with UAA", + "name": "Cloudera Host Health", "description": "Returns `OK` if the host is in good health or is starting, `WARNING` if the host is stopping or the health is concerning, `CRITICAL` if the host is down or in bad health, and `UNKNOWN` otherwise." } ] diff --git a/datadog_checks_dev/datadog_checks/dev/tooling/commands/validate/metadata.py b/datadog_checks_dev/datadog_checks/dev/tooling/commands/validate/metadata.py index 74acb83533922..52683bb17bb97 100644 --- a/datadog_checks_dev/datadog_checks/dev/tooling/commands/validate/metadata.py +++ b/datadog_checks_dev/datadog_checks/dev/tooling/commands/validate/metadata.py @@ -225,7 +225,7 @@ 'exception', 'run', 'hop', - 'io' + 'io', } ALLOWED_PREFIXES = ['system', 'jvm', 'http', 'datadog', 'sftp'] From a6d8f828d909b4cfa032d483f7e2e940193eb476 Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Fri, 9 Dec 2022 07:02:28 -0800 Subject: [PATCH 44/71] Add native metrics (#13474) * Add native metrics * Fix e2e test * Move metadata.csv change to separate branch * Renamed some methods * Fixed problem merging metrics * Fixed unit tests Co-authored-by: Jose Manuel Almaza --- .../datadog_checks/cloudera/api_client_v7.py | 10 ++++++++- cloudera/datadog_checks/cloudera/metrics.py | 21 +++++++++++++++++-- cloudera/tests/test_e2e.py | 1 + cloudera/tests/test_integration.py | 1 + cloudera/tests/test_unit.py | 3 +++ 5 files changed, 33 insertions(+), 3 deletions(-) diff --git a/cloudera/datadog_checks/cloudera/api_client_v7.py b/cloudera/datadog_checks/cloudera/api_client_v7.py index 64eb0284fa0c2..8fc0e6964575a 100644 --- a/cloudera/datadog_checks/cloudera/api_client_v7.py +++ b/cloudera/datadog_checks/cloudera/api_client_v7.py @@ -3,7 +3,7 @@ from datadog_checks.base import AgentCheck from datadog_checks.cloudera.api_client import ApiClient from datadog_checks.cloudera.entity_status import ENTITY_STATUS -from datadog_checks.cloudera.metrics import TIMESERIES_METRICS +from datadog_checks.cloudera.metrics import NATIVE_METRICS, TIMESERIES_METRICS from .common import CLUSTER_HEALTH, HOST_HEALTH @@ -79,6 +79,14 @@ def _collect_host_service_check(self, host, tags): self._check.service_check(HOST_HEALTH, host_entity_status, tags=tags + [f'cloudera_hostname:{host.hostname}']) def _collect_host_metrics(self, host, tags): + self._collect_host_native_metrics(host, tags) + self._collect_host_timeseries_metrics(host, tags) + + def _collect_host_native_metrics(self, host, tags): + for metric in NATIVE_METRICS['host']: + self._check.gauge(f"host.{metric}", getattr(host, metric), tags) + + def _collect_host_timeseries_metrics(self, host, tags): metric_names = ','.join(f'last({metric}) AS {metric}' for metric in TIMESERIES_METRICS['host']) query = f'SELECT {metric_names} WHERE hostId="{host.host_id}" AND category=HOST' self._query_time_series(query, category='host', tags=tags) diff --git a/cloudera/datadog_checks/cloudera/metrics.py b/cloudera/datadog_checks/cloudera/metrics.py index ebe4043bbd7c2..8ecacb797cd7f 100644 --- a/cloudera/datadog_checks/cloudera/metrics.py +++ b/cloudera/datadog_checks/cloudera/metrics.py @@ -1,3 +1,5 @@ +from collections import defaultdict + TIMESERIES_METRICS = { 'cluster': [ 'cpu_percent_across_hosts', @@ -51,6 +53,21 @@ ], } -NATIVE_METRICS = {} +NATIVE_METRICS = { + 'host': [ + 'num_cores', + 'num_physical_cores', + 'total_phys_mem_bytes', + ] +} + + +def merge_dicts(d1, d2): + merged_dict = defaultdict(list) + for d in (d1, d2): + for key, value in d.items(): + merged_dict[key] += value + return merged_dict + -METRICS = {**NATIVE_METRICS, **TIMESERIES_METRICS} +METRICS = merge_dicts(NATIVE_METRICS, TIMESERIES_METRICS) diff --git a/cloudera/tests/test_e2e.py b/cloudera/tests/test_e2e.py index 9364a9a2a453e..4a08e2f651928 100644 --- a/cloudera/tests/test_e2e.py +++ b/cloudera/tests/test_e2e.py @@ -17,3 +17,4 @@ def test_e2e(dd_agent_check, instance): # caddy test env is supposed to be in BAD_HEALTH aggregator.assert_service_check('cloudera.cluster.health', ClouderaCheck.CRITICAL, message="BAD_HEALTH") aggregator.assert_service_check('cloudera.host.health', ClouderaCheck.OK) + aggregator.assert_all_metrics_covered() diff --git a/cloudera/tests/test_integration.py b/cloudera/tests/test_integration.py index 4e944461c2893..8db896250e9dd 100644 --- a/cloudera/tests/test_integration.py +++ b/cloudera/tests/test_integration.py @@ -41,3 +41,4 @@ def test_given_api_v48_endpoint_when_check_runs_then_service_check_ok_and_metric # caddy test env is supposed to be in BAD_HEALTH aggregator.assert_service_check('cloudera.cluster.health', ClouderaCheck.CRITICAL, message="BAD_HEALTH") aggregator.assert_service_check('cloudera.host.health', ClouderaCheck.OK) + aggregator.assert_all_metrics_covered() diff --git a/cloudera/tests/test_unit.py b/cloudera/tests/test_unit.py index 56566f202da32..6ed506714c89c 100644 --- a/cloudera/tests/test_unit.py +++ b/cloudera/tests/test_unit.py @@ -317,6 +317,9 @@ def test_given_cloudera_check_when_good_health_cluster_then_emits_cluster_metric cluster_name="cluster_1", display_name="cluster_1", ), + num_cores=8, + num_physical_cores=4, + total_phys_mem_bytes=33079799808, ) ], ), From dafb9681c733344bc5e05736d22c72255154440c Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Fri, 9 Dec 2022 10:27:39 -0500 Subject: [PATCH 45/71] Clean up --- .gitlab-ci.yml | 6 +-- .../assets/dashboards/cloudera_overview.json | 0 cloudera/hatch.toml | 8 ---- cloudera/images/IMAGES_README.md | 46 ------------------- 4 files changed, 2 insertions(+), 58 deletions(-) delete mode 100644 cloudera/assets/dashboards/cloudera_overview.json delete mode 100644 cloudera/images/IMAGES_README.md diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 38283ed14f3e0..1125163f75b3a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -63,10 +63,8 @@ trigger-agent-build: changes: - datadog_checks_base/datadog_checks/base/data/agent_requirements.in when: always - # TODO: Add this back once Cloudera is ready to merge - # This is stopping the trigger-agent-build to run since all pipelines run when cm-client is added - # - if: ($CI_COMMIT_BRANCH !~ /^7.[0-9]{2}.x/) - # when: always + - if: ($CI_COMMIT_BRANCH !~ /^7.[0-9]{2}.x/) + when: always cache: <<: *slack-cache script: diff --git a/cloudera/assets/dashboards/cloudera_overview.json b/cloudera/assets/dashboards/cloudera_overview.json deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/cloudera/hatch.toml b/cloudera/hatch.toml index c0c471576321b..4293e03e3b5f0 100644 --- a/cloudera/hatch.toml +++ b/cloudera/hatch.toml @@ -2,11 +2,3 @@ [[envs.default.matrix]] python = ["38"] - - -# TODO: Remove this when cloudera is ready to merge -# This is temporary to stop CI complaining -[envs.default] -dependencies = [ - "cm-client", -] \ No newline at end of file diff --git a/cloudera/images/IMAGES_README.md b/cloudera/images/IMAGES_README.md deleted file mode 100644 index c915b722acace..0000000000000 --- a/cloudera/images/IMAGES_README.md +++ /dev/null @@ -1,46 +0,0 @@ -# Marketplace Media Carousel Guidelines - -## Using the media gallery - -To use the media gallery, you must upload a minimum of one image. The gallery -can hold a maximum of 8 pieces of media total, and one of these pieces of media -can be a video (guidelines and submission steps below). Images should be -added to your /images directory and referenced in the manifest.json file. - - -## Image and video requirements - -### Images - -``` -File type : .jpg or .png -File size : ~500 KB per image, with a max of 1 MB per image -File dimensions : The aspect ratio must be 16:9 minimum, with these constraints: - - Width: 1440px - Min height: 810px - Max height: 2560px - -File name : Use only letters, numbers, underscores, and hyphens -Color mode : RGB -Color profile : sRGB -Description : 300 characters maximum -``` - -### Video - -To display a video in your media gallery, please send our team the zipped file -or a link to download the video at `marketplace@datadog.com`. In addition, -please upload a thumbnail image for your video as a part of the pull request. -Once approved, we will upload the file to Vimeo and provide you with the -vimeo_id to add to your manifest.json file. Please note that the gallery can -only hold one video. - -``` -File type : MP4 H.264 -File size : Max 1 video; 1 GB maximum size -File dimensions : The aspect ratio must be exactly 16:9, and the resolution must be 1920x1080 or higher -File name : partnerName-appName.mp4 -Run time : Recommendation of 60 seconds or less -Description : 300 characters maximum -``` From ec57bd8801c856d0d9f4d7dbd741cf1ceab6bd99 Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Fri, 9 Dec 2022 11:46:22 -0500 Subject: [PATCH 46/71] Add version collection --- .../cloudera/api_client_factory.py | 10 ++++++++++ cloudera/datadog_checks/cloudera/check.py | 1 + cloudera/tests/test_integration.py | 18 ++++++++++++++++++ 3 files changed, 29 insertions(+) diff --git a/cloudera/datadog_checks/cloudera/api_client_factory.py b/cloudera/datadog_checks/cloudera/api_client_factory.py index a634947444de8..b18a57a5b4230 100644 --- a/cloudera/datadog_checks/cloudera/api_client_factory.py +++ b/cloudera/datadog_checks/cloudera/api_client_factory.py @@ -18,6 +18,16 @@ def make_api_client(check, config): if response_version: cloudera_version = packaging.version.parse(response_version) check.log.debug('Cloudera Manager Version: %s', cloudera_version) + check.log.debug('micro: %s', cloudera_version.micro) if cloudera_version.major == 7: + version_raw = str(cloudera_version) + version_parts = { + 'major': str(cloudera_version.major), + 'minor': str(cloudera_version.minor), + 'patch': str(cloudera_version.micro), + } + check.set_metadata('version', version_raw, scheme='parts', part_map=version_parts) + return ApiClientV7(check, api_client) + raise ConfigurationError(f'Cloudera Manager Version is unsupported or unknown: {response_version}') diff --git a/cloudera/datadog_checks/cloudera/check.py b/cloudera/datadog_checks/cloudera/check.py index ab53fb414de71..b314ba7d75e41 100644 --- a/cloudera/datadog_checks/cloudera/check.py +++ b/cloudera/datadog_checks/cloudera/check.py @@ -24,6 +24,7 @@ def __init__(self, name, init_config, instances): self.client = None self.check_initializations.append(self._create_client) + @AgentCheck.metadata_entrypoint def _create_client(self): try: self.client = make_api_client(self, self.config) diff --git a/cloudera/tests/test_integration.py b/cloudera/tests/test_integration.py index 8db896250e9dd..87297fcb0e074 100644 --- a/cloudera/tests/test_integration.py +++ b/cloudera/tests/test_integration.py @@ -42,3 +42,21 @@ def test_given_api_v48_endpoint_when_check_runs_then_service_check_ok_and_metric aggregator.assert_service_check('cloudera.cluster.health', ClouderaCheck.CRITICAL, message="BAD_HEALTH") aggregator.assert_service_check('cloudera.host.health', ClouderaCheck.OK) aggregator.assert_all_metrics_covered() + + +@pytest.mark.integration +def test_metadata(cloudera_check, instance, datadog_agent, dd_run_check): + check = cloudera_check(instance) + check.check_id = 'test:123' + dd_run_check(check) + + raw_version = '7.2.15' + major, minor, patch = raw_version.split('.') + version_metadata = { + 'version.scheme': 'cloudera', + 'version.major': major, + 'version.minor': minor, + 'version.patch': patch, + } + + datadog_agent.assert_metadata('test:123', version_metadata) From 6e5350bd7230ff03b74161d0e7a1727e9ed30e93 Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Fri, 9 Dec 2022 14:56:40 -0500 Subject: [PATCH 47/71] Add back service check for can_connect --- cloudera/datadog_checks/cloudera/check.py | 2 +- cloudera/tests/test_unit.py | 31 ++++++++++++++++++----- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/cloudera/datadog_checks/cloudera/check.py b/cloudera/datadog_checks/cloudera/check.py index b314ba7d75e41..6d947a1c0dbd0 100644 --- a/cloudera/datadog_checks/cloudera/check.py +++ b/cloudera/datadog_checks/cloudera/check.py @@ -29,7 +29,7 @@ def _create_client(self): try: self.client = make_api_client(self, self.config) except Exception as e: - message = f"Cloudera API Client is none: {e}", e + message = f"Cloudera API Client is none: {e}" self.service_check( CAN_CONNECT, AgentCheck.CRITICAL, message=message, tags=[f'api_url={self.config.api_url}'] ) diff --git a/cloudera/tests/test_unit.py b/cloudera/tests/test_unit.py index 6ed506714c89c..f399fca9ee8d6 100644 --- a/cloudera/tests/test_unit.py +++ b/cloudera/tests/test_unit.py @@ -48,9 +48,12 @@ def test_given_cloudera_check_when_get_version_exception_from_cloudera_client_th match='Service not available', ): # Given + api_url = instance['api_url'] check = cloudera_check(instance) # When dd_run_check(check) + # Then + aggregator.assert_service_check('cloudera.can_connect', AgentCheck.CRITICAL, tags=[f'api_url={api_url}']) def test_given_cloudera_check_when_version_field_not_found_then_emits_critical_service( @@ -64,9 +67,17 @@ def test_given_cloudera_check_when_version_field_not_found_then_emits_critical_s match='Cloudera Manager Version is unsupported or unknown', ): # Given + api_url = instance['api_url'] check = cloudera_check(instance) # When dd_run_check(check) + # Then + aggregator.assert_service_check( + 'cloudera.can_connect', + AgentCheck.CRITICAL, + message="Cloudera API Client is none: Cloudera Manager Version is unsupported or unknown: None", + tags=[f'api_url={api_url}'], + ) def test_given_cloudera_check_when_not_supported_version_then_emits_critical_service( @@ -83,9 +94,17 @@ def test_given_cloudera_check_when_not_supported_version_then_emits_critical_ser match='Cloudera Manager Version is unsupported or unknown', ): # Given + api_url = instance['api_url'] check = cloudera_check(instance) # When dd_run_check(check) + # Then + aggregator.assert_service_check( + 'cloudera.can_connect', + AgentCheck.CRITICAL, + message="Cloudera API Client is none: Cloudera Manager Version is unsupported or unknown: 5.0.0", + tags=[f'api_url={api_url}'], + ) def test_given_cloudera_check_when_supported_version_then_emits_ok_service( @@ -159,12 +178,12 @@ def test_given_cloudera_check_when_v7_read_clusters_exception_from_cloudera_clie # When dd_run_check(check) # Then - aggregator.assert_service_check( - 'cloudera.can_connect', - AgentCheck.CRITICAL, - tags=[f'api_url={api_url}'], - message="Cloudera check raised an exception: (Service not available)\nReason: None\n", - ) + aggregator.assert_service_check( + 'cloudera.can_connect', + AgentCheck.CRITICAL, + tags=[f'api_url={api_url}'], + message="Cloudera check raised an exception: (Service not available)\nReason: None\n", + ) def test_given_cloudera_check_when_bad_health_cluster_then_emits_cluster_health_critical( From de7ce8578dad55fed410be5eee725704ca51afe7 Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Fri, 9 Dec 2022 16:18:36 -0500 Subject: [PATCH 48/71] Update README and add pictures --- cloudera/README.md | 73 ++++++++++++++++-- cloudera/assets/configuration/spec.yaml | 18 ++++- .../cloudera/data/conf.yaml.example | 14 +++- .../images/create_machine_user.png | Bin 0 -> 269016 bytes .../images/set_workload_password.png | Bin 0 -> 300758 bytes .../datadog_checks/images/user_management.png | Bin 0 -> 242857 bytes 6 files changed, 93 insertions(+), 12 deletions(-) create mode 100644 cloudera/datadog_checks/images/create_machine_user.png create mode 100644 cloudera/datadog_checks/images/set_workload_password.png create mode 100644 cloudera/datadog_checks/images/user_management.png diff --git a/cloudera/README.md b/cloudera/README.md index 2955789ba2adc..a06508211f45a 100644 --- a/cloudera/README.md +++ b/cloudera/README.md @@ -2,7 +2,7 @@ ## Overview -This check monitors [Cloudera][1] through the Datadog Agent. +This integration monitors your [Cloudera Data Platform][1] through the Datadog Agent, allowing you to submit metrics and service checks on the health of your Cloudera Data Hub clusters, hosts, and roles. ## Setup @@ -15,9 +15,69 @@ No additional installation is needed on your server. ### Configuration -1. Edit the `cloudera.d/conf.yaml` file, in the `conf.d/` folder at the root of your Agent's configuration directory to start collecting your cloudera performance data. See the [sample cloudera.d/conf.yaml][4] for all available configuration options. +#### Prepare Cloudera Manager +1. In Cloudera Data Platform, navigate to the Management Console and click on the **User Management** tab. +![User Management][10] -2. [Restart the Agent][5]. +2. Click on **Actions**, then **Create Machine User** to create the machine user that will query the Cloudera Manager via the Datadog Agent. +![Create Machine User][11] + +3. After the user is created, click on **Set Workload Password** if the workload password is not set yet. +![Set Workload Password][12] + + + + +#### Host +1. Edit the `cloudera.d/conf.yaml` file, in the `conf.d/` folder at the root of your Agent's configuration directory to start collecting your Cloudera cluster and host data. See the [sample cloudera.d/conf.yaml][4] for all available configuration options. + + ```yaml + init_config: + + instances: + + - + ## @param api_url - string - required + ## The URL endpoint for the Cloudera Manager API. This can be found under the Endpoints tab for + ## your Data Hub to monitor. + ## + ## Note: The version of the Cloudera Manager API will need to be appended at the end of the URL. + ## For example, using v48 of the API for Data Hub `cluster_1` should result with a URL similar + ## to the following: + ## `https://cluster1.cloudera.site/cluster_1/cdp-proxy-api/cm-api/v48` + # + api_url: + + ## @param workload_username - string - required + ## The Workload username. This value can be found in the `User Management` tab of the Management + ## Console in the `Workload User Name`. + # + workload_username: + + ## @param workload_password - string - required + ## The Workload password. This value can be found in the `User Management` tab of the Management + ## Console in the `Workload Password`. + # + workload_password: + ``` + +2. [Restart the Agent][5] to start collecting and sending Cloudera Data Hub cluster data to Datadog. + + + + +#### Containerized + +For containerized environments, see the [Autodiscovery Integration Templates][9] for guidance on applying the parameters below. + +| Parameter | Value | +| -------------------- | ---------------------------------------------------------------------------------------------------------------- | +| `` | `cloudera` | +| `` | blank or `{}` | +| `` | `{"api_url": ", "workload_username": "", 'workload_password": "" `| + + + ### Validation @@ -35,8 +95,6 @@ The Cloudera integration does not include any events. ### Service Checks -The Cloudera integration does not include any service checks. - See [service_checks.json][8] for a list of service checks provided by this integration. ## Troubleshooting @@ -44,7 +102,7 @@ See [service_checks.json][8] for a list of service checks provided by this integ Need help? Contact [Datadog support][9]. -[1]: **LINK_TO_INTEGRATION_SITE** +[1]: https://www.cloudera.com/products/cloudera-data-platform.html [2]: https://app.datadoghq.com/account/settings#agent [3]: https://docs.datadoghq.com/agent/kubernetes/integrations/ [4]: https://github.com/DataDog/integrations-core/blob/master/cloudera/datadog_checks/cloudera/data/conf.yaml.example @@ -53,3 +111,6 @@ Need help? Contact [Datadog support][9]. [7]: https://github.com/DataDog/integrations-core/blob/master/cloudera/metadata.csv [8]: https://github.com/DataDog/integrations-core/blob/master/cloudera/assets/service_checks.json [9]: https://docs.datadoghq.com/help/ +[10]: https://raw.githubusercontent.com/DataDog/integrations-core/master/cloudera/images/user_management.png +[11]: https://raw.githubusercontent.com/DataDog/integrations-core/master/cloudera/images/create_machine_user.png +[12]: https://raw.githubusercontent.com/DataDog/integrations-core/master/cloudera/images/set_workload_password.png diff --git a/cloudera/assets/configuration/spec.yaml b/cloudera/assets/configuration/spec.yaml index 29eb2bc21de9b..daf4d7633353e 100644 --- a/cloudera/assets/configuration/spec.yaml +++ b/cloudera/assets/configuration/spec.yaml @@ -10,16 +10,28 @@ files: - template: instances/default - name: api_url required: true - description: The Swagger API Url + description: | + The URL endpoint for the Cloudera Manager API. This can be found under the Endpoints tab for + your Data Hub to monitor. + + Note: The version of the Cloudera Manager API will need to be appended at the end of the URL. + For example, using v48 of the API for Data Hub `cluster_1` should result with a URL similar + to the following: + `https://cluster1.cloudera.site/cluster_1/cdp-proxy-api/cm-api/v48` + value: type: string - name: workload_username - description: The workload username + description: | + The Workload username. This value can be found in the `User Management` tab of the Management + Console in the `Workload User Name`. required: true value: type: string - name: workload_password - description: The workload password + description: | + The Workload password. This value can be found in the `User Management` tab of the Management + Console in the `Workload Password`. required: true value: type: string diff --git a/cloudera/datadog_checks/cloudera/data/conf.yaml.example b/cloudera/datadog_checks/cloudera/data/conf.yaml.example index 04219ecea8394..c798bef0b351d 100644 --- a/cloudera/datadog_checks/cloudera/data/conf.yaml.example +++ b/cloudera/datadog_checks/cloudera/data/conf.yaml.example @@ -55,16 +55,24 @@ instances: # - ## @param api_url - string - required - ## The Swagger API Url + ## The URL endpoint for the Cloudera Manager API. This can be found under the Endpoints tab for + ## your Data Hub to monitor. + ## + ## Note: The version of the Cloudera Manager API will need to be appended at the end of the URL. + ## For example, using v48 of the API for Data Hub `cluster_1` should result with a URL similar + ## to the following: + ## `https://cluster1.cloudera.site/cluster_1/cdp-proxy-api/cm-api/v48` # api_url: ## @param workload_username - string - required - ## The workload username + ## The Workload username. This value can be found in the `User Management` tab of the Management + ## Console in the `Workload User Name`. # workload_username: ## @param workload_password - string - required - ## The workload password + ## The Workload password. This value can be found in the `User Management` tab of the Management + ## Console in the `Workload Password`. # workload_password: diff --git a/cloudera/datadog_checks/images/create_machine_user.png b/cloudera/datadog_checks/images/create_machine_user.png new file mode 100644 index 0000000000000000000000000000000000000000..0c494dd2e93d0b4ff6a70ec045a3e2d35fee8dec GIT binary patch literal 269016 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

U3lDUPtjDX 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 literal 0 HcmV?d00001 diff --git a/cloudera/datadog_checks/images/set_workload_password.png b/cloudera/datadog_checks/images/set_workload_password.png new file mode 100644 index 0000000000000000000000000000000000000000..dc7e2951c2c8413eb16ce0ab22d212c6d25da829 GIT binary patch literal 300758 zcmbTd1yCK!wm(b=1PdM{xCD21cXxLW?ry=|gL`lf?ht~zy9EgDY+S$LoOADe_5Sr$ z<-T3BXL_W2x>v7W@>^@drz~1wk z3kk_f2ni9$JJ_0ivh&1mM!v*Qk**;r=t z4FVWe5j&9rZ7B?Y7QG%026_)>cKi?l4`eAnMywwK{gxdGk*Sr{r!OYopFG`N;RtH3 zTk@n2v!7n-KcC;C(1M9m_v~}Supw@CgZ)a>j$_9M`xe=ll0_G9pzarq`40LV<>Q$0 zFUgOxYQNq(qzAI2_t1b97u&OMN`uW*31%t$7!AZa@J8Z-a|b5`!+Ib31iC1^Adn4M zKwk)tYU z40dl#U}6yro+UUzD-`SJFNZ&edLw6p$RIfwA52Dhq(EF527z%w4|w>a7~*S zbk%td(jyEqzIbpSDER-df7#KDf+`v{P2$4+#1yMhQV*Jt(k^7kD9~HTUTzG*G0?x&e)AmBY zLR$s+q`AR7TtcX&J~mQQMH(#mrgtIA37LzzkmeclI1ntl+=@GUI^PhYX;k`-#1PG0 z=6clzdjvn2J;i$CSrG?o8A^Q@T5vyNc0uL}W&wNWf@0aDS-r)`UDuK|pf;b=$nMU~ zAuo1@=o=uXnj{hC808oP!VuBp^$kA4g;!S+Ve0iCDffDZ>Vtgyz9IIIIez2d=m7T1 z(Ze@4@All`PHgC>Dc8z98Ze(WKR-XC^=9#=c|m5vN42&Ms$IS^m{67_Kx zAR7E}^$`~k5&YlTz0Y{J`@_TzZ3W_H<6!?C9Y4Ms6fZHfpkOgHJOjTpGF8tTdyzII z-%k)>!ke)lKEV$P2Znw~jiMGFik%%GHRe)`di2K;ktN26bNNj>6?REb6(>g?T$;;S z%wQ1}E!ZwkiseU|lQ1FegrymZo;N%R{~4_Xu|iBPFL^TkGt@o!aX(mL_#^|<2r}rW zy88R1a1(t)D_Yg?L?ab-nmLGUkaPLl!(QG^;f!D=JFzDJ?sMUc2)XXv&EYedTf8Y5esreaqqOuS0OZ0J!x=geE4<$Xx@B!e|mP#d0J*FGgm9uQ@b%Bda`2Q z%7fM$@`>OH{V5@<8c!*vs!_R0^)zkG^9lLh@80W4@rm;({XY9W<~zc79Pi5BW4*`2 z+6=x9-g;kzZNtEAxxgi87I+GM5;}zpCAPvO7-I+h+&mx#f%0fPf3R{C}H_al)bKS%RTmq(XIc+;0t z$kH%U=TrIWa@5^4jMdBQKR4{vGS^4eWLRq$xsQiiZJQ*T)UO@1&3am517qx+gP$9> zzO-Io4Ps?sMYJkuc+)U#Rc2+ofPCC`jL~U1Yf8_LyON0}RgN3~v$Ap8@d8SlhSIpbd#dXYiZQpBMWZ9%# zDo!e4*iy|?tHqCW=&uX)E49JdwG5~c*C&=O0LSYjXu>~-!-!8JL^Bfncg-# z=|5jSnco;clLM{qtRw5A|9~lmb;J3LJOHHV-yCyHmQGyNd-a{lqaCR!%5kDr|_r5hnQ-ZO%JACv%7@7V0X2 zH26uvr~~0K&NgvL5<`Lu?h%d>mRDLX&F6FQ-208lxzuZ>^UjCK7F18;r)ANIWlOVsZ=SBdoOx`pd{|aqHsp%r`r*i} zg~@#PF1y{Qa?PZv%xZpq_2(+C=jL^tvZt!rDa%spw|5nBbC*ZyO{WLXzn-G%qwALs z_nb|je!SWDY`c%;Q?-E%zOBdL;tPv)VWZ)|DAyBmFKB(}!0zEb0^V%ELtSeoH2eCnzH zVp&uLrN`$Q;JtM*x|e?3h+@0i%yaJ2kGqz+>*{#g(V}K|3VOOjghrIax8SArHNGr9 zaBW>bv&xg?C zyt(nWTm>JM-ckqmquMXM3h%9l7QHY%_%_|^zF(s!jW)LF4@M98?Zcioci#I@0f?Tw z9^Tw96nE3LbDO1_hj< z0Drd}@P9oGhne&CUu6gv;2xNOl8}T1a8xpKFfp-l{A}wq1{Qh@T!66?*Kh;_LnnFt zzmZVj_Sv{Cb&=h~TeBoGf{W)Mexeglrv52v}+9Y3Yf0VF?HbxE+j5ITeLP|EUg~@eqA> zax=&V`@5eeZsz}ala1p)!vY3K_j-qpftH@`-)#d`xnHkx z%A32HSZN5GTLUx$-oeYjz|6?~SB3xQ)_-34KdP$#rz#^mGyVUp`af>{@2V<}CJsWj z*1$`hc>gnD|5W~;H~*=~P4_zX|3Qnt3H{eqfYQ9M+;sn*HC|Z3LAB4oMBkjj+DtB0-Mgwz)>{|*k+9ZuKNlVdiB+wliG z*P@KnyV12D4;||~?$l-*C@(0m&|kp*+W5brgz_|zDeQI|6M%vL*V`{zzkUMD)(F@q zelUpF?T0S}0p>#t36bC5?f*CX+hi~Zqn8U|W+bpTubW*2aNbCti~6t5{&{0Rya~X% zZh86pzy51TU6`kTUj5%s@+*>nb+MOZy`O{pi#TWUs9*FS3V(c6Bff9n1KSagf$Zyx)v_Tr^LO|sd9u9m-hg=YbD3jbiMcjup8 z{=EkNWdF;L6ksgmm@3J8W@Snl$D>m47t`V+vz^b^Ds6F(^pdZL45^- z*n+zJ_1)^9mGS4jc7uQhI3r)^B%T=6c{G(H&a}02TAIf(tT4OX%NN6MQ2^*IK^VYJ z89j*5!*BnYxj%l7pI8deH(~Zi&X3cRO2WSNi#B(Fq|?Ro8m zA(a32KWz5z1@;Gp1)y$2F7(J~?Z>H!NbqKGRPHdbV=v|;pRfqI&9a`0SK|MAM*5=f z<=bSW`o~@W&rs)qX>B$AtrU~R!KCznlj;?Io`aC(c+Duo?zk_Y!#fB6%D``4ML~`m zGR|Lu?oTH9-_QJj0vN^n%kJ1js9Y%cI^x@o9;L!d9GK#hq07Tblz* zw9E0LP}#i5WZIR2)24AG$)@gV>r%b-3W^MNqg8zw=(1}ujs5yt!Ek1!ME3af6+;NR z4E7-*^)6Fi1GdwtpN0*JKt}d1-en`e>T`+AnT|D^oNs z*V6(W&zqJ}wHO7_^7gES0Lr$TMMvUU;z|M}dVnTxgVFt7Iq<*Sygq?-Er@-o3>Kol zwtZ)mqycqvO4Vzqc4Q_ZJhd>W6dI&p#1QUH-4vb5+`BMZVJ0_Mw^wHJf!8Wz&{H@3frij2tMoiJxmy|Mb ziIA~jbYaEqiExCgF-mn>vyQRf4qI+Jg`b>fRm&7m8-H8O;;SK@1%DyS7O~wldjH=m zEih;|DKP))#@{PAP+beY{tOYlxZRqq61=(CX1}cGO6vnAEI&N7p+&Z9ph~s2k(w>~ z@#yH~Kp5d(|Hvh#W_m~)t%`AWKBenQ*|iU;(nK`#iC+7z%d=D&A=0paf`47lv-J)F zT;Rto2VxISD9nE^mBGN*fMs?B&w|*;Pk$Yw&uz@FcQ7%>)SMDCDEWaU+=(H zep}N2%E{Z*zlx6$6Qp_d^J9wV*j-v0;Q;3tR$mNQg*Whi{tf@@ck&vDuZ2Ji503F{>+ z89nF?=dGj)faTvOQfT-e%vO@r;y{@U=u==g667uHmgpZ@$ zHn8lc|6)-qSCFczS@mq;)q^lf`ktCc`7wYIso!$49EL&6sM@gL+T!SR43r`fz1wOf z@JR)s;xl%KlyTk;^-$kWkk3Rrb`ZpFwIwV*tG}s;@Y3u)V%vBH_P5X~(_V{gQ*Q+* zfVA{JW9?yn4F89vPk;pdx|#%3B2twhwCMqDd#lU$3;uJZ#!d z=4v(W?^SSJcF$rj$!4s(4911E?2K5=Q~V``u65`Ej>%FdnvGB~H9YD5`8lM)dO%uJ zg(1=~yNI!b%~F$-FJ2N3Mw3nzrM&16Btq}f;95pKN-bJTfIDFLAyR|fc4~?{f~6B* zfhu_sW^(Kv)WQ{9U)c5Zu+(73xbrnL|416F5&kDU^esQYh&O~Eg8lzM3H)!p@kI}? zc&@2r`}HMc=*O}tA?pXxg-2^4IB4hOLBsXfAAByrGoK!!b9>JjM9JBa^3Pzs&exfQuX7A}Y9w%J4;>kv@->4u06awjygj(M6M+c0lNdCnGx7>tru^ zqeXHMpHI)ephjQyVv?Mf+1o20mB=%~9#?)c;UPT{_@VSVgrcoU{Qt`kz(oLiD`#LW zB3&6`>tbJVdIp?>yn8EauoqUYmAJ@!xIX=0asvyXGSjoej-HAOOju)KLU~j~vanpqgB6a%qh+M@(-JRZ2*zsK%{DHt7t&gd*3{IbbxJsZqwvsn6b6BgWu_}7V9 zuPrJO(*H$FH@(hLdQRJM(g%nwq7tQvo<|M}-=Pm{HbT*5HM^KP?VuR*NPd_;(Kq9% z%oZ*55t2sQau8d4@P~jB{!UXvX32=^H@b5T$VmH&9(6e*kf^8gDe1FQ{c)=8N|Y^| zxTjt3C~jBEHYoO&{=sZsdS>X@bRZ(OKrInb{YO-ryQACpSKo%G`lzQPl4*+o**@F4 zg$MB{_~TaNQc51;jUQCXk8(NU&wHT?o2Ls%_s-odP;O*ltxk4Q+G{EB|HZW8p}k5L zuPF%udOVc)s5IkeI^wd9?GiIug^^<}r~6Z`uUsMyu(GKcfFLP%tzM<;{2=yLHmi~6 zkS!)&zfH!t2_9z5Xt{$*VQx-gB_-?!Qlzus%PKbH){Cb0x=vI?Uihr#RAQMuLT1!r zO4M%u6rwQNK4l)OMiN`HzPb3`<%@rz4IYec2B4vQNQijk9w=}#UnNIs2|0) zx=8SN2XqslaN&%WJ>T=~EJZ>|nh68s#w1(0>A+U-j zKCyD+UdQvo*PEzhatfu&6eaS0UOSnO+MawOi*OjU6OoHA30wyYw2?Jt<2$>nkhCjL zztNj?2pts3zB~2K*O`s;QYy4zvRGa?DC*J9{W)y#3)1fs6($CiV&K~GeZziIpIoNs z10vp6>*o_Q&RoPqQ~zqjjYr1IdCT*eeev>Pb%75S{TY zBYkJGlE{IcHeF-mx#7VSrAw!)G>^nKHd7myM3U56 zB2dd^JYe%aO}d=!uZ;#C^hzZw-5@?J8NS=>BgbSaqdPId+G#&Xt#J3LmG0?t7O_>g zC6mNn&g5xDU0-yo^ZOF_<-GQ@m2YeoAts-A(e|3ATvm8NQv9HyR|-eUXC`FmH4bKF*_dQe`@5V zhW=yW^}`hqU64XL>esj>-huh#nB%;zsib|nHG0K^O10Gc=JIwftx0biZIlw87+jnm zkpPusWc$DnF6a+BtEjLm)I{eUg*96-*Cv%8;chb;feGafm6m&gq$(hq^)oU&NX#U1}lg$lLCvV}_x;UdPIZez@gm zVz3`JPruFFl9|Ok^*j2`N1C;WocABCYVDFXOe-|CvYJ1VE$g${-0Ez4=Y9Fo3604Y z@f_~Sx5-c6fj{$>ZFjZRb^k|ho`e6lAUOFN<3Vt?RP;Na@EWAZ`hXua&`kn>e!`BO zfc#TR;n@L%>V3m&;cvgNG5x{&sc=}W(XeIag93S@P$#1=u6;3FzP?owLkh-^pS$Iu z?me3nX16BpjWw~>fZ`IR&f!FrjWWcC8>Zx{?A|$1$>4UD9P5rzwOnd4DN|RW_H4zer&SbBg!X>slCck@4)T zd{ipdt$3;7W_m$oh^}elEp+%S@)Vb0Uw;@1g=7~1Fy>xg?5AZ&fBSeItSWSu^C=Tf z$7^nrf!Hj;i{BTN!E6Bpn4UsWdp-^zn_kQ-dcfy-q|YF_{$qf23@}d7z3^DN+;A%ec-dwgU&@&i{`;mD(74-S_~B9hq;4P{haDO@!W zJodlsmN7dF3Nr>%#&yw{4APnOYrh|tW6pnf+jls4HqbK@ns^6pgL<}IyLbI5Yz7%X z#r$OR%@OcIsRyv*L#B$P(#31n^c2uPMxq|4FiZ*wg882dIm9l!`%_Daoe-=` z{fGMu#8!6IY7VW~7`r;NMlZ(JXS)&ikZM!!ysCbsg$?zPjx|*`;>#118gr!p zt09ml@%2YYqv);Cw3WCB4%TFeJW+YaxHpTdhV^>hZET*q=cW&8_8Px*UalCYBl}BZ zYRek^8TyYf=hEKYG$#9Scruw`tMjw!Qe*OKHjL6N{1{IYkn;wD8rtna zqYm0tuk18g-)sNEgwy%{eI|!%*5+oV!W?xfh1j*#S29;w!oEUKI7~!+NHk8tLhbI} zeH8XrHg?4AacsdpUnx!&WUdk6RPH77E`X7cUo_`Oe2H^QV+E3d*7e{uwM?{C$lgedfgrn2`iiu_H z%WQQuU+;LjTt4*;rTe0d_Anr^o$V11i#}kR-kmPprUrQ$5P~>8nb*IUKOmXSf z%ZHCfss6=bXTTuBy6x^}-M4rABB9|RuRnSk+j@C;*FAeI|7Q^F(vm+TgaRqX?zoxH z-WhV&Ns9Wgy(IBi_Iw(AS2JYO}G4r_vw~XZeOZpwz6xg$g;f%4vcL)ZPOv({@-ro|G($CqV}pg zo_o+Ei?W)9r^j_=zXq_O`nqol2%9+&XCm5(Zz5~apZ8hg>XpLCyR$o zF{2y0ajx;DvEoC%gjiOjvn9BbhcS%Xy@vEq4vH2%FRo`&QsrY(gVnMCbvPCroC8Z% zgtqXwUC2%b#hgSqz&S%tL4_Mv4RZos0~N3tuOF<@wW9A5iO8p!) zTdxG=k+*GGXjxnOc$XYCWA;PLWwYS``_nV6&1xx0JCzU9+lVV?U9Z$@*bT4WXM~p? zAT{O2FFLLfbQw`tT)ME;rU~D@mU+wJ+gD3?3goia$|KBma;|a6I-sxiSH{T=*UUCS zd$%ti)#>p#$ukbZeKEMG9-~36V^fcy+3dXA+jM5rN8$U;;i{fwMw}O4{y~&p^T$28 z;;)09`@zweBz$>eJ4)8AFAFy> zUM6K~?PjEs`%3nYgyTl{O%*n|@kF-CQFp1!j40YZE!7JL*Xfsf$t`evbPSgb zJqjwDufXvAMjfOc-8EHN6jZx;fnT<1CDUoMCK-`L>)1kC)}%fDU^Q6>qf+sKvH*&t z%?1GH0JJz)LokJhux6%NX=Syw?5VU_ow|~2>}N8gDD+6*&&2>x_=tb$*h#UnXT)@*X8$=r?9=j3NKiy%ZS)I*{Gs!%hpe%l&3rS} z6K&0+!yviwY0*$(o}oy@L^EhNtYF;RP%eY!E+IEy?;??^2Zh*-@5#BFbC^Q4Qd0*1 za-WW=>VivN<8f8JnE%aC95GjBG!JoYyA8Up9*FBFWhclZx%S$1u=4=!!D;OH1*fjaqigdPWj4uYiPq_vASQERlk zP%xd_-vrt@nJsSR`S7?S*|%!KhcDQD-^FCJOK3qrCEX75Dg>jC0BI-- zw`iO$k8a4FC6Cg@Bh;C)k0ZaR=e$l@dpZl6j7QTFRjD;TQx*&( zEct@ho9Rxc8{irjnwV-R8>8>IMigxFc-~Cm`yLaGrHllv55E!AZ5#@&gxHcZlP%cn z4OeWH)!8s<>Cze@30EU%h#%v1T zJdPM09ACPWdCyBSNX>wvBj`Gv;t_40dhFXB=r@<)TrlUKA`@;i(4REAZVfm>A80U{ z`gNOY<(I8K%EUc;&}6yvuYZdY#Hx%Zgin-A2rn&skt>~qs%XOz^Onn)FSEJ{qrqGz z?Sp?chE0oY1E48o|R zuHo>7mt7x8As6eZl2Ofe>M5ZRalc_4uznp~uh1kUF)HiO9!EKos;bMuJl`foXX8Wf z)XB9-ltd6xUwbsZWY_$}*yoVSWCVNOQX!esbnfMSA2RJPqBm4hrtA@1D2qcCr0GqQ z0q-$bgVv)+TSfBeQ;MqB9i$1y&sG(M)S~A0w%9~7x$Mn}Y!T%XHs?O-Qq_9cWAty- zX1NGX?~Jl+f2W*Zv>y`Hpt|l)07|E?-K&u|{GAWCGW0?9rEzmjoztWjMF;jn$u3|) zoyFx{4jtNxvp#mn;<2S=Rm$tiP*u5}tmGo+^-UeUj3$oL=vs^BiM_8s%)|St&+YQt zE{*q4DNcbWxW(l}JaZ`o+01$lPO9zHdqJ&ZI^)W-yTvw>@m~&jK^vdr!6%-t>!*a6 z54aTIe~Q_E(Rz)o1`R&Q0{9_q8YhViWo*Djc%<=K(z2irWhbb3+YY)f>GQ;2zE$BX zQySTe(Pyz6Ay_Y;L!nV9f4RRoFi#apA13|i@<&4(}=qkfDDT~{)er`0=w z3Gwmhg&{1t#%2~&ZC|d>8-9jMrY^GWjEH{<39}l%3xqg`aga9l?XV}#y7)aN@lm8u zO)ngUiz8yc+&rPgquz|ByV~nsRNZs)eW|v(#cGp5yU@!rQG#R8(Cpq&Vwv(`&~DHG zr-o^@%br`6;C0!$xUny<)YZXE{NeY5!xH_K25++T_fJ=9dhDSseeRl_vvI7CmrN#u z8L2K-cOs^DEY};m{B~PSmK|Dhxa&S4wk5~u735z0dWPrArAI6ETBegG0!yhsJdW?3 zOCML@E~G6w41 zsO|L}@ z5k0SZ?V%c_zW1(sNLO3q%&yOd6eS3_6U)k&tO!_);X%KJluyE@W)3sQ`b^XHN8n|! zW{V1=u-GpdRJ~rNt3I6HVSFX@_DJJ&X%b4(GkWoTz6;^JdW^MMYZEc3(42sqt=QJt zQZF+b)Al?&W1yfyr_q+z#;-j%sNvOp#IBIMO6zg3P(Nh*Ebr!bIJ6s2}kLdZ8?UGhVq>_gVfiMy(sa&2t zDw&eN`L-Yad=-OMxR6e=>so}%EN+g9XOEH+ zdMj-txWUQghG{sKth{DNQ>=6en7$QyD|zaG2hs%Ze{c@S4zq0~rM%SOD$u4slOQ8GOf_4LXs=^QlMN>14 z%bAuf{*FLFQWnmRyH>kkG3v1)5&~A8c@pIT7G3V?-?Ydn!-(q%K5Rc2f$H(GuqTe2fTV*cP9aMA+ zt3eC=;FCZajVmIfYm?75{J?Lo)nG_+<@O@P(Z2~9r%X}zt$Rfk&9=^3j_>KB45!=Z z>gTsBrdiz_000Sjj6jJ5?GB4! z&v_p*Z#81EdHu#rV|Y+Huici=yxta6IkpSZKl%cJ_NOuOvk4$4jXGKxBk9Ter-TIk zPW!f8qW_XH+_xPKe{CD*y8?DBG|#xowYz>3J?K7KAr^w^~2; zevPMiFVs@;D3k{3w4y``QE^M0I$4;_n_k(Sohe{l4yva%rxa|LYcOg#!>d2}35jiI z!9pXL_t?gr6*wI%WvW)`h|TtJjAlQSEa#efV+ja}MWUGD3wGM5?_RT;;f`l_@^4d- z7`y4#oH@eQBTe%lM`n)hmLK1>&`sqEh3r3Nt(J&2(jw@*?LDrDww=B|_01_&p`83V z03G65`iHfbRoC6q`mrqLM2*#4wuD{ zy#3mONo^Ii!h5@PcBa1HlhG11`P7QD13!~>bIiwIkNwGO(61IF-6X>kI7m6{o$GD8dT2WVGPxU~^vS(1~E2WAg zr7}VGIH8`^BkWVXWAX?VSB|aVj<&1+J3;ymw|x{Ijq31>XCJseN}-BGeH?Nd5h*^2 zMw``|59yhi@SO=JRLb$G-JQ=C$UGXAE8pt9^QOKZA z+VTSet(&%Ce2x3DNWqBf_vx&?y-<%)LHam$JwSRP|1UyfAm8hm{|291xRMcb{rSNb zi^YKQn9EKaVJv|w8ObZVfGnF_hC{ePMsCOqa9U0~Ug9o(4@o#%@|+IJ-veSPUthcP z8gAxdmej?l9XXQYNA&tjei#!kNm5h-O!evFP;QS#tQ0zxB!y!B_w?>{L^8QvMeP-q zAqq^>!T7=5v+b-(>10~H!n0@ZVsCZ9IR#h$dm_yB(3qm>BBTA0R3;}W<35$3o7sxp zhYJPb-=1~{MDpQ8ig$rrDs8Y%5yjF z$Z|L}3AkcE7vg3vw*#qLxp|2$9PdA$(Mx9Y@*F?&EG5J`bwX|pCsz$Hak@TpucB#u zQ3+dX2q=`!HmAUZvKYsQ|0s(L;?4UR1gG%O0EFmNEuX!*Fcj%e&Q!Iq7OEOclhkY> zj1udy{Ht*#{}>GYLHwHUz(QdbG-5CKXg7jZSzLxlX(!I-Mkij(Br|nUADa z<4a|*r*nmJHMsNf#GFkz0O~_=cwJ(SW_G4TL#HYwex*=Sq^QPUQ`0ynQyar69i&rB zqC&*sq%=aK(Eg%Md0AlBr!RS2#N!sNMYX<4ubP%h)!z z9_?dfR>^IhdFS6@N7UcTr>Ye>D7_KDhfrlJDD6?aQ7K}}E{~!ZwA%T;FHiI3=@lpK zc&GB?t|*Kzr9=Go%dNJ2v+fLpj>oWZezz1fZ>!UmXRi|H*K;Z+mtSSAVzla0NHnI1 zmnn7c^LLlTQkTQD1^@FzDmC*ij0p3=nr$L2*Y~S!?$i66_?|}$oG$u}LfL@nT}$eC zZLBvW1&=)eU@ymlK-O!w!QFTBVO5Js%8g;9h@J7gq47Y?YmvWH)Sp1v+>(Gp6*28I z0kL%;U~c|doOS5P55h@nfYw_!Bk#0w!E72dKa9||p!W$G3Rq_fK&1TCCAe6nkBf>1h1R^MTdTh368WJ~?B@0ZYn!0cp)cnr6#j+|{3>YTIoUP|} z|BAnfXGaVAJGL_XbWcu6QBrR9kXam5QW)3iasvQnW}BbJ)hD$MSyqcRiW~lr6paI) zGpWpE4Jot|-OjT{p4YYS_H4V{malP{?Iz@x>OEs3vjOQ$sahxglha}Q+vWaLiOB$! zSz0?FN>c&fWV1m>d|W22@hiyoZX0TdW^UWue7X|#>1<1GW^>k**`r5(`RvB?CXcRD zQ#4VKY6`H48a!NWP^9QPh#@?Z{4r=XrO(e{6z$)fH;<;X3D*o{(WH-HR?dxlyKA)U zAg1bKm-qBJ9;IJuGOzXW6{Pv(Rxes+xkxrNVYwN33Erh%WZ;e1wU7p{`G*Oxc-G(& zs`Rqyr1eNTg3@xk#v>9f_Hrm^u6)xl-o=sRUn3|BrHn8P4pOCpgIbHFGilk(e z;C|=4kMT@4IExZ0+PlGikx)MwJ1oVAFj5PgKzL09y@tS(>}tA(ySy)xIbu85neKQS z@_BC$rsf8~O~0~zS{RKJc73@ELBQpe^gUUT>3pe=0JI%Nzo~e3*4pt>91y|UL$Z9F z(NL6S9Tq&ASPX#mh3>m|N*39f?F{^J->=uY{k(Z2!lzPj1EnVL2sPGa=BZN?N=2h)0e<>%Tg79dfn zQib+35-4~eLHYrR+V2Th}BG`#3zr0eOTR8@nOjJ>_RBCL1WX!_-a6nq$f=qQ%? z5XV{H<&1!jEPlB{A-8$8UO&%bIh5Kac}q~|dT3g(xrJQ=mJIH4(Bzj6{H5R+EG|Dl zyh@NreJBFl-^STi#{_l%Y7~DCCRazo^#+d$4jzTVx@{DW2zoPApU3n5{k>-$geUO& zU6;(3sg~l?L29__ZX)htAZ-?p8oKYqUXbq3Oc+1082)&)Nc^O{vm$-%PtLGuDSTwx za;ZNpx!IndLIhp$Kpt(gKltJL+FM-fW!mkfn5{o_4lN}7{H7UE7-cPlP9t-Rw%7o> z@`WFTP`=O@#$v4wCXqtLUox3m0!UsRNId?)xGWks=`?yz9<%=Psit07Llo`Ya!Cr21lb zHAhBgN9KN@P@Le(T>Dluv=osDLZ>dg!uBbABudzy@M~|+8fKqZ_pio#0V1k(4p*G# zj=!K0`k_tt{q$>b_s9Uq=|Mzx%NFTikgeBJ=JiE*5b3sObbf`UI1GZ1WZ zZfrt{WV2ZltXQf`@U+FB3;y|VWB-v8$^SeE4x?DMyU*!l#hrqB{J|+nsal<8>NQCK zytkqUb-Nb>v}t~E%W&zChcWB0(t+-~Ns;>Gs^7Ubvr*B|U=N4xEdk(oN_~+6m-E*& zf30>Q0E{x>jLM`BQ>V>hw8vp7R_ouM(gp;`66j0JJEh-`L7S&fD0Lp&jLC;ijosZq zeoS6Y4uLCj)9mTNY}w{%RC`TTQR@6^8d&BZu5E518P^Ui=CStn`Jzn02?d$ z2~>|=_jE6FzjaSTnM{kOf|MFvR=_s?jqPE@Bn{JZ5c6lzF2E2ip{|0^Mrf8z*~oEh ztbgTbH`H6l0GSnj`Q~|k>G}L$NN&T3L*O`AXSN;Gzat(_MOA7?IWFEP98Q#ZvMK6` ziyve=KJ6|A_{he=b>=(sJ$|Z1aJ)9K9a5uGoxD)7Bu^c{x$iXJGI^(9yIIUYJ&u6K z5iQ%3@y$>KcKQdRXDO+>PV+sNW}6jBfplv8jx?T749|6nPHQ6~fJM!w`K&bsnT|eb z^Ip4GVJD)0G;V+OB_|7p)$&I&i9J0uQ!NsLvma7qa)r7C&)Q4uROos`wb5{u&0udEy&8~*+BEB1LUD|u z@qPVtF*7nX0r$&C%CRgSF*!AN**V#4?kwGMz45uNT|HLCvWDZ|ptVjH`6cG-&g$;D z$={@a9k**SR{%uQmBwAy3U55xjA~%}DPJ4D<_17pEDqB)ucGVc=5AZQ7(CIgh4Yz5 zt+!nZo!rQOm}L2@i}bH_Il(39F{9_hNh8_bP-!bR68BfY%l=-9ek_gq&i4ffCcc7-W#1wkz*}1|z`rxu?tE%aP`{NSWlR}Mp^sNAk~E1J zPW9{#iHaY`zwyq7#h})=1Z@M3Ft@QK?lFN^YLU_QDZmR!%P5&eot^ox0H|J- z*}B);S2e&=c?_yfW<>)NB9jBU56Vr14yx1w9;wR$WTd&?}b0#t~t2gfPu?i>8au#7hE z!zAUW#UVTzK)6NB>~0x29nM*M-1W9x4h_TO_KhQhgQEFd6c-r_ia}booOS6c+AUrh zk2(zUtoHAW#*E98*EWRqm5)A7zwh_plRM!-i*$d^%_AM4xbJw0KHd#0i*08i5P0J}uEG+FNf%Ej z8b#tm6xy4IKUA)7tAW zQz1=hEju-2NivOte2$|U>g+-27UvdBSUiTsup5_Ho;&Y(^jhEOblP__CfE@)oqy|i z*$}f>&aKtPhnu7pZB;s1X(oo)eCPDo1LKj~=g90jCf#b_Mapu>_Dv`RK`Fq)`E%db zFqdOhM72uo0y3ep2_5^SJc!PD2r=Jen#tw8*?CkSS*zzes3E{<)lzzocMUTdmO|F~ z$=>OOHiW@%1q5=|`$|p4tK-*kPedrx+zrlMF8;o&39y2gEtiZD)zF(xMztCWN44^f zNzX(p8{xh{{h2lK2FXqMH7O0M3U2t>2XO?#$aj?CYJ?<>wg#h>k_m3-Tj~C>ul3bD z(UyHD>aI4tb1P3Zq>-*V@KH`7N}>HE@VQhT<#^zdiV)zI_(9=AQ=={tsF-eOi%5Fl zNMIOh(Aq37Hj@tsUMR*LH`NVzj1-8S`n-O1g*X229bv+q^lIGwsEY@2l);X5MXpaS zch&PoX{pW}z(L;-5xd4NKVY-iV?EVdBJx}>7%}_w5DcY})OIh}&U?$jb!w9aE-*7& zKazbtI`7B5$E0#OUKPuZOeZQUiozBE62Kb|Yka!L0g%>EW4>Mp6EIiSDpwCS7Qzy~ zQi&l*CQ=p%VaP!mna-E=hkWn_k+#p3GqkHW779t%h7$@(0udynS)XSPi>LcCQ=N=C zTrNT%?4BsMA;4ud8QOc+`2W~@&!{H1ZDDv@uz-TnK>-^gy-N>>3Mx&60HGHl(xrD0 z5s@Z}^cEE9C5F(e3WQEXdW{h2B^2rHTfuYRd(YYXoSpmr{oXPB;m{|~oNM;B<|A>| z6R9360An=|?uJT$oL)5WhZpF(ke@fo=m)Kzx;KMo4L|toP(9R16tn#H*_Uzw6Jp(0 zpx*8o{>sb=#>jLFnyV?~`VQ-f(bFDquLF(BazuM9wNPu*B5h0(%ysg6wKc=+nw?va ziT^l;rkbhO-*UeFV*m2dKYYr`8(kI!2e_ z_YAhzN{bv-g5F1ma!DG2>S7rMW2&5 zK+QqK^Pc>5v+6WHh0OcO36d|XZ>h;bRSDxy{fM<(36qe1J$mM0BtyEgB|noF7vt*j zckum)61#)&@98Q^$GmElzVH?1@1vZ=mZjUq7uIbXVlTF#S0s7%4I6NN2P!A2*xtc( zL+SZ0A+>y}$=jdj{MRmk{66-!^S4h*v_EQ%&!`)8%V4QJxSWZm4wIdhdPeWFMVEda z7OTy-7a2mwYg%5#xJ(Evm8@3rdhxiRr7ini7MS9g?Obdj$iICw@oL}<+wS@5&hOiM zkG$}Im_e8n+Knu&7?k|VIO~@UeYU&$aNgFrl-7GE&XN=Cy?X66=N~smzO5~D*gYn% zfZQ2x6*}fj?D)(#jYXzGN_}e`d#q54zO-z9@0e@5-++=@E63{ zYGNNk$mcp3)ADx=;nxGU)=Ps)&q&F1YTx-FNqcTk2pGNQJ0YlK0j@O0^o58f!9QLQO63Ow&Ivlo z`|^)H7J904hd)R?N3}d?JvKf*{v`8UR5hn(5-@!g(Jt{*CNo8v!7q4vm?|6e9aF=f%RG_AV5WeZ`t+nrmd}&~L8o^=p$=PO=0v^Z{!_@HN`8oS1y-BAe-KXEs z#vJTgb1Wk=!i_$hHdDwcaP5PZ9xPXT zRVx`txfSKBjR3XVpXgKRE^OCx%=t%$r>AIRjr_}I&3NNa5*q|mOkg3#xE!12moi+i z)2}u2KBlmtsiu1}P8KMz8)9zL*PuWTf!Rz-Mki~nP35(kaj2na!+l@@2>}}e?`AxV3AB^8 zSCKA5pB@To7WD@fE91H0RG}uSVBldB|A>9!Dl!?X&EM8wBRd>a9+oT;s71lqmUn}1 z7~}QH6VX;okerX-nL*snMNnNt z_emK{z~)d}qjVR{{ESjYJc7J~{c16b=a~XzX~vgMFE>y^g-(zK=T%8?LT5Fdw|_B7 za$kGcQPUbY(SJRBRwK=`c;Uqz(O&n7utp=~{_92Z=64NEKcvfVBsN`7Qh!wr!rN#R z>^uG|s_sq(eiq8jRM#)lXi#|_eQI?O+I;!vcX_gv)AvPFUSE_^1-*}0mF9OGX%_N- z*xl&0)&e>%p*la{G>*H9zL%d&HYHu|q*0O=KOr*3uOEp>c7J<5R>|MnBb%^85N{eP z>}>F(1eN}Yj-y-hNfs!V^BD70Fkl{xrsUT{JzAew<&b=8e_QO9Xis-8BwGtPfEid*kxB!?28nV+Qa81B54OxU$Jo~SDZ zpIzAB4|3M3ve)m1pdWWA`z;K!kFJ^Ja6^&nJSvGI9qVN0^#YpPG3|O;8hwi^!cFZn zUFm5Y2p%QQ$WW)?;Pa7dCY;+VOfNR(R2o{O?^a>e<+pv?gMZlyMJqyiDAbaK3|^0I zLW8gFV2qM+UJ$NYpA3dU58>zZ-sq1ZsV7?L0 z@7EV_I$Ns~X@zQ08K7|G8PmPxGx?R^g9L44rOb6J7_eF77-{u@*u>5bgUX4dhETd_ z`J2dtWWMC-z^UA!eD-rxTlKZ--kgn8i_7NX7*glNKHpX&_L#;`LIqMhC#h9r6E87} zdue1cwB7IdJ_I+__vL(jB1xKH6Q^h!%*iNbIgp^at_6n~!L-a#(G+k=yUwCul^jtT zDp-~Q^0ch>-QIBn`T8@|k?NM68RSZDrAKv~QEw*{>96IJhbEgCR7i--G1-=PTAkIx zd$fJuTD|z#us}PI>_LoH_jcPgo#bTZM(To;h3L8bk2=5-1Wi7#R4>#LgwdbPSJxo_ zDxC>6(XtTYK@4bLY5mBGz=n}Mf`~zN9!?fBhf-U5*vAIOJ-Hr}E6Af1asE*OmsP~< zz`PYki;y`vC5d)>M3`%?W@11u7nChAF5>5HHp9U9$k@3QSud-Lh|>r*_#5+1{p9eT zlrwQGr1&uumxR;L)ah{99L1qEaF0YK84?O6B~1Dd zQcF@g3jg4UnA?>c`wDB@e=?U!BaINwZb`9W=Vm4t513QbN<7qil~)U&_+nK*X(iW5*|Mvs}Af0Efkye-)ieyW=`&$0wYq0Pcjg##qt9Va6;%sfah` z7o47GptKk+lv81)6dvnYoR4gDdTG!hIj3CE-DezSC4s32mwgTMU(B~)L|2lwnRQex zmNm=|%;{O`2AgC)_2+)nPdnbaGDxgxxxW4~|4SKtF{tnTM{D6=4F--L$=*CYerzzi zpoj4PEzbzK6ixPH7))5=TkpeNH zzQzkU6~mq0v+5;oLz^8-gV%%I^n!n3igQJ`=W_g1cj<&VF(wYNfj_$Bs0FP2b%B#1Y$~Co)YdK9eo+%v^ z=Y^x+7z+oBPMz)GP1iTW$;minj1!~oawmpqqh;BSutabt=Pgt3KE>^n4mKw)t=+aN z1&KnArz_4?{Cg5Rv#)V}nc^u%Nq*VX4I?eDtwlK~YLdvdK5f<&I)d>vbJrg~o8Rf3 zb;wQWE4M%JF46I6z9Qza8y-KE@oJjx3aZN!U$L*y zC!N%fmUu6%$YN#mq9F*WMrRRtuME$%C;K~G?>3q0WmiLK`D_OJx*phX%y&q8-)wx% z#t@&X7957R{E6)V^+Pg|oieGpM?UTZ#R!(ny_1wJh?%XGmrXpK;BJ|g!BJORz8dFg zC0NyuT0gOE>XT-qUV8swa#-FCA}fnFo>!eTNxt`Qh={0!$gmNq9t7%3{j!jZfAhZM0*3h3ZUZ#6YcnqR%C2Do$E=*L*z=cvD zPOAs|q-lzTp7CL^SV8isGJ^!_T{>$_HWbxzC!eAWQ#>769&eLxif(H;`l%(RO&j`a z6LY2^C!(XyhE?X}+w>3V z&DxlAh$oTFX7Y0>|8|45u)k@*s{E;zX0#ww>&bz-Q1(Dl$GG+7d-nqsPQ#3j!FMKj zD!`7Pvx}!%E~>=_Y{3}x%2k4gEC$TWYq=_}Sw;Evu)?VGIq$&HAL@vqfFPhz zhuzVA^2CpL=@2i~?BUtMeyV*bdomj(k}XHslK55dDvE>K+k|jh za%Y1@?Pb}#m+WyfgRCBQIeNBIyH}A%Kk~hhq@gmfTQWS!&bOMTeyRsAMI!}u)l4&< zUu1Un*E9-%)T(1dF(o1Ig+*y@uZdUO$yuF(JV>hRrPCanmUiKRM)&8YTaY5 zx##o4wfJT3xOP2*SBs=Z{$PYd6>9)tZS@CS`)+KW42w0LUVaag7i(^4m%=R_hcVxd zUUN|f;i+me^LtGh)u6InQIy0X)9Uq)OdRo*FC2YY|vVC!y;O|h&l~FNk)7GKC zwz`(Hxy5`EPqZdKe5w1vkP#Tpy#>N-r}D5lF}rURE`}ewP^j*o6AB^@^EYD6B29x7 z9kBP8FMhgCYH|M$|Ic98;zgYrK-9Qc-TxktuQakAJ@_f1>oAjmbMpZt9eok$vc{9) zxvnm=lN0TpRcCw}b+-#sZ_3T!(zBE0mFAw^C{~g!=nY-Ti2fr7dHKeTdm*XY?t6v^ zMFcL|I1kR&Yc@Uq%R_(U0=qK1D)Zc$__pVo=(LaX7oCXozPUYvkqhyak`#2<0bk8C zi`K2s?@XF-Jx=kzNl1-E1Ot67qLCU|E0`K$C`P#7O9^b8Qd4zmYw9U z8T-0C0MPg5V6K<;fTB!g1vA+_nHrQzM0)+bwC-jfcm664w@^p~q&9aR>1mY9xLDx7 zGqb`k%kA)82Wy+7lYgst6&fqQrsG*XitDLG(-60_}|>t*okriFhA zbK0zjjpcHR(`h!z=dOzb*3C-cf`&ar68jNJjGP=(?qV4%dEb{H`u@!iX)uDNmK1im z<3Y7UtCn81X|wIFhpU#R(PA1>-4D5YneoDaxZb-=+Ym%1{@daHr$};taAmbS$5v{v z#OGxCxmuGnKZ0TRbi;`#8Lyj_>=@AYr`kT7YUDd|ZSHVL1KbOoTTPV)#=-Yt$BDV) z|GjGQZv=XYAC!RhCuYv^o&&d@BW0oFR_}OUCBRQR#&zik{$t8PXQ6Luhn*4qxy)Yi zd1}+qS?0G)(PU~NQI`Gb#Q9l5-oXztaWo)4BZiHz+CBv|#KB#{7u5+u52+bg}cZr>B` zZs$kWfHhh^cUY-jJn5f14)?(MvvsyWb8WjAnh+7-YFA2uQLQT21@pm7F`^Uf4B!N* zN%zj4TedBjC0=f1D_!&ZX2;qfBl`sYVvW>n0eDDNV3`SLk`+!x8RuQk|I^I$j@>A= z-+soPn0?p&=1|eHZq+R7r@1}qFpt|0VkYu3c^(vsw?-~?^;i!s^Z`z&I>D9Sdlpk~ z=PEb31`uS#X)dj8cHGgRtBdcRX=nar(~-pF+Npi|LovtBk2dUsZ-K0&^HmPv{-2-E6%qnkNPcvO&giqOpHDfC-VGC`afUQ(fgY6hp-i2zD zY8#=NxgEcu2Vi&OJ z%jLO#51bpL zH`Iw~u9>$0lABw1~zLJLCoThN!Nxz zLVm}~AzFs3vZA98_Iszq9`rnTI)$oo#lt(@Gcec?^y;?;6Z}s7&X{SKy*HfNb8D(L z1mXAL^8Z=v{qHwh{CRMAlelvB03{NB{EN5)h`KHowIs|IxHp;NKfkZDEPW%4JmoKZ zO^wx4oF`(I`H3`3_`Z zZ;m_0!?`?a=PCU-{|j#~=zO*^=lL{Cn(=v5W&LPgAv@Z*T=QOePV$7o>-XS{@2{-d zUf?u!Opbq%SAU;7_+4Xpof0kr#uMEThhH`X+g-`y*STa{e84`<#Htmv`r`@7T=b8d z)qvRhi_7J_x)ou*BURCHG{}MEuU{9wgNa?YP<);t1N+ZGnfeWH3-bptQG`Db5nKx8 zT0L{HFpu55^0!4!8>|i%w}e&&kuZ>c>pF}3t$GTki<{P`M*nh_a()Hzv zS7BsL`0CuaxF7x2o?f+GbyA6Pc4W8uV*?9T{k9HGKV%rnBdkWuqHQ^UlnL$j+H5oT zhVOnzkT{7=kbim%1l?c@_TBGSD39ao&xgS(G-1Yd70&M*GnVg3pQj2p+wxfcKH;q2 zlmKQxquUjh9|1Gbh3EXzdBfZhkrmx)V~T_*jI1*26y#mhRo9AduXCI_cljyTdEIbm z-;&AIJ9=*>AY}-3AuY3TZLr35=Z3@g_|zFne(mRiNT;S}zTH)pX87;(DeZSO7k|w2 z{Q9F{-OR<#Vk)h%hX5-}mNLsRxNcW%P&<`Z2f7`__bWXUEBe^YpqWOn7`7YrM)Wq} zcOAw&;a(5*+eXc`SDkEp5k%M6vx?@bNX?rK)6Ny{!Ep_%4P?+YOFRI zq06g^JoTj8(*N7fSZ_ee$V@)(**Mza$U6OY6OvS|eYzs)yu{^Dt0;r8>%4kH?P(atbd(CAX@wtdT09sUlGgkA$_=dg*d|gRjol->m40r}4nCVCUi0(k}xM<|W2& z>0;6N1UeVPq^*8s;|W14gtvV|X!_9QV>=EE@plKf=tG-khcze74LJ_RM3+3C-K0Yd zEU~RgjQRTWfF+Oj8BnCwJpM-)-J5u6fWgx)te84%gmL?`%S?hWdL-d+#goawDU7TC z@(9P6$d6F7j@}gWy z{08w-n2qOFdIrCrFvd}D_)%i2;97fw%nPt}q&6T>ye$yThYh*cv~5$;v&J18oLA5O zq^tKyCX-b=<^$NH@>v$(uoHCk!=G*AE~2`U5}h-+^T)o%nTK)>^cR%p<<8ILXwUar zJJRV@(d*pcx*>+@$Ti^a=HZWfHj#xG6A(TGMT*SzBO zL4?cV*#5Fi?Pa-Ve;he_{M5Ni|MHg{L%GjovnopAWw-DO4r@Z8QIgt5l$2Xf9#<{R zO>eK1iH=L){LCJT*nYnT+1U;4Hw{W|&G)YS;+c<6(X(rt8p_3*cjjW#MNJp4-%71H zeTuQKly0NyFF^enxK+fnXAYuyJ!2H@7g!ilkj#skPIe9heX{j*X})<9G&vl?Gv3{A zJGZi4Z*^t7alrCOOaB@%Syo*)%F(Inkrj&w*f?-&>nggxyW7f-TD+bZdqKW{L!b5C zXJxu`0x8+McB=p8-2aTsXWHY(!!n;~M8}pS!57Pnn*(zko0z3~9T2ZW6#cgIF&)SP zwLI+BR6T3uyhuZ%^4Pe+x*g(VL}vfDyGM^(#65eqd?rm);4ex1&!7MsqG`_w6kPjJ z?4+txs@t`mkK2Ex?Z-xgJrJtsZ7VNObq-k5ZA__Lyg1{tJQ+&I z=5$Z1d2_5W<(0Kvnfk=|hY*&d!isXA-6zW`xk-br!2l>z@s|FOL#Zuf$HQ`yx}TB6 zuTz?D0mJBSF~2+%Cgo6Y?4l=@;3FU;fR=M1KgFn>S>kn`D1-jB0I(13pJ?-!cw}WC zJ&F-^F>ebc0-7xXNF*B?QYn%GH&u%Qh~(^qum@56v+}{4id`n!5=laN1kkEr$9n$s zX`nc%C%^&vKHn8&|0_lM^GO_!95G`%e)y~a4UjMR(F#54f7QP~{|x-g!^=mG;K>Co z?;IX5M+>N^l}xw-DaU;#*8@~gJ30OB;hW_G0hzg#(=U_2AV85Go=e91?LX{(Q#SJ1 zGZgj+X}=VO0wgmE!aRuFl}n}vbn9xJ8~e-S{fh}Y)olfit6S}TU5$9cV&a=h3X(i% zNTF5M4q&K@U%1TS3A^RMo0!XPWc;Sw-$9q-yJS2c@EaYA=Rla1<=m7=V=mV2f zeNJFqf)qM|UuF=+w>w&p|4QjUA%D3k+W=@O%G<&Y_KL~#~~e)*Ti=}*+xL=(MQKqbo|sC$6UkdvhSvRe}% znNT4#d6#%X7u_FwVusmW*eTM~=v-Dc(YU!Sv?USc%nAk2;5C%i;2=e?9yS6(&ut#{ zl0KAz79qv5-ng%mzA!b^0Be-An94bjQRiTw5_P;TH|ic=IwI<8#mEO2DG z9pCRAI+4_`05Dy~_c#Aej{XT9e=DNvvUpnh8`OQd&;3(>k1g>P{s~+FNeyjG715xj zsuJloGqLuRBu{2l433*`2zf{JJ^q8lH|c42RFOohZXdwVidsy{;R&r$!JE$N(`x*t z+}}aJ1OoQ;Tfa#ld<*17*HbIm4;l7PWcjOqp#!m0!MS$|zo~2mBqO)C>&f2%{7p>F zWPoK4j5+v_DVjP!oWE)^lNju`1BUjTS#&)FbqPf8I~PfksY?$vh~hij631|;2$q0u zlGRnLuSt;%xqPBv^t8fPh+rS;5#Kb|5-;{wl=)X0_*d`)hHmur(-2Q6cb1sW`iGi6 z_}AzD`dvT4aUrJ;pEbUI>J%gPxN|9qv9CN)^i99N`c370BF#OS!$~>rAO1Ns082@w ztG}~Pav;vyaSv{j6u=(OfdPgld>Q#o*=r!LLmVURmsU9dNfiU8RigO%OA@2#%-FuV zLnQv1Jpax5tR8UOV$Ut*6ygc3a>1Ky4J1~tlVENxJ=_2co!e*jk|*MsoazpKwv0On zO1~9w0&I{+gFjd;4fpl{QiNA7`8=bTop%_E7~lTxDmK{9w2C>0iGr~&J|f~Iv9jks zcLQ*ascjRbxzI1-RsXBwz(-d&4!EaFg=T+&>!WIRNVkQd3e`kLdd2+T?j111l!zidnN%AXg?*6m_1+M{X zC8I`u(>?0^IRU<7<0QJ$Y>@S;Mc@0a`47E_7Lza-FY$M3Ow=*|c=k)i(&(Qfv4{ND z3;?<;da06(q~A(j2Ueqzz8n9WIgvn1*hS|_;>e|k=YbZ5+_1cTs6|%U04}eAco#`F zM1Tey5q_mc?+}zf6EI%VX@TK~MVh~3U+N;U5L_*~cIWWPRASQq@zZZC{!@ZPJfa*K zfXjUZ%0=+M&^Pl~F1ZX?!x%l8+5*L^Lrh=th+QE}1;%?YsNi0!%k+lT}M zz>w2_chcYHNf}t@<)RSF-^8&ZmPvVac{JEbvemaid}rMxA9vyq%eeCZuCRPh97&L8 zO8}@5LnF1rlHD4x++`_#e@H_}I`9m!ph78PaL5rkTc8aEyxis~BmuU14FI>pD1?8v z7NDS%ra$rV1WBI!;S|w3?NWQm9eO7$IPjXsnv4`_NCQWn0uihJjdVUZLIGXt<4Dqw zjsi%B>r%e^2h#tWIQ$_SVAEV3mzTmJ(xpVCU1wxS6RjB#ZKc>rvK(3}xprb%dCU4S zX$2*#1Rz_^c}=_R2@};dJNrA}lZq6Fq{@N-?Vd%ua**VfT<(H+n2Wpo&T4~cIX$o0 z8dN)YLa&6UbZw_Ds8P?pmWC~ikrm;yY+i1g^qY^ux4};=vMM=9;>;k?Ld37>U8SHU zlys@8XK6{tTf9qBg@zMm`}jxOjyB#rL{tDxG%V}nWwNBbmRO6kXn)i&PRo;`Upy|< z&fyi8!bZtWrB6AB~zps1QGXP&RK7LA587PjasxE1s|}6@wWPrPBVqZojS$G2WKO&wVQ?AYYk{QNAj!uxWc<4R{dGs#W=-?=Gz#4N@mU3 z-7x8UtMR)aJ?iCv=PkYC;`2v_g9>QchpFBsMh!-P8OzQM+FhOv<)8{pBX4=m&Xj*_7rIL z(F&;E!ZTIV0o=p(uJYARR*Wx9S`LcP+mA}?@>D7p>3GiU?ncNS(8e11sCa8-a5_$ ztS4S1&ZT$L`s<6hH+y3FdI2ZSjw5UL6HIZOWMLQD64np`6Z>8ZCDt}cftiXCOf-$j z`jYy|llySj1IrN$zW0r(|FsJs-aIDGC8m1=Yq^k6iVTA>Uy|8~S~OU%00xQoo$CLx z6=(eNRQKGomk7Es-g*`H1`9Y~MuIELj&an%iDll6_9;i+2sikf+8YnII(^QwVC zkH@0@c?HgQ!=P$s)T{HLvvIu7$S?V$+E~45C?EAuu{DDdf4OFx6hT_hZg_KZveF*k z{v`m9;y`rdTt85Ml299amQi-+D}~1au#T_T>5Zf@2NDp4*SnIe9=pqq+_%90BWo8W zQKOP`m`E5-Vlqw!va{0a?$-aw{YK&j!cP?<5)zzb|C;uV966Rtd+) z^wI}cSbbKqH@Suo-*3uToZPGQ;SoRB6?AX<=03SKWww#*8Zr@U&!loeEVva}e)Hwy zRX&?+u64>GJC;`7N*kVvrYp-zB`3f_qr1{8^)zpfb~dsM2-fQSXuORnuI0 zSW8rdK2I-Qk`w`Y`Jw$W%&M3*J={g6_{nCk6rn!4Z;h8#4Xc{-!dtoVs##lHr^A=@ zSh}DaFMKIDR2O`;yf^kX0_(VZ_=mZnN{ij;&UCm!F)mocW=@R{$LWOv^kf2xkm6OJ zXY;dV4J_mWuU=7@ zCRs(*!s5~cbGevA>d03Y|yIJrGyT>~+P8PP88ZHIG`#CJw#D$OxbVj^2KG!m(4ltM>hZ7X9_~kF#h-ZNp;C~s zxU{reT3Z|M)MUdmQ@r>_z5LvHioQKZbtG8VpO{0&8d#q*dQ2CHo$(Z+$tc$Ex{dmc(qPKWwV0nmez(&mnGOATZ>7U8&d*NS}J2}{< zqF;#(Jgw6y?rGVY&^Gjw+1}rnl<(S=fx;nqw}YzM5q^72RMNZm&iL*mZ?aQd;ZG)e z?KbF|_#_4DpgMH6beNjIc3Zc`$UQp@cG)-ylOSLs@10a$E#~dMyHpn;IKQ`H+AW5g zG+8L%xQNi^Rb5D75f?D@!MATp|{mG$f~S3uX(Vy-mmJEeitA zJ$?Vh*K42qrjC8}?owV#^~$HGV}q|@=iG96OPT@-Wxf|9Yq<1VaHYfZY^c@sp{X4> z{0JTkIgrNjGXe9abY#GUP-~P!sIW%Tv8<1X$-4Ed^))62;P?!|1HQr(CybH})J#Uc z#^i9amEn9*uJn$o{u6dnNf**;_DY^gxQ;jk^_zC7tm0R44l*8eD6%=|@SwXNE#tAW z4NNi}!J53~pP-n$$Dhk=`YQ!|6Eei~>KAw|Q)s5OR_@`; zW2_(2c*Nh67$)1tjs}pFbH>^Edol^|>8TSf!Bw(HnJ!Av&Td1NnNPYZTt;0U;6L76 z*ce2+hqh=b^HFMAzyWcy=R8I#?sjFUm@d7!?9fo$N2jO)C@J5{N`T#M`OdCsb!n|?Ag)1RzGQOpEd$pRQr}nY+Q#Dij zC&y8lDO`rYRf2EIFLNO3w-`1!>B9JiFF^xU$0mQt4r+8r3u7YKjLI~!K{r*Qg_M50Gxp`&E`g_`};_#E@lBp=@65kT35#M`kVI-Tg81^ zn~T|Mvxy}KBTn|xd&5p!zMh;gOEIzt5V#}dYuLFNaXo|@_wjgmh*`{Vd666PiNIW* zN10flH-+A1V`su17HHF#2>TRwBiZsRR;+mn5I=Kix+sbsF<`1P2| z=l{q=IGgemE`42YnL{e#4o3CYR~|=XKGr(LNX5FMO8+ZGJhSka!Bf?UC*7aarB`=9 zm+dW9wi|q!(}1H~GWR19g`nd}}gMY|>Iltxa-{$D?up>}|Bk318r442_RIF%q2G}G^|S_I zXaT}Uo~M;wMFxJ=-m=LTWGtL_SLW;m`6$j{W1!~@#dF6KOQaST7}R8TY=D2bzbA%! z{H|YM≥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 z4014E

>4Lv_Q~c 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

PdSr7Ys3a&aYrd+%6wQa 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 literal 0 HcmV?d00001 From 72e555fe55ea3927e691895b014095225842ef3c Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Fri, 9 Dec 2022 16:24:31 -0500 Subject: [PATCH 49/71] Move images directory --- .../images/create_machine_user.png | Bin .../images/set_workload_password.png | Bin .../{datadog_checks => }/images/user_management.png | Bin 3 files changed, 0 insertions(+), 0 deletions(-) rename cloudera/{datadog_checks => }/images/create_machine_user.png (100%) rename cloudera/{datadog_checks => }/images/set_workload_password.png (100%) rename cloudera/{datadog_checks => }/images/user_management.png (100%) diff --git a/cloudera/datadog_checks/images/create_machine_user.png b/cloudera/images/create_machine_user.png similarity index 100% rename from cloudera/datadog_checks/images/create_machine_user.png rename to cloudera/images/create_machine_user.png diff --git a/cloudera/datadog_checks/images/set_workload_password.png b/cloudera/images/set_workload_password.png similarity index 100% rename from cloudera/datadog_checks/images/set_workload_password.png rename to cloudera/images/set_workload_password.png diff --git a/cloudera/datadog_checks/images/user_management.png b/cloudera/images/user_management.png similarity index 100% rename from cloudera/datadog_checks/images/user_management.png rename to cloudera/images/user_management.png From c10c86992972bd9f1bdca1f08ce5b1409b666697 Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Fri, 9 Dec 2022 16:49:10 -0500 Subject: [PATCH 50/71] Add custom tag support --- .../datadog_checks/cloudera/api_client_v7.py | 20 ++++++++++++++----- cloudera/datadog_checks/cloudera/check.py | 11 +++++++--- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/cloudera/datadog_checks/cloudera/api_client_v7.py b/cloudera/datadog_checks/cloudera/api_client_v7.py index 8fc0e6964575a..7028ede3c5d84 100644 --- a/cloudera/datadog_checks/cloudera/api_client_v7.py +++ b/cloudera/datadog_checks/cloudera/api_client_v7.py @@ -25,15 +25,20 @@ def _collect_clusters(self): self._log.debug('cluster_name: %s', cluster_name) self._log.debug('cluster: %s', cluster) - tags = self._collect_cluster_tags(cluster) + tags = self._collect_cluster_tags(cluster, self._check.config.tags) self._collect_cluster_metrics(cluster_name, tags) self._collect_cluster_service_check(cluster, tags) self._collect_hosts(cluster_name) @staticmethod - def _collect_cluster_tags(cluster): - return [f"{cluster_tag.name}:{cluster_tag.value}" for cluster_tag in cluster.tags] + def _collect_cluster_tags(cluster, custom_tags): + cluster_tags = [f"{cluster_tag.name}:{cluster_tag.value}" for cluster_tag in cluster.tags] + + for custom_tag in custom_tags: + cluster_tags.append(custom_tag) + + return cluster_tags def _collect_cluster_service_check(self, cluster, tags): cluster_entity_status = ENTITY_STATUS[cluster.entity_status] @@ -53,7 +58,7 @@ def _collect_hosts(self, cluster_name): self._log.debug("Full hosts response:") self._log.debug(list_hosts_response) for host in list_hosts_response.items: - tags = self._collect_host_tags(host) + tags = self._collect_host_tags(host, self._check.config.tags) if host.host_id: self._collect_host_metrics(host, tags) @@ -61,7 +66,8 @@ def _collect_hosts(self, cluster_name): self._collect_disk_metrics(host, tags) self._collect_host_service_check(host, tags) - def _collect_host_tags(self, host): + @staticmethod + def _collect_host_tags(host, custom_tags): tags = [ f'cloudera_rack_id:{host.rack_id}', f'cloudera_cluster:{host.cluster_ref.cluster_name}', @@ -71,6 +77,10 @@ def _collect_host_tags(self, host): if host_tags: for host_tag in host_tags: tags.append(f"{host_tag.name}:{host_tag.value}") + + for custom_tag in custom_tags: + tags.append(custom_tag) + return tags def _collect_host_service_check(self, host, tags): diff --git a/cloudera/datadog_checks/cloudera/check.py b/cloudera/datadog_checks/cloudera/check.py index 6d947a1c0dbd0..21501ceeafc51 100644 --- a/cloudera/datadog_checks/cloudera/check.py +++ b/cloudera/datadog_checks/cloudera/check.py @@ -26,22 +26,27 @@ def __init__(self, name, init_config, instances): @AgentCheck.metadata_entrypoint def _create_client(self): + self.can_connect_tags = [f'api_url={self.config.api_url}'] + + for tag in self.config.tags: + self.can_connect_tags.append(tag) + try: self.client = make_api_client(self, self.config) except Exception as e: message = f"Cloudera API Client is none: {e}" self.service_check( - CAN_CONNECT, AgentCheck.CRITICAL, message=message, tags=[f'api_url={self.config.api_url}'] + CAN_CONNECT, AgentCheck.CRITICAL, message=message, tags=self.can_connect_tags ) raise def check(self, _): try: self.client.collect_data() - self.service_check(CAN_CONNECT, AgentCheck.OK, tags=[f'api_url={self.config.api_url}']) + self.service_check(CAN_CONNECT, AgentCheck.OK, tags=self.can_connect_tags) except Exception as e: message = f'Cloudera check raised an exception: {e}' self.service_check( - CAN_CONNECT, AgentCheck.CRITICAL, message=message, tags=[f'api_url={self.config.api_url}'] + CAN_CONNECT, AgentCheck.CRITICAL, message=message, tags=self.can_connect_tags ) self.log.error(message) From abd1082b4b09acb2fbe7987183dc8d8977f8044a Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Fri, 9 Dec 2022 17:01:31 -0500 Subject: [PATCH 51/71] Fix style --- cloudera/datadog_checks/cloudera/api_client_v7.py | 2 +- cloudera/datadog_checks/cloudera/check.py | 10 +++------- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/cloudera/datadog_checks/cloudera/api_client_v7.py b/cloudera/datadog_checks/cloudera/api_client_v7.py index 7028ede3c5d84..8dca58c42b99e 100644 --- a/cloudera/datadog_checks/cloudera/api_client_v7.py +++ b/cloudera/datadog_checks/cloudera/api_client_v7.py @@ -37,7 +37,7 @@ def _collect_cluster_tags(cluster, custom_tags): for custom_tag in custom_tags: cluster_tags.append(custom_tag) - + return cluster_tags def _collect_cluster_service_check(self, cluster, tags): diff --git a/cloudera/datadog_checks/cloudera/check.py b/cloudera/datadog_checks/cloudera/check.py index 21501ceeafc51..b365ee0a62ace 100644 --- a/cloudera/datadog_checks/cloudera/check.py +++ b/cloudera/datadog_checks/cloudera/check.py @@ -27,7 +27,7 @@ def __init__(self, name, init_config, instances): @AgentCheck.metadata_entrypoint def _create_client(self): self.can_connect_tags = [f'api_url={self.config.api_url}'] - + for tag in self.config.tags: self.can_connect_tags.append(tag) @@ -35,9 +35,7 @@ def _create_client(self): self.client = make_api_client(self, self.config) except Exception as e: message = f"Cloudera API Client is none: {e}" - self.service_check( - CAN_CONNECT, AgentCheck.CRITICAL, message=message, tags=self.can_connect_tags - ) + self.service_check(CAN_CONNECT, AgentCheck.CRITICAL, message=message, tags=self.can_connect_tags) raise def check(self, _): @@ -46,7 +44,5 @@ def check(self, _): self.service_check(CAN_CONNECT, AgentCheck.OK, tags=self.can_connect_tags) except Exception as e: message = f'Cloudera check raised an exception: {e}' - self.service_check( - CAN_CONNECT, AgentCheck.CRITICAL, message=message, tags=self.can_connect_tags - ) + self.service_check(CAN_CONNECT, AgentCheck.CRITICAL, message=message, tags=self.can_connect_tags) self.log.error(message) From 67243ebe8147c443639eece7b2fee1a6cad02e05 Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Mon, 12 Dec 2022 14:12:37 -0500 Subject: [PATCH 52/71] Add custom tag tests --- cloudera/tests/common.py | 12 +++++ cloudera/tests/test_integration.py | 31 ++++++++++-- cloudera/tests/test_unit.py | 75 ++++++++++++++++++------------ 3 files changed, 83 insertions(+), 35 deletions(-) diff --git a/cloudera/tests/common.py b/cloudera/tests/common.py index 6aabaa2896f43..c307669eaed8f 100644 --- a/cloudera/tests/common.py +++ b/cloudera/tests/common.py @@ -9,7 +9,19 @@ 'workload_username': '~', 'workload_password': '~', 'api_url': 'http://localhost:8080/api/v48/', + 'tags': ['test1'], } HERE = get_here() COMPOSE_FILE = os.path.join(HERE, 'docker', 'docker-compose.yaml') + +CAN_CONNECT_TAGS = [ + 'api_url=http://localhost:8080/api/v48/', + 'test1', +] +CLUSTER_HEALTH_TAGS = [ + '_cldr_cb_clustertype:Data Hub', + '_cldr_cb_origin:cloudbreak', + 'cloudera_cluster:cod--qfdcinkqrzw', + 'test1', +] diff --git a/cloudera/tests/test_integration.py b/cloudera/tests/test_integration.py index 87297fcb0e074..96ed0da5513b4 100644 --- a/cloudera/tests/test_integration.py +++ b/cloudera/tests/test_integration.py @@ -1,7 +1,9 @@ import pytest from datadog_checks.cloudera import ClouderaCheck -from datadog_checks.cloudera.metrics import METRICS +from datadog_checks.cloudera.metrics import METRICS, TIMESERIES_METRICS + +from .common import CAN_CONNECT_TAGS, CLUSTER_HEALTH_TAGS @pytest.mark.usefixtures('dd_environment') @@ -36,10 +38,31 @@ def test_given_api_v48_endpoint_when_check_runs_then_service_check_ok_and_metric # Then for category, metrics in METRICS.items(): for metric in metrics: - aggregator.assert_metric(f'cloudera.{category}.{metric}') - aggregator.assert_service_check('cloudera.can_connect', ClouderaCheck.OK) + aggregator.assert_metric(f'cloudera.{category}.{metric}', at_least=1) + aggregator.assert_metric_has_tag_prefix(f'cloudera.{category}.{metric}', "cloudera_cluster") + aggregator.assert_metric_has_tag(f'cloudera.{category}.{metric}', "test1") + + # Only non-cluster metrics have rack_id tags + if category != 'cluster': + aggregator.assert_metric_has_tag_prefix(f'cloudera.{category}.{metric}', "cloudera_rack_id") + + # All timeseries metrics should have cloudera_{category} tag + for category, metrics in TIMESERIES_METRICS.items(): + for metric in metrics: + aggregator.assert_metric_has_tag_prefix(f'cloudera.{category}.{metric}', f"cloudera_{category}") + + aggregator.assert_service_check( + 'cloudera.can_connect', + ClouderaCheck.OK, + tags=CAN_CONNECT_TAGS, + ) # caddy test env is supposed to be in BAD_HEALTH - aggregator.assert_service_check('cloudera.cluster.health', ClouderaCheck.CRITICAL, message="BAD_HEALTH") + aggregator.assert_service_check( + 'cloudera.cluster.health', + ClouderaCheck.CRITICAL, + message="BAD_HEALTH", + tags=CLUSTER_HEALTH_TAGS, + ) aggregator.assert_service_check('cloudera.host.health', ClouderaCheck.OK) aggregator.assert_all_metrics_covered() diff --git a/cloudera/tests/test_unit.py b/cloudera/tests/test_unit.py index f399fca9ee8d6..b91ab6d851e0c 100644 --- a/cloudera/tests/test_unit.py +++ b/cloudera/tests/test_unit.py @@ -18,6 +18,7 @@ from datadog_checks.cloudera.metrics import METRICS from datadog_checks.dev.utils import get_metadata_metrics +from .common import CAN_CONNECT_TAGS, CLUSTER_HEALTH_TAGS from .conftest import get_timeseries_resource pytestmark = [pytest.mark.unit] @@ -48,12 +49,15 @@ def test_given_cloudera_check_when_get_version_exception_from_cloudera_client_th match='Service not available', ): # Given - api_url = instance['api_url'] check = cloudera_check(instance) # When dd_run_check(check) # Then - aggregator.assert_service_check('cloudera.can_connect', AgentCheck.CRITICAL, tags=[f'api_url={api_url}']) + aggregator.assert_service_check( + 'cloudera.can_connect', + AgentCheck.CRITICAL, + tags=CAN_CONNECT_TAGS, + ) def test_given_cloudera_check_when_version_field_not_found_then_emits_critical_service( @@ -67,7 +71,6 @@ def test_given_cloudera_check_when_version_field_not_found_then_emits_critical_s match='Cloudera Manager Version is unsupported or unknown', ): # Given - api_url = instance['api_url'] check = cloudera_check(instance) # When dd_run_check(check) @@ -76,7 +79,7 @@ def test_given_cloudera_check_when_version_field_not_found_then_emits_critical_s 'cloudera.can_connect', AgentCheck.CRITICAL, message="Cloudera API Client is none: Cloudera Manager Version is unsupported or unknown: None", - tags=[f'api_url={api_url}'], + tags=CAN_CONNECT_TAGS, ) @@ -94,7 +97,6 @@ def test_given_cloudera_check_when_not_supported_version_then_emits_critical_ser match='Cloudera Manager Version is unsupported or unknown', ): # Given - api_url = instance['api_url'] check = cloudera_check(instance) # When dd_run_check(check) @@ -103,7 +105,7 @@ def test_given_cloudera_check_when_not_supported_version_then_emits_critical_ser 'cloudera.can_connect', AgentCheck.CRITICAL, message="Cloudera API Client is none: Cloudera Manager Version is unsupported or unknown: 5.0.0", - tags=[f'api_url={api_url}'], + tags=CAN_CONNECT_TAGS, ) @@ -122,7 +124,7 @@ def test_given_cloudera_check_when_supported_version_then_emits_ok_service( return_value=ApiClusterList( items=[ ApiCluster( - name="cluster_1", + name="cod--qfdcinkqrzw", entity_status="GOOD_HEALTH", tags=[ ApiEntityTag(name="_cldr_cb_clustertype", value="Data Hub"), @@ -142,21 +144,24 @@ def test_given_cloudera_check_when_supported_version_then_emits_ok_service( ApiHost( host_id='host_1', cluster_ref=ApiClusterRef( - cluster_name="cluster_1", - display_name="cluster_1", + cluster_name="cod--qfdcinkqrzw", + display_name="cod--qfdcinkqrzw", ), ) ], ), ): # Given - api_url = instance['api_url'] check = cloudera_check(instance) # When dd_run_check(check) # Then aggregator.assert_metrics_using_metadata(get_metadata_metrics(), check_submission_type=True) - aggregator.assert_service_check('cloudera.can_connect', AgentCheck.OK, tags=[f'api_url={api_url}']) + aggregator.assert_service_check( + 'cloudera.can_connect', + AgentCheck.OK, + tags=CAN_CONNECT_TAGS, + ) def test_given_cloudera_check_when_v7_read_clusters_exception_from_cloudera_client_then_emits_critical_service( @@ -173,7 +178,6 @@ def test_given_cloudera_check_when_v7_read_clusters_exception_from_cloudera_clie side_effect=ApiException('Service not available'), ): # Given - api_url = instance['api_url'] check = cloudera_check(instance) # When dd_run_check(check) @@ -181,7 +185,7 @@ def test_given_cloudera_check_when_v7_read_clusters_exception_from_cloudera_clie aggregator.assert_service_check( 'cloudera.can_connect', AgentCheck.CRITICAL, - tags=[f'api_url={api_url}'], + tags=CAN_CONNECT_TAGS, message="Cloudera check raised an exception: (Service not available)\nReason: None\n", ) @@ -201,7 +205,7 @@ def test_given_cloudera_check_when_bad_health_cluster_then_emits_cluster_health_ return_value=ApiClusterList( items=[ ApiCluster( - name="cluster_1", + name="cod--qfdcinkqrzw", entity_status="BAD_HEALTH", tags=[ ApiEntityTag(name="_cldr_cb_clustertype", value="Data Hub"), @@ -221,15 +225,14 @@ def test_given_cloudera_check_when_bad_health_cluster_then_emits_cluster_health_ ApiHost( host_id='host_1', cluster_ref=ApiClusterRef( - cluster_name="cluster_1", - display_name="cluster_1", + cluster_name="cod--qfdcinkqrzw", + display_name="cod--qfdcinkqrzw", ), ) ], ), ): # Given - api_url = instance['api_url'] check = cloudera_check(instance) # When dd_run_check(check) @@ -237,9 +240,13 @@ def test_given_cloudera_check_when_bad_health_cluster_then_emits_cluster_health_ aggregator.assert_service_check( 'cloudera.cluster.health', AgentCheck.CRITICAL, - tags=['_cldr_cb_clustertype:Data Hub', '_cldr_cb_origin:cloudbreak', 'cloudera_cluster:cluster_1'], + tags=CLUSTER_HEALTH_TAGS, + ) + aggregator.assert_service_check( + 'cloudera.can_connect', + AgentCheck.OK, + tags=CAN_CONNECT_TAGS, ) - aggregator.assert_service_check('cloudera.can_connect', AgentCheck.OK, tags=[f'api_url={api_url}']) def test_given_cloudera_check_when_good_health_cluster_then_emits_cluster_health_ok( @@ -257,7 +264,7 @@ def test_given_cloudera_check_when_good_health_cluster_then_emits_cluster_health return_value=ApiClusterList( items=[ ApiCluster( - name="cluster_1", + name="cod--qfdcinkqrzw", entity_status="GOOD_HEALTH", tags=[ ApiEntityTag(name="_cldr_cb_clustertype", value="Data Hub"), @@ -277,15 +284,14 @@ def test_given_cloudera_check_when_good_health_cluster_then_emits_cluster_health ApiHost( host_id='host_1', cluster_ref=ApiClusterRef( - cluster_name="cluster_1", - display_name="cluster_1", + cluster_name="cod--qfdcinkqrzw", + display_name="cod--qfdcinkqrzw", ), ) ], ), ): # Given - api_url = instance['api_url'] check = cloudera_check(instance) # When dd_run_check(check) @@ -293,9 +299,13 @@ def test_given_cloudera_check_when_good_health_cluster_then_emits_cluster_health aggregator.assert_service_check( 'cloudera.cluster.health', AgentCheck.OK, - tags=['_cldr_cb_clustertype:Data Hub', '_cldr_cb_origin:cloudbreak', 'cloudera_cluster:cluster_1'], + tags=CLUSTER_HEALTH_TAGS, + ) + aggregator.assert_service_check( + 'cloudera.can_connect', + AgentCheck.OK, + tags=CAN_CONNECT_TAGS, ) - aggregator.assert_service_check('cloudera.can_connect', AgentCheck.OK, tags=[f'api_url={api_url}']) def test_given_cloudera_check_when_good_health_cluster_then_emits_cluster_metrics( @@ -313,7 +323,7 @@ def test_given_cloudera_check_when_good_health_cluster_then_emits_cluster_metric return_value=ApiClusterList( items=[ ApiCluster( - name="cluster_1", + name="cod--qfdcinkqrzw", entity_status="GOOD_HEALTH", tags=[ ApiEntityTag(name="_cldr_cb_clustertype", value="Data Hub"), @@ -333,8 +343,8 @@ def test_given_cloudera_check_when_good_health_cluster_then_emits_cluster_metric ApiHost( host_id='host_1', cluster_ref=ApiClusterRef( - cluster_name="cluster_1", - display_name="cluster_1", + cluster_name="cod--qfdcinkqrzw", + display_name="cod--qfdcinkqrzw", ), num_cores=8, num_physical_cores=4, @@ -344,7 +354,6 @@ def test_given_cloudera_check_when_good_health_cluster_then_emits_cluster_metric ), ): # Given - api_url = instance['api_url'] check = cloudera_check(instance) # When dd_run_check(check) @@ -353,9 +362,13 @@ def test_given_cloudera_check_when_good_health_cluster_then_emits_cluster_metric for metric in metrics: aggregator.assert_metric(f'cloudera.{category}.{metric}') - aggregator.assert_service_check('cloudera.can_connect', AgentCheck.OK, tags=[f'api_url={api_url}']) + aggregator.assert_service_check( + 'cloudera.can_connect', + AgentCheck.OK, + tags=CAN_CONNECT_TAGS, + ) aggregator.assert_service_check( 'cloudera.cluster.health', AgentCheck.OK, - tags=['_cldr_cb_clustertype:Data Hub', '_cldr_cb_origin:cloudbreak', 'cloudera_cluster:cluster_1'], + tags=CLUSTER_HEALTH_TAGS, ) From f8e4c7eacef88c104801df37822283cd4a50f8a0 Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Mon, 12 Dec 2022 14:22:44 -0500 Subject: [PATCH 53/71] Fix test for e2e test --- cloudera/tests/test_e2e.py | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/cloudera/tests/test_e2e.py b/cloudera/tests/test_e2e.py index 4a08e2f651928..10c78dc2589b7 100644 --- a/cloudera/tests/test_e2e.py +++ b/cloudera/tests/test_e2e.py @@ -1,7 +1,9 @@ import pytest from datadog_checks.cloudera import ClouderaCheck -from datadog_checks.cloudera.metrics import METRICS +from datadog_checks.cloudera.metrics import METRICS, TIMESERIES_METRICS + +from .common import CAN_CONNECT_TAGS, CLUSTER_HEALTH_TAGS @pytest.mark.e2e @@ -12,9 +14,30 @@ def test_e2e(dd_agent_check, instance): # Then for category, metrics in METRICS.items(): for metric in metrics: - aggregator.assert_metric(f'cloudera.{category}.{metric}') - aggregator.assert_service_check('cloudera.can_connect', ClouderaCheck.OK) + aggregator.assert_metric(f'cloudera.{category}.{metric}', at_least=1) + aggregator.assert_metric_has_tag_prefix(f'cloudera.{category}.{metric}', "cloudera_cluster") + aggregator.assert_metric_has_tag(f'cloudera.{category}.{metric}', "test1") + + # Only non-cluster metrics have rack_id tags + if category != 'cluster': + aggregator.assert_metric_has_tag_prefix(f'cloudera.{category}.{metric}', "cloudera_rack_id") + + # All timeseries metrics should have cloudera_{category} tag + for category, metrics in TIMESERIES_METRICS.items(): + for metric in metrics: + aggregator.assert_metric_has_tag_prefix(f'cloudera.{category}.{metric}', f"cloudera_{category}") + + aggregator.assert_service_check( + 'cloudera.can_connect', + ClouderaCheck.OK, + tags=CAN_CONNECT_TAGS, + ) # caddy test env is supposed to be in BAD_HEALTH - aggregator.assert_service_check('cloudera.cluster.health', ClouderaCheck.CRITICAL, message="BAD_HEALTH") + aggregator.assert_service_check( + 'cloudera.cluster.health', + ClouderaCheck.CRITICAL, + message="BAD_HEALTH", + tags=CLUSTER_HEALTH_TAGS, + ) aggregator.assert_service_check('cloudera.host.health', ClouderaCheck.OK) aggregator.assert_all_metrics_covered() From 8b6f2ebcf966b76c65d7e6f6be42eb1b4a58d6dd Mon Sep 17 00:00:00 2001 From: jose-manuel-almaza Date: Tue, 13 Dec 2022 16:52:12 +0100 Subject: [PATCH 54/71] Run cloudera manager requests in parallel (#13499) * Added multithread * Add hidden config for max connection pool size * Added 'dd_environment' to test_metadata * Update config Co-authored-by: Andrew Zhang --- cloudera/assets/configuration/spec.yaml | 7 +++ .../cloudera/api_client_factory.py | 3 +- .../datadog_checks/cloudera/api_client_v7.py | 57 ++++++++++--------- .../cloudera/config_models/defaults.py | 4 ++ .../cloudera/config_models/instance.py | 1 + cloudera/tests/conftest.py | 2 +- cloudera/tests/test_integration.py | 1 + 7 files changed, 47 insertions(+), 28 deletions(-) diff --git a/cloudera/assets/configuration/spec.yaml b/cloudera/assets/configuration/spec.yaml index daf4d7633353e..90fa0ac9f1379 100644 --- a/cloudera/assets/configuration/spec.yaml +++ b/cloudera/assets/configuration/spec.yaml @@ -35,3 +35,10 @@ files: required: true value: type: string + - name: max_parallel_requests + description: | + The maximum number of requests to Cloudera Manager that are allowed in parallel. + hidden: true + value: + type: integer + example: 100 diff --git a/cloudera/datadog_checks/cloudera/api_client_factory.py b/cloudera/datadog_checks/cloudera/api_client_factory.py index b18a57a5b4230..c2d8ad5e9d9e9 100644 --- a/cloudera/datadog_checks/cloudera/api_client_factory.py +++ b/cloudera/datadog_checks/cloudera/api_client_factory.py @@ -1,4 +1,5 @@ import cm_client +import cm_client.rest import packaging.version from datadog_checks.base import ConfigurationError @@ -9,7 +10,7 @@ def make_api_client(check, config): cm_client.configuration.username = config.workload_username cm_client.configuration.password = config.workload_password api_client = cm_client.ApiClient(config.api_url) - + api_client.rest_client = cm_client.rest.RESTClientObject(maxsize=(config.max_connection_pool_size)) check.log.debug('Getting version from cloudera[%s]', config.api_url) cloudera_manager_resource_api = cm_client.ClouderaManagerResourceApi(api_client) get_version_response = cloudera_manager_resource_api.get_version() diff --git a/cloudera/datadog_checks/cloudera/api_client_v7.py b/cloudera/datadog_checks/cloudera/api_client_v7.py index 8dca58c42b99e..212f0a482d48d 100644 --- a/cloudera/datadog_checks/cloudera/api_client_v7.py +++ b/cloudera/datadog_checks/cloudera/api_client_v7.py @@ -1,3 +1,5 @@ +from concurrent.futures import ThreadPoolExecutor + import cm_client from datadog_checks.base import AgentCheck @@ -20,16 +22,17 @@ def _collect_clusters(self): read_clusters_response = clusters_resource_api.read_clusters(cluster_type='any', view='full') self._log.debug("Full clusters response:") self._log.debug(read_clusters_response) - for cluster in read_clusters_response.items: - cluster_name = cluster.name - self._log.debug('cluster_name: %s', cluster_name) - self._log.debug('cluster: %s', cluster) + with ThreadPoolExecutor(max_workers=len(read_clusters_response.items) * 3) as executor: + for cluster in read_clusters_response.items: + cluster_name = cluster.name + self._log.debug('cluster_name: %s', cluster_name) + self._log.debug('cluster: %s', cluster) - tags = self._collect_cluster_tags(cluster, self._check.config.tags) + tags = self._collect_cluster_tags(cluster, self._check.config.tags) - self._collect_cluster_metrics(cluster_name, tags) - self._collect_cluster_service_check(cluster, tags) - self._collect_hosts(cluster_name) + executor.submit(self._collect_cluster_metrics, cluster_name, tags) + executor.submit(self._collect_cluster_service_check, cluster, tags) + executor.submit(self._collect_hosts, cluster_name) @staticmethod def _collect_cluster_tags(cluster, custom_tags): @@ -50,25 +53,25 @@ def _collect_cluster_service_check(self, cluster, tags): def _collect_cluster_metrics(self, cluster_name, tags): metric_names = ','.join(f'last({metric}) AS {metric}' for metric in TIMESERIES_METRICS['cluster']) query = f'SELECT {metric_names} WHERE clusterName="{cluster_name}" AND category=CLUSTER' - self._query_time_series(query, category='cluster', tags=tags) + self._query_time_series(query, tags=tags) def _collect_hosts(self, cluster_name): clusters_resource_api = cm_client.ClustersResourceApi(self._api_client) list_hosts_response = clusters_resource_api.list_hosts(cluster_name, view='full') self._log.debug("Full hosts response:") self._log.debug(list_hosts_response) - for host in list_hosts_response.items: - tags = self._collect_host_tags(host, self._check.config.tags) - - if host.host_id: - self._collect_host_metrics(host, tags) - self._collect_role_metrics(host, tags) - self._collect_disk_metrics(host, tags) - self._collect_host_service_check(host, tags) + with ThreadPoolExecutor(max_workers=len(list_hosts_response.items) * 4) as executor: + for host in list_hosts_response.items: + tags = self._collect_host_tags(host, self._check.config.tags) + executor.submit(self._collect_host_metrics, host, tags) + executor.submit(self._collect_role_metrics, host, tags) + executor.submit(self._collect_disk_metrics, host, tags) + executor.submit(self._collect_host_service_check, host, tags) @staticmethod def _collect_host_tags(host, custom_tags): tags = [ + f'cloudera_hostname:{host.hostname}', f'cloudera_rack_id:{host.rack_id}', f'cloudera_cluster:{host.cluster_ref.cluster_name}', ] @@ -86,11 +89,12 @@ def _collect_host_tags(host, custom_tags): def _collect_host_service_check(self, host, tags): host_entity_status = ENTITY_STATUS[host.entity_status] if host.entity_status else None self._log.debug('host_entity_status: %s', host_entity_status) - self._check.service_check(HOST_HEALTH, host_entity_status, tags=tags + [f'cloudera_hostname:{host.hostname}']) + self._check.service_check(HOST_HEALTH, host_entity_status, tags=tags) def _collect_host_metrics(self, host, tags): - self._collect_host_native_metrics(host, tags) - self._collect_host_timeseries_metrics(host, tags) + with ThreadPoolExecutor(max_workers=2) as executor: + executor.submit(self._collect_host_native_metrics, host, tags) + executor.submit(self._collect_host_timeseries_metrics, host, tags) def _collect_host_native_metrics(self, host, tags): for metric in NATIVE_METRICS['host']: @@ -99,19 +103,19 @@ def _collect_host_native_metrics(self, host, tags): def _collect_host_timeseries_metrics(self, host, tags): metric_names = ','.join(f'last({metric}) AS {metric}' for metric in TIMESERIES_METRICS['host']) query = f'SELECT {metric_names} WHERE hostId="{host.host_id}" AND category=HOST' - self._query_time_series(query, category='host', tags=tags) + self._query_time_series(query, tags=tags) def _collect_role_metrics(self, host, tags): metric_names = ','.join(f'last({metric}) AS {metric}' for metric in TIMESERIES_METRICS['role']) query = f'SELECT {metric_names} WHERE hostId="{host.host_id}" AND category=ROLE' - self._query_time_series(query, category='role', tags=tags) + self._query_time_series(query, tags=tags) def _collect_disk_metrics(self, host, tags): metric_names = ','.join(f'last({metric}) AS {metric}' for metric in TIMESERIES_METRICS['disk']) query = f'SELECT {metric_names} WHERE hostId="{host.host_id}" AND category=DISK' - self._query_time_series(query, category='disk', tags=tags) + self._query_time_series(query, tags=tags) - def _query_time_series(self, query, category, tags): + def _query_time_series(self, query, tags): self._log.debug('query: %s', query) time_series_resource_api = cm_client.TimeSeriesResourceApi(self._api_client) query_time_series_response = time_series_resource_api.query_time_series(query=query) @@ -120,11 +124,12 @@ def _query_time_series(self, query, category, tags): for ts in item.time_series: self._log.debug('ts: %s', ts) metric_name = ts.metadata.alias - full_metric_name = f'{category}.{metric_name}' + category_name = ts.metadata.attributes['category'].lower() + full_metric_name = f'{category_name}.{metric_name}' for d in ts.data: value = d.value self._log.debug('full_metric_name: %s', full_metric_name) self._log.debug('value: %s', value) self._check.gauge( - full_metric_name, value, tags=tags + [f'cloudera_{category}:{ts.metadata.entity_name}'] + full_metric_name, value, tags=tags + [f'cloudera_{category_name}:{ts.metadata.entity_name}'] ) diff --git a/cloudera/datadog_checks/cloudera/config_models/defaults.py b/cloudera/datadog_checks/cloudera/config_models/defaults.py index 80f6034897177..5e9161a8a222e 100644 --- a/cloudera/datadog_checks/cloudera/config_models/defaults.py +++ b/cloudera/datadog_checks/cloudera/config_models/defaults.py @@ -22,6 +22,10 @@ def instance_empty_default_hostname(field, value): return False +def instance_max_parallel_requests(field, value): + return 100 + + def instance_metric_patterns(field, value): return get_default_field_value(field, value) diff --git a/cloudera/datadog_checks/cloudera/config_models/instance.py b/cloudera/datadog_checks/cloudera/config_models/instance.py index 1b9e135cae39c..5c93d1430852b 100644 --- a/cloudera/datadog_checks/cloudera/config_models/instance.py +++ b/cloudera/datadog_checks/cloudera/config_models/instance.py @@ -34,6 +34,7 @@ class Config: api_url: str disable_generic_tags: Optional[bool] empty_default_hostname: Optional[bool] + max_parallel_requests: Optional[int] metric_patterns: Optional[MetricPatterns] min_collection_interval: Optional[float] service: Optional[str] diff --git a/cloudera/tests/conftest.py b/cloudera/tests/conftest.py index f4f46f3744b6f..fe452b86509d4 100644 --- a/cloudera/tests/conftest.py +++ b/cloudera/tests/conftest.py @@ -61,7 +61,7 @@ def get_timeseries_resource(): data=[ ApiTimeSeriesData(value=49.7), ], - metadata=ApiTimeSeriesMetadata(entity_name=category, alias=metric), + metadata=ApiTimeSeriesMetadata(attributes={'category': category}, alias=metric), ) for metric in metrics ] diff --git a/cloudera/tests/test_integration.py b/cloudera/tests/test_integration.py index 96ed0da5513b4..b3e75eff9b697 100644 --- a/cloudera/tests/test_integration.py +++ b/cloudera/tests/test_integration.py @@ -67,6 +67,7 @@ def test_given_api_v48_endpoint_when_check_runs_then_service_check_ok_and_metric aggregator.assert_all_metrics_covered() +@pytest.mark.usefixtures('dd_environment') @pytest.mark.integration def test_metadata(cloudera_check, instance, datadog_agent, dd_run_check): check = cloudera_check(instance) From 47ab7498981e05d02f6f2bc615f1edad373d627a Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Tue, 13 Dec 2022 10:54:46 -0500 Subject: [PATCH 55/71] Fix config param --- cloudera/datadog_checks/cloudera/api_client_factory.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cloudera/datadog_checks/cloudera/api_client_factory.py b/cloudera/datadog_checks/cloudera/api_client_factory.py index c2d8ad5e9d9e9..2aaa5f6478403 100644 --- a/cloudera/datadog_checks/cloudera/api_client_factory.py +++ b/cloudera/datadog_checks/cloudera/api_client_factory.py @@ -10,7 +10,7 @@ def make_api_client(check, config): cm_client.configuration.username = config.workload_username cm_client.configuration.password = config.workload_password api_client = cm_client.ApiClient(config.api_url) - api_client.rest_client = cm_client.rest.RESTClientObject(maxsize=(config.max_connection_pool_size)) + api_client.rest_client = cm_client.rest.RESTClientObject(maxsize=(config.max_parallel_requests)) check.log.debug('Getting version from cloudera[%s]', config.api_url) cloudera_manager_resource_api = cm_client.ClouderaManagerResourceApi(api_client) get_version_response = cloudera_manager_resource_api.get_version() From 46c81c1d838585bd14ef71511950817d7261e0fc Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Thu, 15 Dec 2022 12:36:46 -0500 Subject: [PATCH 56/71] Remove io as metric type --- cloudera/metadata.csv | 4 ++-- .../datadog_checks/dev/tooling/commands/validate/metadata.py | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/cloudera/metadata.csv b/cloudera/metadata.csv index 158612b1facf5..fb6a4ec3b915a 100644 --- a/cloudera/metadata.csv +++ b/cloudera/metadata.csv @@ -38,9 +38,9 @@ cloudera.host.total_bytes_receive_rate_across_network_interfaces,gauge,,byte,sec cloudera.host.total_bytes_transmit_rate_across_network_interfaces,gauge,,byte,second,The sum of the Bytes Transmitted metric computed across all this entity's descendant Network Interface entities,0,cloudera,host total bytes transmit rate across network interfaces, cloudera.host.total_phys_mem_bytes,gauge,,byte,,Total physical memory in bytes,0,cloudera,host total phys mem bytes, cloudera.host.total_read_bytes_rate_across_disks,gauge,,byte,second,The sum of the Disk Bytes Read metric computed across all this entity's descendant Disk entities,0,cloudera,host total read bytes rate across disks, -cloudera.host.total_read_ios_rate_across_disks,gauge,,io,second,The sum of the Disk Reads metric computed across all this entity's descendant Disk entities,0,cloudera,host total read ios rate across disks, +cloudera.host.total_read_ios_rate_across_disks,gauge,,,second,The sum of the Disk Reads metric computed across all this entity's descendant Disk entities,0,cloudera,host total read ios rate across disks, cloudera.host.total_write_bytes_rate_across_disks,gauge,,byte,second,The sum of the Disk Bytes Written metric computed across all this entity's descendant Disk entities,0,cloudera,host total write bytes rate across disks, -cloudera.host.total_write_ios_rate_across_disks,gauge,,io,second,The sum of the Disk Writes metric computed across all this entity's descendant Disk entities,0,cloudera,host total write ios rate across disks, +cloudera.host.total_write_ios_rate_across_disks,gauge,,,second,The sum of the Disk Writes metric computed across all this entity's descendant Disk entities,0,cloudera,host total write ios rate across disks, cloudera.role.cpu_system_rate,gauge,,,,Total System CPU,0,cloudera,role cpu system rate, cloudera.role.cpu_user_rate,gauge,,,,Total CPU user time,0,cloudera,role cpu user rate, cloudera.role.mem_rss,gauge,,byte,,Resident memory used,0,cloudera,role mem rss, diff --git a/datadog_checks_dev/datadog_checks/dev/tooling/commands/validate/metadata.py b/datadog_checks_dev/datadog_checks/dev/tooling/commands/validate/metadata.py index 52683bb17bb97..55dcf3454fcb3 100644 --- a/datadog_checks_dev/datadog_checks/dev/tooling/commands/validate/metadata.py +++ b/datadog_checks_dev/datadog_checks/dev/tooling/commands/validate/metadata.py @@ -225,7 +225,6 @@ 'exception', 'run', 'hop', - 'io', } ALLOWED_PREFIXES = ['system', 'jvm', 'http', 'datadog', 'sftp'] From 3afab942f46c0fcd06245dd9d98adfd6a02f7a5b Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Mon, 19 Dec 2022 13:32:35 -0500 Subject: [PATCH 57/71] Apply suggestions from code review Co-authored-by: Bryce Eadie --- cloudera/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cloudera/README.md b/cloudera/README.md index a06508211f45a..5e9a04fcadb14 100644 --- a/cloudera/README.md +++ b/cloudera/README.md @@ -19,10 +19,10 @@ No additional installation is needed on your server. 1. In Cloudera Data Platform, navigate to the Management Console and click on the **User Management** tab. ![User Management][10] -2. Click on **Actions**, then **Create Machine User** to create the machine user that will query the Cloudera Manager via the Datadog Agent. +2. Click on **Actions**, then **Create Machine User** to create the machine user that queries the Cloudera Manager through the Datadog Agent. ![Create Machine User][11] -3. After the user is created, click on **Set Workload Password** if the workload password is not set yet. +3. If the workload password hasn't been set, click on **Set Workload Password** after the user is created. ![Set Workload Password][12] From f668c7bb4d7f8bcfadd55677fc201e20c2cffa52 Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Mon, 19 Dec 2022 14:31:04 -0500 Subject: [PATCH 58/71] Apply suggestions --- cloudera/README.md | 2 +- cloudera/assets/configuration/spec.yaml | 2 +- .../cloudera/api_client_factory.py | 2 +- .../datadog_checks/cloudera/api_client_v7.py | 16 +++++----------- .../cloudera/data/conf.yaml.example | 2 +- 5 files changed, 9 insertions(+), 15 deletions(-) diff --git a/cloudera/README.md b/cloudera/README.md index 5e9a04fcadb14..4ce11cade47fa 100644 --- a/cloudera/README.md +++ b/cloudera/README.md @@ -41,7 +41,7 @@ No additional installation is needed on your server. ## The URL endpoint for the Cloudera Manager API. This can be found under the Endpoints tab for ## your Data Hub to monitor. ## - ## Note: The version of the Cloudera Manager API will need to be appended at the end of the URL. + ## Note: The version of the Cloudera Manager API needs to be appended at the end of the URL. ## For example, using v48 of the API for Data Hub `cluster_1` should result with a URL similar ## to the following: ## `https://cluster1.cloudera.site/cluster_1/cdp-proxy-api/cm-api/v48` diff --git a/cloudera/assets/configuration/spec.yaml b/cloudera/assets/configuration/spec.yaml index 90fa0ac9f1379..28fe39bd68dc2 100644 --- a/cloudera/assets/configuration/spec.yaml +++ b/cloudera/assets/configuration/spec.yaml @@ -14,7 +14,7 @@ files: The URL endpoint for the Cloudera Manager API. This can be found under the Endpoints tab for your Data Hub to monitor. - Note: The version of the Cloudera Manager API will need to be appended at the end of the URL. + Note: The version of the Cloudera Manager API needs to be appended at the end of the URL. For example, using v48 of the API for Data Hub `cluster_1` should result with a URL similar to the following: `https://cluster1.cloudera.site/cluster_1/cdp-proxy-api/cm-api/v48` diff --git a/cloudera/datadog_checks/cloudera/api_client_factory.py b/cloudera/datadog_checks/cloudera/api_client_factory.py index 2aaa5f6478403..136019c9c370d 100644 --- a/cloudera/datadog_checks/cloudera/api_client_factory.py +++ b/cloudera/datadog_checks/cloudera/api_client_factory.py @@ -11,7 +11,7 @@ def make_api_client(check, config): cm_client.configuration.password = config.workload_password api_client = cm_client.ApiClient(config.api_url) api_client.rest_client = cm_client.rest.RESTClientObject(maxsize=(config.max_parallel_requests)) - check.log.debug('Getting version from cloudera[%s]', config.api_url) + check.log.debug('Getting version from cloudera API URL: %s', config.api_url) cloudera_manager_resource_api = cm_client.ClouderaManagerResourceApi(api_client) get_version_response = cloudera_manager_resource_api.get_version() check.log.debug('get_version_response: %s', get_version_response) diff --git a/cloudera/datadog_checks/cloudera/api_client_v7.py b/cloudera/datadog_checks/cloudera/api_client_v7.py index 212f0a482d48d..894bc9ea6ad06 100644 --- a/cloudera/datadog_checks/cloudera/api_client_v7.py +++ b/cloudera/datadog_checks/cloudera/api_client_v7.py @@ -20,13 +20,10 @@ def collect_data(self): def _collect_clusters(self): clusters_resource_api = cm_client.ClustersResourceApi(self._api_client) read_clusters_response = clusters_resource_api.read_clusters(cluster_type='any', view='full') - self._log.debug("Full clusters response:") - self._log.debug(read_clusters_response) + self._log.debug("Cloudera full clusters response:\n%s", read_clusters_response) with ThreadPoolExecutor(max_workers=len(read_clusters_response.items) * 3) as executor: for cluster in read_clusters_response.items: cluster_name = cluster.name - self._log.debug('cluster_name: %s', cluster_name) - self._log.debug('cluster: %s', cluster) tags = self._collect_cluster_tags(cluster, self._check.config.tags) @@ -58,8 +55,7 @@ def _collect_cluster_metrics(self, cluster_name, tags): def _collect_hosts(self, cluster_name): clusters_resource_api = cm_client.ClustersResourceApi(self._api_client) list_hosts_response = clusters_resource_api.list_hosts(cluster_name, view='full') - self._log.debug("Full hosts response:") - self._log.debug(list_hosts_response) + self._log.debug("Cloudera full hosts response:\n%s", list_hosts_response) with ThreadPoolExecutor(max_workers=len(list_hosts_response.items) * 4) as executor: for host in list_hosts_response.items: tags = self._collect_host_tags(host, self._check.config.tags) @@ -88,7 +84,7 @@ def _collect_host_tags(host, custom_tags): def _collect_host_service_check(self, host, tags): host_entity_status = ENTITY_STATUS[host.entity_status] if host.entity_status else None - self._log.debug('host_entity_status: %s', host_entity_status) + self._log.debug('Cloudera host_entity_status: %s', host_entity_status) self._check.service_check(HOST_HEALTH, host_entity_status, tags=tags) def _collect_host_metrics(self, host, tags): @@ -116,10 +112,10 @@ def _collect_disk_metrics(self, host, tags): self._query_time_series(query, tags=tags) def _query_time_series(self, query, tags): - self._log.debug('query: %s', query) + self._log.debug('Cloudera timeseries query: %s', query) time_series_resource_api = cm_client.TimeSeriesResourceApi(self._api_client) query_time_series_response = time_series_resource_api.query_time_series(query=query) - self._log.debug('query_time_series_response: %s', query_time_series_response) + self._log.debug('Cloudera query_time_series_response: %s', query_time_series_response) for item in query_time_series_response.items: for ts in item.time_series: self._log.debug('ts: %s', ts) @@ -128,8 +124,6 @@ def _query_time_series(self, query, tags): full_metric_name = f'{category_name}.{metric_name}' for d in ts.data: value = d.value - self._log.debug('full_metric_name: %s', full_metric_name) - self._log.debug('value: %s', value) self._check.gauge( full_metric_name, value, tags=tags + [f'cloudera_{category_name}:{ts.metadata.entity_name}'] ) diff --git a/cloudera/datadog_checks/cloudera/data/conf.yaml.example b/cloudera/datadog_checks/cloudera/data/conf.yaml.example index c798bef0b351d..c3164d977529f 100644 --- a/cloudera/datadog_checks/cloudera/data/conf.yaml.example +++ b/cloudera/datadog_checks/cloudera/data/conf.yaml.example @@ -58,7 +58,7 @@ instances: ## The URL endpoint for the Cloudera Manager API. This can be found under the Endpoints tab for ## your Data Hub to monitor. ## - ## Note: The version of the Cloudera Manager API will need to be appended at the end of the URL. + ## Note: The version of the Cloudera Manager API needs to be appended at the end of the URL. ## For example, using v48 of the API for Data Hub `cluster_1` should result with a URL similar ## to the following: ## `https://cluster1.cloudera.site/cluster_1/cdp-proxy-api/cm-api/v48` From 30dfbbf87a26e1dc16f4eafde0e3a74e67da2e6c Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Mon, 19 Dec 2022 16:18:05 -0500 Subject: [PATCH 59/71] Apply suggestion --- cloudera/datadog_checks/cloudera/api_client_factory.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/cloudera/datadog_checks/cloudera/api_client_factory.py b/cloudera/datadog_checks/cloudera/api_client_factory.py index 136019c9c370d..6d0e4d4c25b19 100644 --- a/cloudera/datadog_checks/cloudera/api_client_factory.py +++ b/cloudera/datadog_checks/cloudera/api_client_factory.py @@ -13,13 +13,16 @@ def make_api_client(check, config): api_client.rest_client = cm_client.rest.RESTClientObject(maxsize=(config.max_parallel_requests)) check.log.debug('Getting version from cloudera API URL: %s', config.api_url) cloudera_manager_resource_api = cm_client.ClouderaManagerResourceApi(api_client) - get_version_response = cloudera_manager_resource_api.get_version() + try: + get_version_response = cloudera_manager_resource_api.get_version() + except Exception: + check.log.warn("Unable to get the version of Cloudera Manager, please check that the URL is valid and API version is appended at the end") + raise check.log.debug('get_version_response: %s', get_version_response) response_version = get_version_response.version if response_version: cloudera_version = packaging.version.parse(response_version) check.log.debug('Cloudera Manager Version: %s', cloudera_version) - check.log.debug('micro: %s', cloudera_version.micro) if cloudera_version.major == 7: version_raw = str(cloudera_version) version_parts = { From d7b104721d64e9dacc22922a5d2cfb7ff87fd697 Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Mon, 19 Dec 2022 16:20:02 -0500 Subject: [PATCH 60/71] Fix style --- cloudera/datadog_checks/cloudera/api_client_factory.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cloudera/datadog_checks/cloudera/api_client_factory.py b/cloudera/datadog_checks/cloudera/api_client_factory.py index 6d0e4d4c25b19..df42acb2ebb2d 100644 --- a/cloudera/datadog_checks/cloudera/api_client_factory.py +++ b/cloudera/datadog_checks/cloudera/api_client_factory.py @@ -16,7 +16,10 @@ def make_api_client(check, config): try: get_version_response = cloudera_manager_resource_api.get_version() except Exception: - check.log.warn("Unable to get the version of Cloudera Manager, please check that the URL is valid and API version is appended at the end") + check.log.warning( + "Unable to get the version of Cloudera Manager, please check that the URL is valid and API version \ + is appended at the end" + ) raise check.log.debug('get_version_response: %s', get_version_response) response_version = get_version_response.version From 360aec716e20aa7aa697438008f7bfba95a03982 Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Mon, 19 Dec 2022 16:22:13 -0500 Subject: [PATCH 61/71] Update cloudera/README.md Co-authored-by: Bryce Eadie --- cloudera/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cloudera/README.md b/cloudera/README.md index 4ce11cade47fa..06a6d1655b24c 100644 --- a/cloudera/README.md +++ b/cloudera/README.md @@ -104,7 +104,7 @@ Need help? Contact [Datadog support][9]. [1]: https://www.cloudera.com/products/cloudera-data-platform.html [2]: https://app.datadoghq.com/account/settings#agent -[3]: https://docs.datadoghq.com/agent/kubernetes/integrations/ +[3]: https://docs.datadoghq.com/containers/kubernetes/integrations/ [4]: https://github.com/DataDog/integrations-core/blob/master/cloudera/datadog_checks/cloudera/data/conf.yaml.example [5]: https://docs.datadoghq.com/agent/guide/agent-commands/#start-stop-and-restart-the-agent [6]: https://docs.datadoghq.com/agent/guide/agent-commands/#agent-status-and-information From e52c3d66f6f5ce125f84a50c358e34ab3a00fccc Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Mon, 19 Dec 2022 16:22:47 -0500 Subject: [PATCH 62/71] Update cloudera/README.md Co-authored-by: Bryce Eadie --- cloudera/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cloudera/README.md b/cloudera/README.md index 06a6d1655b24c..f1ee557fc5974 100644 --- a/cloudera/README.md +++ b/cloudera/README.md @@ -68,7 +68,7 @@ No additional installation is needed on your server. #### Containerized -For containerized environments, see the [Autodiscovery Integration Templates][9] for guidance on applying the parameters below. +For containerized environments, see the [Autodiscovery Integration Templates][3] for guidance on applying the parameters below. | Parameter | Value | | -------------------- | ---------------------------------------------------------------------------------------------------------------- | From ca605823b2f256804bc08f2052d128fa64adc3e5 Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Tue, 20 Dec 2022 14:14:26 -0500 Subject: [PATCH 63/71] Apply suggestions --- cloudera/README.md | 6 +- cloudera/assets/configuration/spec.yaml | 2 +- cloudera/assets/service_checks.json | 99 +++++++++---------- .../datadog_checks/cloudera/api_client.py | 7 +- .../cloudera/api_client_factory.py | 8 +- .../datadog_checks/cloudera/api_client_v7.py | 20 ++-- cloudera/datadog_checks/cloudera/check.py | 9 +- .../datadog_checks/cloudera/entity_status.py | 26 ++--- cloudera/tests/test_unit.py | 14 +-- 9 files changed, 87 insertions(+), 104 deletions(-) diff --git a/cloudera/README.md b/cloudera/README.md index f1ee557fc5974..03867e93920a6 100644 --- a/cloudera/README.md +++ b/cloudera/README.md @@ -29,7 +29,7 @@ No additional installation is needed on your server. #### Host -1. Edit the `cloudera.d/conf.yaml` file, in the `conf.d/` folder at the root of your Agent's configuration directory to start collecting your Cloudera cluster and host data. See the [sample cloudera.d/conf.yaml][4] for all available configuration options. +1. Edit the `cloudera.d/conf.yaml` file, in the `conf.d/` folder at the root of your Agent's configuration directory to start collecting your Cloudera cluster and host data. See the [sample cloudera.d/conf.yaml][4] for all available configuration options. Note that the `api_url` should contain the API version at the end. ```yaml init_config: @@ -68,7 +68,7 @@ No additional installation is needed on your server. #### Containerized -For containerized environments, see the [Autodiscovery Integration Templates][3] for guidance on applying the parameters below. +For containerized environments, see the [Autodiscovery Integration Templates][9] for guidance on applying the parameters below. | Parameter | Value | | -------------------- | ---------------------------------------------------------------------------------------------------------------- | @@ -104,7 +104,7 @@ Need help? Contact [Datadog support][9]. [1]: https://www.cloudera.com/products/cloudera-data-platform.html [2]: https://app.datadoghq.com/account/settings#agent -[3]: https://docs.datadoghq.com/containers/kubernetes/integrations/ +[3]: https://docs.datadoghq.com/agent/kubernetes/integrations/ [4]: https://github.com/DataDog/integrations-core/blob/master/cloudera/datadog_checks/cloudera/data/conf.yaml.example [5]: https://docs.datadoghq.com/agent/guide/agent-commands/#start-stop-and-restart-the-agent [6]: https://docs.datadoghq.com/agent/guide/agent-commands/#agent-status-and-information diff --git a/cloudera/assets/configuration/spec.yaml b/cloudera/assets/configuration/spec.yaml index 28fe39bd68dc2..c1e4e448b74f2 100644 --- a/cloudera/assets/configuration/spec.yaml +++ b/cloudera/assets/configuration/spec.yaml @@ -7,7 +7,6 @@ files: - template: init_config/default - template: instances options: - - template: instances/default - name: api_url required: true description: | @@ -42,3 +41,4 @@ files: value: type: integer example: 100 + - template: instances/default diff --git a/cloudera/assets/service_checks.json b/cloudera/assets/service_checks.json index a362c90cd3f04..f288e51666c56 100644 --- a/cloudera/assets/service_checks.json +++ b/cloudera/assets/service_checks.json @@ -1,51 +1,50 @@ [ - { - "agent_version": "7.43.0", - "integration": "Cloudera", - "check": "cloudera.can_connect", - "statuses": [ - "ok", - "critical" - ], - "groups": [ - "api_url" - ], - "name": "Cloudera Manager Can Connect", - "description": "Returns `OK` if the check is able to connect to the Cloudera Manager API and collect metrics, `CRITICAL` otherwise." - }, - { - "agent_version": "7.43.0", - "integration": "Cloudera", - "check": "cloudera.cluster.health", - "statuses": [ - "ok", - "critical", - "warning", - "unknown" - ], - "groups": [ - "cloudera_cluster" - ], - "name": "Cloudera Cluster Health", - "description": "Returns `OK` if the cluster is in good health or is starting, `WARNING` if the cluster is stopping or the health is concerning, `CRITICAL` if the cluster is down or in bad health, and `UNKNOWN` otherwise." - }, - { - "agent_version": "7.43.0", - "integration": "Cloudera", - "check": "cloudera.host.health", - "statuses": [ - "ok", - "critical", - "warning", - "unknown" - ], - "groups": [ - "cloudera_cluster", - "cloudera_rack_id", - "cloudera_hostname" - ], - "name": "Cloudera Host Health", - "description": "Returns `OK` if the host is in good health or is starting, `WARNING` if the host is stopping or the health is concerning, `CRITICAL` if the host is down or in bad health, and `UNKNOWN` otherwise." - } - ] - \ No newline at end of file + { + "agent_version": "7.43.0", + "integration": "Cloudera", + "check": "cloudera.can_connect", + "statuses": [ + "ok", + "critical" + ], + "groups": [ + "api_url" + ], + "name": "Cloudera Manager Can Connect", + "description": "Returns `OK` if the check is able to connect to the Cloudera Manager API and collect metrics, `CRITICAL` otherwise." + }, + { + "agent_version": "7.43.0", + "integration": "Cloudera", + "check": "cloudera.cluster.health", + "statuses": [ + "ok", + "critical", + "warning", + "unknown" + ], + "groups": [ + "cloudera_cluster" + ], + "name": "Cloudera Cluster Health", + "description": "Returns `OK` if the cluster is in good health or is starting, `WARNING` if the cluster is stopping or the health is concerning, `CRITICAL` if the cluster is down or in bad health, and `UNKNOWN` otherwise." + }, + { + "agent_version": "7.43.0", + "integration": "Cloudera", + "check": "cloudera.host.health", + "statuses": [ + "ok", + "critical", + "warning", + "unknown" + ], + "groups": [ + "cloudera_cluster", + "cloudera_rack_id", + "cloudera_hostname" + ], + "name": "Cloudera Host Health", + "description": "Returns `OK` if the host is in good health or is starting, `WARNING` if the host is stopping or the health is concerning, `CRITICAL` if the host is down or in bad health, and `UNKNOWN` otherwise." + } +] \ No newline at end of file diff --git a/cloudera/datadog_checks/cloudera/api_client.py b/cloudera/datadog_checks/cloudera/api_client.py index ddb6705977aea..93cd540a0afe4 100644 --- a/cloudera/datadog_checks/cloudera/api_client.py +++ b/cloudera/datadog_checks/cloudera/api_client.py @@ -1,7 +1,7 @@ -from abc import abstractmethod +from abc import ABC, abstractmethod -class ApiClient: +class ApiClient(ABC): def __init__(self, check, api_client): self._check = check self._log = check.log @@ -9,4 +9,5 @@ def __init__(self, check, api_client): @abstractmethod def collect_data(self): - raise NotImplementedError + """Collect metrics and service checks via the Cloudera API Client""" + pass diff --git a/cloudera/datadog_checks/cloudera/api_client_factory.py b/cloudera/datadog_checks/cloudera/api_client_factory.py index df42acb2ebb2d..0e0d7d57cc2e7 100644 --- a/cloudera/datadog_checks/cloudera/api_client_factory.py +++ b/cloudera/datadog_checks/cloudera/api_client_factory.py @@ -1,6 +1,6 @@ import cm_client -import cm_client.rest -import packaging.version +from cm_client.rest import RESTClientObject +from packaging.version import parse from datadog_checks.base import ConfigurationError from datadog_checks.cloudera.api_client_v7 import ApiClientV7 @@ -10,7 +10,7 @@ def make_api_client(check, config): cm_client.configuration.username = config.workload_username cm_client.configuration.password = config.workload_password api_client = cm_client.ApiClient(config.api_url) - api_client.rest_client = cm_client.rest.RESTClientObject(maxsize=(config.max_parallel_requests)) + api_client.rest_client = RESTClientObject(maxsize=(config.max_parallel_requests)) check.log.debug('Getting version from cloudera API URL: %s', config.api_url) cloudera_manager_resource_api = cm_client.ClouderaManagerResourceApi(api_client) try: @@ -24,7 +24,7 @@ def make_api_client(check, config): check.log.debug('get_version_response: %s', get_version_response) response_version = get_version_response.version if response_version: - cloudera_version = packaging.version.parse(response_version) + cloudera_version = parse(response_version) check.log.debug('Cloudera Manager Version: %s', cloudera_version) if cloudera_version.major == 7: version_raw = str(cloudera_version) diff --git a/cloudera/datadog_checks/cloudera/api_client_v7.py b/cloudera/datadog_checks/cloudera/api_client_v7.py index 894bc9ea6ad06..cb063ddefab42 100644 --- a/cloudera/datadog_checks/cloudera/api_client_v7.py +++ b/cloudera/datadog_checks/cloudera/api_client_v7.py @@ -15,12 +15,12 @@ def __init__(self, check, api_client): super(ApiClientV7, self).__init__(check, api_client) def collect_data(self): - self._collect_clusters() - - def _collect_clusters(self): clusters_resource_api = cm_client.ClustersResourceApi(self._api_client) read_clusters_response = clusters_resource_api.read_clusters(cluster_type='any', view='full') self._log.debug("Cloudera full clusters response:\n%s", read_clusters_response) + + # Use len(read_clusters_response.items) * 3 workers since + # for each cluster, we are executing 3 tasks in parallel. with ThreadPoolExecutor(max_workers=len(read_clusters_response.items) * 3) as executor: for cluster in read_clusters_response.items: cluster_name = cluster.name @@ -35,8 +35,7 @@ def _collect_clusters(self): def _collect_cluster_tags(cluster, custom_tags): cluster_tags = [f"{cluster_tag.name}:{cluster_tag.value}" for cluster_tag in cluster.tags] - for custom_tag in custom_tags: - cluster_tags.append(custom_tag) + cluster_tags.extend(custom_tags) return cluster_tags @@ -44,7 +43,7 @@ def _collect_cluster_service_check(self, cluster, tags): cluster_entity_status = ENTITY_STATUS[cluster.entity_status] message = cluster.entity_status if cluster_entity_status != AgentCheck.OK else None self._check.service_check( - CLUSTER_HEALTH, cluster_entity_status, tags=tags + [f'cloudera_cluster:{cluster.name}'], message=message + CLUSTER_HEALTH, cluster_entity_status, tags=[f'cloudera_cluster:{cluster.name}', *tags], message=message ) def _collect_cluster_metrics(self, cluster_name, tags): @@ -56,6 +55,9 @@ def _collect_hosts(self, cluster_name): clusters_resource_api = cm_client.ClustersResourceApi(self._api_client) list_hosts_response = clusters_resource_api.list_hosts(cluster_name, view='full') self._log.debug("Cloudera full hosts response:\n%s", list_hosts_response) + + # Use len(list_hosts_response.items) * 4 workers since + # for each host, we are executing 4 tasks in parallel. with ThreadPoolExecutor(max_workers=len(list_hosts_response.items) * 4) as executor: for host in list_hosts_response.items: tags = self._collect_host_tags(host, self._check.config.tags) @@ -77,8 +79,7 @@ def _collect_host_tags(host, custom_tags): for host_tag in host_tags: tags.append(f"{host_tag.name}:{host_tag.value}") - for custom_tag in custom_tags: - tags.append(custom_tag) + tags.extend(custom_tags) return tags @@ -88,6 +89,7 @@ def _collect_host_service_check(self, host, tags): self._check.service_check(HOST_HEALTH, host_entity_status, tags=tags) def _collect_host_metrics(self, host, tags): + # Use 2 workers since we are executing 2 tasks in parallel. with ThreadPoolExecutor(max_workers=2) as executor: executor.submit(self._collect_host_native_metrics, host, tags) executor.submit(self._collect_host_timeseries_metrics, host, tags) @@ -125,5 +127,5 @@ def _query_time_series(self, query, tags): for d in ts.data: value = d.value self._check.gauge( - full_metric_name, value, tags=tags + [f'cloudera_{category_name}:{ts.metadata.entity_name}'] + full_metric_name, value, tags=[f'cloudera_{category_name}:{ts.metadata.entity_name}', *tags] ) diff --git a/cloudera/datadog_checks/cloudera/check.py b/cloudera/datadog_checks/cloudera/check.py index b365ee0a62ace..051604bef03be 100644 --- a/cloudera/datadog_checks/cloudera/check.py +++ b/cloudera/datadog_checks/cloudera/check.py @@ -1,9 +1,8 @@ # (C) Datadog, Inc. 2022-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -import six -from datadog_checks.base import AgentCheck, ConfigurationError +from datadog_checks.base import AgentCheck from .api_client_factory import make_api_client from .common import CAN_CONNECT @@ -14,12 +13,6 @@ class ClouderaCheck(AgentCheck, ConfigMixin): __NAMESPACE__ = 'cloudera' def __init__(self, name, init_config, instances): - if six.PY2: - raise ConfigurationError( - "This version of the integration is only available when using py3. " - "Check https://docs.datadoghq.com/agent/guide/agent-v6-python-3 " - "for more information." - ) super(ClouderaCheck, self).__init__(name, init_config, instances) self.client = None self.check_initializations.append(self._create_client) diff --git a/cloudera/datadog_checks/cloudera/entity_status.py b/cloudera/datadog_checks/cloudera/entity_status.py index 1f98b51630182..19f3877635b2b 100644 --- a/cloudera/datadog_checks/cloudera/entity_status.py +++ b/cloudera/datadog_checks/cloudera/entity_status.py @@ -1,17 +1,17 @@ -from datadog_checks.base import AgentCheck +from datadog_checks.base.constants import ServiceCheck # Based on ApiEntityStatus: https://archive.cloudera.com/cm7/7.7.1/generic/jar/cm_api/apidocs/json_ApiEntityStatus.html ENTITY_STATUS = { - 'GOOD_HEALTH': AgentCheck.OK, - 'STARTING': AgentCheck.OK, - 'STOPPING': AgentCheck.WARNING, - 'CONCERNING_HEALTH': AgentCheck.WARNING, - 'DOWN': AgentCheck.CRITICAL, - 'DISABLED_HEALTH': AgentCheck.CRITICAL, - 'BAD_HEALTH': AgentCheck.CRITICAL, - 'STOPPED': AgentCheck.CRITICAL, - 'UNKNOWN_HEALTH': AgentCheck.UNKNOWN, - 'HISTORY_NOT_AVAILABLE': AgentCheck.UNKNOWN, - 'UNKNOWN': AgentCheck.UNKNOWN, - 'NONE': AgentCheck.UNKNOWN, + 'GOOD_HEALTH': ServiceCheck.OK, + 'STARTING': ServiceCheck.OK, + 'STOPPING': ServiceCheck.WARNING, + 'CONCERNING_HEALTH': ServiceCheck.WARNING, + 'DOWN': ServiceCheck.CRITICAL, + 'DISABLED_HEALTH': ServiceCheck.CRITICAL, + 'BAD_HEALTH': ServiceCheck.CRITICAL, + 'STOPPED': ServiceCheck.CRITICAL, + 'UNKNOWN_HEALTH': ServiceCheck.UNKNOWN, + 'HISTORY_NOT_AVAILABLE': ServiceCheck.UNKNOWN, + 'UNKNOWN': ServiceCheck.UNKNOWN, + 'NONE': ServiceCheck.UNKNOWN, } diff --git a/cloudera/tests/test_unit.py b/cloudera/tests/test_unit.py index b91ab6d851e0c..17fbb9b730575 100644 --- a/cloudera/tests/test_unit.py +++ b/cloudera/tests/test_unit.py @@ -4,7 +4,6 @@ import mock import pytest -import six from cm_client.models.api_cluster import ApiCluster from cm_client.models.api_cluster_list import ApiClusterList from cm_client.models.api_cluster_ref import ApiClusterRef @@ -14,7 +13,7 @@ from cm_client.models.api_version_info import ApiVersionInfo from cm_client.rest import ApiException -from datadog_checks.base import AgentCheck, ConfigurationError +from datadog_checks.base import AgentCheck from datadog_checks.cloudera.metrics import METRICS from datadog_checks.dev.utils import get_metadata_metrics @@ -24,17 +23,6 @@ pytestmark = [pytest.mark.unit] -def test_given_cloudera_check_when_py2_then_raises_exception( - cloudera_check, - instance, -): - with mock.patch.object(six, 'PY2'), pytest.raises( - ConfigurationError, - match='This version of the integration is only available when using py3', - ): - cloudera_check(instance) - - def test_given_cloudera_check_when_get_version_exception_from_cloudera_client_then_emits_critical_service( dd_run_check, cloudera_check, From 0fe44d2067fb5d529535c597aae63cedf2e52464 Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Tue, 20 Dec 2022 14:21:02 -0500 Subject: [PATCH 64/71] Fix tests --- cloudera/datadog_checks/cloudera/metrics.py | 13 ------------- cloudera/tests/common.py | 13 +++++++++++++ cloudera/tests/test_e2e.py | 4 ++-- cloudera/tests/test_integration.py | 4 ++-- cloudera/tests/test_unit.py | 3 +-- 5 files changed, 18 insertions(+), 19 deletions(-) diff --git a/cloudera/datadog_checks/cloudera/metrics.py b/cloudera/datadog_checks/cloudera/metrics.py index 8ecacb797cd7f..a4cb9b2ba271e 100644 --- a/cloudera/datadog_checks/cloudera/metrics.py +++ b/cloudera/datadog_checks/cloudera/metrics.py @@ -1,5 +1,3 @@ -from collections import defaultdict - TIMESERIES_METRICS = { 'cluster': [ 'cpu_percent_across_hosts', @@ -60,14 +58,3 @@ 'total_phys_mem_bytes', ] } - - -def merge_dicts(d1, d2): - merged_dict = defaultdict(list) - for d in (d1, d2): - for key, value in d.items(): - merged_dict[key] += value - return merged_dict - - -METRICS = merge_dicts(NATIVE_METRICS, TIMESERIES_METRICS) diff --git a/cloudera/tests/common.py b/cloudera/tests/common.py index c307669eaed8f..55f14fec54b4b 100644 --- a/cloudera/tests/common.py +++ b/cloudera/tests/common.py @@ -1,5 +1,7 @@ import os +from collections import defaultdict +from datadog_checks.cloudera.metrics import NATIVE_METRICS, TIMESERIES_METRICS from datadog_checks.dev import get_docker_hostname, get_here HOST = get_docker_hostname() @@ -25,3 +27,14 @@ 'cloudera_cluster:cod--qfdcinkqrzw', 'test1', ] + + +def merge_dicts(d1, d2): + merged_dict = defaultdict(list) + for d in (d1, d2): + for key, value in d.items(): + merged_dict[key] += value + return merged_dict + + +METRICS = merge_dicts(NATIVE_METRICS, TIMESERIES_METRICS) diff --git a/cloudera/tests/test_e2e.py b/cloudera/tests/test_e2e.py index 10c78dc2589b7..9fe717498e300 100644 --- a/cloudera/tests/test_e2e.py +++ b/cloudera/tests/test_e2e.py @@ -1,9 +1,9 @@ import pytest from datadog_checks.cloudera import ClouderaCheck -from datadog_checks.cloudera.metrics import METRICS, TIMESERIES_METRICS +from datadog_checks.cloudera.metrics import TIMESERIES_METRICS -from .common import CAN_CONNECT_TAGS, CLUSTER_HEALTH_TAGS +from .common import CAN_CONNECT_TAGS, CLUSTER_HEALTH_TAGS, METRICS @pytest.mark.e2e diff --git a/cloudera/tests/test_integration.py b/cloudera/tests/test_integration.py index b3e75eff9b697..480d1c0c0339b 100644 --- a/cloudera/tests/test_integration.py +++ b/cloudera/tests/test_integration.py @@ -1,9 +1,9 @@ import pytest from datadog_checks.cloudera import ClouderaCheck -from datadog_checks.cloudera.metrics import METRICS, TIMESERIES_METRICS +from datadog_checks.cloudera.metrics import TIMESERIES_METRICS -from .common import CAN_CONNECT_TAGS, CLUSTER_HEALTH_TAGS +from .common import CAN_CONNECT_TAGS, CLUSTER_HEALTH_TAGS, METRICS @pytest.mark.usefixtures('dd_environment') diff --git a/cloudera/tests/test_unit.py b/cloudera/tests/test_unit.py index 17fbb9b730575..523f06ea3c5c7 100644 --- a/cloudera/tests/test_unit.py +++ b/cloudera/tests/test_unit.py @@ -14,10 +14,9 @@ from cm_client.rest import ApiException from datadog_checks.base import AgentCheck -from datadog_checks.cloudera.metrics import METRICS from datadog_checks.dev.utils import get_metadata_metrics -from .common import CAN_CONNECT_TAGS, CLUSTER_HEALTH_TAGS +from .common import CAN_CONNECT_TAGS, CLUSTER_HEALTH_TAGS, METRICS from .conftest import get_timeseries_resource pytestmark = [pytest.mark.unit] From 639a5ca2cd8e23ead91498b835dbe78e31d3c705 Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Tue, 20 Dec 2022 14:22:31 -0500 Subject: [PATCH 65/71] Fix style --- .../cloudera/data/conf.yaml.example | 47 +++++++++---------- 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/cloudera/datadog_checks/cloudera/data/conf.yaml.example b/cloudera/datadog_checks/cloudera/data/conf.yaml.example index c3164d977529f..826d41236ed92 100644 --- a/cloudera/datadog_checks/cloudera/data/conf.yaml.example +++ b/cloudera/datadog_checks/cloudera/data/conf.yaml.example @@ -13,7 +13,29 @@ init_config: # instances: - - + ## @param api_url - string - required + ## The URL endpoint for the Cloudera Manager API. This can be found under the Endpoints tab for + ## your Data Hub to monitor. + ## + ## Note: The version of the Cloudera Manager API needs to be appended at the end of the URL. + ## For example, using v48 of the API for Data Hub `cluster_1` should result with a URL similar + ## to the following: + ## `https://cluster1.cloudera.site/cluster_1/cdp-proxy-api/cm-api/v48` + # + - api_url: + + ## @param workload_username - string - required + ## The Workload username. This value can be found in the `User Management` tab of the Management + ## Console in the `Workload User Name`. + # + workload_username: + + ## @param workload_password - string - required + ## The Workload password. This value can be found in the `User Management` tab of the Management + ## Console in the `Workload Password`. + # + workload_password: + ## @param tags - list of strings - optional ## A list of tags to attach to every metric and service check emitted by this instance. ## @@ -53,26 +75,3 @@ instances: # - # exclude: # - - - ## @param api_url - string - required - ## The URL endpoint for the Cloudera Manager API. This can be found under the Endpoints tab for - ## your Data Hub to monitor. - ## - ## Note: The version of the Cloudera Manager API needs to be appended at the end of the URL. - ## For example, using v48 of the API for Data Hub `cluster_1` should result with a URL similar - ## to the following: - ## `https://cluster1.cloudera.site/cluster_1/cdp-proxy-api/cm-api/v48` - # - api_url: - - ## @param workload_username - string - required - ## The Workload username. This value can be found in the `User Management` tab of the Management - ## Console in the `Workload User Name`. - # - workload_username: - - ## @param workload_password - string - required - ## The Workload password. This value can be found in the `User Management` tab of the Management - ## Console in the `Workload Password`. - # - workload_password: From f0c35564d1c179634755d44d65f290459246827a Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Tue, 20 Dec 2022 14:23:27 -0500 Subject: [PATCH 66/71] Fix formatting --- cloudera/tests/conftest.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/cloudera/tests/conftest.py b/cloudera/tests/conftest.py index fe452b86509d4..8503cf7a7678c 100644 --- a/cloudera/tests/conftest.py +++ b/cloudera/tests/conftest.py @@ -25,10 +25,7 @@ def dd_environment(): conditions = [ CheckDockerLogs(identifier='cloudera', patterns=['server running']), ] - with docker_run( - compose_file, - conditions=conditions, - ): + with docker_run(compose_file, conditions=conditions): yield common.INSTANCE From 3ddfa9f98f29dd078e739ea068609c4efb61293f Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Wed, 21 Dec 2022 17:09:18 -0500 Subject: [PATCH 67/71] Apply suggestion and move credentials to init_config --- cloudera/README.md | 53 ++++++++++--------- cloudera/assets/configuration/spec.yaml | 28 +++++----- .../cloudera/api_client_factory.py | 6 +-- .../datadog_checks/cloudera/api_client_v7.py | 8 +-- cloudera/datadog_checks/cloudera/check.py | 2 +- .../cloudera/config_models/instance.py | 2 - .../cloudera/config_models/shared.py | 2 + .../cloudera/data/conf.yaml.example | 24 ++++----- cloudera/tests/common.py | 7 ++- cloudera/tests/conftest.py | 20 ++++++- cloudera/tests/test_e2e.py | 4 +- 11 files changed, 88 insertions(+), 68 deletions(-) diff --git a/cloudera/README.md b/cloudera/README.md index 03867e93920a6..c4d7aa4ce3c86 100644 --- a/cloudera/README.md +++ b/cloudera/README.md @@ -33,32 +33,33 @@ No additional installation is needed on your server. ```yaml init_config: - + + ## @param workload_username - string - required + ## The Workload username. This value can be found in the `User Management` tab of the Management + ## Console in the `Workload User Name`. + # + workload_username: + + ## @param workload_password - string - required + ## The Workload password. This value can be found in the `User Management` tab of the Management + ## Console in the `Workload Password`. + # + workload_password: + + ## Every instance is scheduled independently of the others. + # instances: - - - ## @param api_url - string - required - ## The URL endpoint for the Cloudera Manager API. This can be found under the Endpoints tab for - ## your Data Hub to monitor. - ## - ## Note: The version of the Cloudera Manager API needs to be appended at the end of the URL. - ## For example, using v48 of the API for Data Hub `cluster_1` should result with a URL similar - ## to the following: - ## `https://cluster1.cloudera.site/cluster_1/cdp-proxy-api/cm-api/v48` - # - api_url: - - ## @param workload_username - string - required - ## The Workload username. This value can be found in the `User Management` tab of the Management - ## Console in the `Workload User Name`. - # - workload_username: - - ## @param workload_password - string - required - ## The Workload password. This value can be found in the `User Management` tab of the Management - ## Console in the `Workload Password`. - # - workload_password: + ## @param api_url - string - required + ## The URL endpoint for the Cloudera Manager API. This can be found under the Endpoints tab for + ## your Data Hub to monitor. + ## + ## Note: The version of the Cloudera Manager API needs to be appended at the end of the URL. + ## For example, using v48 of the API for Data Hub `cluster_1` should result with a URL similar + ## to the following: + ## `https://cluster1.cloudera.site/cluster_1/cdp-proxy-api/cm-api/v48` + # + - api_url: ``` 2. [Restart the Agent][5] to start collecting and sending Cloudera Data Hub cluster data to Datadog. @@ -73,8 +74,8 @@ For containerized environments, see the [Autodiscovery Integration Templates][9] | Parameter | Value | | -------------------- | ---------------------------------------------------------------------------------------------------------------- | | `` | `cloudera` | -| `` | blank or `{}` | -| `` | `{"api_url": ", "workload_username": "", 'workload_password": "" `| +| `` | `{"workload_username": "", 'workload_password": ""}` | +| `` | `{"api_url": "}` | diff --git a/cloudera/assets/configuration/spec.yaml b/cloudera/assets/configuration/spec.yaml index c1e4e448b74f2..d1cf0630bc552 100644 --- a/cloudera/assets/configuration/spec.yaml +++ b/cloudera/assets/configuration/spec.yaml @@ -4,6 +4,20 @@ files: options: - template: init_config options: + - name: workload_username + description: | + The Workload username. This value can be found in the `User Management` tab of the Management + Console in the `Workload User Name`. + required: true + value: + type: string + - name: workload_password + description: | + The Workload password. This value can be found in the `User Management` tab of the Management + Console in the `Workload Password`. + required: true + value: + type: string - template: init_config/default - template: instances options: @@ -18,20 +32,6 @@ files: to the following: `https://cluster1.cloudera.site/cluster_1/cdp-proxy-api/cm-api/v48` - value: - type: string - - name: workload_username - description: | - The Workload username. This value can be found in the `User Management` tab of the Management - Console in the `Workload User Name`. - required: true - value: - type: string - - name: workload_password - description: | - The Workload password. This value can be found in the `User Management` tab of the Management - Console in the `Workload Password`. - required: true value: type: string - name: max_parallel_requests diff --git a/cloudera/datadog_checks/cloudera/api_client_factory.py b/cloudera/datadog_checks/cloudera/api_client_factory.py index 0e0d7d57cc2e7..7d4fbba2ab7f1 100644 --- a/cloudera/datadog_checks/cloudera/api_client_factory.py +++ b/cloudera/datadog_checks/cloudera/api_client_factory.py @@ -6,9 +6,9 @@ from datadog_checks.cloudera.api_client_v7 import ApiClientV7 -def make_api_client(check, config): - cm_client.configuration.username = config.workload_username - cm_client.configuration.password = config.workload_password +def make_api_client(check, config, shared_config): + cm_client.configuration.username = shared_config.workload_username + cm_client.configuration.password = shared_config.workload_password api_client = cm_client.ApiClient(config.api_url) api_client.rest_client = RESTClientObject(maxsize=(config.max_parallel_requests)) check.log.debug('Getting version from cloudera API URL: %s', config.api_url) diff --git a/cloudera/datadog_checks/cloudera/api_client_v7.py b/cloudera/datadog_checks/cloudera/api_client_v7.py index cb063ddefab42..d94b29b2bc3b4 100644 --- a/cloudera/datadog_checks/cloudera/api_client_v7.py +++ b/cloudera/datadog_checks/cloudera/api_client_v7.py @@ -19,17 +19,17 @@ def collect_data(self): read_clusters_response = clusters_resource_api.read_clusters(cluster_type='any', view='full') self._log.debug("Cloudera full clusters response:\n%s", read_clusters_response) - # Use len(read_clusters_response.items) * 3 workers since - # for each cluster, we are executing 3 tasks in parallel. - with ThreadPoolExecutor(max_workers=len(read_clusters_response.items) * 3) as executor: + # Use len(read_clusters_response.items) * 2 workers since + # for each cluster, we are executing 2 tasks in parallel. + with ThreadPoolExecutor(max_workers=len(read_clusters_response.items) * 2) as executor: for cluster in read_clusters_response.items: cluster_name = cluster.name tags = self._collect_cluster_tags(cluster, self._check.config.tags) executor.submit(self._collect_cluster_metrics, cluster_name, tags) - executor.submit(self._collect_cluster_service_check, cluster, tags) executor.submit(self._collect_hosts, cluster_name) + self._collect_cluster_service_check(cluster, tags) @staticmethod def _collect_cluster_tags(cluster, custom_tags): diff --git a/cloudera/datadog_checks/cloudera/check.py b/cloudera/datadog_checks/cloudera/check.py index 051604bef03be..ac27d740e79cc 100644 --- a/cloudera/datadog_checks/cloudera/check.py +++ b/cloudera/datadog_checks/cloudera/check.py @@ -25,7 +25,7 @@ def _create_client(self): self.can_connect_tags.append(tag) try: - self.client = make_api_client(self, self.config) + self.client = make_api_client(self, self.config, self.shared_config) except Exception as e: message = f"Cloudera API Client is none: {e}" self.service_check(CAN_CONNECT, AgentCheck.CRITICAL, message=message, tags=self.can_connect_tags) diff --git a/cloudera/datadog_checks/cloudera/config_models/instance.py b/cloudera/datadog_checks/cloudera/config_models/instance.py index 5c93d1430852b..20a9ccc1f7c77 100644 --- a/cloudera/datadog_checks/cloudera/config_models/instance.py +++ b/cloudera/datadog_checks/cloudera/config_models/instance.py @@ -39,8 +39,6 @@ class Config: min_collection_interval: Optional[float] service: Optional[str] tags: Optional[Sequence[str]] - workload_password: str - workload_username: str @root_validator(pre=True) def _initial_validation(cls, values): diff --git a/cloudera/datadog_checks/cloudera/config_models/shared.py b/cloudera/datadog_checks/cloudera/config_models/shared.py index de215afcbdd5e..b9e9e55ad0e66 100644 --- a/cloudera/datadog_checks/cloudera/config_models/shared.py +++ b/cloudera/datadog_checks/cloudera/config_models/shared.py @@ -24,6 +24,8 @@ class Config: allow_mutation = False service: Optional[str] + workload_password: str + workload_username: str @root_validator(pre=True) def _initial_validation(cls, values): diff --git a/cloudera/datadog_checks/cloudera/data/conf.yaml.example b/cloudera/datadog_checks/cloudera/data/conf.yaml.example index 826d41236ed92..34166aac71859 100644 --- a/cloudera/datadog_checks/cloudera/data/conf.yaml.example +++ b/cloudera/datadog_checks/cloudera/data/conf.yaml.example @@ -2,6 +2,18 @@ # init_config: + ## @param workload_username - string - required + ## The Workload username. This value can be found in the `User Management` tab of the Management + ## Console in the `Workload User Name`. + # + workload_username: + + ## @param workload_password - string - required + ## The Workload password. This value can be found in the `User Management` tab of the Management + ## Console in the `Workload Password`. + # + workload_password: + ## @param service - string - optional ## Attach the tag `service:` to every metric, event, and service check emitted by this integration. ## @@ -24,18 +36,6 @@ instances: # - api_url: - ## @param workload_username - string - required - ## The Workload username. This value can be found in the `User Management` tab of the Management - ## Console in the `Workload User Name`. - # - workload_username: - - ## @param workload_password - string - required - ## The Workload password. This value can be found in the `User Management` tab of the Management - ## Console in the `Workload Password`. - # - workload_password: - ## @param tags - list of strings - optional ## A list of tags to attach to every metric and service check emitted by this instance. ## diff --git a/cloudera/tests/common.py b/cloudera/tests/common.py index 55f14fec54b4b..a300cc3319c4c 100644 --- a/cloudera/tests/common.py +++ b/cloudera/tests/common.py @@ -8,12 +8,15 @@ PORT = 7180 INSTANCE = { - 'workload_username': '~', - 'workload_password': '~', 'api_url': 'http://localhost:8080/api/v48/', 'tags': ['test1'], } +INIT_CONFIG = { + 'workload_username': '~', + 'workload_password': '~', +} + HERE = get_here() COMPOSE_FILE = os.path.join(HERE, 'docker', 'docker-compose.yaml') diff --git a/cloudera/tests/conftest.py b/cloudera/tests/conftest.py index 8503cf7a7678c..cb26ad176d4e5 100644 --- a/cloudera/tests/conftest.py +++ b/cloudera/tests/conftest.py @@ -26,7 +26,18 @@ def dd_environment(): CheckDockerLogs(identifier='cloudera', patterns=['server running']), ] with docker_run(compose_file, conditions=conditions): - yield common.INSTANCE + yield { + 'instances': [common.INSTANCE], + 'init_config': common.INIT_CONFIG, + } + + +@pytest.fixture +def config(): + return { + 'instances': [common.INSTANCE], + 'init_config': common.INIT_CONFIG, + } @pytest.fixture @@ -34,9 +45,14 @@ def instance(): return common.INSTANCE +@pytest.fixture +def init_config(): + return common.INIT_CONFIG + + @pytest.fixture(scope='session') def cloudera_check(): - return lambda instance: ClouderaCheck('cloudera', {}, [instance]) + return lambda instance: ClouderaCheck('cloudera', init_config=common.INIT_CONFIG, instances=[instance]) @pytest.fixture diff --git a/cloudera/tests/test_e2e.py b/cloudera/tests/test_e2e.py index 9fe717498e300..db2b9085af14a 100644 --- a/cloudera/tests/test_e2e.py +++ b/cloudera/tests/test_e2e.py @@ -7,10 +7,10 @@ @pytest.mark.e2e -def test_e2e(dd_agent_check, instance): +def test_e2e(dd_agent_check, config): # Given # When - aggregator = dd_agent_check(instance) + aggregator = dd_agent_check(config) # Then for category, metrics in METRICS.items(): for metric in metrics: From 4a2f7611cd5c28af727eb7a3c0ad3edcc8f28c46 Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Wed, 21 Dec 2022 17:28:51 -0500 Subject: [PATCH 68/71] Update Cloudera README for collecting metrics --- cloudera/README.md | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/cloudera/README.md b/cloudera/README.md index c4d7aa4ce3c86..94ca03dfd64eb 100644 --- a/cloudera/README.md +++ b/cloudera/README.md @@ -100,6 +100,37 @@ See [service_checks.json][8] for a list of service checks provided by this integ ## Troubleshooting +### Collecting metrics of Datadog integrations on Cloudera hosts +To install the Datadog Agent on a Cloudera host, make sure that the security group associated with the host allows SSH access. +Then, you need to use the [root user `cloudbreak`][13] when accessing the host with the SSH key generated during the environment creation: + +``` +sudo ssh -i "/path/to/key.pem" cloudbreak@ +``` + +Note that the workload username and password can be used to access Cloudera hosts via SSH, although only the `cloudbreak` user can install the Datadog Agent. +Trying to do so will result in the following error: +``` + is not allowed to run sudo on . This incident will be reported. +``` + +If you something similar to the following in the Agent status: + +``` + Config Errors + ============== + zk + -- + open /etc/datadog-agent/conf.d/zk.d/conf.yaml: permission denied +``` + +you will need to change the ownership of the `conf.yaml` to `dd-agent`: + +``` +[cloudbreak@ etc]$ sudo chown -R dd-agent:dd-agent /etc/datadog-agent/conf.d/zk.d/conf.yaml +``` + + Need help? Contact [Datadog support][9]. @@ -115,3 +146,4 @@ Need help? Contact [Datadog support][9]. [10]: https://raw.githubusercontent.com/DataDog/integrations-core/master/cloudera/images/user_management.png [11]: https://raw.githubusercontent.com/DataDog/integrations-core/master/cloudera/images/create_machine_user.png [12]: https://raw.githubusercontent.com/DataDog/integrations-core/master/cloudera/images/set_workload_password.png +[13]: https://docs.cloudera.com/data-hub/cloud/access-clusters/topics/mc-accessing-cluster-via-ssh.html From e0b5059880e61203f818a78824635c296fe188b9 Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Thu, 22 Dec 2022 11:13:28 -0500 Subject: [PATCH 69/71] Fix README --- cloudera/README.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/cloudera/README.md b/cloudera/README.md index 94ca03dfd64eb..93bec1aa879ff 100644 --- a/cloudera/README.md +++ b/cloudera/README.md @@ -108,13 +108,14 @@ Then, you need to use the [root user `cloudbreak`][13] when accessing the host w sudo ssh -i "/path/to/key.pem" cloudbreak@ ``` -Note that the workload username and password can be used to access Cloudera hosts via SSH, although only the `cloudbreak` user can install the Datadog Agent. -Trying to do so will result in the following error: +The workload username and password can be used to access Cloudera hosts via SSH, although only the `cloudbreak` user can install the Datadog Agent. +Trying to use any user that is not `cloudbreak` may results in the following error: ``` is not allowed to run sudo on . This incident will be reported. ``` -If you something similar to the following in the Agent status: +### Config errors when collecting Datadog metrics +If you something similar to the following in the Agent status when collecting metrics from your Cloudera host: ``` Config Errors @@ -124,10 +125,10 @@ If you something similar to the following in the Agent status: open /etc/datadog-agent/conf.d/zk.d/conf.yaml: permission denied ``` -you will need to change the ownership of the `conf.yaml` to `dd-agent`: +you need to change the ownership of the `conf.yaml` to `dd-agent`: ``` -[cloudbreak@ etc]$ sudo chown -R dd-agent:dd-agent /etc/datadog-agent/conf.d/zk.d/conf.yaml +[cloudbreak@ ~]$ sudo chown -R dd-agent:dd-agent /etc/datadog-agent/conf.d/zk.d/conf.yaml ``` From ddee7d858c7bac5d4aa80c9c3000e55b00ba7753 Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Thu, 22 Dec 2022 11:13:50 -0500 Subject: [PATCH 70/71] Fix README --- cloudera/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cloudera/README.md b/cloudera/README.md index 93bec1aa879ff..a310fce8da3d9 100644 --- a/cloudera/README.md +++ b/cloudera/README.md @@ -109,7 +109,7 @@ sudo ssh -i "/path/to/key.pem" cloudbreak@ ``` The workload username and password can be used to access Cloudera hosts via SSH, although only the `cloudbreak` user can install the Datadog Agent. -Trying to use any user that is not `cloudbreak` may results in the following error: +Trying to use any user that is not `cloudbreak` may result in the following error: ``` is not allowed to run sudo on . This incident will be reported. ``` From 70750f05ca6dd0df410b171956b73ae8af72aff9 Mon Sep 17 00:00:00 2001 From: Andrew Zhang Date: Fri, 23 Dec 2022 09:18:39 -0500 Subject: [PATCH 71/71] Apply suggestions from code review Co-authored-by: Bryce Eadie --- cloudera/README.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/cloudera/README.md b/cloudera/README.md index a310fce8da3d9..749b01e6657c2 100644 --- a/cloudera/README.md +++ b/cloudera/README.md @@ -29,7 +29,8 @@ No additional installation is needed on your server. #### Host -1. Edit the `cloudera.d/conf.yaml` file, in the `conf.d/` folder at the root of your Agent's configuration directory to start collecting your Cloudera cluster and host data. See the [sample cloudera.d/conf.yaml][4] for all available configuration options. Note that the `api_url` should contain the API version at the end. +1. Edit the `cloudera.d/conf.yaml` file, in the `conf.d/` folder at the root of your Agent's configuration directory to start collecting your Cloudera cluster and host data. See the [sample cloudera.d/conf.yaml][4] for all available configuration options. +**Note**: The `api_url` should contain the API version at the end. ```yaml init_config: @@ -69,7 +70,7 @@ No additional installation is needed on your server. #### Containerized -For containerized environments, see the [Autodiscovery Integration Templates][9] for guidance on applying the parameters below. +For containerized environments, see the [Autodiscovery Integration Templates][3] for guidance on applying the parameters below. | Parameter | Value | | -------------------- | ---------------------------------------------------------------------------------------------------------------- | @@ -108,14 +109,14 @@ Then, you need to use the [root user `cloudbreak`][13] when accessing the host w sudo ssh -i "/path/to/key.pem" cloudbreak@ ``` -The workload username and password can be used to access Cloudera hosts via SSH, although only the `cloudbreak` user can install the Datadog Agent. +The workload username and password can be used to access Cloudera hosts through SSH, although only the `cloudbreak` user can install the Datadog Agent. Trying to use any user that is not `cloudbreak` may result in the following error: ``` is not allowed to run sudo on . This incident will be reported. ``` ### Config errors when collecting Datadog metrics -If you something similar to the following in the Agent status when collecting metrics from your Cloudera host: +If you see something similar to the following in the Agent status when collecting metrics from your Cloudera host: ``` Config Errors @@ -125,7 +126,7 @@ If you something similar to the following in the Agent status when collecting me open /etc/datadog-agent/conf.d/zk.d/conf.yaml: permission denied ``` -you need to change the ownership of the `conf.yaml` to `dd-agent`: +You need to change the ownership of the `conf.yaml` to `dd-agent`: ``` [cloudbreak@ ~]$ sudo chown -R dd-agent:dd-agent /etc/datadog-agent/conf.d/zk.d/conf.yaml

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 literal 0 HcmV?d00001 diff --git a/cloudera/datadog_checks/images/user_management.png b/cloudera/datadog_checks/images/user_management.png new file mode 100644 index 0000000000000000000000000000000000000000..339d8a6d2ed249104fb1220bc2f7decd1e88da62 GIT binary patch literal 242857 zcmce;byOVP@-7Sn2@oI&!JPz1AV_exgh24%?rwt*?tuh%w*>d#ZXvh@_Zi$_0s{=r zZQl1izjMBO*SaV7pO3X>x~IGM?%um3lDR67edTqM#0UfPc=#h9X*Z2IIxgg=S1Vh5;&(27NgqWy8%*6itM z&1`I5_?dpc@pK1cQ&*ie<;d=3-Q3k$9GyR9L6Um?b4L)92XD0tX*oeBhL;NITX=nP zCTpyrhJPe6`op8ABqJ)z(j@Zg%MTpWf_MpkG9wihI`FQ_B289^XMXG$4kF$4ek_3P zjzWV(`sniw{5b!ZT0U@=aQ-uO;*MwDU3T0B&+rM294>>?L#9nyR>n@0FE5ig;CHgU zcP#FW<6>0P--}JZbgh{<1-m!Lad3$TPf;Hd?AS>A6y^-#Z4Q626|M_C=xAVzkGBI+-p@>M8;~kO!Med*WpRzenFZNMCpVH|4NDBJNWLx*8py!qM z*HaQBLgjw_<FrfrlToSvpg-^^%w)hSUavkpm11t+6an)*|}A~kaPobiJ1=!taN zn@^gh+hSyuobrV2bUz)u3^k&~shIj6hxEKUkb%Dlgm>4OV$P09d$EZy(dfibm3|tG z>BZX$(A~gJ`4Y(Q)qmdC+4%dslP0v$c=Y1OPq(}gjE_Ew=|->RpKSCn9ymDp*d>Sa zgv`n*J+2@RW7z0IEBe*T@$RA$GnDt}ht0^WhJ@g`^kYm7YGO9OXVcDX1SSu}v_WrK zTa-_NP;egy%64ExN}Jigt7?&aSaFp7_!{#Gl~iyKTEFK-HqxSEB1*{6=LD@O9hj82EIw`Gaxq4slI=m0>7OuhcJvA;iv!&isYu zr-2dgn|O;5venxLR!YnY|L;w!dJTwW!L|kb%%}61QJ6fK6hY0(s1mD&AK&}q7E%=t zNnA!Xc9eb17oZHf5_2gGpKy4){JB|7L{<>V!!_i!3`zZKrf|b~-?UCVg}0WHuJk!3 zLXOmPuIExNo-PO)0?l&Yp(xtvldoRY!5+a^<~Pyals3^X1+~NvUz{SGqToal`og}!`xH1D$`Tyi z0Yjx;==eTQ&L7o9?{UVi?C$Sk`R!kQbMtQfI@nJ3@MaubzRir})8g;%ZwzgeYM8-e z4OqC_0gr5=ddY1g+kXvbA|QIntK&-3Q6Gf9Xo=o|s)3}?KD15ZPGlkrdJ^ z1NLxX>~g0!$+%{LXxXUo{s{&Yv#50e6b5*+c(?)R_K(uhw>nJi2^LWiE4w@BtfEwI z7{bpVii;OM#Cans`-JHyvV%m+W8W93U*4@oKYM}G|1RkBvy_O}?*^i$`shsrlp?MJ z$R*^T6UDf$vy6W^p{|Hgco|&$mA~+fRYatCt0FzAKYe!GFIi_&t~zA_T144YM;jd>)6`$9zN(U-Ra z3<=TPv1c*zvE?yMAE;DRRAp6lRK-=5RD&2L7&jO_RpkqHl-=`>Q%XP7(OyLx_X!@$ z9%CKLJK|qpHKtvse3PjBdj9e0%ei>8c$|2x0nLF217xbIs!pn)DTiW|sf%JV6}&<{ z#RHX_!u&F`iXNr3LV8v0@;dE<_<7x09u>x^R8lFqyiMgK<&q-v!l**3Ny}aNT^pCo zOTkmDQ;$>YT~@9>QZ-W9hoe=I8l4)W zn&X;8%Y&(=!c(2JT-!2=Z^IKT(~z&;@0-Jd$6i~!CQYh~u8VU`oGyDiSvh97XR;T+ zvp-`wu`@9>?J^-Zp7B-ttEWzVVB}cYj*SP4H`)#L4dG2(W+kO^R7Jf?g&Hgs;(7Dr z(*M%yM(KwCChaoo5ivRqIv;w;Bhp8dq^rSa!E28S$n4$-TF(lIn+L%j9)2Ewf+4xc zAs(?Gu^Mhha=>QAwadf(2A6}71jH$9yl5@XgUQ*?t!eG}Beyr+Y!}4Hrfcmneu5Xw z64>8oYGY8tb~zM2^kX>JY+-nQNH}dFnIV-ZWhO-+>-Qmas`jLKz6*K5(}oKGBGl7gVySv>gCp-_9Dh6$G+xlMc9$w3=DTh z!0NgWA_azp2D~dhtFP4Y6!0n~%Os-;^2}4s^R{eRDJnE7O!bIbFd^)jIoLL$DtpJB^LZ28Ac3>7_xsh8u>BC+m zI1jh%9WpyKZhPd2`xJu$(_{45aM&;dt0$loqD{Q3vb4}_>%E3hW87UXHmE2^YMTv!> z^V>(C4SP$!xD#9B3oxI}IQ(>|Tx0AJig5apMgbPiBov|Z0bMr-Wd{*pBJgeT^S%s! zApL+JR~!dnz+kA5KO`2hx=uezQhub2`YNI*cQSWUx9A36oW3;em(ZBEQU6cvI2-!m zWM_w}mG#B`-U18R6!N&A0GF=_+Z?IdmRHxn3pE{Ab@?1&4?u|tB~qr z5j_29C44&Nj3a5pOO06T9RAvi5Ud8bsh-0&1CJPv%n1{vqzTu%XLh%&x-Y@IHes5g zn$gwE^|V{xrX)Z_^sF|F+$@>;i?uIpKFWRZ_|mX`W(4ilPFj{hm6=bB)N69ssaMk5 z$z$KDI<8_JY#3y@SwEf#&O%Q#e+|-JsWcjtUX@-M&@MqyJJ2kvZL)WnNiF0$wI;Ea znQ7DIFd$pIhC&2yA&SKG`(P5*9HLZ$!sq|rSVF_okj@E?_2MAuv?5}NA zPYPmQxU@_&SjadqT-YlqEg1km20z<(YvQony2xtvDTkOgl-SJ7Ed5xb@LWBsQSnq$ zhjGm}e?u>enLgQ1Yk=+EF5g7dM%FIuZM&FabRh5ei}-xF+L-SA95@`(f;&Z7$FJia z*KsXwn-1of8Nf2({zB9Fr%_sxqqqH7lN=542=ZMq5>oFpNZnfj)B z%8TKf`scQkwx{ZX6`XpfZS#}D`8Pjn{j3WrF!V*hf!=G!!`o>G^-n=djY3DRy%dm) zEwB@;tx4S;2EVz$dx$4ZWhMOD*W{#d7u*cp;}_(Q1fzrNgd=^u+QSx3SHGoFdV{Uq?<&o`? z)b=hE1s)^Kv3iM9i%LdO76+PhT{J4Gef~}UeOMvbZWq28Xei;Zc};V;!W>=HbCi|cL_sB1i9{hD21qms{ z5()L6Yvh6L{a-Zjxo`9L_Cahg5(e<=De!U2M)}v(*u>cn{>Yz4#6EKWnL?;jAGi%Wn*_Wid1X8JV)U z+1lUtgCyw25A52SIvY~E+1l7S@w*Ap{&fXEuz!D;m6rOiOPsBRXf@;%so#PeO{uwA z*jU(Tg|VoqsRbQP%=newz5k~<@Joo+!r9rLpOqC12D5-USU`^EtZ(@E_*mK4S=rf{ zfh(Au-0hqV-I(p1p8ws+zxsJ+>SXL_Y42l+p}*8k}nXexMrlwZ-(&D2Koouw@>XTUv#-@M^u7yPTi|8eTy zxBQQ$8vky}&dbU6pH2Vc)c@X8)ydTHEyxzQsk89E1@=$l|2+9mLqXR2vH!9yo-b+iuB=~ zn2H-@yA3zkzKZjbh0Nl^+xsT|FP>2wqzB=BqWkkn^m{JakxYdAw+#Nb`S=rA{(onkx)KF79DlFh=FcQ} zKbg_Iz$ARBHlhD}&_;yR2IL$B6i@zCk3^~C05vdY=S_P1m*7Q#UvSF*-^G}6er~ln z_Ru(DoLggqO|EumN%44-X~dv7=I<4n{!1v*3x{#f+(-}c4;(Ms}2t4Dc;J&SL~ z%1STii=66YwVh`fwOw>AWyx}R4j2y-M$r!5x9%zAe`bg7^=zC5XhPvu`G~^v{l_9# zrOfQ|=T#Qlbvc;I3%0kJ-s2wK=vR*y{+a?w;JM+9|Bw1Lvdn zPeER5ad8b&8L#3TQAyZLVvfmFw2yzH-E0gexh1{wiT$d^f&-RB4V31aA=-pHi{QnlwV(nnsR8j3};rhZ5n(lgmPs=9sL9a0&{<_6Ug`H1`o-<<{>cKVOr$Iz}loYScJt; zj@PMrtr&UBt^|C880c%E^jPY~l{0BQS$Bu#zYY$%>n}z&fkm;pG z3*;Y$Rx4;#NcncS0SfYsMydHziEODiC)<3Ts>~5~S(B4np!ZSmhl#5ESNIH4boc>v z+6|9wTJ~fVI(WxhLrTU=J1uae%uV3v;arN4?99U@+RS;Wk=`m+aHVau+BSEA+05A)4Fqj|Q(KM~iv6m^|0py=wjah|uus%5 zMO}ifmBZD3bwox6yJTlKC`Fts5fzC|d4u;C>CAN%h2{_P_q;qF^k~JL|IoTai#+Id zd%G$CK8VFqEe_-PMai6NGuqFMa)jm9zI7B?Ao9o10Dw;)fv4w?KI?1gf6CUjoV&>W zP1dmA*9fo%Nd?0Lr|e*a51412BL}5N>qwpHuE{nA^JqF!F=6_E=wRaSA>g#V$Exy} zS;48>y_lxp@2?>#64M3N*?Wxe8}X@?00^WOV=1|o!yMveIa~V4<%QeC9(j?kfBZE& zNUeCgV1f1&p(a4dVHa?6DAGqF0u3rsKEC5o$k}8zJzI1?tN~0go4-ao6J|3t{vYEL zz?HuNlr8cJW7$$Hje(9Z7?(t=>2v%@%JZ`NmGF|rbA>tgZ7L`qAeeoeWeKc^OP1F| zVz8DY)bOp*)K_#e&+vxGM^mo@I(%j#0d@i&jNQ{CP!F-FXUQ0_>O&$^>m_AC85?)u(mb5~ikk$9k2Zos3Ktt9~$mjCh zM)t=mrNo+L46c@Jo7ZEwv{A0kdXAp4-HxaRv@ze?s4XdREi zH8f>g`(CfCYOMw%Gn&QuJxktrW@QB@);iWL?ITrrr`w{AKaWm8=~0Gw>(|*XuxzQ7 zznCgfmBSzGkxN_eipm!-CgUz-EqHcv*Zfj0&it!bg@T9n*}>A*;>WT<)|lgs0lJez z$kp=mxhm5Vjx98z>ns(%yOyAlQIkLQ61~9ypnc>cFDYQ4!=jGsULpP^y7?Nu3}v@i z(my^eZ>8C~$I>~2ggAWV7)`g0AC>%X(h%LJTbEjg3|0kb3AzU){^5NzBC2E9}#B4csh z)Ajrnp(y|{sBjsWJK^^n4Oy76cgQhgeg`E0G2MfWVQGRJXYH9oA=B~oWzkB+d?j%s z{OF5lDN3b}x={wq;;cj$fqvmV=h%2vE|53Vg_m#n3f_LDM+)_5<~WPPgC>NUXC>sj zS6yZobFst?r{UdwA9Zo5Nch;5B{R!hq1`UV^2Rso2IhO`wAs>bZQfW97s5=-`tqj= z6-nWri$lCM9H$*h#B|8i=(?me*9>ZRVi~*fVoi<=TtVr99`Lo?I?GZ_{OT!KPa=~a zAsVmm-5oyeJX@maU3#z*&_9|M+RJJ;f9Q(sWv0^M_AhMU;{06aJ6EA{JO$vFGm(n) zXVu=0`uMBC*sl+JL8V}C;~u$a$PI>j0rox*04;+7L;t;k>1vr`p2x4#r>$!^7w^;bXL7|>Xu5*0)L5pEeB{SAr{G$c7p2(jXFkT77~WNheh5#W z*H8-NwINRr*A8CKIve(@L6uipxl-bUZ09>$Cg*)b51gK`;VOQ2AjcLIunF2Hwv6ZSnneQK4G8>=bk3FrMh z`Bmx@tZGcF%&8bnEOofHAP$KN zeXIwX$2Y!G`txxZb&;{DmGDHVkWPEnGHLIf-Y`D#oZ<4F9?H(HL3rifXlzDtW;#7| zLu-Lbz%Gm}v-})3g_s2lO4X;Zx=2ywL04C>_PonH^?~U!?FY*LnkbdVZKW;Gv3dno z%cWKOgwwU;KyAtYZnStKfoLZ!#1_Syp*zDmNmdRT4l5pv|FU*qX?i)NVmSp738ENn6@iq5 z)L1XkTG%Zel{Ar$zskU9L0;p7Z_0F;h0J`*gb#bh#ESSXGisSOIKT-Fvl_FM4eTG0 zU9#+WPdt{2_d_%%7rICF2mVF`y=z1%tSwa!V&GZwE@ud5C7SRv0dXJ(^aPb#Sy z49eKWMkkq19D{?S?XR5!21yO_Y3v1ocv(0zOBfOP-vZT#oYFF1KSvso_Tec@4z0uxOk6?oei;@{8{?idz_>um)nx#(%X`m;NXpe zH$dD~4W^5=R+Myo{8_ByN;lk4YTT8^ARU-x9AboLY5fV8FCi7bv()=X-tTwy^;vbp zEbQTBRm;6ux&6ZtCS?~_hiP-rr)=^`F9WMX@2RZg7maxT-JSZo0kIibBo8%yb3x#7E@@Ef!E@%O)G$zS(dfw&}iRybON*V@tFl+CeM88-n!%2#r{r zw#s$K`&8C&)D1PSEbQ;Y>?RWRYNne@9NEFvX860}@bu}^-9?E(b!XNm=i!8G(~+bB zl$Yxr9mGqD%4H^{qYzskf7>#@GXDdq;pX7_{1zr%%H1cH54RqF)}$7Kb|6g zLW6WOHFUEl05zt$F6Kz~2cFdd&`xfXUhR(ak|oc)u7QY;`h@Mjerx+4#P-hEVUq04 zfd6JPf}`6kg`yKhVYK+%w(FQ_yQdRR_kqyCC9|gVRib_6NSW=u3;3xb8d>|PS>Mx3 z>rl7%YN=hI0^QBLO=PNmwQ_-B++6EH55GAO60aZWb$-<^gOpAMFKv3uUp`_~DLTx= zz1kr%D0h{hfMWFOSIF`Y7a8gVICBZ5MAksMeQNqSim%ejB^m9r|HM zi7rp4kt27xpP``N1lHz#oKv*kd>kcW+8deSc&15^tCSb2lxx3|ytx2CkNu^3_2aEk zs+wSZLYCN1?JSAIX*@EO6AEBP+^vBGrhL8wc{{+HaVYRj9g=ZdZl>R!(=e>=W ze7^TSXWu#KSE?Pj>z}NLM!%O!8w5jHKQkG$Ok6AWRuM3*8sDy|d)J){c?kG9F zpJRWsaKP@%4O(c^o$TJbSr~^(1peBau1Hc=;FB0gVqzc|dCkg@r9(Zv@aW`fE6aCC zpju0<{JP711mo^@L9?X1ev!nK&U_@@zwO9|{1SR+(jN<5$AI7N&(~^)K6~|=h44Dqy05jUFp>=ePO$!wAL&w&v*K)$fWo@OLb)^d789g z^UGYW+mVqN$6cFE<92gV`L2)07_Hf`>X3jIXJJ-rweOuzit%mcl&_Fcv%6lN423Hb zs14lcv{l#K)6(h=Cp4#Ex;=j@FSvrrx0N0`BD9Nmsdcp=*nUcedxtP9ilqx|0xi~j z*z`rTYVPs($2@ON*KA9NAHJ)a5mCpb6eLat;xhUX&mzOCw6Z(;2}G_%46VP9&7aU@ z(Np(6h9PwhdF>tq_sK1AZ0H_i-|l|8N{#-#K>wP&TsKvuBAgMQG?lohhF=Z8~haxv38G^ep~qrk`wIzz{Od&qxv;;lkLm1y<(HHhbg+x9MC0drt(_b~8QL z7BZ^A^q`j?+=3{F3v=1H%_`d72Qh&ADYE$?Z)v*&#G70<0kc{e8YR#6E&%|DgC!D0 z!qX`jBKC$Eyn_dS(T&C1&B2|I{cERz;4|P-h7?nP=lH%+y*ZkPC!9)ucY6hTD0j9$ zw^5g0FEtZM0VwRU^fgUJ6!|avy}>oTgvvF2mmfh8A5ymiXnmB9^(|%Sq*nbNby3!E ztUxN1{(-D7PLHq&N{h(#iPNv|Ff(5g`24=VUB~%cL1uIh4k*@xhdWk+zG3mYE}y*+ zYV10bTvrc*(oC_oigR)nf89Xmfl%{s+3l9{Bx3cD7E*E><;r@&na8pV>N5;}eB;qk zS8oD0E3~XAfS_ZnQ3Gw1LHZ1VI-YiZ z-US*8FI<#7@p*}2j89G*H}_v@wWzSbow zm%DS$uW2r*#`n-Sxs{*DFINye4Zq%YXFb*7=74dzl*isioxTw}68Gq{YzD&;X-0)u zVX`TVq%RS5;-BObe4>PDXJ$(Fga};qeR&Oj_Kh8nOd{5QeSJ%FGg7AWA(QMl7yl71 zpZmHWdTs^CzPh^Jc?D0t&piTD1mSD+-HZRZD(Cru?aWl`d-PP;;43t24+TD_o%AuS z4e71VYS;OH62nHTqQ!C>r1L1);nOm&?6sL4kSbHy{~MYckG^D_k{`h5d~1dtu3VM% zvYP2uoo`f6DvV&yv@^3S^6co6VJq%TLOyYv&uKO!=XHDsb8h1Au9Y~cc}jg5O>Cp88e`s&52T%0q`eq zqh`QjO&bKp^*LT?Ryx|R4iF%pn|N&ATaFmKleJI`{F$VyG*P5gnqYG}+S#2SuwRky z(OM_C*-ocN$|ug!T(cQ7c1u+BzLNU&p5?cKx#9oc(h6_um|)K|s3gwO`$ zwF30hr2KkLS4KQ*wAHxdO#+4X*>e3oZz8TUGHzc`u%pr+mI_!L^4XxXgiy9riWRf(<|@x z(~MFZ8_s99)tDW(XA4RUf+Yxcqiv4OrY%12*7inZ<1&^~p%NQ){a-GT}>k-B5HTQ zxgc2Ph-)si?R?kT5?WcpAz#9<*9x%aPy(FuT~_b<6VFB17-W2X^L^U{;0E-4(_ukl z0!vqZ%KkbflIr|hK{Q2+8BwBhb6Ug(L}qpzzCnJT-Yg)DiOcE3p&4#{wl6; z`)u$@%Tq+6(&HGCbYfX~A0G&Z;nl%nDNE`bn#HmJ^N-uaD*zz0jyErXG}8Ik?x$?i z*-+-;!)Wi#knr*%<%J@w5`SIL)pZ!_My1b#jO8434iOJTM)c#a0`I$md7!S%_-a!~ zEAaeK*e6w1dj)|kElrnS%LS%GOl#@hIA>NJGZl@;{BoIjTx(kT$2!@*Jg(nM)e8C-KAm{-*_Uy65SM^d8j4|L9s`|~ zq2uwh5w&lfJJ`1{FZZFvBsH$OG;{@wRD+YCFCgBKrHWvl5=qK-C}0rX;dg8Mj~KU+E4UuG%yMYAbtvvg|M4(Kv0IB%P&)7ovhb-SHhgEhMe@$8J7B+0}`c zMtK>uBWVB55wd{+gY5=|A7Gb3zl%{Go)&I{6}nESU#u@}7eZEwW<|_PAKq;nKefRUkX6)46;3{)!6MOmw^(~YFmtOsF!Vejh%IyHJZFD^M}X}S2_do#9(|t5&bHFYYh@L0LoX)WuAc}{nyR{sD-q$ zX`fVixWOlfzUs81J@=5y#pDEg6hr^lzU8c93B51k1_dDUoJ?06lAfy(_`nbPkE1bL zt^AZqURz7(f}9@okn-O24vCnp!yR1?N?Ml2TVUwnSBQh>%&E}LA&%euH0)MGgG%L# zB*!V3Df9jVQbd>gaMs)eOygZGbKjKRAidhVshOphS}r^~9U5;7n<6O$T%|Kg%AF5C zc9pE8PE_c57qHtkn13~1@~c!coVM1{s122Mb9er^wOG25A&;aQxT)_g+|@_~)t?^mKQiZz~ID zXAeF6G)V1Dxh11q`}HdJ6DDEA_D!;^mvJn-+*-mC=ctX>NaH8gG9>cy7=@r3~msFR(+}!;_jOYomN3l25Yt}`^dfhjpqz|6<5%51kbK+%on2+KlT5a2R*6W9yxJ{|FADnKl0sM*U7Ra;{|=si0`8!!FjbQ_j3k!O=KPU8(~ZA}=ubuH(#_6QSvvwRc{hdj_~ zR4);?eyrA20Vc7f`jWZL+PY1L97(?lrP^OhzHt#8kZYqU8;n z{F=?K85XBYE2BabwptfvXZ4QSVbk*M2nGeLqB9$e@YAMhGx@j{_v^b_EQApNo2()R zGr-bOwbm2!Mc?)_@en)0<~ZzkXM-rv?^i;)he>!Mne=(miSZ;e!mXD#! z;SYF|QkLi%rd<|=Q;K*oo`ncdTbOJaX=oV-riJN&%Nax%`4)s z1KH5BI?YDC%|l`G?K6Rj-iO2?aVxw)erlN&@O86vTEH?+AsB5}E^IDMkpd^r9oU4Sp~ z01mNrha+UBdVM_(J1C7&u6N1L0hYOxcaTwr; z)b-8+;4h2(Wj&{zMb_EUbT({mOK&;d({@qD@ggrN=wxs9)CV4Dd6iE69eNRsyy>U* zcv|{LJy)YWw#H)*K)o;EbV;_o49xP8 z4<%xycWRTu*);+Zc84N`)wMYUBfggxL_4!>8O|`*EEjsWI6sH)7@mK?BlSihAsfR> z4>}ybQF#Ly(Nl=@)&LDNcAiw6veGxmZu5d`|1yqm|H#|BcLy>Zyo^sM?(3R>#8!_O zxxA`D8E)ypKba4L#m;>RZ13PlpY50H^V$ai)4zT4YqvXLq=@({!nXi7#UK}53y)Ip zC6HF&G4Rq|vNoOky>&~LoXyN*u(y&Qn@b%*{9{O{g{gZD` zDrP~;aqOE34w2O!3uT)GE+)gNwT2IRT%j8ETpAvo-AVjQQ1>;iBE2%JK1IM#h)u)V zZlr5SZC{s3pURl*>HGF)`$Td@AAuPKEm~mbQjx8;DF6X^*ISqT+t=N6{%+p>I~9Z zZ8v!UjK8qFB_I3k_>O3#S9!%gGn6E0mA4+F#OEaS3ZI|FR@hg>UNQ0DZsB@- zG%&WwsbWEBmjQXL@SXF0jxzwDYA_srK4Wt&>Dle`i8@UbNL?az5`A-SMa$ZD68gw( zwWuL5l3$_q6329Gm5x0dMAevcVJoKGjJ!tA!xKxR@aQ3b(q{@FSNZD!Lb?DKjFEqh zfckC}TUR7)FsVszdCm_8BEUH5aJ&75di`R3Eg9GS*;fiDFeV_Rdpf!CO{OCLl#KfY zr@{41o$ayjlokKX7oZkF^IH(+htY>x%DEX#r)^0U_J^7xvK@Vtuf( zv1Y@zy5&rMt>F0D*JM@_W+3b9QdW0uQ9(JL?-G{0b>nPSyg1bsr+jpdp=>*A=i1@c z9jpJs^KAcY=lg=Kfb-KbwX&%nwN`GgoBG@LQcLHkKc9iFIk!+OlSO-+t0j zE~snav~v5^C?y~OK8zh8QUN!4o%M$(wdpj9f&~or)w%cpMsFp!kF_;77(e(d9e4lf zeMZawza|!_?bCtcEN;AO4P0Vt#q+9b_dK_98>Q)>pux?7S7B!qZ0)!Mj`+lS4$GjF zYHR)A_GuvBk)DiA?I%iz57gydi!Nd1d2s5Wt=(K91`o<$vF`A8FuHZ$??^MbjbbKi zfQQWsU&N)ANpD0Z5QIloBeB1citD#&0{FnO{ zysiM>Ugfa%p3k6Iu-SH|d}(|Kf|0)T4kNsx=?q=7&dYrfdCm9sLb9f+D!8cL7Ro|8 z?z#X(98$aH)j!a~N1J~e&9!-loa~%_Uz}>n6L`IAp6geM-Zon15yR2D1YUY&D&2c4 z4`PG74T*B@xxJhK$HH>sP^|lh{EqHqI~r_){EljQIHS8|e4H3L^bRI1NC9kjE2X!N9@l7!pMzg4&VTo{e=ioYNaHsKI`b+NcA76GQqyCf zo`~MK3eUF5c$7j`!HkB0LuCk$1@gViyie|>lWh!8ke>tTYxr$`z9hLh))?!kTo}ms zsAi?>lQP+~|Fp>Aqf38=K)vSxq8bQ)Hr95s&NIVKv-M49a!A-9t)BHNC7Lq#6hc>~ zyEN&dTOh2gfgqWSxCB`f1k|f|ZU3UVSkAFLF2>Yly}1F8Nmq}}1JMEFy&ug@6P^Ib zK$#YTaG><&?r4kA-EOY9A2&c4DBWFp zh;2PTc!x#IdgGlkS)?v9{yTZZ`*x@I8x*6SPPs#)M8leE@1#cThB9umo(o4-tbTrdf!4QzO$YW*C_;#B zeGH)2Yr>zTY_5_A^R+Vfr3xuAmyJah*BSW5E~6WRNeXs$ZgCa_v#Z@Y&JfE>d4O-?QMv!tjy(eZpkpXMd zr;bSFPP(_wZOME~_0o2wK)ccUrUj`XR)#FXgWBsQ$UpPO(IlkB%SZU4Ah*F zEXv(9z1o)(r6-NsHZg?CT}4SGYeR)`#O#)AcOT1K`eXIOU$G8W;ZQdJ%^?~4S0 zeiA>zCa%zJmbaQLJ~+wZbZEi1z#}C$WKinRU~+oht_B)_^Yy5a}N zPslSp+m4n+USlU<{Gt}wc0DeWt5OsT=y&y4_ASn)fG6*A+1f+m-W*B&Khb9+qWh#d zM6faM-Orx;7mD3qimIwLYEoQu)S? zwx3H2b0CjPgeCDBb8%iChdodKUIwn>27@_Q)<=Ik)*DQ^1`1bdyd``?b+8J}^U~-;p*CZv7zn=!Ol7;f-nfhzx^DPg|HdtoO42 zd`2(nU$DVhtHdHpbLTES`*@ouGpT825|f|G5)hQzSVdSKBqAbx1;Y3sp^{OnL!0GImHa?vBzEED}(iGhcAvfUg_*A5L>SJ{Y{c3j#KJ%b5guww2~3=q0y+V?ciLYH@alv&5@=}Vn+&XkjRw^!iz znozEJjOS?KwfeQGwdn)H-kyl~X=d2>koSv`&)6WBGx|z-mvkfNNkDendY8OBmfYb7 zu{=FsvASTS0icPdPlEF$l8;KFAfNmkoS%FAUx~zj&~-E+fQ2nTh8fG!KIridC5ojl zAjc*1Ncuf>*m``Ed2>9G`M~k^Lt}1nk+YX(TMNW)SqewWyDjFakyi}MBn~?n?-K%qjD;TMe@PfeVr3fJ}z4wUYR?ksN%gNl7*B7=$D$U=EWqsha*zK&(i2WsP%x6<>90b90R0V2g2Za%#Upvv`L;2y8OS}|yWy~_*) zY7u~xT7@!+CesUq+i&C@dxUQ0nB{^C6oaDGsGs$|Y$KW8%KA3*!sNY`j%pj1v))p z==TAL_f>||KQ>QRrQ>{Ze{MZ2G*4Wu>bL{S?lIwdVQ_UA?Np!4cAP^Wzdtiywn$wK zhQS3A@{LnS*rw5X$jGm4J6lBQW^2L~@Ua3PfBq<1La30*OS4VkJ*YCLXR12aw!XTn zlykW<(86C999E+LF)g~X7bx_@coF9c^)L^0_H0O6A4*a7xiS??{m}`;oJ>>-cRw-P zeNN{XFg4u)eDv-?J89vyX{Qd~E10i{n{mifXqw=M;&fj<@$!^M$i_JCdPY8v&6h55 z=i!==Nx$b*GX8NI>|Kn9=6M^Nr? z$FY5VI8KuAmW_4O-nIsy>=ver7f3axfl@nWz%y;xL$ltY+sC~!5WL)|9QXZYz?Wwr zmU3fS4A(KL#hw|xW$9JEX_?818Z5zwM$51k(NskF(k-4S0WjZmZ@O&!?}DYX?>D@E zfQ|h`)&8Td3vuotBCv|4*<_RQKlN}xahizz<*V@~MgQo88of%r&9s5;m3g%M*rOm0 z@w=1@8nWA1hcs{y86o0m2!Pn2 zI3(OZgb5~Gk(D)_fuc7FCSvO};N^{`RPaItf8`kox0@ohMT`B>(<0?|L)jTVJ^m+b z!u$%C>Ts56p<@ddkj30aGXNE-mEr~VyIt9EshvQKlbtsyo_vCM-{js$-F6T&-s zjD2HA?2W!{^7=i-xdZSoTMfZ_T-T|PL;$`-q;dC4Bj#3nz<_1MNfmBdD@mwP}{D~OR2q0`E@ zt>NLy4iwZ`3+)B$w$aGKyk%2(^{n(%gtpm`*Qjw_$7$G3Pci*FKtK)OT4q1)PpgIo z)hqcYTfan)pD7RKa_z=E{&zpaU)hU%jb1>)OED{ z!{DtB1h!9fF_Fp>Is(k5n+}%9IDc8PMO?HjY!8%aocpyR@;j2&N{8~sLg@8@3+BGAd_vyR)_m{#c z1!z{QYFGEX@YN>r{n>cpQ}#Q%KJ#?<=RTDJb)46u!QZ{@nm583wl>fUgwGpc(g{#R z#X*7h-&!%sR>rK$+dtfM97O6B^rJ#T8lf3_oT~wx*Ox=zSLDxC1>R%*X4X4S(*gL4 zF$42z?X*7po2&O3&D|LXCile};Z>&TjBOBPS2lkAHm~FGqQ`oORDOt^*cGqzwQ41@T-Jhl`l}Tv zaB)L)uKSR6yE+&`cnMrjf6bYzMk|PTjMiWM3vHux1P)yh7davlnYA|}1r`Rr>EqoQ zh&2GONl8KH77i^AN-uWj)%mQamwg)YS5~i@T!_kiu5&S?curLwE7bW_21EBIn?Kgs zEirBkWYFXcU)h^oIIh@@@(JJ8&g21v&pIKz0$uQCy(7DgM7OiSy@dOCYNk4aO7s`i zyX-%y-LP)~Ua;a;xYWQQuD^E@usNzz-7;4tI}*?L7F>Nm`DQpj_cSh`2bmn8HUK}X zrE*#=d#N?kIzBFiJ{QXUU+leSR8!s7Hhe4C1q&j*C@Lxff`lGWQ9z`q^p4V{w?qgD zAPN?WqVy(8@4a^fq;~>@Bp@X~NJ0w%Liu*o^N!~^EMp%3AtUc?s z=Demu*7>gu(-LaoNJnGFz1776`XIX~-#8S6Fn0Nb+HEPpt^^zsXur#>%trS0&P!SI zOjd)LMPol}YQZ|K zN>z^42h6Dn{acRs%KrYsCx^@_yP%1Y0{l*Qt`4PU57X@m#Nc#2SONvW=439kEAjB~ z3h3-kat@p29o8u6w=bU!I7zP7;UJF9b7P(Hr{s5TXvmR++!%7)Wp`)#Tt`zt@HFEx zg#WlJifa~D&?1Gcb>OJL5lb(GJL=|`2$G^m^KTxT-$P<+Q1Jc&c-03fAWYaE=&4iQ zQB*rGa)w!ks%{N^KxYd~^fZR#_yv>a*b z!)I>7jq^6qBOm1doO|FILz@qE2FAosCB zL!RF!+RP#RI<5nW?L21KFcRKsJu#Xq<()bt6!9r3!PQlQnQ7KkNPCU&UnBBV#gzi=Jc*9P01&){d%Hk(URwqblq zjM0+2mbfFV2je>x6^{fZ0>vA$dyQ9dTcoJx!wBuK1af}xzi@&`fpUPh;x`w-KeyE1 z)&amK`-JHN;9$MNtEjpT>~(0W>Nv{>*!#G%Yu!Q^pGS_HaEIQ4wM7f7`i+dFCb}WR zZ--u^7xEPXf}I_Ofn%Shpi}NZnez5pDXnic%4MoKz5|9~6n{RU>EGqmnWK(hM`m_t z$ji&x_ez58ob!?>qovv%U+nN({LvpuObmM}&QCUGd>j^m5oKHN$nV5(#A#(c&`fQA zr0MV|i#Vo6hoZ#X&fyqGRO_CyeGZ)Xm{eNjXyxD;k;Qc(IWUj-F9lX7x z3namroiwCFkZGrjm)Xp1AXQXR<|Oi9H{x<&7>0U00_fx5!=%Zy>-BQ3g4lg+WRt)krsE+I_~lCv8TBr*kzB|KsGU6FCbRCA}Ob} zOWIzY-acU`83K(Vt((vG+;pOKzt##EfH#1mZt2KD%2(C-{_az@_9EKuAfw#yvXYX@ zZxu`d2tx3K{xl~a92eDgH||Ss{=o7Nrz4DKEo$Y%1>*UdyH4TfPTkwC zwfCHWxjW9Nd>!)W_$)NDR^s!p#kU|=BTK4GWGDwTou}r*I&ni&WD5vI+krA<8629D z^(aX*zP%ZMiN@#c_9FU#6sZGwQ#+q5HCN@fTM?dO*6^~>cGYUN>4fmRTB_K7K(oTH zw9^)?&>`RDH^C^2>C`5_G-YAjkHY)Yh2Eb2mDN=ak+OwW5C7;|`O~8FKXsgfwaD5{ zne6sMso^2C4%nkZTZc}89?1-B4=g*PY%|Xbi{9xxr|DS|CWRAcxWDkismMQ=9Wm%@ zQJ&h+J)G*AST@S+KsG7|z2e9-PgUjQIXgQvM(rh@gf&LXaW-`WL^Yv45v>K3^+92Ro?7Ty`S#gG|c!QcQ zhW>>b2Z>41I&|+EPTo{gjZ4c^}dz_c0+@ zZVKoZdaas=1w-THnBWK+&g3b9wq_zG5DG3Z@ko6kxlGLp0$m5|lwK!Q8_rsPt>BqYpZsD5C$SR>6-Yo4mu^^z{PoxGwq4Pl6^CgY= zX(%=l2zLYAyTSz`$Gsk!+hU1AOf4sKCU`{aIeS4G)M-sm&+)7k0CKonX>)%z3vV=| zB`Ak_#oJV3ae`GtM3Dl)3*A4?5+P-pDt(~M*$x`o3Y2!$+97iyX(h9*1M)7Je^pJ9 zi)eLsv=Y`Of69@AQC)^5AM3+}9P{X#fmsMvb_dY3c zBYtGWWbY(!u4FU4OEkaUr)0;D;Fj41MO$QEvm^UB4L}Qk&WdF1_o#T^TuL>O->zN{ znMzrkMSW6B!M|1SH4Gh9+lwn--ohulwXQ!|n*K!4^dkf@vf^LQcJHZ6V^L~Ac^PYY zuA{ezTjgg#P3bvST5;RI@G$@T|16mQw4$N3A_OM!)xXi<2bTYY4kvtJ6Jy;*Cp6(t zNuPO&3wXJi?9#Az@RK7FA|UZ&5ltOOf9RnVzTUaKN42g;Gio@ETsN2C$sNXVKkTsv zjz3W)j+3vRcy!SkYcE-(w}NhDKW&`9rK#pIrv6wUwmT7Y>yh9PN8FIFJ%F6Wjc221|?3Av9W0ijKVGw-QbtU(4o^9TprZ)C% z_pH6l`!Y-k{jgrMJdQ1LfEg%GW_2f{+cRE)u&7cb9h%$3U`%~2Ntj5k3YouUC5;?9 zotHbnmFH&XVb1X0uH-4XA0%tDRgN)O)=~Hg86e}OOY%$q+K?d_y8|L4Nj%S| zT4*7&;VC?TSe4z=5^tK9M0&$9OzF<+5g788@W`g32SprfkmKG* z*2l`)vCe*WA@aj+xbXm_kSz`8FWP zpsO3GmrZ-0YfO*!GD=q7K`S>XRQZ&@%l7KpOdT`3(V(33CM!ImM$JFkQQMN_A(o#x z6j?E{FV#B>I7kT)$L z1ARXCYzbFAIk%ZHn)*5iT>87PO28T>jS$RX8^)~(O?LC$XNUukcToFs zDZUzWA}bt`!BcIAc=Jt9E7G~A1rb_}y#r&wEEVM5Q5Z!q7ZWIVo0@~Yub;zjxTMCU za}-1CuwF*7HA18+>%`R%8QHBRlH+T4xUQI1!s9N)E}I9#?ESy|rq7n=+_(ExK&7;b zvbc?vYb%k|@&AuD=9d}L1M+mipr8=|deuV?e;di@-yS@NwS2BUtrp1GmPr?wtd+a? zWJJqxQSVau^8}eCJkSrd(>~$za}*po+ykI`cxm)RnrZzIIBkeuINM_*5meUn8Z(h} zn4`oXM?B}{D^sI{E6#BNHHTJHo;1M zZ>_TlphA!or!S77yaw5|>1aw-0L9q-l`~weEsgq@_k(~R<%|S&{MJSRzo?nF6){dU zTlML+Xujf$F0y4VLt#UO^CX4klW)f;HuOP++c{hZ2PdYg^)uA}>SuhVc${0Yrh$)Z ze4>!(MVGX`{qbeIqlcDLz2q=xayDOW=Vj8mEac7LI#SNjS+pNK zW_J{4nb*qLFg7{t%nU)7j6Kz&!h2VV>=5GEW#-IRd0Kc(D6|?J=!oi3pnL<#Sa6X> zoZYJIf-UmQ2@}N^&{Aj(R0}D(YNww%zm)>zZsGH-?>i%Dfyl@2gvv!IN}yQ>4w?XzHd~CW zmjE>GlZHG(1L*x?8IY9T53m5ZOeFIsszR#>3?^f%u$~I@ zwE+gFfD^uBcFGSPxV-$b{sM-o4T10295Aoi$_EEJSex>Xl}fytKg?g#O7L7HkJ;r@ zM-G_7gsA0c`LR-@>{yXA?!CJ_k#kI99A3WqLY`27x!#MZEm&-2`Z}~ZPCbtM3crZf zEMJyZr<+qaa_ac2AaayA1G~m8=1LGN(V199kH9Qik9g1ia^t03YwJ3Gj1n#2TyueFijiUBuD`|P&&yA1#zin1l-kA$n>}U9Imc=k zSB@AOpnRz)aZv!6YNB8xn?^K71MP)TH{79+st7Ojx}J|QC|&A^T`@N69(_=a_{ZUM zB%lizncQdgH*TIj(4iPOqcLN z1wtC-YgQM&o(SJ60M2k)361>wG6uXKKL54`7WeA)B8{YV8EyYmwvZWH>@h+L687)M zguz@PI`w*VL3M(XoR0?oT5#87)23?~tM==1Zcrd(4e7LoaOTDW6$H}rXrC`k-s1&s zk#3zkf=20&dr+$=KP6~3b-sI&L1=8qpCvkf?!(ijDFc5vTt;u+1i8y;b-hDeBs`{M z)UE`ed4Af1Lqq&OL9ULVT21n54p${|T`I*LhmLb|bU@0jC%HK05#v(ss^!$BZX6NS zBa2a~aQuLQ8AEdnE|hmD1U6BKLMziG91+Mw?w%`Q8ZxT8*VQTukg#kXOzc(-r`2+l+K(<68TmJ9XT}MqsC@n~ zBcR*fkBw|wC&&D3b@arDGx1o?^ayg-;SS71Iqa&8-5ZJfJ6ey1zMf?XmHIl zS*x4#N&Bmihp|1_b)K7byAdhWQ|KpsN`T`V7ZR z^|BznI{_!SpQpKe3wVf@4y0CvfABxdGy3+NZ!s?PoR|mh&AA2D4)(?8-3Dxs{^_PW z_!mS40r{!}gg=BR+W|`8*~9#VNBPi4H%va>O(KG-!!v7;Z;N?|`Y&3`ktEWqi4bg>BoDZHyb>`iUjgNu64no)uxo zHlCl5kn3k(bY23OuI@F3Bf1#Vwv0O%(iLMAT1P2%N2JJc9C2$fMlX|Cz&z}X^$g2I zavTpm-&v9+3R4)EOlY2D-lf2PnGnn*ajGu*ZrS1^hwKL3oYEXhN*DfF56iV=)Nj_W z6V{AQB_usko5yl(2XWbX(uvAd+&ab_UqhL>vG&7h9X6RWXkVv`q4e*B*v{!YG=gAU z80eMpsA5iNe7|S}z=`(3`{3U8YUqt!hm33ypO(e(3eEP2Yl6((vYJmi>q>9`CRY59 zY!M+KpzeWf`#Vr0uCwy+LzCiLoZwtJp##JNV}2?*Tb0hsVf9AD z0I*4@C$NW}Bq=E4j(grr4GX1w{a9H*k_O{B2KmY^7#EDO?s^ORqhaUF!(!;!_@>%Z zbyDte0nz*#aT8h-=nA_?t@IVFw-*Ku2;=jCLHN_T^0M>-enJMd)opRHnWjnN=@(`0 z2>?HjS~;X(u2in5omoJd|!ZeQ;E z_2pV~qU4UdaW$#X;cHKd#@-#jFZprR;HL1yno1oK+ zC9UPC%EJu0!|5hnQqxc_2I%^&1L_h-2_YWx)RU|h-6^kXP7!bnY*pqpiHON(gsH>) ze22u$m)`+&6dvoap5} zgs(*{`WC`EscgjPF;ci`y&jg$15&4e@kH-9uU6rhmgl!FKNFhWH}@5=duOi!mi1$d z96;cst_lPQp<~6zvjQ&e#2h|RqT&P)#BHm~44IakEhxq89Nr4J1sX|*7klM#^bWoI z5tx;pdbq1EU;q6Ve7QOK3ndQy7ywh=g2rpgSIg~sdDC_LJdhJ1q3&D^7wl4WYt-9* zHd~U%O4Kip_nEiKP#gkp@*Pt45HxtKlZA`8YSLN3kb_v%Iw7v@QX-ve>XsO(Be#Ac ze}R=E=OGgp8Q@4I6ElqCuD4Il_VX4}$H&_{D%E#V?0U&tAf)Jck#p<4DjtR$Zp7Yo zX;O%ZZr0BL7z^5SN6vT^;PyNcKTN5wNpxnsL)RH1SLLOP{8%|V08jJ?vFYjY=-X@r zbAWM`uU6ei_Y*^5a0VqjnGehokAeq!>=3J1I`pVD$0=asrZIy5#YM)`AeFI_R?6cdq|Ki~V8ts&Fx z;q%wb;)o|i?o=KUtFAW3<+}GY(YNsf?`$*Sn84p4R&M$gBdV3-ix0Xw^=XQ3TyK-w zaRX{=BE?C{-OZK_+O{RwRyAk6SRG?-@VfJmb)8}SW`mYy_=bJ-EhohH<0S}lser!@ zz6B1d;#ife_Rq)Y_Z=WYQLnb`4Wb1~eU|SJbIF)M{?uT}m^eyYBf8Ou94`AH^nvJl zu%aNzX$D0rXuQVMDud?|wSRSzO1|Frws*T}mX5d@9CwES%sFfAImZA-q2wfEt#^Md#I*B%dj%U-bR|K>;h< zB;1v#B-9ye*e!oeSGFl6x>lYb#fv4Ng-uCg(9UeBETLk6?{;Pw;O&%ucux3ydDnfQ z{t6%+6txIe*2wLNIpEplq=`n%`!~v8f%hKbc<&E=&{-isYA2Ib-|P=mq9IGi z&H`_aS2^{!tnqRK(afKc^8fJ8|FPksnm}rA_1sPHH-s1he1}=>eXa#!13wF()IBa+ zBf#Sqlwd()2iM*q~ zz+X!q&?4buJjWmIU-u6v`TB|oAN-x#DBS_rt{>mVh3)$Rcu#)f` z_p_P2F2E)*S+}YFzUTKFz*n%kE`9NTA6NX^uYdjH_7y;qx-FcAe%E390-84q-p`$X z%fWwNBkj%o_cb2xA878|53^qi!Z3(y(Ak9DW=Yg2$ln)ECYOT$xV~mIQ49ldw3Ne16xZ znJJH+0?fWu?2-Io|SamM|BiJvr{hK(wco*Qi+ z{9e#36*oy%XCDlfe@qQM&CB_b%*1~U(cpEYJyb09b;;i_*Jpq?dFa1y@_)QZz(#CkastX;x`%4fcX#vE#u9jhf|K1pe{cLFnu$5G-@5}2M;EXGtwZ1@uU{H{$p%<| z%!^X!vhPcLw*!_edr=Bjel1zn2JE6Y+AUjR-+OS(6j;)TZMDBZTXLHd7{|hS1bRH{ z_nz!)FLi+E>ByhxN#ZsTJu%$2{C5RzfA})Z5!`sitH1rrul~NK!5p^-eK!M8=npcW(eKi5Q8k5HZ3GPt@*7Qw6Qw$ zHLy|1eP7~d39#fv4OP#Rw#09PHV>qhC^gKnFGZp)c|{|)m?W8(o~A9~Wu%!^f0@_X zf5WT-E-i}g&sZG}+L)okUy79X{S{6hRRJXFk!sK%ZKCm=1|mOI?DLF~CVU$}>KfP+ zCiQ#CY1%e^$zVOR-#s`$|4bivgd6@ve>NVNTO-nXVBe~6^gAv2aPjELH~A&K#|(h0 zy~Nbm@2l(T*OF!0l4=Y*TlSYWdDCo?DTNdNuc}@DWpIDHkv0@(i6Ub7D+@e*gk~Wc z;v28;e;a*)n|AvBzIr_aaNy`o*Q~zxboTb|Kc6@ZB<8gT=5Czb=VIU{F9B?T^Bfc3A8j%LWP6fq;rKTUvm9+nk%jv2 zCBL@O=DOmqFSM_3;ipHNjMXu5<4=G|6HJ$XDfa)`&$!UsnGyO{Hp?$H+JsLqui1CBsJsCzVcM0mI`KQ;{Q_)>WVxo^<^6ACK5zx8 z)4$(BIc+9}(_hl>|AsPr0bc!)=I_eCCFhkcAlom%(H#4eLz*PL(g2oh+=yoSy@a-n zj4|)d?0XMx^G49*UsUq_?~SL8opa;-*MQQ$63^R4GEprwrjLIe{C_rmyadeYsVuh5>0D;wZ{+{} zCvYui1dMzh-SwisVdV3Veni2@>CSs8OU6yX{4fT?rX5vp;`!ZWjoEMJhQJskT zjeyh#1AgB78|AN#eGEiz;@$1k_5kFv5{e{_2RnaTEczOnhl3c8l3vktz} zkz~quvd8LR8@ponCz;4gRUrLWPjSLV#TTZ4W+BBnA8_K_mi&u7x-%@x6s+rRqo>qz zE6)o4BVVCMtGbju_mlyj8Rr%^z`j&@!RS^f@1nlhpW1hLa7>9;9VpP(0~np4RA*rD z!jD()&HLM9Ke)Uuw7jUA33P_Bo05Ra58)lp2Q9TSZB^x3*ECg1v-L0Qc5{Z|iB%4J zpVBniMxdB*e>v^w8m4B~Bf#S{9Agc1{K0uz*@hNDjd5GT_MO5gOCEF)H`|_5@J#WX zYB8BV!6N))ZPabLNO;|g+MKL_GpvIMK7iPXlBSuiXfS%#VxkYtIRgYk!bYFf(N$C~ ze01aMl&#h9ODp3G_hE+ zfgRK*A^M*gw=u0ND3DWsxu3hufV7E2^IQ4d55=|@G0j&@9B#`Rj>@Yid>+hr(xxVX zK1TpK4Q9Vy+yZ*7zI&S{g5WB}Y1Rkn9Y5FmmIeICu2}8FMmdHXqr?x@uq%aZUr9;G zGHWFb<-D)nxJ&+$7JP!Q1xE=epNM=k{B&^xYPt9dx;VRtDYzeYMUCA_++kj+BiXPA z1A#|Y?Esc)mHz%%Mrdi_(`(eR8LscnMdM5 zeM)JzBjQHPa8hT?{YoftvC}|o4V8t(ulJ#Db#gV(2YGxXnvnr*wP^TxD!1Z_1i#89 zpPikuZHL|aWoYl!t`(%I&wVKetpiiBOwsduAzoVsLs<_VGbPkIFMoAkJTGFDgGUVA zkgrtpDIT8a9;(Y#gg%i$T(y#>Lle^@fGSa6mmmle(}iCVq3IqPwzaLDA%Unf?tOn~ zK!uRjuUOH`MeSDEyR5V*X)ItBahH<(#?|}q#fhUfdS(m7Y=sUu^-Us*bf50nSQ!7q zE6`XOt-&l!&31WRowLzBU@`hm^o^Uti!I!>2&QpeI;Pt(G_h0d0~P< z*>SO$V$#~XZPF?@?3(!%Pp9=Y->KIyz>ZG{%Z*Z+Li>|FJAA7qO3z)pM2#QqsplPP5@91JnuO#&PAU9+)nKrS zFo5eU@ndibWrdvUOf)SejajA%X?^h>l#myfAv7@y%zOhHQPZCKoD?_9K7mLvHf*zP zyvpuPTp6|~Ub&`|oImb?iw7u8H?sZ0&09l(W^#l8PmY10bx%UDSnvSf z!&#Z+yV0Vq(DkZI9t&Eo03o`R*LIY5sdZ?!Nfky*t#&%-IS-t!g`>=|WB}I||B%=j zp_Xe@bI|~9-Q3DU&7mi7+!TtEPn3-ouCtIBxS|$wk8yV^%X_CwqOdcYqRrHMY_Ry^ zqmO9`VRx;zPRs9D8^a!NgWi3_wC0_K*DxGN1kdp2Br2j2EUD1LEsMPM}FvuH5g zXmq>&qu~<_q$&sw{pxKyjIuRgu6nYGn@)(6y1dE-{lQjr3b8r!AzQDgWw#zvK< zWm>t@84+yp%x~TwnBt+3BEhEKwi4g$fhj&&n+X$+Tk&6e2b#Mm87IEtFfS{L#{Fju z29#K(R5h$RWB8mH*v=1*7az1Rc6)j^HbU^y+lneRZyQ0wGKr@Jf?rwk9gT`qo}{R- z4u>EU>!I24wcJJLHAIFrj#vEskKs zKLIL`BgXOn-~#x^uWrXNy>UA**RM z>{3lL^a*wQ|!M?=7`-=goF)@q6UCrc-U7-!lDFGh3>w^vgh5qEJ6^>qVEezEf?L&CozA4@|6a$t*SW<{j3Aa)21l1aB*JuIv2MTz<8QCv|Ss zWo94aHgGbw{*@ln;pzmwAQs(3z@e0h!Z5Iwtpe6VqsM6HTdH27 zsIhcnJJv{dJ0kKjLV9XCz zkc7AD&)qM#4-DlNQGLe@mu@Uil6`yKjB^1NQ%CM6#K>A!Zf~K^*pB7bT6D*aVr|y` z9VGQL?snV>R;rFLBWNw_jvfO`qNIyaKq#Ae)TfnsiJykMObhYrT~KVtaJ-B?Ga6tSK=HV}kNK-0z{LmbeGkJadQWV8 zp?EQMY&na7YU@f}A^9cxM0fx^Qe{}ery#al%5tmUFq(%F#hM%=6jHw~`6e|@FUSv6 z0yE8o8E!g_)(&hJ_~gacVM+_@nKnBe>YYlOyvTTAT=yQwS;)bbZm-2n*Sy7DEcd9- z1i#_ijp&Q_r<0EG{UVE2{zSznxpP2~clND89y)}mBbJEb_t|!NQoBhs+}xQH;TR^87X(V5 z7lf4cX%V-keG=PjH5)bnQ=6>Z@X|F>fE7HZbrYg1H*9Njly?aW9K?F>P=G!wywkR+ z>D@fJypFG@B2<2Uf16^OX!4}b`^qx1MJ?*8d5cEA|5)+!3th3GWeN73(?_f7eWc7d znP-C;S%t-z!%3j<@EuT%S&}8bbe1S;IznRmgk|I3Tm?@$4bl&V0tY%{@pl|L@jyj7 zY?Y;5ux$JyN+M?!wyZV~A>093EjyBCD_Q3ij*Cyjv;w0VJ7VdMjN*81cx$*ulO_v> z0Q~BP**G~o_-Ai>Ml#J4!Dq?z`EJR%c*c<~_|1-DP0KBB&094pWuB z97#~lbYyx)oV15Qf3mvZLl)r=K(u*?Q(l_x>v2{kYq=nx-|Qb&?tlI3lDnTIFv)$P znSFbx6pj>%7Kf<^QSQ9`djCFM2m2c?$LlOSvTJt9o}ioZHh^=-t|KRR)UHyzisyit zm8FH>4xcKNzv?tvpkUPc|aDrFgdAXekkVuEhL zclo&^TRgzb{#R6^pZT1I22{|sBu1Mp$yk*Kc*Lg;eU2T>;@61!P;~e!m67#o9gocH z$%yAYx?#W!rcvB(=HBzmILMXkPgA*7)6?^s{kX0JUx&it&%cWXc&9nmA+vdSbTI-> zbqA(7w6%vKCH)u8Mcq1P8FNg_Yl#rPyCmztvH7c02gvw)y@?F*m$qznlt%sE08nVCDg+G?q5mUZ@*GGC1 z&w}<{W-c;adv=e4R$q~u-OL?Kc5%KSnj;o<=|LE))4iJmf$XOlJ+`9k{C=gkSo1h`#@KDpOi%VK z1$5f8(6Z3H7%7KBn{Xd!6%eAIL!>6p)%IR5HRxK?*Ib5dO!yJ|?8~~9aFOC_?4$Ws zmamXEu^$z{ENeRtP5I*8u8GsNBymTIfSnqbF<+>6vd-$}>9-QY0RJrgGS{y8I%qml zA#hsG?M}-oRZk`N?JuRPSj2al(2dDZ~ZzzC#v9|4ld z(IGY|?>C>Xt_Rg=udbhf_ypWC^R5Yb9mS1oV1Lm!_wNo3zMg)gdB7a|t`W!s&od+| zmf2oLFN6y`OgeaIG5K+qQfr23Rx0#Nl8)+n_m4C_X<+x(a%$n1E!$C+J&~sE*h;}ccCcEQOfjSrd|*Pr2GM|H2P@K`F1-_xOH*fqAkR@(qvc4RUv zvGz=+6rMgqGd1kV<#)Dei`#3Oo113SzRQ^)JIlU6o-vp4y%gnyy8+enoBn%^ry_o| z;*qc;G6&3enl=Q$u=_{%r1>mGwLin4gy%j{`ZbW8>bk+Apzl}WZkA*5u2~t+*JhBW z9dpoatTYI!UW9g#MeXc{r4)Lh>zE(i6>&S*BF`ns>#rCTbUFw!Yz)l!DBmp35Fef* zBk%h-FFQ~$ZlT3aL;dSl%oekn+~{{>X{gj5qK^B(lmj;YlN2hnBec#m>=Q0eCDTIU z;riNx6xZ6p6?=?U*wx!sdU;v;do#BBOKm(W=*jo4^O--;^I`2Z(DCcR?^7Z>Z7&8c zTRDL*;A^G%=AT>&+ZDF@^cEl5HtW>WzH1(tjF@!q&%Sq9`0L>a`Hi*Y8++TIIb{(K zgp76#MKK9_uGZDs3+Es3pR&}L<%$ehIx6XRF+TQi07#NkJ9de9sn4*+&QQ!J*P=bD zPi8AQ;}*al6nYuHRV?Z{avDg{sC|8jm8#*K>ZyfhJprAZ2+viPs4v|V z*Y5GY3$Yb%=69*266VizuZ0vtIfP@yoj$qG_x~9AxQB7X$e0g^kZKOC)Mot1b|7|U zVCp;P2dtCzANJs~G2p7PRT>_!2HS~qaRjstuah|4lOj2D|5T54Vf~mpbI@&cl@6`c*Q|(Ic%bR3mQ>oYTXJ{*G)b28J@>|OY@nh2w zpn^YfWEDcvHGQApe=AkBxG8RLty}DtRaZC&KWvCho~;V^0Up^GbL5W8$4Nm8Q=}71iVA1OX13vpMa#4%;%HEaIgCzQ#auJdF+Woj=xabXBb4 zE=O(>4Mr9dbyB5m-wzWkA}g4>Xke-SK-xXMgw^S#k9?vYW2&1QiG)7O84=WKcEzL8 z;rF1pzUt6E@>sr0k!rl0!urnAw>f+`H*5<`YG%oNxQT1`qD#RX>OB)y?^L&Q<#LBk z{_5OdQjS=rsc_@AyHE9au0MlwEv72Xoix7aV!3)nKqY_A167^1t`U~Cln0o3Nx07~KRy zw8q{5hJ_dz*bX%sR#s6oWT+5ec)aFxm#HP8tjlgoe07W{C%#C(x1C1Hs_8OrEG93m zXTo##tUtiZ6Ix4);&>3_!c*9In~-n9ot}{Ij-)0}p0ITX!?woz4})4|AcJU`QhIn_ zY^@R=)>v|#6(2+%A9gb`6mU~2(-Djrb;Q+0CGbB!6y)!zLEVaVvKR{*Ei^|8NkJCN z=j?8Wa7xj});_6I&rxp0FHi9&Yoiz;B>NAac|ANRAmNM|6Mf+ z{n=lhB;P5Gh~|53M(3amz@O6zMirOz3#VsKZIyXt@gB*P#&;^Ua*bhETfGQ4j&_fh z6J(Lf15Ijc@-NuRln~ccMQ_YWa-tYd%9C#i}*}bS=H;?5h9}kCsUR0Yc|NP>O zW)5Pxv3q;ie#8t%qGIQg6zrRCF;JfWK-vO&CUDwgaTq<%HD92FQy2GL+Qig|BKj?4 zw(l^dJ31h4_s$x!jjp@zAgk=4kP5}vAG`*2J6~YSE!NgA=TZb3G(tz1FETznXkH@;z>0|_Saw9&a zT}(W|Uf6d!>hQ96?BQ5;kew}EUv1M`h0arM3pvg3>yK3v`x`Gg=lB*NC_unRGDkm!iXEKtIsSLynMAkIwsrMP2cZVnNAj z{!IpKqqg$VOFrns!8-|A(%oE8i?A|`w?e{;?Z?(<^&N=c`zOP5*Ei$XH2DsVy4Rby z9kB1JWFSa39jTjPP_7v+ORRRvR83Wj)e(<5URbLpT*wNvo-e3>r$d^ydwjS;l-2(hmPCU{nif8VE0rqTq_OQ8hlJz7AFJl**PJJvu*p? z^W&(SUvO28l=FwqXbIEf(>>NgwQM);zY9N`lbm(H9jqR=PVM{lhhM-pUla0^W@Z;P7FG%l3x7Y z5Y6tUmGG&i4&}d(xFJZxQG?h-f5e3Ic*?`1_|#)$yNvWi#|}rAW$#Hgt{aie4Uta= zA_V&@9)=!mtu1oQ&`b$~kvjNfAd7`Hxw`dwT!}ZHbP6?@YVZ9vX?f&?RF?16gPFlO z#e^5-JZ>>xmaC?el*+%{jB=9$?3R0l2sjmuSN(UDxu=zR)ei-AL|)@#KR28z&s!^H zVe^F?(pv|doUEkdk6f|-B9p$bwo2Ks$}^b_>=lFbmKVB|gOQ9#d!GH18 z2^3`U^Sm2Q(cqO%JPok5Xp7VDPktbn;V7Zaw0A8wz078C78vcmAQ+4vS~V~h8EUTG zbE(Ubqtx|KMy{)UJa6Ge&vTR89_WuiEi@Z6kJvUG4l)#XxOgfy6ME#-&h?$Z7YHNo zt&Fr}Nbmwg$4hq38*ueek}IgsOlj9!ssiA<3<9&*syCk zMmdBBnj+;0!dTcX99n#&@)?=ksa!8m!cogqy42xYJSMf_1sK6}S;ZnVbXcU-@-oLw zG<7Ia)VcSO#{CCO5Yy6WI7fo(l{N4z=!I_5xZ6tkF&D(v{GKW+qQYiI$pJuM3bb88 zU&yNs{-xNkQ;}`o+cX_0#Scg^B!vw76ctLr6g^8kFoGggSaa92FY|)|T2ml|DxM>n z>o*$Pd4jZH`OrZR3FXA%`heJaPPIvkg*+}IWbi;gR_10_PyG9{+@8}H3`a|zNoo9e z(vvnu<`{M8bt4X`bKMIjbD}HonryQ6sf+BV;3=XvZ|7S12y$PK*jEnMwa#SzuXHp8O58c0k&8T1ti*ptW_~Q?@x}Af`y#q zT-@B%EA1@$8ggm|UT+|{xx_bWBXnsfl|^q&EZoX=l4)+)z;v^Iyyl1LO|(>?4Ah>V z0Y4PJ6&yQ?JcK=-N;KPkDRpb6mP#b&nyL02iuVK9+5N@wKeXNou2S|viz$yA~Et9MR}u=4WP z`!jiUdtusH!$0CEv#9G!1}+|bFDo#&v#qKtF_5B|i(QWnkm*N?{5z6#_p5*$UqSaM?+z=eWBKCUrTh&K@a z@#)Y?hsJE(S197Wx#tYgqPN=n%jq47vQP(sME-B1De7mF>7`~Dk#Fnff zp<$UhbH%;j`*uB1Z0AfBB$$0xr%=O7Al9h-#hvaru=UdP+Uc(s&lAys2ytt$L zm6A|tc$;;?$BR~8*0Nk*!t)SYo7VazR>9uu&6uMD-*xKC5nVB}IzJBGbDG*z$wMwm ze-30lIz^N(Gs9pw(Hb1*c9F@ zWVfK|X7^n~epv{KzEeMva|iHFK=Z>C-iPzmEwl0G?FUBPmR?$@MC;8KcQa?GxI~WD zjeIE3;WOEN&dsqtBsgBPS6!Uw(MzAW8v(HtRSD)FP#jqr0HBDjKKUQEny<^B*ADg< zjB^2`FupFean~$t2==pgxj$Wmlst^w3lnvM3+r}nzmGlsW9PYr2LrPdw2eNuW%p`p zx6#M6)$uEI&(Dqr{dKO1pWOoX)$9y)H0#->YwB|=ENge$t!Nqhj0-)-%oRQTuXP6@ zoyLJ`3us~DXiSW+BUL;>hEKAI+?O$t`n0FwR$4n91xw=M%mql>^Fi?TDshX&_=@>n zlqf!Du|)gU0bFga?`kPQCRx8@7@|kX%~K|@nC7FqeN3ZJLC8#GuN*u@6K4CUEacXk z*3*Xo+_uVJq34|7MZN&W5O*08CiObuE>lcD;9W5lZjoZQhNxmEQ7LXpns3W>UX=`8 zN6x6;oL`&2_3^F=(Y)5I;h-pD?Z?s9>h2=f;Fv<6Jq__}@~*7Lp@-H7ie@{*4_v9w zcGy{9{;JIfk7ZH^oIG(78G~3WU;bLA^#4)z)^SmF{ra$lqKKl1l!OJ+h;%EZq)LO7 zNDd*L!+;8?ASm4-9YZ$^L#T9j&4|R%gTOGtvX9-JL)uc2J3Ya-RQpPy(DOJBRQ7L4u`Yd?UzIKmX!u;*^W5Az(NmdSx^6c;kbQT1A4tf9?3+54-)4N$P&|dI zT_JS+*{KxlMIzMWH5_>MNR)&)Ow5S~Tm4?sW^P_1=V^Ns4l?=rxp%#on@2B_hl?Nk zh>p`m$gS7qFoE`Ss-vxXX3xjeW`#I0`0a4`Jg%9IG^Kf~=`?xZl28At^>F&9>SJk< z7fMuk>h8SY7VIM{pG;1EzC7xKIFk0TKYZY&sv^{~o)#*;k{<^>Slfs8r#!kxUpB-z z!ePAfCf|kDZsKtdCElZGmVlSdyCBAui!Upo;+Uwtv54DNygs+=4f}qUt0di3cU?uT8pz&OZ(ORjNG|Uw*INTPhq=*rGpOmDrj!(+9wsNTU)seICH&(Tz2s@||{=$W?D|*LgfNB$qJz`CFc#?$7 z>~%FX9Vy>1ntYBxv11S5()EY?QVGXr;?jIR8XZ<~hQ3f^F{MLMSqkkEF zD`*@O711UU+50TKy>B2oqkTeZ)Q~($m9^`=#mkEoQyr3Gx259PzvU{{Dum{PM!MW{0f3$m#@tO5Xh`{v7p=r8%XWpgBdWZGW9$Q~h3$ ze?gy(=h<=7tg!S_WxOe|T?H80Y~9WGGhI+F&wyqS!lg7s%wduSc^nQ(b7SrHq2dYJ z{1l30q0*q=;6~C);$+bVWw|pm!N0!su>Ms=rG3L_j%4=G-RKyKg3}Yw__Yx?7Eik; zNXW9hJ@0_XynXfDReFm0Deuf}TUBF28C|iivNaIf7lqI(HjFaZ*-VxAm$~P>bNlJ3 zK$Tc22oKJo;(KicYM~I^_t(g4VPl)9aFWd2%5hAqLuF^OM6(xn^~q9Gg?cW}q(fRtdVabbcOmgYkT`gK_Ehr9VKTqXMwqMoLSc`9vKEd+?c+0! zN(hNt7RfnNt2q_&K&$0FMTH!FvF8+1v4%3%bnRQ@G_@z+>9y%{h=Tj0B{a+4AQqYt zUBLR(CGh?*4VAnBDw|u02!ld_qsg31%^>p%Pp9-x3zu$!cFf^(9@*Y^=!J<1EzF1= z=2}mbKwkdN%i`^@LgcPI5HhrAj)@o~xrX-rsci(a&F!za0#zG+iDXo#3&Gny@h6vo_Kdg)Z%kmr4u)U&pqp&e#?^ z*d&X=P(H&5@7c7#CG-AST z$VjL?zs!5+aO9JtF;prQc#+XE*CKkWAhfo5_xul^)wfFt7w3M3Tll^He=t3yvbQO+ zPJEl|i1>8QtYZ{ME@*sBlVs*lCZM%Z1}R@oaE%cgy++MW<7Pde=ZNWKgB^P48VW>u z1B7E+L6(*xtz;2$GHmdG0%;X)={s5}$7;Niq{R>)H}M?>jb`N^a{I17e`Z)dQGfik!y)!9Yk=ikNP{0-j_WW zgHq!RK*F_r_XoUEIWq57$;OO8$xd460Xz==5#AD8@x*+ho^Rrz41f<+{OV2~HPiAk z)~vkc+?!1|SXAvX3sY1}57AH=bqgYPD%{Nwfg=z@4R(+qqGXgRqMG2aJw42A*5R)DJXwbYF3UJkzE-S2Bq68JcI-| zOO9q_AUWfA^0uA$i-aat3eASmv!%1$k?L1@VyIuHdN6g^2MSnCN{hx|*~a-_Zl#N` z2wb5bx?Al^INdjA>7-3pKYX`v22!PbvVGjucH&CvgA_{1L6f!JC8sQr>7*D9-eC_* zs_zIRA2$4K_wAth9v5?t0rT##Mj3PkRrCn7t|{OUaWZY;B|yQZM73(^b~#K6=^N6Gm;k&^iPezC_Mb!x49SCSyQUQ?$G`>+FX-x#!7* zv}Vf@1!*)>2%`kcP@Xss)Npe$G52f7>Wj@`_|vTUpniA|MnE>S>v>O9w2So ztg+GAeM$ZG#UI-OIRLs<(O**<_1pAlV4-V3Y)A$&Y|AWatG6k16~32CZL$OLYYLcl z@4;7!qkZ(Q>+xjX(JZOjea6=+CLDo3ja5G34A4EEeviU#J-QK`(}>~FE^yyp6fVRq zSj+UHlI}Zm>K8vXT%8w*Lc#1+-&i+;Q8CPPhYo$`*vz%8slW4Z5t-`&zixv-{ zD$u`>5DY5Kr9+*|QCg}aOVw)e4VCp--1;T0hX%?Dj=5t*j{u*A6Ux4RD_%uuKOwP7 z#FH2lf+m7&?y*7wK>#B>Fycx$Shj=3<3Yisc0$I32_Trhd2);f&WNAgs@9CAUyxAY zSaSo-97BzAFU+tnmdcabZ>Hsl*G=c)GI{(NQH%^hnQFjvd{yZmD{qm~3FI^oUY(Oo zjb(J2>`DM!aWk0CMp~EEGfi8q&lg@n&j92?n|K7QEl14abK3c!Ye*?`i#G4TEl-@L zSZ8HP@v7C~0MoNGTR%0D9khR8b3F>mFlT0`lA$d77q7i!`6*eGcb`Y+z%PHSsPO_B zI76@d89FcW?KP*^4;XL7&ufhfvDWAc#<4dzDGM0ewyEEWzE0R1V~QBDM{#amt;dSx zK$F-^PcKfD=P}p=uw=&>CazL~%-sRnQ5n-cf&t zL{VUHByDo3kwATAMQSh0U_v7^?q&Tow)B@tSDxPLSq(c#e*bk%Wp{PZEJv_O-9XrD zJUvV@gH?EiQK7cSU{9%D!nn!2-GN)5PEgc1q(k>$$7N1C|0R@Z80T4JyxZ6x~!MQZo6VTbS*mRI*!d zc~jIrfT&UBx#ycLMj$kf0VC|mNe1>3NqhfRCk@vjJfL=C=GnPp(bHg zi<3f>BLd`bPAOV7L;8W#KDj9of|2M0&2F6PLxqPYK!2$mNS>#II)e$V&>lKBxt?qb zKxk4TPG^=)MG{ooVy-*loEcoVCq49CG-@qW<2gem4?eoKmxp*TD1_1?ZX*QY#`&qw zvcAeUxDQWyRPg0+JLTl`Cfsb9%2cv(F@kS+aS4f)EK9ld4iAYvumCV6IV4g8eo&XQ zr9YrwJxa?K(~ysfGO+I{7&54|eTGq9!atGup=YKE3P~=GSt5~HQ$waMF;1P9nlIee zbpk;+BQmW7f3WxN?E5p;ekZ;GZK%kvN|I%feN0}n)6(G`Zu{G9IqF$+Ij>0O5*^Z3 z+(AI|Rxh$fGycNoNVf7twkJ$4(I!Mfuc*!NN5)ey@^c3RgFjz#Ru3d_P zo25XnFr9GMM@dA^Lqf#a8NqPn`EGr`@$SUhS;EDr_Quy|=321|a#-_>iF9g+@O?A1 zuY+=rn*?L6GnNf9>~W}?Ic~R&4L~6vKL`i63Sw$8Qy^uAXv&#If&q zn#e4>GMEv*sr2W_==XtGGvOS<^V;Ii*|JgL3Ms=<)p57&1A;?$aL(uBMzF523k+Ao zeT$JEqJ%A|j1e`RP`1UI-4pgEIj(78V$|Y_8sMj?H_tdaak6`FU-I;S*$_8^d&vJl zXZ`o=bdsyXP`_}6(ZkLWjMe4v7MvEG|c`*HE;h%(9^2#;f`Mqjt#qgXBKh&QFX6%e>7W_ zfz8;i&ui%5v~=wGoims(s?rlPJ+0!On zA)k%4{2X3gx%0e9ja4l%OhM(l?fl@QPnmm7lLZ7GN=JwBVfchx-b?EsJCNL@IOYn9 zZsMT9kIU^*Hf`Y;MlnU3Q^6MxydSqq84Yn47FNH^*E3T)Hl*7^PA}9kYc&9Hj;rq; z=is_+#+2vU+xuJJT*Wz2a(NSt5*amz)ydeJWM>$O_2GjTp5CCQ#M^tzXCG->&k@1? zr1OGPla^nu>+(Y(Q80q#qZGl-s;xY?KFp>65MU7AYVq)B<>td#B)@;Ce_HG3dwOPrUSWl%?%BaZSs}Hx4`PqJswDjOTu(S%h#U_E$x&(J_Fz#9V|}A zt&3EQHc>)_(D7G49q04zFIOsj_!OBp@^;ND%gS<#ZPTF4AU+zNGmzY}ezsFU6OR*U z%y|lrY%YK0z(>hFSz@B{=6!az*R%P~SQV<(+k93_=V>LMr<2dvqszKa_azFD{jxlx zx&@orFa=#<`=}RPVP6-irtdx;<-G>Fg()OKk{|tE2e|XN_7|DQ@mtMqPlyja7f8vu zZVEMUO+HGk6OtX3mQtGpb*Qc=uL9>c#bA_#TesxJRdTHSkZQ7|X~-wRl9oDZtAU;i zo_(H6{5iMZRX?8DioN%_etZkpu*>{V+$_GEM=-<|FDD4m@}}WkV6biwmfM)++coH!I+s8`NQk{FBmXG6Tb;CN z5$kil#p5!tQIvbbVvcn}UNv5k1!D{g2^VqqBDsY#TebwW<1YQv7}iZ<(xfM+lXq6k zwrRF)V~pA>F>7S5__5!Kr|3!RaVv>^#Pt>fsXL+s87L?#deS5PnghnhrkvGp(C>6v z=W0wvV+^a0P~sIw{z25rk6lVEsm#%WDfae{68R#@%{T=$J%L&}N>w}WA~n}Rgt&2T zqsS^4A+eP+$9N1WQq7J1NTR?lxh%_`Jaa~+oP{uh(8|iysK^)JX&_Ym=!kzE*m_+( zR#_h$cv0kBo_2?7>B>!(Q{M5_RL>pMp*7DIEnGf&+uBizI3Bozj+xuOZKV>LacU)$ zm#!{}9~wYJ*w-fMO;>qlD1P355|8wCzhe$Yoyz-lkc?BeU6uy7&(w@ z54(LAyi%pCrBEQASR7Ok74L>}Zb%2>?@Yw6|=+W`Lp` zULC;*s+^2baQkH63)Aq7J7ZG)5-E%;6lao z+c7hYmqoRyXLb~QO0#*~b9TLkmGla)tKC%6u=fbsvhzeaFiG0AxGUt5nQFcamwILa3*gkNL_^982M@1SW^Br16n)*jv%LVXW3(J{{xx`us4YEk#N+YRnsK&@tjs!`cq*=;I_?yjsZwj0RxFD2d2zHS0< zhYwZbE?lfu)-*(r`5wY;H*1Cj-Sb;qi^I%TzFI9y8D5u)531O@7ipJvdKHINRSo)J zs-O2B;^JVdgo5>GU3QHEW=FvInsPZ5zmc%^GJ*B(SsJ(HF@5Kn6#y|aQ#xV9Ka-!e zf45hJX~}{e&-Xwib80j7pBSoMl6}bm;)SE}2+v33WmYSqcIa}Y%vh$V0t?9F+Ndj? z*ql?JDD8(!`gyMJ4 zlhU#ziR2PQtZncw5eu2~{RCt|vaL->c;JVL=cu_IuI_U6sl zf?qB7^YW}oyZZ7Bd%}{_6O~Jf4LVZVv#{K3@=QxAO?W0%jJ= zuSvB=TYQygVSSU_30E13wnEi?`;rrD3;=4LdX|C&O=Db_cF|k%-g1C9HWWmweIED$ zq`N_<;dABZkxY|s(>LYYK;wRP?CEVY08H;2d*Nlcw41Z)c{(_;y=RZ`*j^iZA){Jb z=k-@Q-r?b@C(y;wiVt2zoqTTFw7iztLb4fDdFAcTTefXiSC?)E+a#SjN28V`*!+e| zVZ2Xjs$Rs{tRGkf2TGRlCG0yDGYpu_-6gl)D+t;YXE|6&^E=++~L<=P|y%UI!*8eCE=SxMt~;Qnqb~9Q@h79=;%x z{qTGra;D7sFs#hFuTvtf@|>q~kH0Z`|8$*zY}t4ow?cE88Wktaw0EI)R+RJNU~ET0A8uY32gl)7B`K@8)-ldf=+zwd{Gu^r+# z9^L$Q>uqH@{VW_4-xrNB!jK2uaEn-}`6o~;^}7|xL+Bl2uy2u0Ryhxx=t8%eZ?s^3fIW^{dehlyc zsP^`XW9hELlZnN97G`sCp|)S=8wrM$gluCQ+MSDjM|Gf*J1TN&T=huT^~l+9O*vlH zyu972iOCOkY7O!IBTxemzJ=Ij(H#;9y(JhrUN7eTL<{CH?m8k6`BD8ga?G{%D86Jm zMw#!ZOvTQ%a<*-y+BfsCicrzyV5lDJ?j2scx^8?##$sG&hqc;W(spX>=6aX@>FnKo zNXY$meag1L!r4!ENDow0k;hJWLVmv26u+;7aUDJ`UyhJDOS61FcPRfRI!;W&^7fGb zyesgizIFiLM)bHsKzp!|mh zpIHdT_)?$dh81zN>F;W~@KEv8$)BuS)$H2eH>?x-&R$ub=2s ztl6lOS6#8Zup1)gy{^x4-k?d>pEQ*0DwG*&h(9%PU~tQ!>DhrUfEwyYs`or1f4x|Z z@Ep6`7Qv?e#seI(#np8{1dHh6IiyK{%f?A5ozG{hGvpk#T=NS0I{L~o% z4#_RAe3AXMt}a6&%!0wG1VKE4q@oF_l~})nxjj}7&Ds($nX!(P za4UZK4S4?j!JGlXokGlW1NE5u9IE>eA$HKkxV-c$>)3Bf8@rb&pL>3d<^!$NeV<8K z!=x=2693>`cK2?KPv-l@yQ}%Ep?_}_e5H9$IB**$bWe(ww{RrZQMn)|D%Ao)-?`^? z7z=X7IEdCwDsIen+bSSl{(Mzum78TnHMP@kr}XIopLr`YEJ2hF3=;B<=fS6+lhbyf zVQs}Tu$bJ2qzQEeFZsI(%upaj&^c+XCBv(IR6_@^PFI7RFa-T~2g+_qGaumrCW%*8 zpzu(79!{Ew3+Z%h(tr$~>mv#uHvk?qQyBX+R>*17ffhNe9$95D7W_0#S`SIq$NmML z$-s+cy>XkV%3x2cXNdueSC7tEddsx3$xU@n>1)eVk3bQIWu)Xy2@F$-T2}m0i^x%q z&jBiglFujCO^nCm9WtO-GyMVGz3N&bL@vcfsg ztZY0{3$bat)?l1$D3R_t)Q)^!5{8DNOvZms*drgUo>o~&lSFSWUcfT& zOm^FN0`}-Gf7ANw(}qyPXgMa%a_R;sz#*kuxp+k8A@A(_ z?DPd(7a*1Y-7|($=;8eJww;_$I%R#-7A+4g>wOfS)wcd5%@&4cuLS7asQWSj6DEXx z+$TkVlZZ1sS<|c#a(6nNdJYsp>Y87R%qO1vAlj#@{z0sI7xletmkbqMZ-1dkExKOH zh=`g5wvdB}uC~dY<|22f*5@4%n-K%C1M_zB{Ds?Woo+=RAX=yMzbq?b_G$EiK3H#x z;%~f67;BFN-^i&HZw|#JpPcRIwj%4B_uIT%7)lPBzs`S-Yo+cHj#S1yP(*Yn`yK4A zEJtH27B_*#5b)}*6I_6Fg87Ar#rdW)XtPC!@j6ZV<-8e7%ML5LwE~Td00WT?;<<5HwQ$jEIbaxK-cfnO1k@!i(2{D^dNU0 z1ccI<*+0T6U%6wP-wfnWTU>2#?UlH7mXrN1?>^p5N*R~V=QOgMPOtmfjLlTUQPQpsegc!#USrmwHsO{OIA z=NoDF$B{|GM4TULfkvd>(0KL79xyf1(tk8odr_D*mn&pOVXxl{%aEQ%s+J){qM@Pj z_|hdC=5sgRURg}hxJ2>s##M^@awIwZ8o756_z*=NCCrqQ!-KFc?y;mP!W7;kzOyqi zRt){9#9_B5HY>^2jspTQE=#O-F9pfZ3dHE-tN2QrNMQcPM)FS^WU1{ox!|wB3^z?k zf(4XwE8|DDpLS5EcX9Ac;N?Cat=;&%naCSc=vyqcyewD-*DIIbs=%pwl|7MJ9GTc8 z%yE(}-^~OAxTo=U31Qj+h$UZei*VRfC$?&C;&{8Mw`dJ)wp3hB;57@q&^3 zO!(aN#e8Z#plVrb^gV@|%^ABD1fG=Tn6TaicsD|l&o;?&>hvFMMi!>u;lJ7dPr$fm-RAl8EbdWvb*4&EyBlovg z#%4c^7zqre=5>7i9#qn#aljzu5VkS_YbeJ&nrUfAP;pdc-rVzHdM;_o0zLGf>JI8k zjy`>Hs8q8L=QdrjI$<`*I`d-89yxKW7-jVUD?B~5)lKbr=Dh7i6b$Lj=UC-N?a}Q$ zqF-r}mROkVrYA6^9rSLb!fW&yvhu>pgnoMrn$45C1h*{Io-)nUR$)6~&>Xbr>+k~2 zN__RkB{?V0p9vN66*kvJkBbd5~p>8wVae3iD!`vPJ{04F~^X z;r<6h+5rV=tFJ?Q%9Z{~1vhOfQ;CpbO4fE!%IvrAwYm?QyE(Y@YXmbQy=noi|Ka@~ zVGu^O-!}BEDkyXI79p(>O^vtTf4<{nO zB$(-at=cSW7QD04*L8s^=f5%F9Ws~ zrz|EWOd!Y9IMNFCY~Qu;;m?voD}?T&;1d;NV|t%>!K`;CJIbWmbu}*04Hn7Hw=`pN zo&C*HQxbHqEf{M)?z49jQ7u=AdN5_RyE*6L@A!a>2J-MpOR5SsJ$2tjs$1J=Sh2fM zG~QXl+DwofW9j=KUTZ}uQM4Scxa6Fxg*#4bl6xnYiOc%b+7;g6m-7%?G=HR#TeWNU z_1IF2o-r%(hYTW~%H7FQJgDQQt0|gUVlnLnUfXNs1l;6YTcT13!;wCJLJnNo?_gtb z;gcX~=D_$3dfs}PYn(WG@g>hyE0?btIqI?Nm`QyxUa97DH2bCXrPs-ehXjYD%S+NL z9Fn~`kMf?4>8{{Sl}`t|Jf>uYUB4;GXeLuB3dfGndt&I+9iGOYPWl#d?K-jWkhqPL z=`ktS!^!560<7e-DDDIZy0U&R0GQLBcW$+~qEr_P1L)DR9336SfY`volr7NNUA_m> z0n1TnQ+k`AM)ttoZX}a}Ib-Doj(u$xwM8267`PWE0D+bhfxRr4Z7Jc^y5w zi(X>r-AiL=@^05UrnDQz`4iW6+h}O-*}Z~nuC-*|6W~Y8hnBnU`uZT!`ceVWf~qW! zf?nv~@>2Usoj4Alc7B++K3?9mw)!#fawXi>9?_!k{3@8Fp2m5o)ul89trj{#d+qW-} zw9JJ{P|tnO;V4)y(0Wjy#rdI5MPtzRdLN|k|Xq{AR@|C!eTHLt#n z8`+r>jd#s>oz=A*RIREUkRBw^RiPAvwA(ccyi9uj`jVgU! z=L|{?GKNwf3y!nQ7{KPjtsbrOJa&@7+xoY-${mJEyJ(0-?-HS*JXV8js~ zH}pZ9gH5XwKXuAR!ADl_``ies2&+UM%0nu{1(b2ieW zMQn=MD~l!P z&vovx&jJaB*az(zek+>{Z8%Cfi0OpiwjpV#wJZz+(Oe+xD1As{(I4eAC=P5XM$&h zBouz}IDY&{|BG9GM#-M zA8UjuM)?258q910#vW8hG0ADane%UhP_Xz^j~$@modlbzS>@ZgpAWykZj_k|D$G>$ zJFz?0Vvj7Y3H4n~`mORI;S~H&t>k~Zo8Jym?C3DrG~~C~(J^pv z&U}Al@|U#2|9jh#G8=T1fdrPrpl6A| zzgDgO?XmyIHh(J$Ht!RQwy59Bwyy8%Ta4Cl{_{uhqao^eG=E?D7jc#4|B*2M-yh@z zQCuY@iT2yCee{ZNkiR{-e{(so6E4I9+#SaCd)dBMf))cZXW^gNY5wLOcZpg@0gYn}zk>v#*3rm+ zpjmZ_xa`sr_kw?GtNa#9$%=mcPehjgx_ZBM3$rTl5FrCup^d*aIeuwi;X3cy{qbJ@ zfdr4R0}B!PEd_XtC?V&|>VN%@carZf$ttqHq{noKU<$H@mH$BM=m1C^tx!`Y{(iZ) zdc>o(+&27g@A{9&gL#SQWD;-d{}#P!um^YWQSbXtq{no?UOxZ2RP6V%5v9ip{{sm* zQVsAI{XETSsEOO)FWn+Fo-_Z%@ceHZNjiaO4zkpkUjKIVza{BnO(*|&FMol7NBDVk z&FRgrOO6v29gnGe(c9AA<=JDeDzxTm^_fZ{`eb0S!Sb1~z z8F35x?OX@z?~|Yqa^ipZo&Uot`Rx!txnz=N$S)~I=I=zedcgMF_wWAN-~Q|tQDpb* z_Mp@EU%xH}v5v4HZtTxJ0_hu~_#7ug)Nk8Cp+dB-XQR6Q1Ffob@YD)%AIX285DFjg zMAJg1%bhXG&Y|4voA^fu%|u(dw5Kg_B;u3<$**5h`@z0 zaX0^PZ-Gk+fLjWISOow4EjmUVT{B2I;!2OEf_7wcT@{Rwt2F%Lf5|fRh-%=lb3zvX-k|?mD`qSNb z{L~F%l(!LJ^Os+E3H;OrAzF^Vd*8qRne=($I$pPQef{ec`PPE-=|-OP%g_D&760qB zNi%~RTu3i%)cLg+E(e1Td&((S6e9qvHE3_Y3Y-IN|L^oRWS&J_RW_A19|dc~AfG15vEsrm#QpO^%E@svVEI zX{HqYDdIkxcnI$K`fXjL!)s2%3gruol0S-r&;GvWa~a^+Y_d!L(yRFspSrHV+}Leu6W6tbiCVHT}eV}=3R*xHSIkbzds}&?{XvJ4tXTOSmWbt)rXk&M<5Ie}F7!4uaTf2OlfSL!%{EN}-J|BE&NQiyi z1{hy9oYe9;oZpY_D<-QThKc{nVExJYI#u^;TyX9OUetAql=_U(xhSfvex z^2QvW* z7v4W+A1w}N*;`JfIoE@UqGMYVSOj&(gt_Tiq9k6E80MP80a45OsGCjUkA;h+y)V7J z2N)ynv!yHN^oNP4%jbAw5ukn}?{z^nN&L3K{?^ZZZ;c#{M{z>XZ$n3$IYu3zDrYdz zhr3mC;@dmQ+fnpF_N`sk~(!X9dp?_0R(2aK^ygd~h4u)+<3Jk~~cup`LPD6~EUyrVw`>!we-=_2*{?&Aw zg7w5Vfjq6q)41iJfMCP~7-cc*>o-G{HYco&AZlN9#x!p0g5mezSl+vxhfj)m`M~?K zy`JsTHY#u4*=|XGfjuPjr`Q>=>6N{mZHpZU@B|PJZYOH)2p4*x>VUkK9mSxluAXZ= zL9>OpWrL2%WQ{xes!Kz;CKexJ`5&n!irOYG$J|R-V%2wD`N(A6>`864KMs^ zv_;O~Rt7LY> zXqCM!{B}5)T~nHVMUo+X=pFXul>gB#-bk0wqNiKr{wSt#@jPw6(iELQ`m@FUux@vQ z^YwQEFED*V3fg?kKoZu@x8WAnguJ(Cyz)IIU65lX=8psP|0=ic zlHPEd6DvLURGmv+@HKo6q<%lV0v z=r=pe6*sZ?wIk{g?hMnFEWY(rAZ>#Fe!ZX`EY>GClnpB&cX8};f;ld2S;g+mMVCPE zjQFw3v8Kc1xRw5|Z(K^>GP=>tL<^}ghOUZHN_E9T086A^W!S;)hDfOdqua{(?PmE8 z+c6mBY&A?Js%*w(zFNv|v`&`=hKoGQVC2~4ir-)9VB2^xqhPx;GBk~3)w9*X*IJ+@ z#W4QnDz-Q~tWWpWtx_g(Suyxmr>@!h_juv(>x@GOX?IPtt*<=@pe6l6^x!cL<~)C5 z>HqSvK7PIzXdp#8C%>(!oXl^G=5E_gtnD;?S(QhVm#;ps2LvOX=gl4;&wsC_S zA!pInBr~O;6d%lF-mXe%trB*p_zK(8he_VEPxKM^J=}7?*Y`6Ul{qvk{CI!?A?vvd zfdQaLPx*t5S6_q7vP4=yMSpXygX04|{}s4+{_4t@Qy9AoyKdQwclo=UJd~#|R7Ad^ zkA2^$y5RnU+9=KpHh$P08j*K^R94k2#gtAKhoOp3IwcDkP6sR@7^A zUkbKg-2<2jzZjx8X(?)j{Lc;O0X6A@uLF8*>X!Pq;B8BOV^Q;_^gCoHV0<>&N^C4A zzX9t1NS-Ver`3s(a8s6i&-LExBRB9xt1gsx7)4wYZ0`9P;$7{(p6lPJ#;oKQhqJT+ z&cM}8AWNhK#?Wkgaew)YDQ!v%M7)r_;)o=47C>(c<_=E<_kh;Y$-wjB0~S41!vm~z z`Or#&euZOEK+qXFd%P`#3C=sY*i~uM>fSuBveCBlPIRK8^;)T21CfZ_YqrXv#HBVX zTFZB>KNXR;vGJ6$j4;k&8GqBuweMW-IRCT!>!$e3>n`MZ5Gr%>hekEtW6)xNn=+ys z%!6>8!Y_=Vw+Ak)9XEB^H*Q_0@ad7nMTkGnD49Y{7}N%k23%Ym>8T;qcvmaON;aD! zMf>_RK5$1!Ark~sXV#$m{@G7gG~mPdp$V)DrNj}y*S^&SUjOcL7wXR=xdxb@FF6gS zEm9q|Jlf}StG=nY!2go_4@RQmg_s*Q3P&&0-q@^gqo`c0@P`I(y^~t8W^7hZox#sx z2^+DaXt@nSzV3CwaCS3x+R4Ju#G}=VQtc1aKL8453Rghj%C|J|v)g8WXCsKqru>=2 zVd_l<4^AT3X<}g2Q;59Mx>a)mFGaYuNzJvr_B@NJKwq0qLIW+y#OoY$P1wCxGIZrG zAbBE>7mEMBaVmL#Z2*x6FUU__#j70K`O+4CeNW^x-OifStm~aA0#0NxukZzq2_lmp zFRsf++mB2p5+!~IZ&S2mu3kM_t9eIXUa!*9#Nr~2=wQ|4g@ol!(02B6^HM8$(au?m zUyE$KDOoY$aP*|=@qIS!nzBRzuQhM|>*G+79?-GbBc`^Yk7-C$K0~E*Gb+f2o`ADQ97>8!T4? zJ3Tm7s+C8{p2x|BPfh*;EhmV2!bpOsJKUrWXZ1AZ>J|GBVl8HYso7AiWGvvdDtYn9 z?4!ew0zCI%zg@GyW$PVffkCZZVsP?7H6+$cy5i{jb(RR|XnChcf0c<$j(%QdqIa#n zP__H?=hD`hyDCfk8z#wyuBZt6%#K11tx?P;33FECgOLDoKD&Mk#(ifNlusJ`3b#&g zK%BtjN}iRbC49qsT!U?`Kd&+`NQ-6o+*iF_Z55tpb>H>o4`pRG=;U1s`By@Xi1cBm zwL&YI-u_kCE4+4lv*Ay1heu<$thn}0B)vBI(*clrzXX+-Gu_q3xBlEid}pJ0{5y^` zFSmZ0sbNLm?##3VSrw~Nli%~O1pVS7t&&wK_m>d?!HJ*=8;$nCB3^z#9~G@KgZTlQ zJZcD)X%$V{5wrY*Y?#A6T67P*u)rfK53gAX7AtAFmgM^rb@I$?vq>`pcWBGi9)a+Eb`<3eg%xVMv#}iu%KWEHl%zN1T+|JQhbVq>E zJ-gdurDmo3gU7Zi7{uf_MC~Wb#@=+M2})yqI>kY8;0P?(K1P=3&oj`s9)7;ShDDBO z>s3T3)85h_8dTwOzns2sx>%`x=$-h z(MmNkb_exHazw7>+)35kB`!(Vh++5-xuDihX)WnJflL8ym^XeSwxf4USyf7)Cnbz0 zw}CX6+q=sqjM4i|0H6L4egE}pehewiatQzbN7;KvHMMnJ<5$IkNKvF$snP`mq$8ko zklvd#=>pQ54N!WK-bCqDdIJlu-!twQ-=A^FNzOTY zuf5iqbIn1K>^u{$_kgJEiD%oCzjPC7WiU+%80(lsbX^o%!Y=M=3M)!Z*CSODx$U`T92#o0 zG4$@s8@g2E_4S0hj)nRiP&f}r*eTM45<#iXb)i~~@xvU#Yr6M;UczlX(ksKsNnzc? zP0825p#HElJ4UaN5m@mh*dqcr-6UGrYM$>*BE`49qyQnk#fHstNbbc9c)6-QhhcNW z(ose6?lM=h%_xO=?}?fwn%euYoB8sMBX*MP%U!|c2o`Z~WE^RMdhfv|40q-8pT=|s zxgwwkTld924!_HLpR5ml=34kD@YyZ;e?4^>;rJQi!H?g*}xhoLjjV?3^Slh8Qth9}y6$|)rHHR$ZE5yF1!Li$$ z#j5L;mp*kft)S)ePg}xuS1u~C_%~3$@N3>eKm5-Yu8wdvQ}A6=S;ZhI2-hq`v`&#d`$Lg}F$Jv3z2nZIoR~O{kjv^a-o^QYH+{3h< zcX8AE|J`G|asN$es-Ox^Oo+vFX4ZS~M&Ts^%75J=Z}8Y(B4<2B?Zd6ighC$K-}u4) z2AB;gcimcN1=GbNK?ard56ZQQ;vc%6L~hFHr&;VSacG;4@#AtIL;ctu84YhAera_7 zjl{qs;_vAKoyIE1V( z+gz+=dT5AVGN{>UuDSDTe{2xWN#+Q)+;7vjPetFqx6ni|P>K#5wv30k^u zUX%SqwPkB$TFP}{^vhYu`jT!=RSG=#_XYd@-pe68{^2x;fMdfWbNC!y1ZkJO28lw^ z<3%vhHXU2Ja(yi2SHP<}17gaHlzQ_Bv;f(wR|h@Ry1Pg*edXVi-{#3Bmum{#Vz;0T zSdYI&>xWH|n>`w&VLH!f@a#YC33Z;wjEud1UTrhzU}ygsl8%3{5iz76p$a7E3VzSj zRWv(^KtTnVy1%Tyhx$nBWhB?hCwbnyG?>ucJjFNtx%ygMCi%40_Hly}>-*-~fmRuh;$b^R)w?Ix_3k8j|fb%i# z3jrqOGwXYyXyAzrkbvrNcLrDF^|PL+m@P$n~@bcte@ud|}bF z5pkSdm&hJuNqOXR8#Qt34ZDNFM^$M*((Bfyh;uwYDcjRtpA4XjL<0#}4sV_~Hl3BM zvNXm7N}1G`KlCeX$rQpQn=geKR?k!TOT>VzQbe!7R?WBOdxx-f$ymW~R-F7wa9S3S zZ0qu*x~Pt3E63EurJ4K(_`!KtxluV$qTBD8*bg*Cmf|@cZ#Re5412TvqM0Cz+?*`E z7eym9IyjrJ+ZvoEsE~AeQj$5z*;UcH9}h$XH(TkScg$0b79{`pNIL5at1wUgogKgg z@j|&B{011?kBkevEQVg%aNi>rZCs%ZeY9dGymbL%-B7$#_Wbnw&d8zv%4V6%JS#Kf z^}f&l_7E@O-Fe>zrj(XLIhqWcU)<9#=Xy;0=z1z6Ud@g5Iywkz9EV~WvqIeq$rZ4$ zy^%+CTzI}aJGa+ChF3%X(tySlzE4#I0(D9Ms&*@A4(mhmnb9oIfX+t1#IJ995G3w< znEU=ze%>OI^{T%T-ZB^nU7Z5gb%{e_@ z#`g&D9o!ZDJ+G3?*AK`}*2f#VRkq0NAUapDxv+UpxeQveAT-&Eig59nq95oL&hdR|h8MI)bIkA?mX zJK=qjY5mT;)rAyRG(zS?{abzZoot?O=XmuZqGrDL!)Vz(^iz0 zuHFGo)zj5>_4gJ@+0}cF2`HFaNB)|5OK)E1WQhC#9GQ8km!h_lq@2aTIPljDQ4c-! zEGbqIm${wB{?EXCIjpjkgq9lw`A?4e6(?KWsvr)EUKFWzgIRyCfG-yWlzp1&>;D?) z{wKw)XyA$k^M8Kfb0w75+c^kY?sDU<5mr7Pkf9{D`U7SJgLH8bA-enlT>j1bi$>qQ z?7--Mg}iTYUo^`-r6|?L30MjNg_$U*c3CB!-zu~)`PM2qF`X2*6`MMf39Y(F)87%{ z{YB6FsCn&g)l`zH3j_#z`ata8Zh`S0z_HX7?ZhqV9p3`(Fo!yL?hZO-Y_&kj`t#k# z{6UjK2F)*~E2^F!Y)~RZ#Q&xtDf)nGlfp$;KU^FUM;CV^m2DdRuML(D#urau^7whp zZwkei0B-y8C4>N?@f3>&ElaJ+M>C1jf0JAO7Z&%!6FdSp+%18if4zyb3x1FEYCQ8U zPweL_T`fu}e_S(VPA{;<;2~Cpw-@*wqbxxC|D8c2^BG)<=#$|0M_&M~!0lCUmFb^v zzAOVi{*{3j`Zpj)VgqjGYh*m(zi0pQTHudZE*VPxAAq^M3HbLPNCVP~+?a9aqOgRE zTFU=hVJRaEx>y;{h6CC~T>z54YT}Xm_kYKK1}=43Vx3k1+#pHJ1@USzp+Dzee;42b zymq4%x4b3tKTOX*-~5B_;%Tp%@M~S%^BeICUF_=HlK&nOpFaf`8+cTmJavJy_#bXj z{hjc?c|id_B7bcC-ELsKcJad)g(3e+8Tq35>*sIgs*RY|rC)K(UVIm2#^=v>0HzjvJRzdsXv#Gc(`8$&J7b|8_T1>QY}{UPba`m$2V!u`XHzH;&LuT;~& zgVT=`(A}l{YOCO!AOGyu&88*H0 zN2s44&5LM#leq*F$imBd4Zo&wo?^miPQO02eb7c@LCGu@{QE7)VFkViUBC5?&4}Ez zDZntEMV%X{!Qx{MgR?LZ16i#<%P}L@1DR@~UZNgmRkW?Xl#u>TOaJG`|L4=*$$oui zs&?M8GXECH30LK9Cq<@?`g4oDIx57ayYA$v(4##Uj_uN>!n*)L<|p2G;6DW@;>E*WhzD;}Ji81GSEWAN6b31ENe2ILiB35SYXn7djs4i1 z@3P|IBmeD;(_Pp#QTP26lV(b%`lN^UcY5PR6M%-?lW;N)mi6Zrv~d!V_l!Yv|Ema+lNrz>-Rb0*<*H2N-3LU>M{Pk6|HL|v- zcrA$^nyWH=W}7UMCp#@Ln(OxUB}%INTI4E^36u0-CSRlbO04&6ebhnhE{Y4*!!1aU zK=S(Yo2+oBvZNoEpS(VXX8`?Hgz1%6+tHbjx~aBA<*?LH7D<{-4mPfaU4qqPMnAmEte}&3q9$;Lu3!p? zeTQw~d;FM#sacBag#1z9O5}JUI@Sd0H{nGobtG40S`vyHIv-@Upk>pDFpW)g*{?`VWSmiS!ZrMcC$^W7|sU_c=+GU{|G80oy{cYHe(aC8?5Z`S?*lT8=yPe zZTD}+i-bOrC^)7)+_(5|m8Q%V-S;^z3dhccu+541G&U33to&feII=RE6JQcAJn?xX^gkF8l3Ow90c* zw%jLWZOPjCeQl5BOlitae&N74+e=tY1v_43V9}4E<|E1nQtnHI`!oXWZ|efKsnD4f zPB-S{!lHY$v^^ouzP~+83fiVSHAFyzbtJrrDMkD@+^Y$wCPy|zz% zA*Fh?*Ozw{=nvN@3Q13nB?BxV&HtkXfJ$av@%MHw(l0roE6MO@xPHmX_4cs6RG6e> z%6~b6?lisDW1tsVC!ly28iDYG)`H4nOo&fHgNROwsY4-nOkNf9%asfxhz23QwPW#c^I3nbXGE}UV#e3VN4jryr@&r3zeiV@z9UZ%?Kh}}} zER>bO0Fg5#vu~C4y=#7*I_9TdD^4_Xp!lpVpjNp^|eg_$kFYcZQ%!l{G$&SRbS` zM=bKsJ@A3p8@VB9KqCAhnM-}C9jheoK!dJOgS{7yyFO5c+>RG9cV-1nuKUv>QiCiO zw1?A69*>+DlK$M>|Kcp+t9|xI5HBwkX&-)Lrs4J4dT1?SvDQ75+ifL#i!xgxSZ!n9 zluy3`@kw@Ct7m&LIrn89<8k@oJiV}{q+7vjHyulrx&ky~5A!vWEy3m+pKEt(nR@pJ51Lr;w#I$FBG7l?8 z?>@zbm)F)Dk4liSWiqVHP;GCO0200n5ZNtct=zl?CBYYe)8IM=Jzx-W(DA7GzWFQM zi6@OoL{BKQ2lrViO={(nB_D(9Z&EI(8BJc+a4eu}i0Dcz9zNkVu6IsgQ_HTG0kb%K z$QkcX+65Zv1RvqCNqoY@WV`@7M3ZxW>NQu5v+hk$s^d0XdUqBmOQ&x@Al3>qjXp=m zAV>F$*at(jTDWY&YNKRK$lmqi;xwHRwMe0=@$!XE+r8y5!3bbIrbE@S&ZL3N%Mk3rNEg$)_DXC+9!YTvV{@ zrV^KPe1q#kMJ%?4H(6>H_q(}jJguyxvO6kshNS+4_y0tc-n5aWNCxMuA;vNePX*Ov z=Q;-s$>9o^R;#9pbdoDw=G@}E?}EhcufM(1zm^={SIt~+6wl%MDOSr@yAgeKaN1X! z9?z|`7Tn<}d}rd46}rH(F=#QLqsePEP~2)KsM%I_@+0Xw;xjb)y=2+%EtcB`d|PE* z*?FLF7;aor{F7GQ06EuGLT(E_g)9F(D`$_O6SHmMdyC&@zTIZFnfjnv*B?uKqLRSw z5|Yqiw5r~JcDDL{AVa9zt0chn2}mL33roNZ=2Ot#9p~jUZpyvOXY@!O0c5rN^Lb{M z5D5kHS4h^!@)8GD^d`yrljA^Z&HV+kFR`S`5>0-LMFlTsld{VfXy>VN7z!YaM65#h z@99Z8xuBtbNHOtNmof+Ur8WNPD(8Yzt9DkyLBE)Xg{zfAt?cS)fljqJUb9s=Mgh3#zG4)Rf1f!A5?-w%NXV$!5x{byIM54H>| z9t*IgnC*H!FzsN!$S&#FbUatK3>*Cp(j=3caPDkBvLqdoNV?l^;Vl%)1mFYNy}c+} z@w1rR8_K*$GvD6T)v%yY^`n4dNnOxej*-}D#V$R6`3>MnUov4ey;kvJy2{7)LzhKg z?!@9}oN=v>6(j`sx~t5m=?+>=QRHn2W^)h>*ewpt`y=g~x^7Xicn@u9;oh7p@iVl# zUd9QHx&8_RKG3f?EP}dE_i?w@rC-LXrXEH)iq-6PTelf>KiEsC6tJE15zi<`dBx{z zh~PWFkXqg3->7u(KSm;1p*ptTd=~&iL%m`-(WamEi>HfgO@uVR|b+I;2CT4h{kA0?F|F`GepB zAfY)2MP1Lo+-q+PJt~74%_19v^(1xb^N-cjx=!WVWv8Lu*@VQzYZJO!EE?N0^?HHl zp2rS`2i-5GicP%oTvdYkl zo*=1!(=N_MV<~}saGywUeyN3f6xSQDEg_X{-r^_MVvMU8FhN&r;jr;0Enaf&`5J7j z9(nPwjg?RBqH|}5&|e?8XZ^Zd?D~I4te~JGtX3N=@q!&?t(dx^WbJLfq#<60`kg}V zX?LU1f`{K%^_~Q7W83pK1p=3)_r_*O-G3oe*etl~ZhCw);aCoFn9h54IE(cXekpv^ z)O@l|BtCuidrphZoRiA2tJV)AIvuq1h44Pb05uEW#K1ivm5>36N3+v5kzGU5Of=#Byt+gT}wy4KhCk#!xVcesHQxvP@LE)0Wg)`jCFjrIH`T8fcK>6bm%GHRK!y|p*pZMKOtduJ*YVmffXfQT@s2Qxk6@ zwtV2L!v8Ex-E=AWNd%Il1$XlIWIe-V2ESO$Y&|NLJz$RCVdE`ceh0aD;+e7FPJ4)i6Y- z{Vnf0k#hpf4B;t8u0+Cndqe?Xw9^r3W{wl>ftACnzX>UcDGw`Y#a_v~ul8}6iZxr- zub&y}9>Z?}r9@l*H;L69-vbf#6q@V%6D9iAM{B#nHArsn;Bl0{hQw%_nf31h7|P4k zpST7g$l!PsJ6@zYVYuWsj!6qL+o;rsw1!I@95H)MZ`20&Epdz?JtXZ;=!T%q@H$hr zvfOORKlNQi?b?fhPXYCQ~K%hMArg3xVYQl1sn6NWFWjkoB@1aJbP#{k&Xb z?vsNpFU=Txf14Es_GU<9{`H4EjD(!lRb!H^)9i@UpYCj=GG?biJ(sDH%jaVCtm^x( zdE9DAyB377|D=$nv&)_Dxp68~H0hXW`lP$=!bOJ5EXJkU0#pWZ_z2?jaapiRXX>x_N&HG$lh*hzsP<`K5L5n;V;Z^nquF2t4-hD?@LW86-|4}2li6nfwY z;q(^EF@oGiGb~3U(PVpVjPyB!?`X$b7E8c+na6x^NcdQk22I2;S z-G)E)1SH(|8_GWU{Q7ALDYf4HvL{0}3`^AWp4|AdkqLXG&#m9pw3%{tiuM3V7|n#^%u?Ph-3u~({NagIab127;k`qksQaVk6z0#Nr)mS4MOpJnT522Yu6 z#R;j98w=@hMY=o$wl7BYKI(mmEwh0WuLGs*wgY^D&<+-B4KHPo@5rB_mO6Z2_6mDs z6{Cp4K(MsIsvs970RiZf7oAvI-%W*F)%8(?iI;uLv&J=<>FH`ma!m`Qmh9B zBqh8qdy195-p$?=?s?CbKa=BF>kO4qDe=q}K;@N*d-Z+EYn_Hcy?U}mVw%w_oAhB+ zBQPlG125rxiYs%*IT?33Q_S}lvL_tRt5DjeX07Uk_B!W!56pwl9ouxdA{&6Wfo2{yOPEEvY_E-FM^jJ&SR(p(hM+8Vg|iZwJ=tnDt)c}aLH^SytZJPT!iBHpXT*c% zblx$k8L>M5`D?=mz6L;2A$*}twdb+FT$aB!2q;=rJBg?J=<%I|xsUN|gbIb)?Fc}$vw z;h2`_M|FG3|J`4HGew%h?~%lPcHk}k7fxgg=tdI5ECBzidjd0y+l#{QU+GOTv4tAX zoQi+!*%j2!HESglmY6+Hy*&DDp{%Wm1Eb_Mzmi8rOLilyg<}s-^RA^c?4^+SP><8^JzDPxl#L!!g!G9k!`b z9w2OUEgf;3_gG+4_P=PO$?TFHx@Zpc;f#HznC9yrXVX;dpu<^MF4pqvKJ*4^fc z*E>wz7(@>=A=01iPi%_hr4-Gb9vHI@BK8Q?9~tSqkG#TRQW~b-_K246ucm*RFED_( zAf&8F*#dc?CxqVwg>j8WqiJpV(#}&K;sl(2+@BQ!Y;AqD8&)f&jlv&FXeOV1xF#o5 z`o+@Ryxz!*VH42Ftm}%1N-u?QCT>?I{+vs8?5wrVe~z-z9vKne-=J4@nar(xA!LC8 zQ(5$+Sq3h4_K7BCNt+jR>(C?y*Zpq_K8D!!lp3R*M)a!l4szt$fh=tdoF1DDRG^Yh;e64MYjqt|K7iNCuvs>CK)&fGK}`u;v5aGe zNa)ljg@qiB{M@rMSF5hi0@^38A2tFn_|2{@=bF4}-y%Z4ZA_GxmyBGYID^?x3;WmGNn=xsvqPwxJXU}=>%sGPM9$`w*|lE3!Imr(v2C{& z&&yr}RO0uJl|jN7hSRtri(s?9vz-sT#$l}&jI=|bBuxM9s2CS35h~aBJ z4COX&)Z$G0wYr2~&qW=Hd-XOz!Y?xS*3J05h?Q9ax8`no8UTZLXjHE%Cc8*(y)^UL zHuPOZ);EW(@Jqhvd6{~;tnUSH3xekT?jZK%jv*$^0b=8r;MT_-$j+xHSo4k!`?1`^ zM@zcFryS-1k{vB}%~!hOeCHw8BO}OoxSfq!*KS_h{OciOiIuo*3;T<2(9Kz-L|5ML zsh}0%z!@VcOr*|!lib@O3_#V7XSQq3E_(Q1`4^oL`5F={n#=ljLFoCIs(lO@8(zAq z)Y|-n8HufU*e^K*-AGNvUn@4WiA-x%VuW+xkpvc0iq-Ptz3N6nF2 zb$qS&S(}S}H@&B026vJ3!9Ptb67}H0^`n z&mbj`Qu!*l0Lr3~H4x~D#s%h_N}N+*=NncbuCqZi-_7}AqOMNiWp`ZilBFd2zfm5N z{>wwHLTe8=5!#wrt|!(FPvzT=hD?$x;IU~?SidOgUSO>kk?;KbSDA-<4RlrRtA<57 z_oE_%5A=Q$*rlS6IyQpyu={~t?yvEgM0Rd6nKycAX9-Tk)u(=Q10|JB8vblk{dNCS zRy)-Xn4&(z+*#7&Ig063psg7;Bz8ZWN74mr?{gg7IqFv$yt_x}yF7-h3Oc{qn&D>^jo0v?Y(-2v$YMpDag*diHk}e~fXm5)+ z*I5Klh+6CvRFv$qCtSoe>C-}^B>L`lpqxK_YOLGmkcb0He9ADd{M4AgXGCQrz$9k? zmZj->2Tm!K5pMgrcWh^pJ~Aup7_yL??~oDd15FRr6Z-6Nup#6RL2eMA z4Nr7};;Pk)a3s7Lj;tv%JB`A>}$_ie= zCuQ8dW%Gi8FdW#1%;VX__e8K2E^0)8tmw*EQ`A-LTbk` z56JU_vcB%YEWbG&a-w4fhA_1q#g2uUeR70h^<2~2@p*9MGI-Cs&wHJsxS?^?<^UTzsD+|!X*}M@yI?vmVN9;Hd(ucef0rc*@lIrC2p$l6N@zFf2tY^4 z*#bLa`_naKc#e7jaFpIW3rmYgVN-7+yT))Z@}LNaI@%e~$EYOZ*qq@`uB*`f1%lBQ zQ{$NBT^pvF*Sml~YrWKHe5fwv1GHmo za?~D~HJwV5rW~HN6e7sZ`4Q~NXLaoXe8$cQ{}a0Pc_L@iY@zLJ-P#iU#I7jWYYPW& z#i16msB*XZqODWEO>(KQT#9`AC*ICYbn{ttCHfVLtMs_7tDf6v&(v$Jko^r;X~9}$ z|94Hbo^{S3E_%{t`t8?EM94w@k`sC0xP3X*inG(vgP0P6*y9Hl7k;}i@p=F0z%@*Z z*b1adIJnuV`!C%0)t9fcC`13q4*jn|=^tNYg0+1fpVR52V-RbnR7qw_6~P_^u3Vrs z>7)Pg)j6O+PCI|PPhQm{n=3-!bE*#Nxij&}R07!2 z_pD8)^Jqe}BHE#To2XRKFZJ0$J)21;r!P|~qP8>_U)c#ODt*SUo5s%9=&4Sl)5F5b z1PqXzpRicde)#=dlKgU4vCN;Ldd4g;G2asST))(aM?)I>Hgk8KojK1e)2N;zba$)B zcF<;dLrAMi-Ype7R>o*RIo|)o#qe9jB%Tx zPa_xgwUy!CraO&aP?2vniLQ5MwBM#Hj##ej{gzWV{=|lJjj@FHCi$#-@T#WV7GLZO{^1gw~}kY}7LZ{rk9 z?3_T`^pGiJ4otKs6S+35K*D}z`P94_zr`9$ZS;DZS=&@wx*$;3$kXdf_8=W({-#o> zp4-Ga&5anVF16UW?8r)rJZ{rR8l$;NNd8g^GY1~WK~&Vu<^JAPQt1POe9}s)2Q9DG zt7?2p-jxa)yI&Z#(gYDh)WVHfE!t!XH>kGbbqQx>%iW7L~>VZ{AyIn1>Y&CiPyH=mfEJ@j@Z zRNM5LPlt2Jy&F^?3@&vXy3SIe;dK4yh0ZO_4)}r~BeIW9&4uyk|bgGkTu~ z7Cjz48^T-sPh999hW}-SwqyT_=rus%Xt=3u zUwmD2`DGM*ljSJ92+ygQrrxc@W$TsG1B?+rMp@ z;Urh2W4*M9sLzgrb)jlz_se;m?3!>dBzzLKq=J;FKlR_gk_9EB2Y9i!A4`k`<`;73 z+ibB`4%!IV%;Yz}c-xCqlbN%jdAHz$!b$rN&q5@$*%o5j5i!tVU%9>DNf|Ra?nkP0A?rJ!>bRRvdNc zoS_%e^{!6sbKh1gsd1jJ>wvqQzAbuDI`Oh1eWyy8kk2tfvCXHk=s|O@4&~&t5Is1d z2AW+53%dqPBm4ozcZsyjI-r1j`t`0M>FMN7te)Lu{yji;tX4UbXk@LxuX%A}Nit>e<|2<{@Cwu+i`XH?6-KYofN~ou@ex%q`mM}Brh`))-~Z%DWjfP z{+jb{E{xsP%SR!|uvtDn9U+;(9+{}+9Y){2Z@^Ea{wVn6VT&pJm51GX)>fYS3AZrf zX0jlRrw=&bn9)rbb_)sD-*=APh9tyU{;~6wZ<`8aP|NmFr9VOhdSR%&CVrOanbJ>H zmvG(KjO3|Nz`S;Q5xDO{N+p<^e6HK1;Gl!cmK50z#2uH8qQtb%OBS|Ew5qU&UFxSM z!cK5bUys%JA*8GR&ZII@z4Jh7UTiv|>6PTF&?240q|HSIQhjv3HGe&TbeW-hm*Lq{ z!;mTtl{%-pB=S!#QN0bnLMD%QeLL#r2kxtyw=qB7+_r z^ZYc+{hrd8@TX`NoJ2+P;PQ6kK?@~sFD9q})jJbk0?*QEJ1VI}^v@j=I4>XNZvV>Z zhqqW2&`OeXQKS=0(g*&cr(4E=G?LaL*oT4W+m-f}{|deQ3P6;k%e6g168CwL-f|It zm3qvhuoRNs*NaSMpTi#uRO1V%)(kSM(Ev^#tO+OMmAW4?*SE=nuD>c}6cORvP~F4w z*OEnc56&~c3z~9*32qlrYt`1Eo)gae?&X{8-A}xpn_t8vvGVaf6ZP4(NIqn(jCzI` z^StW8LV+3>fuobQ+l_x!d1R4q#L z9gV&zcrQ+ZEnor9rk1H(PkGY!m07{D_ICq0irE3AOATkGo~TszibkQZAYgP8Q~#Q< zK!--9vmQDf8FxFj<*Tl1jsAT9PUyuVTnY#Xt7j29LSi%=rl3r<(&R(#`#$S+&O(+} zt0@~bbB!KKoi~@4tF9e5+h`O>$K1fHmMOd%Nx^4)kNGJZ-b|L?(xoDk%D0aeYi{OW zTe(RghJi0=ywHe2xoEQn{o?A_%4tE@8JkROXKzdldp>?EUGc7@qQOKA{t7B>DwsEX z8cd;x!7|irZu@Kwx)&8`ZOxBwE$f@renmkF(j|_k8aWHZ1ge1Lp;ZSK3# zdKlWh8(BZ|yAlzdkQ~P5g#CQR*EdKvq}y0WC%YAc4ypETo5Ek%Z0u~48fI&RDS_jE z$&=yMC9A7cPA(#aj~9z|IeSTo;dW6OZpk7|<0kuwJ88;yhMnJn%msB{^GnJq1<-|A zPL{oWl~h;Q%lN(dn`uOTTHkQ1T4go#a5O?m?{tC)k;1sgO{#cdjC$rS4J&>)H-pK` zIdmcNgHL~%PCT4ztY}P;<-0Y8;R|H&a0Nd@=tuc?Yv*_7TdX1R4Uf2sUhiIKe%c2J zIP?06Ti^UyeS;CR38ofoYD6QSGfA9(CM` z&C{!kG5Jo(#Q84uG`Q0!o4jZ6Z}Q^boFX_(gdOYY&PM`um-ig-uMWQY5wE7ORE{Ba zCqa2uFzHVyHW}!BxtdKEH}iV;gT46DeD8=CM=)U_`|aa9u8``X)YXrcdO!i?4ZeqZ6Z?PH7W_Zi~7NK(uN~j2G#`m{@Eo!18NHWmp$1c+n`a;?~X9!`vUr49Z=^9zQ`r5bB;)|%R(`G4Dj^V z+Q=U~hcH!0pYs|q0ajAAm1|>V=G~9n+}DZe;(?4rZ}gaqgFD&%%uX^svvIPSpW*ch zs-NYqP%W!ng`apjD!Ens`oL=rOGvxfC1^X8RJ$pn_*gp%9c}FLO89$)La=OYD%k@s zFPV9-?HT6uI;Yx+cbM!lhtkAP6^+G3WwcxSxRY6irIey)6gHgrutKv5s?4RYY3uxx zD={IMw+~I4J!ie9!P!jcyV+E0Z!J)?S7G<&w>n! zb&I(5Gt1mJxMyKsuZh)i`hBj02V(n&TTeGID~b2bO!7}p5}=QMq;ime4bOwSPME~d zrSUCYXnpm4cOA_8+pue6(Ysq)n74F9%hF&GcAq|Ye3pfax!aR%9!jJ-a}O-Tkml`o ztQHazbAuM`Kg^xiycN&kcNl_YPY8nsTTJMKf0-5O)m9<+=)k$8oEVZ|R49$oHA3o_ zoH@|!w|kU(Fq-$D9z|3Pbb50+ujzNRZabe2Cs@xg2oCx>8m=E7bsW+n59+03X{W3E zEv#}XXfR1SZ9d<>S^BH`8Js0HBM{#ATH^I0V zI2FyD?pD!V*&#-CT=ID~^|zbOKZ)Q!?P-T?__fG$49d)RcUH|y zD8UbwRM<18RK8afx4Go4ZQr0H&zm||AB{{V2a||oE^}n;t$YZ+;0mexDk2Pt2?d1T z?1^i*Sz~I{A(vmZ$aZ}v;ngGfkGf1ApkM4#-?&ttEX;~|dxk{Ta=L9g8Y?FBQ%_q| zs%J}hroEt?wx>Ql_1eE*E6gVn$_{3*)r8C zwsvc5appo9CIoKBJaH%Z$ylRTeAbUwRipdxac7dgdFmXusvP5eJXs!#(lskp8+BZ; z8P{8fo^s6VdtkzdzY&*Dv&2~u%zjFk!}E}AM_TY)@5Lr=->N)zXOQVe2H-$leDQ~R{4@3F10`;Pc{;A0hU|uk_dyJ zv>gW5D0nwEq@f}@;%`!(i!FN}+w480aiTx#W5g%uk9#q%6t#naN){apI!d5AQdx)n z{u>{T;wPfP?o_DX)jVd6Eei;~7w!wP|D=npz+ z7gr9PHo{b=0pU}1|)5ZVFl`wpR|Ga24v;obzQDH`eU zEaQ&ZnGD>>Mpvc_(qiS{ydzA|m6!C(=xhSkfkxORY2N=(dB{X`dDIVI-^mYy^&Qoj zuJlL-Y+jWnukAI#XWNp*!?$l(zj=0xaud6V}L%_VO=6|IOlw z$3ibLCn}&*M$&Ydox2EyPi+gVTg(|5wyo=(=ZF_=+WO_3viZ%UKF!qLDSn7eQ{rki z_i#2wyRKepth4d(MIY#!&I3|=Db2&+@3QMbh%4pJV{iDRa0b+7ejmFVo(0B(c>A%) z1pBebqNGd#1IcwMqn5%4i_yGi6P_xfu|2of6?;hvChj}Kus4?5>ov2Ze{Ck%BQttd z?a1>Reyandpr6jYD2AZpX|TAu?XdB$YT0UOwD_jq>epfGgBefZ!V(JVG9e05lfcg9 zFNq_=1va1{C~O>SN8`+@a@K6s(tDhhbZ`?MnU5=o>TyQ(%|8zbJU$aJqyG(rT^toJk;_=hNlPF8RC}NgUE0NkoYe zzBFY{-mUn3hgJY;F4=3--l0^h%a-Avj=%1(IhK<#H&WA3;ur=??hl=JbGNCz;d|cl z9EyO|Ca#oDqtkm%QGrcAg!*-&A z2?jzcNB=_I8C?bS5@!_$Q6ShBZz=I7m%4YMZF~Ig2#U{c|JtXo24PC~b)f85ZQ3q$ z9#xk(JjX>}@TA9}qxiyXZBvDJsf6yLk^mrA-=Qb*Ca>{s_5lCmyUzONzKuEuyOydQ zI)E;mWF%BPz2R9`eJpqaVOU-pv5FUwFcCv|X@3d#ibyVhfaa;1uT?fFAs@^zwCTtn z6d0U)Yn<*MJ2~jPek=FN| zpXj}%nt4{>tHGIQeN_X~k}4En2ivZ)o^~&K){>!`u_G6r&TqZ8xi?sknBJ%#D>&s0 zAt0+l<7t5b=C!e5g+60ci)%fgq|nD)dE>%4j~ zy!v&2p(raxn#J$?)NxHD03d_|t%g+WaDs@l;Nt}k4W-*2QcLqsqtEnK_)MH)d{J2% zibZ!;TmJGs5z{Rvcp{%dFhw*Iiz#_$_Mm@o`IVa_+l4(6HOb`Xm%JXklds{!Y-06b z!0KD`+2Qp=oDmkHKQ86MndeAi1T(Ml;a|rMEFMalVjJrdOY~Lt59i&HLaW={zt7<1 z_tsbRO@B+Nv=O1DXupMp68;x`*vqn?R|&4LPR@lqOAn0@vd&0CmJv(c#<>_6TmNp~ z(?YC{y6*<@aWP-%qKh1v~w*w7$Z+uWX9(D#fI?AtvW#5PUDMj?N^s>cn5o~^Sq*Ot;)jA(QA}&Zwwlv z9CvCd@U_*B|HEU1YrGr!aAu>QG^>n5Gp>=e3>)Gq+&3I?sAO>HB(S|styL-Cfb_Tr zyxV0UIsMj~EsO4fI3|Gx^plU1n=JvTXI@{146X4lEpoemo>u#N3bOPBdQ&c0O9bYO*lCqTZTG|E?CcOBjd!@%{S4~=V-hI)tysvib{M2~TdCD60)zXkq z)G+oc5nJseTp{Xmj4ko67yGiM|I^hWG&ki20MC%smX!5$wwdoFOz`o`fl$m9S zRN#wxOHjBUf&+HubtN{)aoLvre(B@psPwufPLj>10M0%*KFVe{)Gm{sTN^zQev~O~ zE=BWvrqMsDOV45@eXHcZ#Zeyqv(+V_GRIYVSL! z+hjz2`7sYk_$4bzMx)xJ`XWJ-?v-+JG3CY3k0p~$VLxj;=Ea1T^Szw&3`Ur|%m}rj zDUYM@Taop{+5UT$9OiYUbY5ox;%DrszK4=cZ;JAZDV~CY31N0C2W1Z)UccF|FJ$B9 z0cRXo)CWP=&k`t!tyCTlhdt{^QKj!s2T6TTM&1uaPcnwGG$^L(5v?{yN2%g_K5F$&iUW>J^%T>b8(%Ek(p9WohGp3cc=u&8MoLn=Nl6jmOIUR|%`F0MbN6ztp%2lOb#fw9aOhj$59wYGiCN=*qKq*jZ2e+ zjl()jVht{FBWrraq=;=R(3bZVp*U;o1;Z%Qv4%y1B~<%ZlBMF{aiKoOh#!=X2!O6!V+5GU^D2A?riA{z4NMsrNqVs zY%i~_C+YseQMNt=t*QN+&$CQgkG{W++&QK2X^Xb*&Bqy_luQPxc##YLy!AEt2e+R+ zwK0Qf?G24@D)<#?3^TDFuohLR?bgC)`r>uAj@ACAAbJ^#E z{^{amcFX?oxY)>rZ*=TA9W`@9cQ@S5=akTlHnNb+aE2ZtnUiT0ih0-QR(o4lTU+PX zHGiruM(pb7!93T_&W}=b%Sji9&WDWB@_a``^44<=b%FG!I>*phie>7Ud9|oi_W{ga zi=_~f5Ut#olb!t9i+eoRP(RE3&GQ_N<{xAgpB&=xQ`9|JbyvqX)Xs{2#_?c$8jPF^ zrDv8qWbmm!qucTt)=U!4B+Iv*!{V)>WA_!q$MUymeC}7r7S|p#x+iS7+(>k*4h|4d z`0;wN#jg6nq2=%|CzA#JNka#ti;IwzaY?FfH%J5V@&0p7m-0vTp|GH5vt5$dC*D~s zpfhe~TG;h8H{4dxcqfH#(o3qIct2|5-4vZ7`(X5WO~}AL--Lz4D>a3HWr~LL=5C5N zNOSUwU8RHcMC?PpOEE_EjuX~me9CO=y|9vG*Lf}?mKFDoP~95qs5!*Z(MVMJw7TJ^ zZ;{RS-$}rYgXLqX(0d~aCNqJw*{U*vtW`jxb$2Wv@qD-H*vIqhN7@5TCPy3lIp@3y z`ct0uiyvMTDgk_}R$@a1aXl^$J_WK2?59)lWgpevB^|N}FAX}tBuDFb zf;hcX(q_$yDDPT9)HI}Q9*BeKAL_Hs_rs!i>xO4bNroKxgs1vz3=srMin~BPur-BF zA)2A#awT3LW#J?_TWvLIDDB)?T>oqAq2ZF*&VQqh4gcUv7(l$!ESUfC!OV=i)tx!c z#n2|AzH&+1m{Rn`#?#AGM;$_Akf;_W zboz_(BAgcB`m#0*6+6OZs>>`#?P45rEXm-L zK&7uDc<9}CMLUfwOScODDxO^v9M+;VlS6l>=ik0LF0zFyBve$>1q1|)FjmCy**v&p z)uHO>LGJ;fcL`JKx^3gI=5i*Bw#mgS+Vbqg5?fMY2BTMuT5&2&8`XRunF$W^YaZN` zxlvIQC`_BDpcm-UYC#_%yPK1Ct8U+I?|=*lGse2udaT(ewZN?FlDxGB-M9M|$agK! zmS%svYp2chNJ2-ONDw7d^ubZ;8GJYBdFWA#>oisR$XR&zVS6s#KsWEs8!;_R#A<`Q z#`RGue*KIPo^z@^-2}qE%C8wBF*Cu5){}gh7a|e| zvEjwL|Cqmt-6la!H759hU37`5oG=ODGn>7z++ILg>% zjqMYekRUdIa`4{G@N5Ayx7q=cqzKXo7x7%MNdd7IbAyUL$pvfYcVB!uO9!hUYV1Sx zquqzjDIi%V3@6@RFzaQjOB%{rBJjQ*tP($^nJL1mT_h`VawaF(4k6owD3f+CgVh+O zN6a&%`dQDYJ0?+f;Gtel317o1RuwplK;o?uPT|O&rq^-e@it){uc45xa1gvNX;yn> zRQdfVIJl>qvKHX=Bj`?qpv|TM6O*9YI|y2E*(JK8cLBU>tlXAwDI8N@+OoCs5$Msk zA&imzc9L9yvgd6JgW%3*5|x&kLCE0WpkCp_yjQdXe@5O?ilIiw!be4psnQJI*z^Se zo^6m@@1&=w*3VYW|Lhmn$H{0=Ya^9AF60$3(L&xO*Y?T!{E}=b?WU#iP`re4E2>-8 zejZa*lf1)`mEdhpS-pfp$(Q*LA6%E;H?XeyRxG#SaGbt-=SPOgMw6+hhsZrqd#w{l zjSL-&0MWpPbyEkZl{uTA;--Y(7qyA-8KSr~ftwY@HyB={qe=B_&^XCE4avxqOuuWK zwt;z+ewEZVTR<@HWn69FCrR_FO!fPws?k1R1uf_!U;9=0^DhQ9?^4lf#n#GPOg#vn z$A{b8hPkC?^zs?nc~;S5{x-V_tCfay?2aNVtgPLyHL&lzE9}@Z)ytdo1QfX1G6hc` z`{O7baZMc`^x`*pm)OqC%;XpD9J5lhoUXBa-{&1XK~k4^urvk=W1C7gDuxBVnDUmD zZBv=z3+I`urTKzB^{(L@f4gDcYAEJ7Z$jpa(M71Bq%?izPfLaNNSsxe9@Ge z#%t`V4-*8Ti~+QM(OSy*6%U2A~Pf;cF3gFAzTHg z?`h?vpT}Na;tC4B?=A4ekpk%QOA1!4^ey*Gp!#^m)fJ#R6?!QnOA=GxBeJq?^Hg{h z&G33>fGcQrevjeUtMf9s!%Xc^*wZN3)ILRRLFJXO$>f;p#;8%v3MZ$dzVfJg=6_X@ z2-iafIpPl_K3xthdOq}ZYoVda73w%JejoHw;(^M`^Yv%x)8N#QuA38m(V1)m0dptO zMsT`(TKD>_NlzMqa+#A}7=E#K%wxY%(NR@0R>BAs*|^mfkCusn(&gB>;-zU!hC6X` z?}$20>Xj6_l)HVB3FvfcC;fw+ASrlYc^g`ZFetwwjE2%erYl2J+$2~bGTRGf~Qfse|z z!78k2t>tMQ{->5D2C{w#3B3mq=V7K=;F#_h)sNM0T4-a_Mb}`bi*LaPRB6x z&%@dp=tt@D01P8I=yvFbRw_(at>6(?v4f4U2p&4sTvwz68|c%j;SoCI=1|nIG=$`x zY8dnBZ_PcxH`Lj2)m!rc^%1Rs*Ur3*W{u$|tC3qQ9t(Bgn0$M<0mh|FQ*8G>Fxc1r zJ-56Vr5x7!c$s#&_0)aKq5K#hB9@4`?QMr+6P)?(F`KscA)-fLZv9w@ zYazdtcO?E_(gD9*Bl0s!US7q_%l(SZBgg3P%|DLI-jXugj4$6Z_g=Vzba+k=RM2qm zC%r<5V&PK=@m?`tK|dgNZkq2-zmD7nw=kl7w|k9R<_Gzv2+nWiskYtf%lzyus;u@yIc&e8Zvh?By-%&EZT1lpm5**fLS=cQQch3zAyV@aZ+ct3f#9 z{uv?qQbyf=aWxv#2zUXGpZKqvP9*|2ZU2)3!{yiT|Ihz5`hRoSalY&wlp$&%m>vB&K!zL>g3He(st5-lA(B6(hv|Pjl@JTS-?M1mFUrI$#o|guO z;{4L+*+O*8U&s3N=gsRs?~hXwTr0D%r0)i}t3>E2vtst8WBJ9oMMmP899-4E=QPGTkzNC;)BRNU)# zuf&AJMiBx@+Dg%YK@Wp6yb9bI7c8ahzwQeEX39te=oY0qX&6kLYose?Y)-70l_Ehry6Uh}*X3*g_};9OlCV z;WdJ{T_Yg>g~H`ea~p#SN+#&iw!&qa?lCC)9`IvPjymw(fqp>ij)fg$^Q_U(ChBc4ZS7%UibBo39 zXzS)kIV5YoGfw3l5z}mq3TX(fLE@8eX7pdzfbQPJIPl$WqU|sl8h2ODer&%ox}u&< zoYM0(3xVFie}t@6=Qa>)Uu*=kF(0jr&;daO#s*ogEMWUgkxg`cx7T>=Z`b8d z0=sNt5QR${8@AcLiUnj|*mYzkVa5Kw=s{tz(`WUu=e#Q)rI!5x(LOdwv28x|*q{IiC0q$P z-#7I8yY>3lR6%aQQjy)D>jumOtA`q7ro+`+a?iZOnD^!^mZ4B-tW| zYJ!oSkci?*oe<48mq=gx*Uw6*Q1SWk5IZPTQsZwu%U|xa^(oXBi&*r0nHo^~XV4%G z#acAWlmX{O&jSQ|^x3{md5X5JkZ^nz7D^gFQP0<7(GMkO0cuAw`P$i8Un0?qjOJdL zZ12zZ@lp-d}V_&h0N|^@_X->6>g8&&Ly#%rAp}*Yz^OX3Xj^@`N!Y!b_ zH;7xlugBz#ebOBaRw;4SDyy_wdGI!v`5w?mnA>hy@Vl8(<-+h0a6A&+p^akHqlscv zEu6!<_wWIQ7w4n$C$_HpayiiJ)vhrf&K4c{6E!A{OcMPTMcyodzD4@-PLHlZnGw{C zLHEpDez9u)Z*TmE&7hRGFwpr`W30dsK*3>QD zJpmm=XahOAa^#gu*Gqc-YvHVBbB7|IQC$ zt5;yhE}0fLjrltt{)bh;Zy2|r%tY+ncaxmG1drV-mx1^>j&fl&3ab-_HJ^om_7LNC#uUEw{5Y zRpRwJRRxQ9YINqw7v-Xl69I1{={t(=FbTUz9o7x385hs+hCGdL>QZbdS372YZ$QzmsSL;lP2>>!oEQtM<-u#*2%IEIq8?GiTBiHOBpM<1aW(n%_*Ij?vbuLwZai9%b229g3hpeu$I0TCd z*awLNfb~6ma5nI)hxbcv~}=Vt(DC#a(X~{d}%_bcgM%@ENo*o9p@_sL zwydm_EO}WzHL%jZ(2_#$(Wwpcj_wz2^fW#fXXJB9^rWR14tr*I(OsKYKE1B=6uGGU zz^K^=DQzh%*mrlD23+0#rNFg>i`1^)``fVe&kbhcEa9}s%>+IP%nh;arK6L?oZnxI zMn1IIghZ}J#&0WD4yAxPM-AClX>UxG|L?V*2gOJSBLUxHMq^KvdpKHq(Xoy4xwO4#?dmulH*_f zgS0EG3}M@ciB;tuTj(lCm9h)64kH;j^L;1#>!qTmUGIzLytjs<0oGtcUTx{X`WB<$ z8mE-cVN#2iJ78E^l9ztYL<{GPN@z&g5*?{DDY@MmqaV+0^&n4+yTWjZBy(rqRWGW5 z0(b_M?aFAte*MIoYw(>$?wQg78NWderGD=b=UYy-tTM<+28YgiLs|>^4k`%T5NVdD z6e7HTFWK=Y&k7AE#8?4+{z7G>MXx=Q4rUU*C5fkmIWG0Yur-j(IgSPdJN=rPj`OYe z;q@2sI0YUWSoQGDd!29c$gqZ^CL<3A zu(Ee?h)wwhg97*9^f%G4+x1IKJNTx;CL zeyEEw`Ay$lvUGK)iB`_!duzmI$w;H?y|WM}MNu{<6+*(~xY)J39I4#M&skjffrZRu2~fI~fn!ON zkvC*#{u`c58KW8v-OGmBtv?!hbZ=#(KlJp)o>|-> z964;|gvK>rCzI;HpjYhZD8(n5q2F{^BmnEqdkuL?t+DhkDhpZq^dp9cq6(~*G|w_* z+ajo?tOJY=&2LcuKiU!%Fv8vEq0APa0>Nq=WuECBJ)bn5=i{}STvdzNFF$@`C<7jH zMR1um>|F~(*Bso5UT4j=(QUaAsk~_eczuOy2P!@qMoYc!WsuW3x8u2jhV{Z-`V8Nq zezqzpoFxlsm`2(3{G#KHZa#y=an2-j9JZ>*n^ieMkdqzD0=d0VvThoCJmO0p&(LKT z#0E8FJ4yrhI!gQALXZ2*(&RF#ONRNO#!}(6vi!lFm5Y-z|SC2ccoY^p+Yg zf3D#?372X0t5&Uy=O`aRUTx=ju=;oszk6|9#d~g>;h#qFfEU#Z4uNqB(Pe%m0M=0g z1Uj?zrze)YsDeu=?wl6u!;iI}esr_1I(e6=JgWMY1uV|Tx8H;VHoXyV!_20la|39BGCYY7}XIO+u5VPXuRrlJAWfETGW z2_vo(FRcMq-gRS=B>+n@w*4FCDaU-sO!1)Vgv;YLUGx#Gkh*48^ zXR(7xYvXt#OvGisU$*~nVnVHHmj-q0aC3~FNh2?s7AWwpmRT-<4J*I?24a;W(q24a zf}X!>iGLr`Uj0>!9Ro45{2E(cgvrExeh@P=y1!;piFwV^u_-10t?6}dju}IoZywi! zoF~CqDB*Ik>SeF5LzHY(x>ekRyIRSXndV1)b)(0q!E(3R=ukWk%M&=wS5=Q!U^4k# zeeE?#f-WC2L)c1?jFVDlmO-y{I{?nobfWr{IpmkaL07?7%hUOF3Li$|7$$9X@@hCa zgDQJdcgFoO>X*kYp=6Q$nICNpx%4E;T0(!cbFtM<*B==NlKBm&vUex&=>TLMQq^Z2 zfg0RAX0HLOo?dFH`E<;+MI5|}`({Z;J8R!)JWi{!VTx!*@Q|@$=Nz!*3p%V0Fu-MY z%)(AH7Jm@Ylco${=%(bu>Q?M4x2wyQOHO_Oaz8~FP2O3p!OE?;t=*oLlX%Cxa70)r zjYzY(KOcVZ&kr^1$VepYE=}LH-d0+vn!jZvqkX8DLj?OB`8MEAg7db?NeY*)TG)9! zL()Tm87*KASe}|(X+wEW!-*Ea&Ml8--<3Bg+bDyLE~#Ypgg3nGimu~0)#<0kBK(ks za(#H|%NGNkR#nE$^8pp*LIb3cD$AJQOZShtN48O4Dm_{K$BxTG9ZVwWNYuab2VyFS zZf{BO;^)uIQ(PWKGC!|vrA{2%dM`JhTvI)Ku9*F*NO8Q*wSZZt`0;3|nc=A-UsOQ@ zpSTq~v!l<1{GrpZ>Z^;do(>pmSWbx%5C6f zy}RhJyT4(bTG`_Zby(htc)ZpMbTZvl$|_+hN~0S`^Fa~CW-EP<$L5t9j~dhbc1E>r zJ1)+zTls4HjgN|4oH=UNT2-}hj)8r2W2}?|H*4YTQu3kZ!mts#Xv#82ZIgeAplj`5 zcag#N3jhXx=H0Ep2PO_Jc=|La?h&GYJaHb$Q7$7l+uk6d0$V7J`|ZTl78#e;bWBh& zU4wn07Or+J(H6LJT+d;IF|2CJdS06Xr{gunMg3nu5wn&vwE+?juROBBVds6sNF{$S{ zD9D*l_j&B6KRVuVICD$HsXkqWqb@j42%jEA0lLwn)n;%k!!QIkx$k8+!t;-9@=6C` z6Sh6CC+&|VY1_P+c@@2nH~8WNeUg{$Qn`JQn-$n<=ctGj$QcKS4g#&lizO%B zPIa}bG_w}klC)0_H)*Tab!%MOI$p+scx^z2Jn!ZHs&ciHIXDAWTYAmC#+l#jPTJVL zpu=zQ?9qd9n@)osw1}7B^a+%)+Djn%PEU3Lm_}0?#KeRThu0BR(SNchTtgP8!*@cO zTkOhzA4>Kxy)}1cmW1o_1MvSKREoWQn&o<(Ugz#zB6^8Hyo#KTXqFnBA5Y@izYpf9 zM}n$Q*&Im1EPPWECCY1FpU@*2*2lUN91e~n9sc^>Q9vOn0jsvfYU?mNGe!=Fz|DD- zEs~x-JJnO=^q?;m4bSDXKe$?VsFob{CVr7nOlQq#U8ii{s*i*~Wr zO1S343KI$w>hI?%AdBmyXqk5Ns=YzN%N&=C8Hr0FLba;)@iFGg<(VVMqVod5ci*$U zH5ve~h?{SZ8jDqn9AeQL-f$%3KdU`%z`X)pR@a-XK;E`4&??L z-Id-An^UhGOlF_sF5gIHeENg;xr#MztNthY!Q)ELz`k*1_U za&r__8J1!B!wAGaMTR2DRwLC4BIgbt)<SB=Cc(f zzDBWDw<@OW_lWN758Ec$929{Sy>k|+RM~7EtBLYmu~jW*_qzn%Xk&5z$_LH**Jfou zT2jI{1j~b1r4Z~8^S+qpC;ewUcF{Z*>(AqMdxTE+PRgwps?}i+Bjqz@9LLhBVY%8% zql*#xKGc`YK>V5yVANbzd+QPg3RGIqGepli{qr?w{PUehLpJhDkY3{OS@yr{v$t=N z)E8Ae-ClZ2eka(uR^4N>_uQr}hA(9!bL?)3=#zI(2<^!Paq1gR7RMZpS`AH~frPaf zAt*{F2H^76{Bv7}W1^ZgJ`X8-Z(lcBW(`iR=N1_+aBf)w?W^dx$xg)*>h24~p76y& zsQ7^Q#lTWFo@{R=DN^l6$08SNZ@Yv55Qj!q84ot_44on1P<@DJk3yOr02 zd8R$xKRt1&!6s~l$D14`*X>OBZx;i-N|J*%73vCW3v zC)EcUid0yHP73|u2l|dLJ8r9xorHhslb5&#{RKt0BzHX^{Y$p(?0z zJzwHAPR;bYCN0TwnNP1pa>z~}@{@87?XRBrr7iTtD1q`59pI4+KR-Rsp;}*$d2JyV z{lF%BySa_Lq=8;3(T=W)+|jt_zGTpyD4{Ax#F0kiwDO_pPha#9fC36{eeA3;#bgxIb;J z0LqB!1nP}0eGmasE$^8TQ!jN6y&CVj8$NKz;U-7|{JJnJ;=%z@0slpE;(s`QF;Wa; z;2qjE_KnEj(}2=_8-s0 z`>d%vmxwAoIJS_eUkmrOf79@JSQrt0LK|;m1o+x_CkoIiZR#8_erZ&Fne&ft6oU+@ zuEuSA+fBfJ_Hi}*HYhOBzeKwl5E?>I054K!?M`81o050H$c zUP)cW-<(e=hf$i*c9uZqkqbZgH&)`G%pl)8?2^F?TM^VN+2W1-y6&3%SNBto_DaAY zv5O`Md%kDMvxWFd)9yc?^Ut&K_g`07?Uvbr8KwSZM&nX3_Uple*#^)v5{2fIe>^l| z)42dKsE2iBbpKS~Lh*$@uiyH|79*hnp2#m%6X)s^B!~(yb(!Wb&FFvhC}{|EO=&2- z=M}of7a*HDv623E-v22>jfASq1U_Hp&>8sa+r+K`Q9Imezi*lU*dgIh15bl;cCE<$ zw~Igs-dPO9UjOI!po+kCp3wBi$HY`2E34mV!WFv4 zD)H*x;^`ZR^fXdy?$yWtznr$uZXz3 zps^ME)kv=}A}+sEyyb+zk99XPUv2ZyPQUnJ=D{xcu1;{60t`Er|^z zj=yKM*fh3XD8W(78vC*}&yXTFYp^50DdiNF?c^v4^a^kDvMg<@*^i+NygedVqT z&=mRe>`yPdmSWWR#||e(i2-gHLkenrHMo>^sQi2wiAGvGO;k@6oFaYcgDYJrWZza3eV>ZzlpO z@b8g;8X$BSt)zlCB&VCujto3zUNiq?xp1n3fg@S#8vQ-{D2-70TiS?ChpsR~VucuX zHu%g^?>6?p${UWsn!9=*h6DH(aqnv*UZ~3V8?X1PrgC8a*$&3pzz&>IDN(I zVanf@kw!u4w(q+ZA$c`D0RAcQuK&-kov&&hHS%MVJGuOt?UZ|n%U*E2#JjmgIPLeP z0;A{8g;vU+Xh-)5mZjco{D!eY2f&y`lJYG6#>hH>IfgM|lyK(&Ky=ml+t;ZPPbwA- zEStE1D*7K0m79R(QiIVN5*SLW%mOgJ z?a#$Zzuu>bm;}*2nAgJ5z*v!PcErc_3R--Avr%>uiGt;=w4>HSBWl^K3Iz3I=gmrS3aDpP|&9{7yb zBP7~A#)MKoWz6UHv<0g#?OE^ih+Fw>B-B1N14I|MWe<5x=~r}MCo}q4XRP)uVPj~ewI{L+&r`+TVF!))h+Q0c zmIFe6eG&7)TFrO6#xDa+m^9i(_wTOLspja&Sm^1naPb8?o8AOZT+#}C$#+xwI$}B? z@nEyO-%ZYSEEIsXK5U5>mh^Q*(L?!)h~;9#$j3sjT>mZLAtHUZ9rscIr$Lr}=s}6= ztj$Et`2DT|i+DF=BYbHosMx8&!=0R7hvlF5Yg&Nt^!q0`Yzhu=jk5|_?-Y@5ifqqn zE5|3dqiIfG{=h6zr}z*kqPteKma_MmF(l{q9&rl+D*o2(=b-J}O46V=L`VkuPf@9|anIO<+pmlM@n(v|SO3N{q)^dE=cD?ys-_EhpA!uYdRH%kvHz0yiUq; zEBd(8JbfW@NdNRnC<&i9w{%{f?pm}%3kzRnrTJyN5vg@(UO8hF>wD6{oRh>Qz@fC$ zF>ju4&LS@j8a8V4m%egNdtZQ(zj5(W0LU3ensZ$^Y-pYGve1G+Gk@vE8#~3$9I%0~ zKBj!yZSO=8`lGoW9M~anMcxSH<6XJ7*&pcu<*i)#)F190-1QVXka%dtGX-Vgo(eb~ zYmdVoSWAF6aaJb@xhsR*Pnp$tsU+a5c(ONJxoh4Ak#Z5~!1M>|)~HR-4DRB$@XMYWC?}t&ZjFl3U$i~Ev2oaSIA_u~u;P;BY%vrLx)WQ=E=qBUDTF;# zqnS0Swzs$QotMQn$EzeIn%#HN^@p2{q}+bFZ~Ujo&>ev%D9t^G6js)Iju&rSC#Cn? z^-<#Rga_ri6J?ItBv7hIJDqK_6jP$f!}dQM5nwLCB~A{bi=Smo)TDQ?BNhi z<|%cDuR(6GV_zr-&rUIMP#|G^S}HT~&}gO13$lZ;B06I&?)6`I-d1lw?` z2pxk&s^v z?ki<{y4aoo`=p$vqX~0F$8VKKEc{h+cJ&z06;9)K{p5lw!M6ym(Vb>QZ@n;Uq8)a! z{9q|Mc>+rl(4HvfGJpA(M`EXTyc&ez5=(cFpxL6e>ucB)ggRy*CjleK*PiN@;A|WltYcu|6rv;~SboLw@Wc3&{U$V* zahjan27sH#Z5X#`U^@#qc+1(=Cw{5wupmaYJ|n(9PJ>#nV~3F%*MgRvx|G{&dO8*Z zpJ#;Qmwrd=vXtQ>Eg*ehq*=;6Q{FeRS*xJMy<4lh3!A#2jP$wuR+i%7y$$+{tCH6m z0l`9qk`%?1>+ zLg&cX$;S&~5TpcUj=Sh75e>z(fAZhOqqC zf;Mtv1Xe1T&=hj@gvP$$<(~KfJrIMKOtY=02k2lI>Qz`CEnk^!f|=h1cZJpEd04~x z(LI4;xq>Wmt_t!VS_+7WEC4*2w76EC6Jqv6YB!(5iAE~jbMEoGJ(W#hJIGe8l?EL} zdLSPuU8-a1KUuwhD0&gC>A2LEFYMVB!+nxrz@TDZ6+G^A?mRx*3B^ilK`bOPcJ);t zh}B*odj7yrK!|Dc7Q5ovBQNJBLK0z1*I7)FW~aJr|GnB|i&YUb;;0{J<0#Ew54%4B zuN9_|>;qksE*n~JLqiWbKFh~(Dpxs}G@SHZotL2VsK_ghoq+i<3hsT@X0xf5$+>-= z`KZWq&4`h}mgmm9q|6FjAIoLRr7w`P*|j17nPe7Rhrp1+Le0P#ku0@}qGR?SCxWCMIWIWLo)2&Z+Zlc1VH$VkkHVM6Nso{9DujLS7) zcB|inq(lItdh}@TeKHK-(z?$9w_e+nO@kkH+z^2{o`Tkx|NK}lTr%Jgb zT$&ruNp>V?Y{Ff#bS$Eku*rTqw;^q0%OgGQf@GzRZ+Me%B)C$eTgOlyr^mYM;^o_@ z;-)j7o6%hIjIr8;6%F}$PAg6|pcliPdAG}TGRFP#!m_1q_|&}@YnsC6qzX|Q|Gpj+ z0h)uQgBCU9V1j}pB24NR^!g#>)WB_V3=+7sO5SPjC}WB5pnj=c7qgLTwo$#mv$8~O zvRQjv?0HDeU|TLFF)&f%5>f4JAvn=}YClgQXmZ3h)@@mDIvNvEli;q-BV2&?lLU%? zTiUwO4O(@645EfS>3%w#48WI_`L2g%q|m&?44*pNN#=`sMsbzz=MWq#Gv}1I4GNLY zcX{J~_PV@f){$n^sFt>ASV3oaI;|r~={h^HIGX}`G0QI(Z6}Mn#?vTk%$(yoNOh!+#dJjhqEI%ej->1VScksQa<#<7|_^VeX@V| zEWS?cxzwKbqWza=dG9Raao0ude(G7({#2EntZ_}zRj=ZF_Hhau5hV8tHdIy!XZDzW zY90oVsHpHzzVaB`<`BLVOZBm>o`ixMr70SK4}(p!{1NDbo6%Zl;VX}1T+}g{c&)%` zw|v(HFiLI)x%R`UU&dpnn_hBFC0^esJ1yY7)3ubbHl}CUpud&e;(jr;TK2J`aMHNj zd5qb9Qi>y#hRgKZoNoIDPyU#<%6S9WCGI|xjv#`-C=JB+duB;XU*U{JJd z?{?BlzBsif+dWIm(&M?u$8c^fo6vwXN3f^^2Ou+A*3HVK0_TpL4DTc@m*L}2u1mu; ze9au z6F+!n)I4IcTm?NP6K}p0lG!W!m^Y^YyIVr+NY2xrEVWV?K}50@bP&R4jCL21OPFFHi2Fg26hO>$SA4 zgO9#Js`DJB2uQrCrF%4!@*I^WK`zb4T$9hEIMR{7iO`bze9O3C~jl1r4^;y z?DSJNh=-TAQPMAd?u?GXgS>mQSO8_8a-M~WCllBCi^ZQa-&|_Z=>qGs)wE9bJw`9?ZpynBd>&qZN9Ujq>+Yu6g^63cJpyBD3B-F-A<*NRHeZO6*J zzig1K<9=-7q6gn5%_I}Ge}8CJ5+)#@`Z?CjMACZmG~#o~*qc%e;+B?{4yJEYWl*aM z$r|+iG6&bCv31E8`4Ohqxuy5Pxvx%YY{?`4Xba*h*A>(gkUicb!IPLjg+eCaF>p`- z*uD4Q`@uaX0@M>dK0sZ-vf*wYJhfEVOP|lYZ&^7jr_L@PaS~fXoW$zfx=GT~wp>Ln z#>Y*VzK)Z?g#fq@L2Yo~q~o!`CoB9G_d1Jf+K12lW+xT&J3P|rMwvMcJ>k*c#`h8J z8M3$e`(cr<1Zy2uU-|<^!u5}@$k0%qsjA|OzuTMC zejxLC>a=r$HL_!&FS2Id{oK96#KmP%^sbA|VVr5QPxpII4wbVPh%ZQ}d%;C+ zsZ?jsbrLtE6;vJ9%-V}`%^z~bGM@r#@S3ck9D33syWc-8iobJY&b0i2a+}^O;Bi62 zc``{v$hjR-V+VPQ0w%89C;en9OPJ^Pptp5D9d{O8&2D0pQ)HGmy7e7#?0g${=iCh{ zxG|7JdZ{!CS#u_`ql9jQ$hF;?Ws}2vdzP?;*L+<1LbLu+eF_)M+0XZl`@q(Ho8q8DN~>e{w-m@;vW|nj#9`$;^I6r!o9WAe@3ezh*cYbZ z*D&2MhLM8?u!190+}tV$R4d+pJV9Q7`&>Bd-!i1Q&~0jIX^nH~J#3gr9 zjQR+Far5TtV-04>7IqFy@U`G)81>bL>y3Mm`yOIqrOG8wcuLO7-&rqy9!77N$qFW6 z(DlH>uOu}x!1IowwiAW(IepN4y|$Su(vx7~1?0qa(8KOg19}tQvFZ8O-q-F~U#gpy zQA>r!Z{S?m|xqMA6j#gg3>!&VR{j2T*o|NaF#_s)~X zJlt1Q^wG@PHt042YbJv$M36#Z&%+L%HNNk6+2iAojZOuyAM@d_G`SNi`sctrbk?`d z&{4imudkz`3fQ4OhTQLirefmyG%%@{rjp$AZMi{VP&v!5ZLmH+=cQ4gC5hIoo2b?> zRe!E;m%=+S=c`*PZAgvv>Xe!)+>ZlQjVuK|ciF}X>7q-^5;_ix~q&G-EN6v%RJk{XZkvb7ZHD)%6lLHW`h$J>h> z(xJQ|l`(L*I>^d zTfpHB%QvnS$S2tBh>0Q}J{#9iUuJfcQw{e3z~~aZ9>uL2Xh=6r;o{Weo}!Pdoh_5t zw1JxQ)TNHaiGg$=38kRt#QDY&UEZcmnqNe|)GY$GFF7nH+87@U+lOy%)?wS!K=yPn zJTu!$_X4bD^4f+^mh(}pD9gLvcq>_;HM`{x+73VXdPDoosp|JJ`5(1*wwo7C23*p( zV;reiTsHhO+DbPln@TutSbgL1_h$Y0^eZx_%XdmwN=T~6XBKvs?l~_(_{e(s0hzxo zcCh`u6Kvb9q8E~^l)s7PocL&sqRvIAc7^60iRb=U`Q~} zi8(Ki{B?k@HIAiGD=Xj{8X!_=F_Q5`l?FeQ(wI*T5;<@pb)X#GHeu~8dok4L2lm(j zF;20~n7xJK!YgNc1e+q-240^O@17Vig%$QGq+%a@$ca^43)t+5n{cZdDbl7m%xD*8 z*+ZJnOTO;gz3rySWpHFx@-9Z8ph4*2q{MA{vIdDTvBGoq{X4{beMBv=akrd%2i3lc z#9XpkzOOi zng?^#B9%lvU~e|<*%KQJ%pCHV6r0OeZ0qSX_{@VP1v0vc4?)Tf7n8igKTvCmO#=OZ z>vYS0ABV5wi8Hc<6Z|AmsDDPLB=~v{K~^mzpwZ=9i_!Hc>O5-XI!_*H#Jfcam8Uhp zW@e{#Wgs&Pf8HpJYeR#fJq(Sz=Hark-2M34Ow-e(hZ7{ZetX^6xXjcd|A(@-fQqtv z*N0^s8j+Av8U*PSkOoQV2I&@Q5Qc`Kg`uRSq(h~pJBAJkiJ@D%JH7{f-{1G0v%a(b z=f4)qHM5q=ex7~Dbzk?j@14Xkn%0DVulMfx*|J*@)!AJ7gwO^Zj4miDKDq%ewA|ho&C_=P}6dv)0gF? z8ch_%tI3>k;YsE7CykIoCPM-)WIk{cnjw@U)fBbp3kkI7M$0$H(tz1^M5(Aj2%03N9&l16gVQd z)GcbPdnKTjf$C)9I=Hnb@Esd|9)WrQTLuXhC_$id#rOe+q)cv_fu;E|AvN_O23(Qv ziVUMzRkPm`#A2JIee}5D8*Id}6Ke@7y~@-M`GTPa)hbdpK<3C_euZV)Y(IHph*jz- z5hVIrItr5iw7E)_#{IbUYQPu@hRcmnxoxjZ$n#_6c&bL$xC4nwR%v<@P!hbz4IyJbcQHQHRJ)iT0Doi2;bue*aowkGGWKu8s1bMsxl zZ#o>)yO@=$xf=&<{Yki*Kk3Z(^K8{9E%|&*5`r`}T*X-O2=Xnvx=$Z%6I|Wu|BwQ1 zMGTd6zDp|F<89NRt+VRWpw68?xhy%;9k9HK!*Qt;X&h*60qyv$XMccHF22VmD-MUK?_$g0HZuv z`dnf8d*3BRF`{MCZ1CQHNEIlPE>T|9QE6YO<9=!3)0lL_`N#0Vyhs=@t~_s5YIgXO zXgA8`jsmKi99UCa0Q>JkRv~1&Hne#LMq4OHM=K8c6^a3TF_#pC&5bYpn5z$y=!R8o z{xFo}V97GIY2`!SS5EZfhirb+F57GTw2|tITzXLAOeM-mpQK9+n0@mO;l+NeQm$u7 z6ABM$(7Nwkgd_M7ExSQBtMp)8>3EU4N`8NqooQ!B$D13uVu#sKqJa#W)xJcoD_iJ6 zsn|{Kz{Bq|%ca9*&b-Mds}mN_WkiYhWO#(-4xSM_*l~brS z+*}~UU5tlA+UNX^9NU?m*0X)OyETmo!xm&)O5?t!L&EDO1y!|B7jj{%LH)TJD_FK$ z`V#Uf?4RxJQ@Fezu$n7;=}18?;Pr(GM_j!Av0tKI$<~L_K}_OMR+D8D1s`*2nuzf5 z*jnH$-wNg#(LI8BLM#BjQ1}BMal-z96^RPK0~Sg{=C^UA1V_JDPq{*l5ILQ;yx~IQ zr*f~aQl_wM@)42z1l%2&XxG^GcY2SP--bh*WcFs36+k!V&L7jy2!`DIBoY!-7&jy) z{S`t#mNmLbv`sw(5NB#EpiRdgr57W|$#07w0TBs+J_^9)J;u}4rYEe3-9^o&YqfmO zAVYoG!JpS37cgClE2^uUy_HT1vrVcaRZF62d2mD4;YyGx+7ThM?H(+o%v3=NTU-Gy z+=eW7gxt=Q`ZR*6?dcaRs>M*9Xcp|S@&!8l4Sn$S9;1c6Yn{hNt7#!tDYl7ogu=^b z9|uK~s5J=ewoGQI1M$KVr6XWEV7q# zF7`f4F+Bbxr@~iss>?twMWqoGN2AV8oj)6gi~B%}uq zE4H=IxAvUYj!7zh1BC~8_xi>1=(J(`Hyk%j0r!3fHCF@!ahuMJsf{U7Klev5W;85= z!VT}L)afRi!?K|2wCU<_-q+7hE!FRX!m=O~1m{^W3K3F!Fq63`4ztwQXwLGrny+w7 z)mQS}OK!UGDJBVwsyy8$hhBcEYMHd7Ujcxzr5R8hR5ryr_k&YS>rY8G1_gt+FeZpV zd*k~)j~1=bjCeM?VuxHH^IIxL+scbTpcH+B23DJ=e7r8jBXR%1Ai3lt zF||$%^33NWQ_zqgx3a)eeY9uLK~Mho#{4_)E?Xhrlb_jjJYeV%43rLA}} zMmE*pj(VK)-7%}6gL3?fM^8CtTw*_8&1$K>HjJbGgh#BD#4RZmbM71 zJcu@07Hk7W)*Gb!CCfZ5bnJ(VV%*HKy-&}6Yd`Bja=pYCOMvow;dvO@{kgFk>@~-w z2w78DN@T^Zmub;)7K}hum z2xnaq6t7HX{Gj;$U^M(~9hA$nZIhV*NFmq$kvA&I=7zM9hlTuVqelLel)Rf`=-`(n z5>l&hnfvRH9(uUEwAy}rUFClKn^mebeEy;&()XwQVp^QhXiqyKar>;>Y;c4HkwgQI z)g`ttd{A^LGQaMW6GWCH_l?aIGq_IhC`V8I4n!M8gu}h)dkkUk#=x$K#3xU+I*JL3;83CzG{spf9CJ%LuEQ;#!Y_C4tKXbvqG~?DRTR9i|jJv^K|4K1tr^9`RURe zVfEL^>ozypeR&kMn05u+q2PTz)EIRUZUZ_W&F$L~8g{92B};D>uIAf8Qt0h!G?B;q zdeUgSIcs78Wt1*l1nsd;izA7NStXSPEx+?A%rSEg=!3}`*FT|O_wcUqriXYO%CbGe zudziK4^59N=vO~`Vcl`WFIm5Q_-I|WO9k=DwSA2R6hoXP)>yaZo>&nzfB&|l3GT~? zWhQpTFw|6g&yD6E#LP=^3pC3>yTyz?Nz0SL z5E(hc7wP-1%7zTObR#Rjz0Cf4Y&!PDV#gBPxYnGB`cv_|Pl zO7)}zhV3RD{6bIW%A4_03ZN;bLCaO&_wbJ`y=aEHICYH#?K-}IZ;<&^DTa2mYSGYmzc+?KhLy_@8j5mdk^+w5eG3m2R!!8 zM-HKXl6K&|Lv!WDs4}vrbI9eNUwTwAz_>aScM6u2D&t6@9HdSjkBdmmIyOE*E%{*`oh%B3TBP^|+ zdz72SY)Q!KyFP>kU?)Kw4zbXTRKIBJ9E>{RKeiqJr$h$!3j8G|SFZQb1UHAjf%H3T zF8SX#WL+j-dY{=h@6~|?E(jR4MOm8)ptXqx%J~UQ+b*Z=@we?tmbC$@r9#Zi@|)w| zbGx|5Ot-q6jp06?!Ch52Q9M?(L#}()76zgsxxuI3rIeEVb1Y8%K$~8$o6tLb$HGeA zW2%bOUroxYZ3x)r*(7LrY!1`+YMBivlyrk13bTJf9m==qvbMAY?AxzMI%9Wxt~sq$ z{^N;QjJ*^ltgEo)oK4#3+YLmICR9<#fIXnFR4}JxuvGbA1`BgC_)E)VJ2V4$&_eoq zZf$JBUwTa);MUg15-c14mb>LI{}{2m8Y4TLJ5H!U&1(rtD%E02TX`hDUYk#z817QU zAOPf|s{ALNWez-T;ff8%fe+B3RxPXrYNO1kmo-upUjTvFhdNPr2SW#(dk*a*I!w%Z zJMiP>9qq$nk00+3_X8exV?IPlaRDkWa1YDdIs4R4(O*o0Fq|CQF>`B#XZl?XSd(vW zL-4+;A*eWC8`%iZq{Px494zfqjcm@<$I5ih0*^r=M#%w{R9%1bW-^8ldVuX>M8RzW z+j0XLzj1NdfjU3C#Bg3`<7S&zmcoF=zGv8_N5Z@J3+z7#FiFu{EnntWVKuH$y60PV zeQuvF)1r;ROMy9bOUBhD+|Cc1yVB;v-5eG~;4U(9&q-Oj`GE_SxvO)oin*MhtA`yl zwlm(R{yW1MiKaDV`5H#BYpPT?b>t^aF-bKK#iyHIOMPBxGO-eP>=}LJ4RE3Zc6RSw zUngjDQti&J!G-w}0PJOJ2nyAnw}4dNP!r0yT-_ z*Lt101MW~sTJtJEDb zgsR;#zj7XvZi$8T$&u(!UH9U?t~2~YyNfS6w=224h5cHOB*3=b=o?XqKhFHpXd+k|qyw7XtJ@9urTp5eR(|r$4u!X}Bs?*BwemFR6W*MKdNaKcP{Ss$B$mbI@ykRY zj)1<_0M_SSsXcMk6X2u^ta4{R6+z!2D%4Q@=G)^in~FC^GY1#KQlXKY=cf8Vf?u!?7P1U^{0(_#)_?<8${*#a8^Kf;a#NR`oVOw-QixP1 zvBlW){5uLf@2&lIwYu}LxAONId&7#m%S^b%)LbO$%Ot1Xj8Q*tVOC3ud%VRR-9pU9 zWUorJd@^U{`BlA`7P#k^Ct{I_-EMphSLZloebpy~o;()N#nnU_^DVT=Ju9ql5p%Wy zI51oCchB2VPI%q^604Lxuzw}uDPS}7x{T2w=kS2Z`>ejKm^sbl88PU4@*<3Y zh3?{L9W#!0t_hfV*h6LSy|g0(e^VBU#-RC4n^Tn&9eo801O*d9(P*D+TG!Ja#lJNGMM29c-j2KnF5g2^N?36Pp4r2CXJo z#lqoRC4B4BY0A73C9Gt*irjZ z6`q}p&CK7dx&s#*UaZe+ly7JFnjd`11tscsjPth?q-7vUO`_7@`fAX`OY!&iZ8sl9(6G=p~Nc~nclw&!RW{(~63TwA3 z6d+_By#8jJ93XyqoT;~y>an@D+>lggoC7FI&|yE?5e4q(AnLQT`jalaxo{yPd0<$Uh&YIozE}(%Wq;dp&VCFc@$WI&JFFK&dn6)o6B1?fIB7h5CrJwKWwUh z96+v;jIsmFYx^P!TPuzmy1xn{v_mf(D4J*NcWoW(W$k@o$;U;^`c-WC)dz$OvJHy{#nHEP%`TF5Ev#-eUF?ELPXU*R3f!Qtp|~bG9o+z3Waq9p$?6V_jfbBQTmiCj27=y1=T9WK`7{Qd z9~K-mB|QYT=Z}DM*>Pgt>Adx7H0-;F$FWW-0hq8aaNLjL{Q?cXC2m=LqD$B{cbPtD zT?$j*+(an3H^;IwNQjZk2FDJvVMm#1mbn2Xpi7sb~2@;(Wi8Nfv3v=sHcIPl3`Q_^a%RFID&EZ5s|mG$jqn!tUdEZKhMa z#0J)@U!1d*wg8y;-C}Q)r;fY{o~}Mpo4*w2r)nnYQFKrMd-uQt$NDIe6=tSq+cn#iauyh9+ zhIkrlGe^q(Pmw~5z@$4=PK~=ocd`hc@BLMVM5cK`)%||dH58@`%0W)%=1Hfq+cLI> zXzsMn8wLt|lz`uS+QN**K3(cq@f+3j)IW1Ngpo)CE){1cM0EFK%q3Kc;=SA5+?v~! z$05N-%lHbFPA~rKW+W@IZjYQHR8Ee=`*E?&^&+IuVCnq*X(T^fUiF1d#$pJVM zVxrz?)#lB|fP+E(`jyXl)o8uJ#JnCk zGviCx7294d5$?mKxSU@54;b*>75x^rl{P(r!4Kue?ZG*pIuVB7-@YtV&J=I3)uV!@ zDpE2)B~83O;ko8$8eyHCx^CKR&$N5~7Mk{{t&&K)f;S%qU)huAePP!6MPqVtSWmIC zJk-Q4*;IEBKeC&NI~+zlh5er7IKl&&@8p3-?yJ}nRNYw`UIWMv9k}#y z3=OA42eFn>STg0pNUHi5TS{@KOT#Fk56ya`H7X75>|Y4nU(3Tv$)4<7iZ*aN8O^)d zUd3W$53frskUUO5p}f_rlZRWUP*c)%wK(XeM(#NH-tI&_&of*PEsWg^S*j6@Nd>Z% zaQRU=GW=n1bI!y7UB%U)MRm76WM-2tXzO5DWqHP`gW{L<2}(%?#Hn~91Oains=p=W zzIjEwyfP}1N;N;EYt)NGMI5--B<@|KzNRskB*y%*RoL-;!2vN~&K>uuivBy$8udx~ zbR{6KIGpb<$01Qf+!6pGRNS7eHmo})H_|*>d&K)Nfs(Fj?={)95OV};eaEYgnNf}n za2GW|%`gJWGoHTl(muc#ew8(H7idj-LK~qVh>?e=PIV?0;0`3!cTkSiLOAo_WHbTh8>ok#>5JQI(5&R;bVPS4E0>HR(5o@MA83lTZ*mXEP?-Ru$=&Fg)s z^^)T&11@oO)15F4itAzP*^K*9?hbx>;@-a~v)*&_nSF2cB6+n#jmxa>e52FsORZ$o zZ@w%yx^s8?rmu4B3^l&0C+sz+6YSZK4bXlJ`e8lMd%A;&m06wAZ}M_4G?=CNruYj< zUIO$g(2u3m4-IM56%~W;X8gOxsJ#8{AZkWZj+WlEa@xi;T%ezj`1LzbHL1XMA$Qpg zK>LArLqdfEq`DJq)0=HcJ!dr{2Ks))^N+7LWcWDl&C7&CMRATPIo}$=ocHI+l#Tv@ zsDD!K@|bVGMB1wjilKh7$zX=6jCTn5)Q(T{&21N_<*hhmmN2>QnG2E{tLdgW{Xz~T z^Y&L%xIm_w_Z@4W<~Q#8eSt=x=O#7j_oxTghI)2X-}4zRYXTXRBVqAyLOKn~F^rD1 z$O-Nb1#)nxeccJ!{b}=;RzIcNDD#2CKFQ_cXyM)2-l;&(Jpo|(xV9V^z4CM^w7j6p z#Ul(uR747aPWCh0#2a@&^iW$a}#<9hu zwGc>Bz>Xh}fBF&}<5H3G`OOc;_!Wm^+#?%{R<`D+F>&6u=D{t*tIvej%*F0Tv2~5E zccnAx)ZnJ@h-bxCS!z96FBOADSg$(?h?dVSczNTmb`P=Y6b4V88X5_5r@NtEJf~w1 zmiaE-oH?x-65TI2+UBAxMV9Yq%lxxhtIOr$qx5uAa=U!n6Q5G0RBUkZ?eu{Dh>B+h9=XeZ;#D-TWrg6iH`;*U+*6*)yRTqi0JFK+_x_J z!O8a=e`Qd06PFR+dVi=-6brkQNd7^5;;a0lD}7C}k3Z=F-dkKM!)TmwddM+O0@YK>*2eAT1+3F8?qeaD~|R{If*hr3;8#M z1c(hGwa?tr1@7ZW5=Dg$`&^@_QS>h?29`KiRS3PB-?pX=!5fVhJ^h1-w`G%l^vc|q zo3#3Cf16RFAe}#2CZvqF(1R#I=2-cgq9&;Bc9ZT9sHt}A8jUbvm;}rPk+NOev%8!I zEn@p0Vw$3lAIYyCpL$Z%v$c4gnUb*?E$9UnijYhN+zSX4B3p=8L{d(I1SfukAkdmX z%bl0Q=S@71yYOdUeQY1Qpf+ss+MSo(BcIK=S&mAcC1GHP%dHI#oy8>^daXWr-U^}e zrV?@)0b5-+J3rRPr+s769!9`qHs9opq!!Pr|8{fi01f9M-HIY!Hx%Ia9i56E6A6Ys zxliztMhzA_9$fp~juzE@K~QP;wj&uEo75?r`erl0_~=)g1zf`&lK(0zxX{3eJ>vYq z(?%i$UdrS=r;cI2@ zlt|_J%JsUYUbqy(3$b|4Hye?B{zkAhDn*%y^4NhiQjMBjs%e={$)!`lHT{$mB|s#5 zNXH8`_q##8BBiTi$FEb4L8plK8aY~tkx~vjHUT)U{T+qnKy%ts&EH=BWuzrnWQr-k zLxM@pZA!12C-i5vr>mNV=z}Z?vUcVkhJ>@kl_A4%9E^=-#K`!z*tT5*X=qcaaC>SE z)R@?%ZiyR2fTLUyGS9YdL7>CaD4`YX{i8&>LfdV8ddbi$fXVpu8o-%+fFdiq=^i=< zOV5Px+9_W9gnI5jaG{2aGIaoxu~!~>XMkF5OpwH^^RajEj$cRnbR>N|+}nJ)HZ1p) zCt7g_(b;FQ>mPKO&?F*eRQkjs!vQ52fv$!iDi5j#Y6q^Yc~eZ-jt6bkcE6qR839cg zK|IlT8c~}~$5L}bZ(oTbS6>hYA$!2~PXo02^aWJoGW#!SZ)Zo_Y9s`%Kqq1V69X%6 zO+|g!!CuhAYc%4#)~{1dkwFOMIJ7WqPh_8vrL@FB%WD!Fq#S&kM-L>?(O9}8>VFV3 zCDos1n8dv}$UQjGd$3a1JAIG#$NO{0vmbzNgOgx4c+Zz})P=h3VR9HjZ_o1M9|>;= z`sm-PG<18MWe=^)Ygo@DLinomra0j`8wP2g2tXE6r&RZ~Vl42YF$MScvkxokc&Pvx z$mA(vNhD{!g{s_R;8jTO=kjg zg_6E$A=IWt6|+EtsbDvh`n^8XOiOM-muJDIPeSG&;L)?earo?Bz7t?EMfj?f1;r}O z4JfH5zO!%~#K!Uz+TYg4KB4-D!~6?-;e`|^$d5=~4(h~z%*N;cZbIKtopkxE*fP{W zKO>(1CH@^*sa?C&&G*~FWF53NJh0DKL+$3`79^qy*2x&sR=N?O@0)FtJ#4tof3m34 z=9fMT+jm(AP3-?ox#4d0&i87}f@Fwr&f^YWC)cjJYBCGBKiA2!A|-b*=mZ}aOFVFQ zp><)lmRS6P$YkZx#k$XQI)sGZqrnjy4vi9-ndT!ENH)Uxh00~os}$}NyWC~kZxO1q z+i;`FP>3CDO5bczl`8>gO!_BvLk%Q_76%HK!>Tobqt4iu=^F=0l`F-@us`pSAbK5d`cpz-PMXw*4|~O5$?j~lZ$-D(VZhZ zc=8!AQbm90`JV4}EkBG6(z%CoqYfx;o^EcxuAU#^o;%*jGh(;~bag>3NvU9&7Pfne zG$*8mkL3)4rX->&z2y60f5eV#W$8F&!3H6b;XRYNCzjgE!y`XKMD#x6!I09n&nWWd zCq&j1%Vm0YQQC}t6M0dQy+sxg1-4p6~{*fWKS4U5`Fc$JXW~MS{zTfTww8##a7K z!2$W$NT(eoA%_|1W_+63>p@KJ~i(X5YK0e8-dBq zc0?RxC`Fy5qOJty=6U!Afg?boot-M541w8yQ?a6o=f+`MZiuQKRTV=E0ktCJ*VZO= z#-T7^`2G9a!I292uH)6;<>q}e3=wG!M@8Wh0Vt1-%|9Sn;x_}~PaO6@Z~t_6-rhh4 zJo<&=wjSSv2rpdjetlGml=Rn;2NM!FHR3H_9%JN~_27x!>5_?4qA61C20lQu>yt%} zY(0tw#vvxR4&J6B;rBi4+Eo{JAYjh*8sVb6oXvM>9b1pdebb45PPZ-?f-Rlm5zmZk z%tw3b)y2z}`Z$X*RAu1-DI@MPB1`b%M#&||&(JF)&4dOltORBolLww&~iZk>G zWM2yPu)Kah0`$$KWgaauPgiS~QBT7qRby?HN%4swZO7w3A9ot@9xvZxptwg5Qw%cr z=yWFRzVw!s;D%zK#Q;zvTK@`Vs^W(>lOX^#uJ9K5|1DJ>0^d=!XcX@pg1toSp$uaz z3MH|qyNz5wL3DKNipLLjDUsNaZrKN#65EgnG~0V7u|vaYsHwLV^Z-!~CG-PLi!Ws4 z(Q~f9VOqxjfo~TrQfNJ}E#GX6^8!`LFS2ubv+n?=8*GeH8r$WZFyEbJxS zFB*()rVHA}w?yQbcgj${Al$%XcyEiDLwnnqC+wHQc{jjq&dzXjxUqQ%=d+*!QwK`8qG@reUa1zfCbXxip z{!|9Y==X|ZU~fCyB6=uWfYQ+K$&xIO?aaIP%C&FeaZ1p`l|ZyOjNtP<#e&KweX{r7 zktyfbY${&8qwR#(%>bUHA7o$|@c1NpiDyJX@9oZ6y+CvSgl8jvXLxy`-@0`r` zyZqt3knqsn-h*B5Q9(pw38~3;&B(wWt1MQn;4C~IT~Ri9 z`p-Z6mp3z_Zkgw39ec`*`Huwyv>`6A+(sGB45R1w%f()PC2~t^=yMhTobTw1fB$pag5g`AZ0A*m7pv##E>{n0{W-POhl}U3 zWNkOJMrivX3~b>4ws>V4VDXv1OqkjJvv?;oz?w+k$m92dHH&YR6f=ZviyVAT-hbk? zcYC2lZ!l#{UTHjP@yc@zmGw6PDaP(;eLsw`F->A*#r|l*gWbkbq-7~!oO@c=3%BH`~ zGw3R%rbN!pF6z6Lywzc#*!}&$+h?HwhVX9TmF@ms&8j1j{z8M9&}V+AC>lsrn-1)t=JiQkKe^3051RU6Xv8n@J-4~qjLUd>;A$xpwp@cx+aUQ zZE)xL_w7LYsak{;*BsV>F|>b+0CluddmKiVPNz$n=xk&-)24=FvM3)GQW=@KM&Omz ziBoa6+ppH_5le)DfUGhzuZr<@9MDQB=f1K}u?dsYGrCq7I8@~jjFP=ugwk-D)ptGr zIY0>}nl7w4ujRx&cq44PXG~JTWOeXCg&^imyFM#01Cs7}twKO-c(7*yNyDUFko%&N zd96yPWLM!Hi*cDq8h)hE=7QI)dT+iAKIy68@<8ALEzn)l7medY2N6{Fk4k1aA9lX%b5?T9+ODC>ja;(zomx4LUD-JKct+cgp#BG7+{> z1xtrUJy~@6mHf|m-zF=6z@Xxsi9FC}GOX#bG&pv2*P4yyqItnictFoS=X_YntzV&` zm?8A6l!W|+iiAfZ3ohFuWcY!DL+4{CaLHr$xTIk5L`I=??2@sO?vyPf%Zz)o8gQ zw9FUEk>omADMv{D5k2(G)TOXERz%R?DF$qLaUqQ2K2<^66vQL}5B%~Tn=ly68Fc^3 zF)Y#p|Jy4kL*IwU^S7C4{%4_LK-x(CVueBY?_c%z2RudWCl<2=BOu=2MouI}U8dPI z^2%K`!m3^(dD)9B@i^w7aWgVCCgvw-d0%h6=OY(X-w*$*VfxWvY^*FF8olebdmT;n ztuJF4_?Ii9^*qOJXnB_RYM@o5X#(7M%;hFIrWzSV;p#lczz_S0PW ziP3$Np!5e?-)j(wlAnk?S31Yge>Uguhv=sJEdqiy?|-~$ffDd0hsuX?V*l)Bt2mHB zjjYfUXkLPyzO@jSYL0zf;?(tG)+C=T9o6p=pW0_n&fKkv6gc=6Ae}o@)oAxwNj>SU zE^<+5?awZ=mBEMQ%N-20l}5tJ$_%O)p865eyEAN~XOi_@xo6@Ym@ukg8_miumCPy< zMS<%vS;n<1`-NQP7ag+6F8iTgd3PCDU$7)^D3~?WSsA0XsGZgmgy@y}d>!dmLSA>R zs0sbzC1=)=uw&Bfwz*~CmlA$O%+lDK5Z#BlmUzu**W`PHt%L8}c2?@PRn>BSmd)W5 zlR%}n$Rdc##TsY;m<3xSU~*6+~pn7r>8(Ra#JoFD|zc%fMW zq^NX%*9GzXEm>rmAMw#Zk%|RD*TN($>=;lSX{qc!8_&vV`Xy2}nbS59QYnm6eF@j^ zb&hsYU|y4=&_Y_9bNgl!vxjF+fSaJ(nHz~(*6qFJ+TG0I_|e>|3ISTCh$2ml-K_D- z4$HxP?Yf=#SYu}MS@h`OcYT#N8yCY)-qpMD#sq@qXY}l>IiPtlf;YVpj3WxnRYj9$ zNCY?(m6LJ(vASy$MH}Rtb`xS&hIIuiqt{*!#dis}s(K74#F)W7rc4Qhe5~|@IJF}A zOGbt}yfbd7acm3&jnsDY%dJ~)8V%A8x$o>#aM!1Qk4zW)ejTp<64rSWPqFQ}^%BY- zHOkMQrGItpkmzGE%BqvI-rQBsKu;MU56<)8nFg{`tcEL^Z5 zN(lQWY?g-su~0`ceO=)(=+#>zteE}$O=Z$t>~h(l5>H1ba7W~8PH<#|rk&#Elft=- zbkMR2<9N=-@2xuC+4*hx9uk@&Y#;nl7xK@9aC-Df2iIh;mi zmJb2cP(FnrhEVE8aH=NJ(|aGA2MkT_vF(p}rL_s=r6wgl6e)EqpbTb2> z+>FpFot_45Z+`&KjNH~N5aIEJGsvr6Hs?)7$8_F&!J zc1EAuOig5l9fG9GFbl`?$*`D_%6CYy_@p1Q$AukZn{dgNBP|Bqjx(KOM^$nbX@Xt=tG zFBl<`Pr~TA4al6u>Goc|ILeB;vYj;CQvcNE!JHL^K}01XMcLfCD%W!&DY&HJ3o?&o zPZJ*LYpn^ZoAS}gZqQ}aeHRvitnPO$KK1ES9}~5YmSjs`WAS&Ptgya-=R)GcG>l&w zHId89HtDRp%m_9Na>eyK)Cpn~CtZe_5g=1EPu;I_JC{%RTc$y#l?b7&Dmi+BHQ`-? zwWdOIZ>x1AXJIcAM z__6iIHa20J&UL}#t#bXRl?i(=sUL-QGZ*>9Q~n1FM^9I0+S64XkClFsL*OR0&V5lX zjCKC!=!}Z#n*{6vsFN2FPI#@@=uApP!yw2Li>m3YN zn6=`+vj9}-`qfT5yG+ar>dNV)x32=~UP-%eT|>j{LyE4->;*M1Q%!duAyIFtS;%>H zbd4G$hAyJ(uJX76@s(cuVzC~BJ^96@SCo-QNgaq+<7Y(|m(B_lPcjEGg}27dg-srV zggBKA4{hVj@sh0=03ffndkeE*qO{pkaO9v-NEZkCcl1dLAp6z@T#)y zZW|6&PMoO?(V%4X1_Eh~SZ7P@H_ee@8TncfPLP-SjT){+nA|3%zt$DM6PaXUqze@6 zPw{#MtwOG=^?5qnXX3f)^z*H1*_e`sp8OVSvnR6Ky0HQK>ePa3;`ve1h?H zQO7I0ifwudJ9N=^0{S2_bgEF-qY@n%&SS-jN&_U*fHDnjy8oI%{}&sC_6R6W^2^fT zT8!TnJCX4RI$e1bxmBJ*auQpJJN@2WUKHRh#q@h%RNZtiT%2gbu03cqC5yWBAbR2V0wn03F@ffll!P{GA#r+_jX^O8ai#GtT*e-HPz-czf;Ds%=Ipgtn23n_ ztrIfl8gvQWW(!1$4F=Ji%i3|Tt5knF8kTJEaX=lZ2=Lo~UtVSf<;Vk9UB9^t!7R5w z)|B32Yl!^SgIkeal65-7oNwR@GOeL~P3-Lm^};KpKE>-DHMYxW{{57I*gA#E25C>= zDr>bf4LxZ7zTcCrKVN|NJdx-S4K}X@Jzy6BEeA2qM56WCZgR;W!znzG;Y#t5(fQQC zz?ia4@kTmA&gDR)Gpqavew*ps2?u!)s_FXE(kR6ug%|8qR*tWTfx?Rv_PvcW=09-r zfB8Z5-F;Xjn?}#l3njx`7pCvi2Ljt=Q8)K1#cnGWaSsfbO2Ssy6J`2&Rn?B7C^acG zdqae$%-p2&K4AYodW>2;pr^ZxAW!m(&M+EVySZY(8zzn zqt#{5L6aNyrkb;Jpj-sX5m>s+B#9vbmz4ynoWWc9?+a;4cz>H zvi(1l$A8#^|I-KYL;%9iRec4(+WOZ~D|eTVE+!iNvM!Plv1A6k+LoRs^A1TY`Ge)w zCQ4`$#mNMT1pOt7Kg?%FXKP*Szm0R!5<0)vism#<_h|aDR|=bRrxY8xFLvXD4*MQ4 z@-)>sATjK^M7!V(szVIW3UJ*u9O`QnB_|ZlqD;%m_r|Q~3+MOV&5BHJX{O8p<}_t+ zSR!qdYKUBW1Y{Tgw;A}BL%lz~R&_7uhWF4s5C7~Gq4{%1*WjnE=j^S#S>V(z6MJzE z_3Y!X@h*}p;XfkncLZp+PM$i>d|qb=02v@T0GnyATD_9UnBervCkwl&BJM5{pFSex zgF>V0d@hmOxuJz0ut+b{`Bi{u` zN}HxKKED)N7OlMY;Z6W8OQ1VSyHW#nwd;F@UqSzsM)*Iydtk3P6GbBdjd5mmMBQWF zd$Lxi&19a=FX>pHU}-R1c(i#j@|9!)!uJQ=BfH3yQV_m&KmGYT>zwhXQY&x zq}B@!N41-`tP-GbIb4sA`kLsXnfrV5d->4{Lxr&V7BPv=vf+F0 zHwOi`t`B$VbotW%#Fw&?(#r#d`jrWqTYVU2VIPmgvLZlgMK3^H>F#aYPXAZL|GjM| zh(m;vh5xZMTT{CqA&1U7OsM(Cw(JPfr`j@@3whAfQ@^jA0vr*Yx zdhcxNkJB|RXVV!2Z%>uIh?a}o+s&QgWf(H(`=3Cv`48sIUmeWlMV8VuMwZfZN2QFT zL!u^TiBO;PrRg?()i9v^C2_1Avom3kI0xUfxqh?i+-5%J*}MDtAh3gA{JDqfDkr?L zx|#oHR%$2=IGIaoSmaj~hGDg{@8SUrzz9}jC3VIPQAz{kP&V;=B}N2GOGpWFoFm67 zw-pV8!&U?pgM}Jmy>1Ab%&;s0?W}it?IjuvG%n+vlOLb`un{=smx}9&)ooHyajOAN z1uWcR8lRJ}T{TQ6s8!Cg0`OwHOZw=ps>h>|2Zv;~*b0|;eT2U;+qa9TsO4#y{?>H? z2BO+?Hf2ES#;^M_^ONMNECHo}$z^2~`XPDdgap^#%d%s)Z-O;G`Oa^AVnvnjQ`w8p z(4hYj$^TCP1R6~nO@jvc305`_wRLwr!YobB^yE6pb9m0(Qx9T zwvjbl^2I{$Z;cI%r-6cbZC$VrT)`V>M@N0Kaay5aN9{pw8uFWpEUo5%_Ofkkl3`A=2JT)E_>7YQG4 z7*m^k#tC0(UAADuA%twq0e$fwuoDLuEpBf2RnXO9m}-9Q<0dy3P|racb_anC#8#u) zA~T?3!g#>3rSy|SRSX#sadOE_mVjU(BHY#Z$yfY}{xX4u>ibyQ^haM{I+xJXZ2tqj zX}XJC6F0BLAAl;7gJkM{>#}Xezl+R#vOgy!P-9QRXuQg`V|3!(>u$9E+2r0LB8i<{P~Ce^wIu9wES;A z0D`PY04QK#sg&Y7BnKgEzW5EFs}XQW6@I}-%G@8=#0%e(8^3T7&y`6oG?^mXOs(Tz z3)E9(Z`RX%kukNtQm-x9@1Ql%U69XOmCYFMN*0DMFrnfyM^<~}=T$5&KVOjTE4$bztoVvXE5 z7*{(0Y*ovy)i#Y9I=8k{fANSl#cNdF)$*HmC0c&n*S_QNIle$R^tRgL zb<5wkUg&Jo!~d@%8z5jHrDw024X5h2DH2~?0S9&f0KzFYa;DZ$KPr3H#TPU3d=gh! zycj%mYibh z2((IPY^j(HzH~L$tw(<=O^x#A@(;Z#`_!3ZGRLkpjLC7z=`xq*zMs^uxo#)`oLqz* zDX3GOzuY_z_lw;Lu5o5bR)ZwQWHJ zQ4ti8k}d%$rCUN8l5+BTHA$<-coi@5pKGqAZxa&kwg9#?oHZSJP6w> z+t_|UWrl}YOdR78Wu`_O84WkuIMgYVg{GZ-w&k`EivL>c`&R!5Pgx+E-1cola$ap+ zWMnNONderykmSS)$TD?Qlahk2qlUjj`Tuea-Wi7D$7Z6|Hc4lux}tdH7B-9yJRF+K zmqV{-OnC3lM0C%nefLs%dZXWtYNYhqa~nwl;&l~=%{9OhTy~VLxL#p}XbtBjUKPpv z(!YY)J}{>G=}~5|rc&X&@L^4|T!UA^#_ia8P3H^YX5gvCb(+bUs>)j{OB)UPlJoZQ z0~>yB;23>e#EECVf~mdx56Xh?sI< zpzEEfvW1(oN(BX+sjd{PTB_+R_*8WbNnumYqB*-lsjBg_sEh=3)b9Deczy48K=E(b z;J-H-Xu`Fk>3=}c`8sr7p1RJd`wM^Etg*e|p$wDF`icw~xBH_IRxJNJqzt9r z&D7jFd6id!?FWjFG#n1>2s#pOBVSCzI5+N_6x&1%BV25Kb;0pxJ;q6;Hvpz zPjGRq<;MLk3v_o?@pD~OZ1-A;XbGj0vCo-LwdX?NX@Y4MBtZVn{hKU+bF{C$E_m1>DMr(XsOT*?6~5EEA~yn)siy3@-|SN!@K#{*AzhCZpC#?W!!x3*SgACP{ye3Ncro3PNz!%Ee+VW3;rSJ zfUq!Nv}N!OO8;Z0du-Lh#}r2fY*7$q8lB1>vrd7xd;PdW1W zIdH1qEg0fs{xO}tjRuz0GRgD=|MxnwP#;)gbhZ6+_Q6641S}rm0-%ZoSXY!cstu&~ zOgz``yq^C?m4E%*KMWo{&-w>qx$J=Fsk7A$LAQP_Nnz0#pc9}vz z?>{C7QFKOBmc6V6#~-z9?`{J0AfEMEQ~n=vwSN?SDd-BV)0t}kZ(&_j+ zGAeov*cvRqHobq@iYSGfsY0IW!dF{5Dk;5emXBAz^q9mZmy!I-Rex1rc;^_4+Ou^U zR~R<}yWBQz3yIHnC!#N7DD>j|z7w#$0NH%OZGt0Bsfzt5T!@9@yn#XOTNAuTS-H?q zGe4q#Cjg@7AzHl~8QYV6Br|e$4^2tL=|Fgj)LS_}uA5;(50BTjIjlAoMd*%?{hyf+ zbhU^F(+Mh(GwRm9jL5PVq<>-7cPlS*!cww9oo5H^5);v%fFwJFsI!DMv%E*2y9*fJ5MyNR3SmA~UIlNFz7iKo98;m_)s*6eM zS1Gw-5GnZ(zrFo1wk%Q=*G+dDyTAl7ZtN%*@Z)K@!kC|B9q_W0-q`K!9X(Ue%;^LL zBi{v@?p_N5TK4pQz-N$9CA<~=n1|C)c%_ z!2NN%*y@R7=!3hduehg>y`a$5ILi?Q+du0{Q9Oca_LD~_1F$hvGH&i6IXKF4I)LHD zak_OeR{~E0I5<52^R7vApj1KFlX0o0lu&5y$~IHI7NZ%gRK!JM0I^x!X6g!fErV|Ft~bsmC9fRJ3K|9#av~HQ6HXPC=X!Qh{_P$>qB2DFubq zVgWm6GVg#oJ4;5=9L<#d9?}>QU*XNOzF4MY_^cEoyW(v%@}J4`e8E78>j&7*9D^S6 z4(C4B@fJPM`mu)(rzQD6>OT_!bT^*`6nmV!o$3R+gJzq2_<;=z9LD4)3Rbo*EBwtQ zQ7A{A0biA$p+X?SI2iX1BH}gwvXKj4YV($DXZGr8Tu>`mX(Hw}&L&HM{@fCW*%1)2!WaJsN0byw?8B zb`PwR%vnD>^`IO`unx8vDO>#GMNkKiZyp=%nFB!-KRG{fbqb-^&}UVuw2h6h;}4uo!1TOa$qL%YZaZv1JJ_-GoS_yf+5wbF3Ex9?&FJWh`%fB?(i*!t z$_@&-$id5&jqlGo5Ki`%=kD@VaM6K?eeV)Lc@@)*}|TuR_!+hn`K$eQVe{Hma>~SaTS{} zA<=u{9NIl8m5(Jqth=KX~hl+bz|!7mefjn(pk>lF@*=g!8NF%V|9dx@gI^ zi#2bca13F#iI#ML)SoI9P(QSuvwE?bu+92D>S02hynSCyGVDkMCKLF>eH9_V)b$Qj z(_LbnX?iuJa_G}Jy_Sl7_XogVuh6f~!OD;%p}~(n{q-k~KxgX@PxNGEAHwCIpLpfo z#ZI+DO#xrH+|NV};!{i)qyoBhpvIYWlhw>Wc0XJ>kbAuiBRl-Yv(UR%q_f)GB7Xl> zVd6(NLb`stx7&86@Wk$tCc2>^snx}$wvHrt1CU6{&o#({ENR$zT?e!>u$x|C6;zQ2qgZ`?q|7jXT2LM3B8KBA#%l(Ef>d5b0TuKb6cy-D*TX_`nsp<$nN@OqX%Nl zQhPqTSBj=BfSUulTTTSi=&k8yeE7ZNnIKN!KuT^0e03`BD_k3h!N#L}htl@5CZK+!O zh&_QjQ1-l}&bD5+)DR75)u(I+S<|sIJdo{WAo%bBhXaGuK4=sn89Ld6I14mrgJ8NlQX_d1gicjUnB2H z&74;NFbRsM#fZX(UxnLto<6*!L7qfkQ_0NxB&~3+^i_3%4wsw%sx6Nm=rY2d9RmTh z$BDl>2Av*nK3n65Y@S)K07VqET`8m}1B$W{I}5hZxdOxS>IEx9jYRr%C{JrHC(D+V zi*1PWfc7)9U*PwU`kS7*%G)jD3};(lisJ+49`XZb}!Dx*YRqUfQr|j7*3I z$`(^REk69XchD0uMLdr%3<5YuC9)T2k7v1Hl($JLJX@d5S-%tGwpl0kpAGdEF~DL* zCH(@B#!pOT7-jZu-h7s%HMRF`fa(p0i}Zd9hB7_7FuCiCX+Hv(0fp-KwZ?pjc_j5`65l;pc!itWfm;{%Qg9lbn~O#_KF z`XA`n@9@w%8F|a7oA}%df$3d!U|)o7S;JG?dT_dc2CKi{{a3)4CI6f48ne%!xdtmm zaN(!Ep3(_&k$lTSnA@&%J_Vwuq4tli_lFF2?gCZqz;ueG3a-tu5g=ujhAjOVc82X$ zqVDv5D+X30{J{KhE|ntO9_zKfKu*I!wW!4QJ3XJ9`2yBy+d#9H9hWARo-H|o``(3L ze*83cHLhv~`mNuE`1eZ2acujt>d`OfHn8Hbex;d9-(Adcc*qT!%4uC0bClgCBOqoZ z94jGJdi2gKID#D1UZ7O%{hhDxLea9$+*?S;tnaMny|&y}b}})Ig)U%H!SUv}3^16A z7MQN{!INcjb8EbqQAj|<81%Fk?;)zU0aGcz<+y{8*i9(LyK2C6SSn10`l=-gz21?i z5Cr<*GU|Sf(ozgfLLaa`!83Y(x=MQLiKfD^vz;3jg2?b_C{oQ+ZJDx# zNQEVRMK9zU{-m!*BOCO%m!~H#JZ4@`pa)gJIoOomyP)W*bYwPsUY+u1Q5Zv1vM+_o zFi+|2Fn`{XrXvWr`?7`zo?Km|Ba_*y!XS)OEgTKKXe+8@RRu~;029p$BnvzI6m1-4 zNc`hR@Lm&7i^K0GZ^^qLc`upPwn3a9^0r_j!vWx`RkyHpc0i$NlV3`X7vWRg|fozh-Fk+iRlyiP;E0icRS~ zSmrofahk)Y4c?xaG`b!>qW3m!Rur8tOw^GqjH=k%Wttyh*>9AmQtWr!SP(PHXdrr* zT!0SxWReBMI%(Ra;9DQh`E}=>hLQLnoV$z1mm-Q9;Urh`kYKgvD6~h$S@7Iv>bbk^ zydqy#Cr_cW^t?xYJU>ea{|(P~x^2P>)C+lXhXh<9U7g5 zqN)_Rl^_nJtgY)`*xuA)#+%4Tl;%B6l&VgS+HMGxGwH9#`Jxswlj6;3m_O#vSn_hXGM+xSQsawO5f~x%(8FIaWp@gO#6izlb^yivZ!TmN| z#(Lv9YD`ERL?5el)ekG&SvJJsN<0}D-j#7Xep0r}YOL%exH_hE*8S}n&J75UeMh6uvKgt@7;dOV988}Guvz!bc~EKUT|r}C-*MkdVgXQRL`qZZl=y|1oS z!%?-UX=lO{V5*Ni6!k;6I;&49N{4VazW*BT`fFl4FvA&`cdduA zWzThR#&dZ5jo{-g7$1C}J^#@oIozuOeNdCa$$oA);k)uotwjphboVLeyl>G50iSpwx+LwHC@7%ew?2SvmJ81P3Ul zL8#L}?0QM>a^u7d`|FIL(=boWuPT1Dl%Oh2+vVS~XEs#i{j&S;wdDO(yJi zzHgpv-?|IN3ghaV-5H7^__T|Lcq@wjz&;<#+OHgj9~oFHhC{XOa`EYVZ%&9knTo<> zBN=y1`QBt^1`ZY&%hM-Az<^#M$xNJ`aeiERWtHF6BdYWix5gR-o-a(U`{Psi<8IeI1a#7Z=@F<%kQ6CPUQawyCF& z`Pv|Bja>!EamMOvZpg)VpMn^s@FE}?!!zM*oN?qQE-Sbqnriblv(01PmtUGztX0(N zUDshS*h+oNjDrB0anXy(YEviD2d-&dPtGlvuC{FFt1O8;HLudSiL5me*`7b2SZRzD zDWl5&KK39DtgrgmU|c=K1vVr_21OPLO!sssO?ar1j3P@y9BeSd#u}V+$zfGRK~|gd zoV0VFJq?_|@Y{z$*p3sNEuOZd+@R>^ZJm>*MVv(hxpOn$R593OBS?({co@|^^To%vH0y_~H!?Gj+K_zJd7(1%5SU`xa;*$keo ztiuXBVZCQ7>^3ov)@HYI8~xY7T}psufBn|(iPoqyl(67M_=A7mZusS~;){dEd+ZU= zXI-cFelo;ODPZIv@8hykS?0yGTbvpE0tAndxa8%&?88z@+LsOPJGrAf#_`v>llh$9 z=f6pR6d-)F-5kXz3NJvhK%aQoZGQKa6B52w-9!G0qO#3QTeXZ^F-(%m_)+yNxNuE2 za|N{@FK|s0st1D_SdeknH6~*NM=lw+0*8ZdvMlubITV28t5j5qG?_V-&Pube?@UtF zL!K-+%)jfilUaI{N2j#5*rP#XP8QF$P8Jso?WWA&!XbSRv3x?laU6*;S4(FsZ&;s< zt!ND#*3?C8?=0)8?z$nG|2tMZEnu#Xjg_d|@%PIwM#JCxu_f!Ve9bQEL@V=))yc<0 zz{CnC2Jq^uW-4q!C-w7-k)&pMv-AaV&B)wqyO-)>;2-n0K`TG->S>PEZ2J5_UMz$aTTvJ}a#hZop<-6_v`$5~) z?(YPpC+b^gp3IUVD_@L`zT2Lz8?QpEw%gvtr&IQ-zaj;)d5FwU=x=g6gB)zAkSzzu_!Kq8qEMGO)d?dPQ|?6t3tP6M-- z13a9gA5B#RPDK*@J9$&$iQG6A-!9^RccJt4@*+m!bf1XH!7u@RrF#iB zh`TB!GL4sU7YwT&GvE@{?NlXuqE=p;r5ML_yhoLelx?0Q4!&D#m5p49CK=1J`22P$ zNIvcM{&){I(RNXD<+PKV?Wl%9Z^)Rnsc58POz$lHtmVMjLl9Rq)?Ud*A@^A5diP4+ z$m$8^$!eKYK6o6oP^aU8dp4@>_aQ^1aa=)tSz)9EVf!!=~lZk-NfLVgd-vxCJ$ zub52jMEE3vGpwNIgNSYGhX2~b?F3c>?zl|J%KH`S+bn8dYP}8*kj2}f{eETm55^s~ zPlaq7G4IBbfnm}nXa?}_npb;d3NM9fU;C({EuWC`ga(yYd0%c`lS!es`Ccp@3Hee} z;S1Z;{!)|q(>y6-`Ge{_@h*f2&H^5PF6nk>!#{)TZ}_|ta*e>B*CT7V@ZRiq-sYY2 z)tK$S)iEDt;ETHj6~FkT)nrH3S|rxsaHLLrHD@A|A)FRQK0K%x?%AxlfWPTUL-H4~ zN_z*5MRj6g_TX_tj;q~hllZsw7tOrFgXG3izf2HxH1v*p&FzL&P6FFRkEr{Kae>hk zpr(7e_gMR0s8dEYV+djsfdss?^v~Xec4`RssP21rsUD8GjHxp2os9@5RSAEu0)|8~ zu9Q7ZS~)0B%F^|JW5k4E-3caUA3yS~*iZC2LsD@}SFWj59@JgcmBYhQ_rgCfSAiq@t94ZI^v z0YT=>f(A(IE#pj!`UpLCrj^9&MJ^8uuq!dI_J{0`8%^bUFLKUor-td;RL4)odt&_@ zCWNn>X5^_0+O6Qp?5PjcNNz`bsUfBidSc>i$#70^Rv-CDh<+D*61{FM!pJ79G2`ea zuvdGRC_~VBdY~o7lvzIeZ2NQWfH0e-zLIv)uw@xB``$B)TAP_VIjgZks&M_h^;GI% zDewNq3nLwYdHB4SUcNenZT3?8Rh{LLI=3H`971pSh?S7}o@jF?Mgsz|p)2-gfs|K- zkiw@lzhSD@-zkwjl7l!F+2RGL=Ms#tF^2l1HB}*(ns6KUo%d8RPfbJc2*R+5r06@i ze+};aA0zZf24G(%_G`uL1j?Nwa}N{A-Z%czw4%*U09B;xNamW`1chM}N=cbKd&6Mo0J3L#xW?r#ft^|{AVC^j0@ zd1N4cjFN3#(N)?xAx;K5*h#lwVNYSWc&DGW7ZR- z!PkpR9Yk}&4qqMB^s_V_)ptOP;uz4DUA3z#T2clvVJ>OV{pid?88}4wi^aW7z-_Q@ zWc3pE`SL`sOuN3)n(kZ314ml{&%Fk(@71w_dfTroUqao%^D_>erp=n5xbemXLq6Bb zwb+XJyd-lfNb*<64!VKfGIM;uMFTt%=Ud8vko&;At+AQ1vr-F?jtSzb(9Svje ztsjpF#au9P8XR+=F5ROcr$M`^7-=N-#QKEvf@X{cS1m3locbSXnSb;X={Dsmac z8SO{`;#V!aeWT^T8UXV0KV<`S*xp*{prOivZD%o2+9xqY`EWi$hl3wefCg^?B~hS4 zK5FTt4c+?FVJ_KpzT>JK_3}dLn65xq7y9***^gpV%H7A+RM%h4V}=QMHA(sC5I!cj zl@kj}PI&(&)%gtc@p^7R*7Gr&;m>vuX=FOYUhg4D$efuJD&(%FoCGL3?Sz^f z(d64J$KObYi}Zcm%N)n0BUd5Oeq~_H-VZXAG=g}z6Y2NzsnNE?<7mw-HE zcL@%&nqOnlre5&6iZ$t5WTU}6aaiCQHbw76#0iP%xp5$U#q=#J6Q5YHz}M7 zPG^Q!1J9M4WbGfH0xohnQgi>xFn+*1UpFEv(|KpJ@xY}a|mId3j=|?GO%QH0~xsiuOHe)L~0HWUzbl)mjQlH!f{OCu5UJ?)z4o&6kJD2-`clFzTkUZX-JQJ_Wb$jJ0G#?>Q zjNYL=2j7jim28tEp$9jKxeF-5*<7g&&yPx;NtSTDi z3Y$J5HJ$v*#xhqMEiO@jYkg!ke+>V0DLk6vYS8tO;}C2(8L@U7%~czm$d6P#L#=8xqa2ev7|P zYgkA)=e2VeVU2Xxu{|}%$5dP+u1MxFcC`_7O@9;f&!p0aA zc&E=YvBoOF*JdGFAyoFn^Abs8kBcvuZiU{3``{#jZGqJc>2_#(QhfVxjj%;c)^n7N z(wX^&2I5X5bkbdFwL&Xc@~F*2NYW7_IAu_;o{Gz(xTayJd4d8`%7{qiPvIMF*IFd{!F zH0PaZK&pz&?7OG0+H_mwG=eQyD|d%`)k%wA z7Kc?@9k{%21kKi3ir{6p5CcfqJbD9QI<1)xvLO8#ioTH6JMRgJ!YFuYf1w|q^L8+l zy;U~PEx(}S&EfUQ`Y}nEdS@_2ArpxE66&(=AtZ!#rvlBQh~(?o^)zmqV~w2h18#(k zC};w!u7S)|_eNNWK2ABBG0yvmqN9%u`#U28`@5OyG2`1Ki)!8Xze#`!_9`a}4GSZL z&aj$b;NN;%aoOWdYkSFf3A2)r{z!2~lUttG#hl5((NSzmBRB{N**r4Z;>CD3kOw z(2LJ2iWcXj@jx14_tBJ&lm&&`ebBF!mcv~e zpD$W@FW60!&pBKnLQ$U0lPT^a@Sq|ASk!GoHra41T>(VVcU$CRSc6@btIsRX-`z=fco~xXX)i0D z&h{GL#u-cAymy*zor_#L6CovqaGZ{#`Q5woTl_c(AJeyWB!_z6s~SvX3B3e`*7~?| zvzJ#IV+P*Et-G)?TdH6N$2;q&7WKE!JvCn@mNADRzPga-!9~?Q@6IU|aQK2xYs1o= zG~f2s8ayL-Ka(QczE?E0K4UtzcU!qnS8g!j7GO0FPaBr13+R`w7FJ%kL>8?HRyr8D z7s}Iv3rI#u%e7!>^-MP^a$@{T2prXHxqUn1R|N*-kWkkYCUa^LAJt(3QF_B2)3 zOWv8Bes%&Z^K-j`bqL(dm{Di?{E6(tb0G6rX zG3B}2lD>vH?nBPP!q2O!dCIa!W(rweNy^;qC}mDMFct!t7Q;$ICg*$VD4aA3);aae zD3Hkdd%5rWkl1U3?K1Pw1?Sae@8}s#kTNTwcQj)9Fac8s;+2r_k9}w@BHO83ek7E8 z6OFNX57Ih<8oBU_ zQF|ErkkurAY$1M*{#f7=Ora3CxwzdM%~EjZDV2V%JAlpGpC77O%V)1R8nxuj~D3z3H;z10=1(qABXNmv2PbG@^72Xwp1!KL)HRlGiz!B#cuu zFi(|Z`Zm81-(7}WwD^cvHW$bt)nf$A@0y0rPrqQwn$sxgP_T3;%qifJ+U5H}zR_JPM-JI-YPG z61ZkD0!ND!K9BOw$T3<(gvKX>spVbkfnnj|HikMHZUUgQd1WCkL7-B(6WARq@ZK$l z%|p|q)3yg%)mtF<$`0}2m8yiDI&30vj^B-cS2cL=&CxN!mZ#ov=>Gaj@E)b%&Ijeb zGYfX9fG0zido?=|13t%+lvFp}NZ7}%(@-dRic51)mKSQ_?4X3(46ZDHkv$* z*w-W7GQX-m{x~3+sTL-nFi(^4R=#|^l6p!-?rhYj92j3&XV(guo*wOH4!1U`=^aP_ zh?~AEs1ma3;8;1KE?z7z zo~gZxspKR`QPQimYmJe~DkXM;-RU;XJm7O(%|VFQNQ2FfdaQ9TU5hZn)FR@EZd~ev z^@Dtc$Mx$m`7cHQ5;Gdf#k~ZQFj^&v1%Ei{WNQjoHgmZSq|#sWkUv&epC+$udfPBl zSynWiKgd=1bgKYla?#O$HX5WF^5BVuc&7P4det`P8vsEa|B>2R%xS<6+c3Z0OCmia zKsu{aU5S&;JCk|jHjD9T#&w&92ZVXmVBcCtVltjH;kkDX^rbV#skuvv2(<9yugz#$ z>5dyA*{HHCcnK-=I@W(inp(!(M+hneycB_&_rB}lFAfdk7MX@ga)uY92mG}kGHQxm zPL+1+tHkxdr$k>y>`bjpHfzP5FSRZ*P3!oMJkn)7Ow5b1IN zB3r##{!`ORf)9W^JLT%2}og}nv~wnyP&8HsR-0Z-D4MNL0< zCD-=zh!OaM0Z(e7T0m9JxQ`fHebNf(m_818i8xw|JIcvFpgJ;oHdjosVl`17XwpOE z1%HIz5g)?#7st{9a4enHL2_r%!!rXh3yd)Q)+dfQzb<=spVIKrE!w;3tXkE|kn=UL z1sNi94J0FpKlzy|is;4{e0KE=J*g7ug-tAZ3)mMNg6;ZiD(j$HfuuL*QJnF1nKUGDfCsbu3jySKOVs)wu?3uEw#_lum#D3AAwmN@hP$ z>Q(A#m+V~WnzCMt>~0Z?Nm>Mbn6+G?QyDu&$hM4;i9-tpol~#(I~Q}ug+-==*S2D& zbho#;9Hp0?NOu@<4p8246e7@nHu8C2s z2R3^vuxtWMJ}s6b=c_HjN#bWaDK30f6e6erj>rD^?&4ExvNNd!Gp==_s!l%%ZVzcmqfJ61 z;)~JCqEEU0s=1a?tE+_R6)m(ylZ5qe%U~m-BQ>$P$)Y27NxwV8#;(Ces;qjJxvZr_ zR=U&1iaR$@9`1ajYsMQWkHj9hCbg3Dvso^gkc$}RT?*4H4#n$Jfj~1o+1nTx&157ngUSmqc?vk&({q5~(8Dyos+0B}(G++LFlj?vbZv zvlw8AFFYbYU_DXNyONQMLW6gU=ABd2+sE^J zNGwM1yxbI^D;z@@ZR1JbYasEd>VR_sMBHt4IA*oh1@E)F(7H(gzyu`_9F_ttkZ$-~ zJ%frre4@`Z5d3ab`s$h*cs%nkv5rQ}h7%zEtfuS15$Cf6x5j%;uY0(_&XmXOW@}{nuS{_1L;4TT=t22P;&Nhg86}zy@JoXj3eetzborwPVh{kd_D?W&=@iDGi(IY5ZqMt)Uh8XLwYy3+Ah0>PX4kKyg zs-IVU#$N;&;~(ZPV}q`tr{A{lbG_;=h@no(i%I0m?i3*BC!-})aN|js>ReEL8j+s{ z_7cCFeyd#VU4^Oqy)UorRgwHNCHi1GEJeLIYaY89+4em7MIL^Z{U11d_laov`Vh}j ztU9zmOvbt#_i^bQ)V_qN<|JnY3%ENPo>4~mVQ{{2+&gziMb{GZTlW&&4~FSH!F#%V zj~GtHsjQ2l{PVMYYGc%5%^til|ecO3HQv&R(BhskBexQ?{7f^fg(10b+j;gTrs#JU^0C0=}K|+Bn|NPr9i_P>B2jg-jUW@2{;J zqafCaLJ=jUR6#o8XC|c-U$HL)+!y=*0pymUsxLTbHU)?b)td^hWH+ss zEYun?^K3iHmjJ`N$%K4nArv8Yag?C-es@p;p9;MXVSUpi$`Ae*!+|pT=0;O&&DM98 zzA>w=S|BR)!<)_+Fz0jPe}|CTeE}%eK_s}XujuncGSj;uOAqjYdQJ!j&L2;*$3Q_e zDpzpu5ob@QqOG>?+Tp$ zNBI2fwj`vb?)Hp zg#TXh5CNbt^vX7XW}Gmr;|k<7k!k<*N79lakw1( zmtFc_s%@6bUnTc?wpy^A(Le^hv(@Iv3I33vjF+7%d&FQx=j1QE{kF;Nwa<(O85h2 zz(y*Q!uo{&M;t2ZJ%$T(j^QkQ`^_RTlB#H>J9Y-wb(NDK99rU5k|mcyf6vlB@BdiY zVlTRO_bGtjxV+b@Fo}T2g_2qS#58{0LrV#82e!r2x(9!5%O7m$3m#Ev3;dJa)yzqaL-N8$;^|EaAiXjpkLFKa&~$ zvcLaIBY4+=TR57XTv!ZpDpes(F(!9!Ml}G%#Sy^RyYEXhPkj$w^N|s4yjlK*vHA