build(deps-dev): bump the dev-dependencies group with 2 updates #64
15 tests run, 8 passed, 0 skipped, 7 failed.
Annotations
Check failure on line 69 in tests/test_emit_metrics.py
github-actions / JUnit Test Report
test_emit_metrics.test_s3_discovery_scrape_and_emit
KeyError: 'smithy-rpc-v2-cbor'
Raw output
test_bucket = s3.Bucket(name='temp-796db0c2651249a485e1099c41f6ce32')
temp_queue = sqs.Queue(url='https://sqs.eu-west-2.amazonaws.com/123456789012/test-queue-45192dedd8fe47b39a9acb30db19cb8b')
async def test_s3_discovery_scrape_and_emit(test_bucket, temp_queue):
conf = {
"discovery": {
"jobs": [
{
"type": "s3",
"regions": ["eu-west-2"],
"metrics": [
{
"name": "NumberOfObjects",
"stats": ["Average"],
"period": 60,
"length": 86400, # moto incorrectly excludes 00:00:00 metrics for s3
},
{
"name": "BucketSizeBytes",
"stats": ["Average"],
"period": 60,
"length": 86400, # moto incorrectly excludes 00:00:00 metrics for s3
},
],
}
]
}
}
new_object = test_bucket.Object(f"test-{uuid4().hex}")
new_object.put(Body=b"test")
# cloudwatch = boto3.client("cloudwatch", region_name="eu-west-2")
sqs_client = _get_sqs_client(temp_queue.url)
with temp_config(conf):
config = ScrapeConfig()
client_factory = ClientFactory(config.sts_region)
executor = Executor(config, client_factory, sqs_client)
> results = await executor.scrape_and_emit()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tests/test_emit_metrics.py:69:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
src/executor.py:90: in scrape_and_emit
results = await asyncio.gather(*tasks)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/executor.py:85: in _scrape
metrics = await ex.scrape_and_emit()
^^^^^^^^^^^^^^^^^^^^^^^^^^
src/executor.py:236: in scrape_and_emit
raise e
src/executor.py:206: in scrape_and_emit
discovered_metrics = await self.get_batched_discovery_metrics()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/executor.py:350: in get_batched_discovery_metrics
discovery_batches = await self.discover_metrics(init_clients=init_clients)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/executor.py:383: in discover_metrics
discovery_results = await asyncio.gather(*discovery_tasks)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/executor.py:415: in run_discovery_job
async for page in self.cloudwatch.list_metrics(metric_req.name, job):
src/clients.py:111: in list_metrics
async for page in self._paginate("list_metrics", "NextToken", **kwargs):
src/clients.py:79: in _paginate
page = await run_in_executor(_get_next_page)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/clients.py:42: in run_in_executor
result = cast(T, await loop.run_in_executor(None, to_execute))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.12.12/x64/lib/python3.12/concurrent/futures/thread.py:59: in run
result = self.fn(*self.args, **self.kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/clients.py:74: in _get_next_page
return page_iterator.__next__()
^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/paginate.py:272: in __iter__
response = self._make_request(current_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/context.py:123: in wrapper
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/paginate.py:360: in _make_request
return self._method(**current_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/client.py:602: in _api_call
return self._make_api_call(operation_name, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/context.py:123: in wrapper
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/client.py:1060: in _make_api_call
http, parsed_response = self._make_request(
.venv/lib/python3.12/site-packages/botocore/client.py:1084: in _make_request
return self._endpoint.make_request(operation_model, request_dict)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/endpoint.py:119: in make_request
return self._send_request(request_dict, operation_model)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/endpoint.py:200: in _send_request
while self._needs_retry(
.venv/lib/python3.12/site-packages/botocore/endpoint.py:360: in _needs_retry
responses = self._event_emitter.emit(
.venv/lib/python3.12/site-packages/botocore/hooks.py:412: in emit
return self._emitter.emit(aliased_event_name, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/hooks.py:256: in emit
return self._emit(event_name, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/hooks.py:239: in _emit
response = handler(**kwargs)
^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/retryhandler.py:207: in __call__
if self._checker(**checker_kwargs):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/retryhandler.py:284: in __call__
should_retry = self._should_retry(
.venv/lib/python3.12/site-packages/botocore/retryhandler.py:307: in _should_retry
return self._checker(
.venv/lib/python3.12/site-packages/botocore/retryhandler.py:363: in __call__
checker_response = checker(
.venv/lib/python3.12/site-packages/botocore/retryhandler.py:247: in __call__
return self._check_caught_exception(
.venv/lib/python3.12/site-packages/botocore/retryhandler.py:416: in _check_caught_exception
raise caught_exception
.venv/lib/python3.12/site-packages/botocore/endpoint.py:276: in _do_get_response
responses = self._event_emitter.emit(event_name, request=request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/hooks.py:412: in emit
return self._emitter.emit(aliased_event_name, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/hooks.py:256: in emit
return self._emit(event_name, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/hooks.py:239: in _emit
response = handler(**kwargs)
^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/moto/core/botocore_stubber.py:38: in __call__
response = self.process_request(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/moto/core/botocore_stubber.py:88: in process_request
status, headers, body = method_to_execute(
.venv/lib/python3.12/site-packages/moto/core/responses.py:363: in dispatch
return cls()._dispatch(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/moto/core/responses.py:578: in _dispatch
return self.call_action()
^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/moto/core/responses.py:706: in call_action
status, headers, body = self.serialized(response)
^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <moto.cloudwatch.responses.CloudWatchResponse object at 0x7fe30e49a5a0>
action_result = <moto.core.responses.ActionResult object at 0x7fe30a3da720>
def serialized(self, action_result: ActionResult) -> TYPE_RESPONSE:
service_model = get_service_model(self.service_name)
operation_model = service_model.operation_model(self._get_action())
protocol = service_model.protocol
protocol += "-json" if protocol == "query" and self.request_json else ""
> serializer_cls = SERIALIZERS[protocol]
^^^^^^^^^^^^^^^^^^^^^
E KeyError: 'smithy-rpc-v2-cbor'
.venv/lib/python3.12/site-packages/moto/core/responses.py:665: KeyError
Check failure on line 126 in tests/test_emit_metrics.py
github-actions / JUnit Test Report
test_emit_metrics.test_alb_discovery_scrape_and_emit
KeyError: 'smithy-rpc-v2-cbor'
Raw output
temp_queue = sqs.Queue(url='https://sqs.eu-west-2.amazonaws.com/123456789012/test-queue-ffc88077cc6f405d8e9038bb3e176cd0')
temp_alb = ('app/test-alb-3b9aa623a43c4bdca26eb337c8f26653/f32330060194f86a', 'test-alb-3b9aa623a43c4bdca26eb337c8f26653')
async def test_alb_discovery_scrape_and_emit(temp_queue, temp_alb):
alb_id, _alb_name = temp_alb
conf = {
"discovery": {
"jobs": [
{
"type": "alb",
"regions": ["eu-west-2"],
"metrics": [
{
"name": "RequestCount",
"stats": ["Sum", "SampleCount", "Maximum"],
}
],
}
]
}
}
sqs_client = _get_sqs_client(temp_queue.url)
with temp_config(conf):
config = ScrapeConfig(
rtf_overrides={"AWS/ApplicationELB": ["elasticloadbalancing:loadbalancer"]}
)
client_factory = ClientFactory(config.sts_region)
executor = Executor(config, client_factory, sqs_client)
with temp_metrics(
[
MetricDatum(
namespace="AWS/ApplicationELB",
name="RequestCount",
value=10,
dimensions=[
{"Name": "LoadBalancer", "Value": alb_id},
],
timestamp=datetime.now(tz=UTC).replace(second=0, microsecond=0)
- relativedelta(minutes=1),
unit="Count",
)
]
):
> results = await executor.scrape_and_emit()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tests/test_emit_metrics.py:126:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
src/executor.py:90: in scrape_and_emit
results = await asyncio.gather(*tasks)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/executor.py:85: in _scrape
metrics = await ex.scrape_and_emit()
^^^^^^^^^^^^^^^^^^^^^^^^^^
src/executor.py:236: in scrape_and_emit
raise e
src/executor.py:206: in scrape_and_emit
discovered_metrics = await self.get_batched_discovery_metrics()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/executor.py:350: in get_batched_discovery_metrics
discovery_batches = await self.discover_metrics(init_clients=init_clients)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/executor.py:383: in discover_metrics
discovery_results = await asyncio.gather(*discovery_tasks)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/executor.py:415: in run_discovery_job
async for page in self.cloudwatch.list_metrics(metric_req.name, job):
src/clients.py:111: in list_metrics
async for page in self._paginate("list_metrics", "NextToken", **kwargs):
src/clients.py:79: in _paginate
page = await run_in_executor(_get_next_page)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/clients.py:42: in run_in_executor
result = cast(T, await loop.run_in_executor(None, to_execute))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.12.12/x64/lib/python3.12/concurrent/futures/thread.py:59: in run
result = self.fn(*self.args, **self.kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/clients.py:74: in _get_next_page
return page_iterator.__next__()
^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/paginate.py:272: in __iter__
response = self._make_request(current_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/context.py:123: in wrapper
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/paginate.py:360: in _make_request
return self._method(**current_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/client.py:602: in _api_call
return self._make_api_call(operation_name, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/context.py:123: in wrapper
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/client.py:1060: in _make_api_call
http, parsed_response = self._make_request(
.venv/lib/python3.12/site-packages/botocore/client.py:1084: in _make_request
return self._endpoint.make_request(operation_model, request_dict)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/endpoint.py:119: in make_request
return self._send_request(request_dict, operation_model)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/endpoint.py:200: in _send_request
while self._needs_retry(
.venv/lib/python3.12/site-packages/botocore/endpoint.py:360: in _needs_retry
responses = self._event_emitter.emit(
.venv/lib/python3.12/site-packages/botocore/hooks.py:412: in emit
return self._emitter.emit(aliased_event_name, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/hooks.py:256: in emit
return self._emit(event_name, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/hooks.py:239: in _emit
response = handler(**kwargs)
^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/retryhandler.py:207: in __call__
if self._checker(**checker_kwargs):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/retryhandler.py:284: in __call__
should_retry = self._should_retry(
.venv/lib/python3.12/site-packages/botocore/retryhandler.py:307: in _should_retry
return self._checker(
.venv/lib/python3.12/site-packages/botocore/retryhandler.py:363: in __call__
checker_response = checker(
.venv/lib/python3.12/site-packages/botocore/retryhandler.py:247: in __call__
return self._check_caught_exception(
.venv/lib/python3.12/site-packages/botocore/retryhandler.py:416: in _check_caught_exception
raise caught_exception
.venv/lib/python3.12/site-packages/botocore/endpoint.py:276: in _do_get_response
responses = self._event_emitter.emit(event_name, request=request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/hooks.py:412: in emit
return self._emitter.emit(aliased_event_name, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/hooks.py:256: in emit
return self._emit(event_name, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/hooks.py:239: in _emit
response = handler(**kwargs)
^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/moto/core/botocore_stubber.py:38: in __call__
response = self.process_request(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/moto/core/botocore_stubber.py:88: in process_request
status, headers, body = method_to_execute(
.venv/lib/python3.12/site-packages/moto/core/responses.py:363: in dispatch
return cls()._dispatch(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/moto/core/responses.py:578: in _dispatch
return self.call_action()
^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/moto/core/responses.py:706: in call_action
status, headers, body = self.serialized(response)
^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <moto.cloudwatch.responses.CloudWatchResponse object at 0x7fe2fafba6c0>
action_result = <moto.core.responses.ActionResult object at 0x7fe30042c9e0>
def serialized(self, action_result: ActionResult) -> TYPE_RESPONSE:
service_model = get_service_model(self.service_name)
operation_model = service_model.operation_model(self._get_action())
protocol = service_model.protocol
protocol += "-json" if protocol == "query" and self.request_json else ""
> serializer_cls = SERIALIZERS[protocol]
^^^^^^^^^^^^^^^^^^^^^
E KeyError: 'smithy-rpc-v2-cbor'
.venv/lib/python3.12/site-packages/moto/core/responses.py:665: KeyError
Check failure on line 56 in tests/test_metric_discovery.py
github-actions / JUnit Test Report
test_metric_discovery.test_s3_discovery_search_dimensions[dim_requirements0-2]
KeyError: 'smithy-rpc-v2-cbor'
Raw output
test_bucket = s3.Bucket(name='temp-8ee5016c75a849ee8b688fd30be49bae')
temp_queue = sqs.Queue(url='https://sqs.eu-west-2.amazonaws.com/123456789012/test-queue-4019a2458d224816ac0d9b74f3a86bae')
dim_requirements = {}, expected = 2
@pytest.mark.parametrize(
("dim_requirements", "expected"),
[
({}, 2),
({"BucketName": "^temp-.*"}, 2),
({"BucketName": "bad"}, 0),
],
)
async def test_s3_discovery_search_dimensions(
test_bucket, temp_queue, dim_requirements: dict, expected: int
):
conf = {
"discovery": {
"jobs": [
{
"type": "s3",
"regions": ["eu-west-2"],
"search_dimensions": dim_requirements,
"metrics": [
{
"name": "NumberOfObjects",
"stats": ["Average"],
"period": 86400,
},
{
"name": "BucketSizeBytes",
"stats": ["Average"],
"period": 86400,
},
],
}
]
}
}
sqs_client = SQSClient(
config=Config(region_name="eu-west-2"), queue_url=temp_queue.url
)
with temp_config(conf):
config = ScrapeConfig()
client_factory = ClientFactory(config.sts_region)
executor = Executor(config, client_factory, sqs_client)
> results = await executor.discover_metrics(init_clients=True)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tests/test_metric_discovery.py:56:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
src/executor.py:118: in discover_metrics
results = await asyncio.gather(*exec_tasks)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/executor.py:105: in _executor_result
shards = await ex.discover_metrics(init_clients=init_clients)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/executor.py:383: in discover_metrics
discovery_results = await asyncio.gather(*discovery_tasks)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/executor.py:415: in run_discovery_job
async for page in self.cloudwatch.list_metrics(metric_req.name, job):
src/clients.py:111: in list_metrics
async for page in self._paginate("list_metrics", "NextToken", **kwargs):
src/clients.py:79: in _paginate
page = await run_in_executor(_get_next_page)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/clients.py:42: in run_in_executor
result = cast(T, await loop.run_in_executor(None, to_execute))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.12.12/x64/lib/python3.12/concurrent/futures/thread.py:59: in run
result = self.fn(*self.args, **self.kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/clients.py:74: in _get_next_page
return page_iterator.__next__()
^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/paginate.py:272: in __iter__
response = self._make_request(current_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/context.py:123: in wrapper
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/paginate.py:360: in _make_request
return self._method(**current_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/client.py:602: in _api_call
return self._make_api_call(operation_name, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/context.py:123: in wrapper
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/client.py:1060: in _make_api_call
http, parsed_response = self._make_request(
.venv/lib/python3.12/site-packages/botocore/client.py:1084: in _make_request
return self._endpoint.make_request(operation_model, request_dict)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/endpoint.py:119: in make_request
return self._send_request(request_dict, operation_model)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/endpoint.py:200: in _send_request
while self._needs_retry(
.venv/lib/python3.12/site-packages/botocore/endpoint.py:360: in _needs_retry
responses = self._event_emitter.emit(
.venv/lib/python3.12/site-packages/botocore/hooks.py:412: in emit
return self._emitter.emit(aliased_event_name, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/hooks.py:256: in emit
return self._emit(event_name, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/hooks.py:239: in _emit
response = handler(**kwargs)
^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/retryhandler.py:207: in __call__
if self._checker(**checker_kwargs):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/retryhandler.py:284: in __call__
should_retry = self._should_retry(
.venv/lib/python3.12/site-packages/botocore/retryhandler.py:307: in _should_retry
return self._checker(
.venv/lib/python3.12/site-packages/botocore/retryhandler.py:363: in __call__
checker_response = checker(
.venv/lib/python3.12/site-packages/botocore/retryhandler.py:247: in __call__
return self._check_caught_exception(
.venv/lib/python3.12/site-packages/botocore/retryhandler.py:416: in _check_caught_exception
raise caught_exception
.venv/lib/python3.12/site-packages/botocore/endpoint.py:276: in _do_get_response
responses = self._event_emitter.emit(event_name, request=request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/hooks.py:412: in emit
return self._emitter.emit(aliased_event_name, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/hooks.py:256: in emit
return self._emit(event_name, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/hooks.py:239: in _emit
response = handler(**kwargs)
^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/moto/core/botocore_stubber.py:38: in __call__
response = self.process_request(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/moto/core/botocore_stubber.py:88: in process_request
status, headers, body = method_to_execute(
.venv/lib/python3.12/site-packages/moto/core/responses.py:363: in dispatch
return cls()._dispatch(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/moto/core/responses.py:578: in _dispatch
return self.call_action()
^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/moto/core/responses.py:706: in call_action
status, headers, body = self.serialized(response)
^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <moto.cloudwatch.responses.CloudWatchResponse object at 0x7fe30c4bba70>
action_result = <moto.core.responses.ActionResult object at 0x7fe2f85aa3f0>
def serialized(self, action_result: ActionResult) -> TYPE_RESPONSE:
service_model = get_service_model(self.service_name)
operation_model = service_model.operation_model(self._get_action())
protocol = service_model.protocol
protocol += "-json" if protocol == "query" and self.request_json else ""
> serializer_cls = SERIALIZERS[protocol]
^^^^^^^^^^^^^^^^^^^^^
E KeyError: 'smithy-rpc-v2-cbor'
.venv/lib/python3.12/site-packages/moto/core/responses.py:665: KeyError
Check failure on line 56 in tests/test_metric_discovery.py
github-actions / JUnit Test Report
test_metric_discovery.test_s3_discovery_search_dimensions[dim_requirements1-2]
KeyError: 'smithy-rpc-v2-cbor'
Raw output
test_bucket = s3.Bucket(name='temp-b78b37c4c64749d9b5a445d6533da9a0')
temp_queue = sqs.Queue(url='https://sqs.eu-west-2.amazonaws.com/123456789012/test-queue-1836b97ba31846599e42a4ec3ab2d6ad')
dim_requirements = {'BucketName': '^temp-.*'}, expected = 2
@pytest.mark.parametrize(
("dim_requirements", "expected"),
[
({}, 2),
({"BucketName": "^temp-.*"}, 2),
({"BucketName": "bad"}, 0),
],
)
async def test_s3_discovery_search_dimensions(
test_bucket, temp_queue, dim_requirements: dict, expected: int
):
conf = {
"discovery": {
"jobs": [
{
"type": "s3",
"regions": ["eu-west-2"],
"search_dimensions": dim_requirements,
"metrics": [
{
"name": "NumberOfObjects",
"stats": ["Average"],
"period": 86400,
},
{
"name": "BucketSizeBytes",
"stats": ["Average"],
"period": 86400,
},
],
}
]
}
}
sqs_client = SQSClient(
config=Config(region_name="eu-west-2"), queue_url=temp_queue.url
)
with temp_config(conf):
config = ScrapeConfig()
client_factory = ClientFactory(config.sts_region)
executor = Executor(config, client_factory, sqs_client)
> results = await executor.discover_metrics(init_clients=True)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tests/test_metric_discovery.py:56:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
src/executor.py:118: in discover_metrics
results = await asyncio.gather(*exec_tasks)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/executor.py:105: in _executor_result
shards = await ex.discover_metrics(init_clients=init_clients)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/executor.py:383: in discover_metrics
discovery_results = await asyncio.gather(*discovery_tasks)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/executor.py:415: in run_discovery_job
async for page in self.cloudwatch.list_metrics(metric_req.name, job):
src/clients.py:111: in list_metrics
async for page in self._paginate("list_metrics", "NextToken", **kwargs):
src/clients.py:79: in _paginate
page = await run_in_executor(_get_next_page)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/clients.py:42: in run_in_executor
result = cast(T, await loop.run_in_executor(None, to_execute))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.12.12/x64/lib/python3.12/concurrent/futures/thread.py:59: in run
result = self.fn(*self.args, **self.kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/clients.py:74: in _get_next_page
return page_iterator.__next__()
^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/paginate.py:272: in __iter__
response = self._make_request(current_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/context.py:123: in wrapper
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/paginate.py:360: in _make_request
return self._method(**current_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/client.py:602: in _api_call
return self._make_api_call(operation_name, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/context.py:123: in wrapper
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/client.py:1060: in _make_api_call
http, parsed_response = self._make_request(
.venv/lib/python3.12/site-packages/botocore/client.py:1084: in _make_request
return self._endpoint.make_request(operation_model, request_dict)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/endpoint.py:119: in make_request
return self._send_request(request_dict, operation_model)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/endpoint.py:200: in _send_request
while self._needs_retry(
.venv/lib/python3.12/site-packages/botocore/endpoint.py:360: in _needs_retry
responses = self._event_emitter.emit(
.venv/lib/python3.12/site-packages/botocore/hooks.py:412: in emit
return self._emitter.emit(aliased_event_name, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/hooks.py:256: in emit
return self._emit(event_name, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/hooks.py:239: in _emit
response = handler(**kwargs)
^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/retryhandler.py:207: in __call__
if self._checker(**checker_kwargs):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/retryhandler.py:284: in __call__
should_retry = self._should_retry(
.venv/lib/python3.12/site-packages/botocore/retryhandler.py:307: in _should_retry
return self._checker(
.venv/lib/python3.12/site-packages/botocore/retryhandler.py:363: in __call__
checker_response = checker(
.venv/lib/python3.12/site-packages/botocore/retryhandler.py:247: in __call__
return self._check_caught_exception(
.venv/lib/python3.12/site-packages/botocore/retryhandler.py:416: in _check_caught_exception
raise caught_exception
.venv/lib/python3.12/site-packages/botocore/endpoint.py:276: in _do_get_response
responses = self._event_emitter.emit(event_name, request=request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/hooks.py:412: in emit
return self._emitter.emit(aliased_event_name, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/hooks.py:256: in emit
return self._emit(event_name, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/hooks.py:239: in _emit
response = handler(**kwargs)
^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/moto/core/botocore_stubber.py:38: in __call__
response = self.process_request(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/moto/core/botocore_stubber.py:88: in process_request
status, headers, body = method_to_execute(
.venv/lib/python3.12/site-packages/moto/core/responses.py:363: in dispatch
return cls()._dispatch(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/moto/core/responses.py:578: in _dispatch
return self.call_action()
^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/moto/core/responses.py:706: in call_action
status, headers, body = self.serialized(response)
^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <moto.cloudwatch.responses.CloudWatchResponse object at 0x7fe2fba647d0>
action_result = <moto.core.responses.ActionResult object at 0x7fe30c1ab830>
def serialized(self, action_result: ActionResult) -> TYPE_RESPONSE:
service_model = get_service_model(self.service_name)
operation_model = service_model.operation_model(self._get_action())
protocol = service_model.protocol
protocol += "-json" if protocol == "query" and self.request_json else ""
> serializer_cls = SERIALIZERS[protocol]
^^^^^^^^^^^^^^^^^^^^^
E KeyError: 'smithy-rpc-v2-cbor'
.venv/lib/python3.12/site-packages/moto/core/responses.py:665: KeyError
Check failure on line 56 in tests/test_metric_discovery.py
github-actions / JUnit Test Report
test_metric_discovery.test_s3_discovery_search_dimensions[dim_requirements2-0]
KeyError: 'smithy-rpc-v2-cbor'
Raw output
test_bucket = s3.Bucket(name='temp-006a9369f5cd49fcb546d4255174d0d4')
temp_queue = sqs.Queue(url='https://sqs.eu-west-2.amazonaws.com/123456789012/test-queue-03e8fabe030b4a31bf9aa7e65a4efa85')
dim_requirements = {'BucketName': 'bad'}, expected = 0
@pytest.mark.parametrize(
("dim_requirements", "expected"),
[
({}, 2),
({"BucketName": "^temp-.*"}, 2),
({"BucketName": "bad"}, 0),
],
)
async def test_s3_discovery_search_dimensions(
test_bucket, temp_queue, dim_requirements: dict, expected: int
):
conf = {
"discovery": {
"jobs": [
{
"type": "s3",
"regions": ["eu-west-2"],
"search_dimensions": dim_requirements,
"metrics": [
{
"name": "NumberOfObjects",
"stats": ["Average"],
"period": 86400,
},
{
"name": "BucketSizeBytes",
"stats": ["Average"],
"period": 86400,
},
],
}
]
}
}
sqs_client = SQSClient(
config=Config(region_name="eu-west-2"), queue_url=temp_queue.url
)
with temp_config(conf):
config = ScrapeConfig()
client_factory = ClientFactory(config.sts_region)
executor = Executor(config, client_factory, sqs_client)
> results = await executor.discover_metrics(init_clients=True)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tests/test_metric_discovery.py:56:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
src/executor.py:118: in discover_metrics
results = await asyncio.gather(*exec_tasks)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/executor.py:105: in _executor_result
shards = await ex.discover_metrics(init_clients=init_clients)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/executor.py:383: in discover_metrics
discovery_results = await asyncio.gather(*discovery_tasks)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/executor.py:415: in run_discovery_job
async for page in self.cloudwatch.list_metrics(metric_req.name, job):
src/clients.py:111: in list_metrics
async for page in self._paginate("list_metrics", "NextToken", **kwargs):
src/clients.py:79: in _paginate
page = await run_in_executor(_get_next_page)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/clients.py:42: in run_in_executor
result = cast(T, await loop.run_in_executor(None, to_execute))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.12.12/x64/lib/python3.12/concurrent/futures/thread.py:59: in run
result = self.fn(*self.args, **self.kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/clients.py:74: in _get_next_page
return page_iterator.__next__()
^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/paginate.py:272: in __iter__
response = self._make_request(current_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/context.py:123: in wrapper
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/paginate.py:360: in _make_request
return self._method(**current_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/client.py:602: in _api_call
return self._make_api_call(operation_name, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/context.py:123: in wrapper
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/client.py:1060: in _make_api_call
http, parsed_response = self._make_request(
.venv/lib/python3.12/site-packages/botocore/client.py:1084: in _make_request
return self._endpoint.make_request(operation_model, request_dict)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/endpoint.py:119: in make_request
return self._send_request(request_dict, operation_model)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/endpoint.py:200: in _send_request
while self._needs_retry(
.venv/lib/python3.12/site-packages/botocore/endpoint.py:360: in _needs_retry
responses = self._event_emitter.emit(
.venv/lib/python3.12/site-packages/botocore/hooks.py:412: in emit
return self._emitter.emit(aliased_event_name, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/hooks.py:256: in emit
return self._emit(event_name, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/hooks.py:239: in _emit
response = handler(**kwargs)
^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/retryhandler.py:207: in __call__
if self._checker(**checker_kwargs):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/retryhandler.py:284: in __call__
should_retry = self._should_retry(
.venv/lib/python3.12/site-packages/botocore/retryhandler.py:307: in _should_retry
return self._checker(
.venv/lib/python3.12/site-packages/botocore/retryhandler.py:363: in __call__
checker_response = checker(
.venv/lib/python3.12/site-packages/botocore/retryhandler.py:247: in __call__
return self._check_caught_exception(
.venv/lib/python3.12/site-packages/botocore/retryhandler.py:416: in _check_caught_exception
raise caught_exception
.venv/lib/python3.12/site-packages/botocore/endpoint.py:276: in _do_get_response
responses = self._event_emitter.emit(event_name, request=request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/hooks.py:412: in emit
return self._emitter.emit(aliased_event_name, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/hooks.py:256: in emit
return self._emit(event_name, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/hooks.py:239: in _emit
response = handler(**kwargs)
^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/moto/core/botocore_stubber.py:38: in __call__
response = self.process_request(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/moto/core/botocore_stubber.py:88: in process_request
status, headers, body = method_to_execute(
.venv/lib/python3.12/site-packages/moto/core/responses.py:363: in dispatch
return cls()._dispatch(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/moto/core/responses.py:578: in _dispatch
return self.call_action()
^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/moto/core/responses.py:706: in call_action
status, headers, body = self.serialized(response)
^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <moto.cloudwatch.responses.CloudWatchResponse object at 0x7fe2f63c0da0>
action_result = <moto.core.responses.ActionResult object at 0x7fe30a593890>
def serialized(self, action_result: ActionResult) -> TYPE_RESPONSE:
service_model = get_service_model(self.service_name)
operation_model = service_model.operation_model(self._get_action())
protocol = service_model.protocol
protocol += "-json" if protocol == "query" and self.request_json else ""
> serializer_cls = SERIALIZERS[protocol]
^^^^^^^^^^^^^^^^^^^^^
E KeyError: 'smithy-rpc-v2-cbor'
.venv/lib/python3.12/site-packages/moto/core/responses.py:665: KeyError
Check failure on line 95 in tests/test_metric_discovery.py
github-actions / JUnit Test Report
test_metric_discovery.test_s3_metric_discovery
KeyError: 'smithy-rpc-v2-cbor'
Raw output
test_bucket = s3.Bucket(name='temp-7ecb5854fbb84140ba7dc7f891a5aa45')
async def test_s3_metric_discovery(test_bucket):
conf = {
"discovery": {
"jobs": [
{
"type": "s3",
"regions": ["eu-west-2"],
"metrics": [
{
"name": "NumberOfObjects",
"stats": ["Average"],
"period": 86400,
},
{
"name": "BucketSizeBytes",
"stats": ["Average"],
"period": 86400,
},
],
}
]
}
}
with temp_config(conf):
config = ScrapeConfig()
client_factory = ClientFactory(config.sts_region)
executor = Executor(config, client_factory, None) # type: ignore[arg-type]
> discovered = await executor.discover_metrics(init_clients=True)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tests/test_metric_discovery.py:95:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
src/executor.py:118: in discover_metrics
results = await asyncio.gather(*exec_tasks)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/executor.py:105: in _executor_result
shards = await ex.discover_metrics(init_clients=init_clients)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/executor.py:383: in discover_metrics
discovery_results = await asyncio.gather(*discovery_tasks)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/executor.py:415: in run_discovery_job
async for page in self.cloudwatch.list_metrics(metric_req.name, job):
src/clients.py:111: in list_metrics
async for page in self._paginate("list_metrics", "NextToken", **kwargs):
src/clients.py:79: in _paginate
page = await run_in_executor(_get_next_page)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/clients.py:42: in run_in_executor
result = cast(T, await loop.run_in_executor(None, to_execute))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.12.12/x64/lib/python3.12/concurrent/futures/thread.py:59: in run
result = self.fn(*self.args, **self.kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/clients.py:74: in _get_next_page
return page_iterator.__next__()
^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/paginate.py:272: in __iter__
response = self._make_request(current_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/context.py:123: in wrapper
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/paginate.py:360: in _make_request
return self._method(**current_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/client.py:602: in _api_call
return self._make_api_call(operation_name, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/context.py:123: in wrapper
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/client.py:1060: in _make_api_call
http, parsed_response = self._make_request(
.venv/lib/python3.12/site-packages/botocore/client.py:1084: in _make_request
return self._endpoint.make_request(operation_model, request_dict)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/endpoint.py:119: in make_request
return self._send_request(request_dict, operation_model)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/endpoint.py:200: in _send_request
while self._needs_retry(
.venv/lib/python3.12/site-packages/botocore/endpoint.py:360: in _needs_retry
responses = self._event_emitter.emit(
.venv/lib/python3.12/site-packages/botocore/hooks.py:412: in emit
return self._emitter.emit(aliased_event_name, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/hooks.py:256: in emit
return self._emit(event_name, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/hooks.py:239: in _emit
response = handler(**kwargs)
^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/retryhandler.py:207: in __call__
if self._checker(**checker_kwargs):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/retryhandler.py:284: in __call__
should_retry = self._should_retry(
.venv/lib/python3.12/site-packages/botocore/retryhandler.py:307: in _should_retry
return self._checker(
.venv/lib/python3.12/site-packages/botocore/retryhandler.py:363: in __call__
checker_response = checker(
.venv/lib/python3.12/site-packages/botocore/retryhandler.py:247: in __call__
return self._check_caught_exception(
.venv/lib/python3.12/site-packages/botocore/retryhandler.py:416: in _check_caught_exception
raise caught_exception
.venv/lib/python3.12/site-packages/botocore/endpoint.py:276: in _do_get_response
responses = self._event_emitter.emit(event_name, request=request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/hooks.py:412: in emit
return self._emitter.emit(aliased_event_name, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/hooks.py:256: in emit
return self._emit(event_name, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/hooks.py:239: in _emit
response = handler(**kwargs)
^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/moto/core/botocore_stubber.py:38: in __call__
response = self.process_request(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/moto/core/botocore_stubber.py:88: in process_request
status, headers, body = method_to_execute(
.venv/lib/python3.12/site-packages/moto/core/responses.py:363: in dispatch
return cls()._dispatch(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/moto/core/responses.py:578: in _dispatch
return self.call_action()
^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/moto/core/responses.py:706: in call_action
status, headers, body = self.serialized(response)
^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <moto.cloudwatch.responses.CloudWatchResponse object at 0x7fe2f5a4a8a0>
action_result = <moto.core.responses.ActionResult object at 0x7fe2f6678b60>
def serialized(self, action_result: ActionResult) -> TYPE_RESPONSE:
service_model = get_service_model(self.service_name)
operation_model = service_model.operation_model(self._get_action())
protocol = service_model.protocol
protocol += "-json" if protocol == "query" and self.request_json else ""
> serializer_cls = SERIALIZERS[protocol]
^^^^^^^^^^^^^^^^^^^^^
E KeyError: 'smithy-rpc-v2-cbor'
.venv/lib/python3.12/site-packages/moto/core/responses.py:665: KeyError
Check failure on line 142 in tests/test_metric_discovery.py
github-actions / JUnit Test Report
test_metric_discovery.test_alb_metric_discovery
KeyError: 'smithy-rpc-v2-cbor'
Raw output
test_bucket = s3.Bucket(name='temp-ef4d213bbe42402da1f1f8c41b51bf34')
temp_alb = ('app/test-alb-3f9e412fdeeb4310850e9153b3ce7196/01b702a422dd5718', 'test-alb-3f9e412fdeeb4310850e9153b3ce7196')
async def test_alb_metric_discovery(test_bucket, temp_alb):
alb_id, _alb_name = temp_alb
conf = {
"discovery": {
"jobs": [
{
"type": "alb",
"regions": ["eu-west-2"],
"metrics": [{"name": "RequestCount", "stats": ["Sum"]}],
}
]
}
}
with temp_config(conf):
config = ScrapeConfig(
rtf_overrides={"AWS/ApplicationELB": ["elasticloadbalancing:loadbalancer"]}
)
client_factory = ClientFactory(config.sts_region)
executor = Executor(config, client_factory, None) # type: ignore[arg-type]
with temp_metrics(
[
MetricDatum(
namespace="AWS/ApplicationELB",
name="RequestCount",
value=10,
dimensions=[
{"Name": "LoadBalancer", "Value": alb_id},
],
timestamp=datetime.now(tz=UTC).replace(second=0, microsecond=0),
unit="Count",
)
]
):
> discovered = await executor.discover_metrics(init_clients=True)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tests/test_metric_discovery.py:142:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
src/executor.py:118: in discover_metrics
results = await asyncio.gather(*exec_tasks)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/executor.py:105: in _executor_result
shards = await ex.discover_metrics(init_clients=init_clients)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/executor.py:383: in discover_metrics
discovery_results = await asyncio.gather(*discovery_tasks)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/executor.py:415: in run_discovery_job
async for page in self.cloudwatch.list_metrics(metric_req.name, job):
src/clients.py:111: in list_metrics
async for page in self._paginate("list_metrics", "NextToken", **kwargs):
src/clients.py:79: in _paginate
page = await run_in_executor(_get_next_page)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/clients.py:42: in run_in_executor
result = cast(T, await loop.run_in_executor(None, to_execute))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.12.12/x64/lib/python3.12/concurrent/futures/thread.py:59: in run
result = self.fn(*self.args, **self.kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/clients.py:74: in _get_next_page
return page_iterator.__next__()
^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/paginate.py:272: in __iter__
response = self._make_request(current_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/context.py:123: in wrapper
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/paginate.py:360: in _make_request
return self._method(**current_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/client.py:602: in _api_call
return self._make_api_call(operation_name, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/context.py:123: in wrapper
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/client.py:1060: in _make_api_call
http, parsed_response = self._make_request(
.venv/lib/python3.12/site-packages/botocore/client.py:1084: in _make_request
return self._endpoint.make_request(operation_model, request_dict)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/endpoint.py:119: in make_request
return self._send_request(request_dict, operation_model)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/endpoint.py:200: in _send_request
while self._needs_retry(
.venv/lib/python3.12/site-packages/botocore/endpoint.py:360: in _needs_retry
responses = self._event_emitter.emit(
.venv/lib/python3.12/site-packages/botocore/hooks.py:412: in emit
return self._emitter.emit(aliased_event_name, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/hooks.py:256: in emit
return self._emit(event_name, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/hooks.py:239: in _emit
response = handler(**kwargs)
^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/retryhandler.py:207: in __call__
if self._checker(**checker_kwargs):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/retryhandler.py:284: in __call__
should_retry = self._should_retry(
.venv/lib/python3.12/site-packages/botocore/retryhandler.py:307: in _should_retry
return self._checker(
.venv/lib/python3.12/site-packages/botocore/retryhandler.py:363: in __call__
checker_response = checker(
.venv/lib/python3.12/site-packages/botocore/retryhandler.py:247: in __call__
return self._check_caught_exception(
.venv/lib/python3.12/site-packages/botocore/retryhandler.py:416: in _check_caught_exception
raise caught_exception
.venv/lib/python3.12/site-packages/botocore/endpoint.py:276: in _do_get_response
responses = self._event_emitter.emit(event_name, request=request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/hooks.py:412: in emit
return self._emitter.emit(aliased_event_name, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/hooks.py:256: in emit
return self._emit(event_name, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/botocore/hooks.py:239: in _emit
response = handler(**kwargs)
^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/moto/core/botocore_stubber.py:38: in __call__
response = self.process_request(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/moto/core/botocore_stubber.py:88: in process_request
status, headers, body = method_to_execute(
.venv/lib/python3.12/site-packages/moto/core/responses.py:363: in dispatch
return cls()._dispatch(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/moto/core/responses.py:578: in _dispatch
return self.call_action()
^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/moto/core/responses.py:706: in call_action
status, headers, body = self.serialized(response)
^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <moto.cloudwatch.responses.CloudWatchResponse object at 0x7fe30a4b0620>
action_result = <moto.core.responses.ActionResult object at 0x7fe2f67004a0>
def serialized(self, action_result: ActionResult) -> TYPE_RESPONSE:
service_model = get_service_model(self.service_name)
operation_model = service_model.operation_model(self._get_action())
protocol = service_model.protocol
protocol += "-json" if protocol == "query" and self.request_json else ""
> serializer_cls = SERIALIZERS[protocol]
^^^^^^^^^^^^^^^^^^^^^
E KeyError: 'smithy-rpc-v2-cbor'
.venv/lib/python3.12/site-packages/moto/core/responses.py:665: KeyError