build(deps-dev): bump the dev-dependencies group across 1 directory with 3 updates #65
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-a20a40bee1c447c7830b41ff7ec196d7')
temp_queue = sqs.Queue(url='https://sqs.eu-west-2.amazonaws.com/123456789012/test-queue-1873af733b3f45c2b33488464a0219ee')
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 0x7f65edd9a990>
action_result = <moto.core.responses.ActionResult object at 0x7f65e9cd64b0>
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-174ef01fa0634a30b595c1fb8a31d1b7')
temp_alb = ('app/test-alb-6e97066914b24adda7cd562897cb5a0b/96876e29b25fd891', 'test-alb-6e97066914b24adda7cd562897cb5a0b')
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 0x7f65db043140>
action_result = <moto.core.responses.ActionResult object at 0x7f65da997c50>
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-8d5aa0ca7777423383109f2389d2dd20')
temp_queue = sqs.Queue(url='https://sqs.eu-west-2.amazonaws.com/123456789012/test-queue-cf95a43bd9a44d5a8bef794fa68fc77c')
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 0x7f65ec04e4e0>
action_result = <moto.core.responses.ActionResult object at 0x7f65dbe53560>
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-0e9fe816753942ac8891a575980aa636')
temp_queue = sqs.Queue(url='https://sqs.eu-west-2.amazonaws.com/123456789012/test-queue-6d3c0d42ba3644d1a21cca10270a58d8')
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 0x7f65ea1b5be0>
action_result = <moto.core.responses.ActionResult object at 0x7f65db6fa9f0>
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-0881e6c9e8364ab5a70b06bfa843cd90')
temp_queue = sqs.Queue(url='https://sqs.eu-west-2.amazonaws.com/123456789012/test-queue-157e2629b28c4b81ac4a8eba3ac6b870')
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 0x7f65d60fa7e0>
action_result = <moto.core.responses.ActionResult object at 0x7f65daa6d010>
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-2456631a0533437eb4686e66b1a58485')
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 0x7f65d540baa0>
action_result = <moto.core.responses.ActionResult object at 0x7f65daa6ec30>
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-177b10be9a9d4ba5b2eb664f41b1456e')
temp_alb = ('app/test-alb-5a4ac6222c21434aa166e88d25ed27bd/890efddce6d7fa76', 'test-alb-5a4ac6222c21434aa166e88d25ed27bd')
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 0x7f65d60fb560>
action_result = <moto.core.responses.ActionResult object at 0x7f65ea1e2a20>
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