Boavizta / boaviztapi

🛠 Giving access to BOAVIZTA reference data and methodologies trough a RESTful API
GNU Affero General Public License v3.0
73 stars 23 forks source link

Some cloud query fail on v0.3 - seems to depend of the instance type #178

Closed demeringo closed 1 year ago

demeringo commented 1 year ago

Bug description

To be confirmed, maybe I am missing something... but it seems that we get internal server error with some instances type on api V0.3.0x

To Reproduce

Test cloud route with m6g.xlarge:

https://dev.api.boavizta.org/v1/cloud/?provider=aws&instance_type=m6g.xlarge&verbose=false&allocation=TOTAL&criteria=pe

Returns internal server error.

While same query with instance type c5n.xlarge works fine:

https://dev.api.boavizta.org/v1/cloud/?provider=aws&instance_type=c5n.xlarge&verbose=false&allocation=TOTAL&criteria=pe

Or run test suite of branch test/cloud-instance-issue-178

Expected behavior

JSON OUTPUT

Additional context

demeringo commented 1 year ago

The stack trace (on dev branch) indicates an issue with completing the CPU data (complete_die_size_per_core).

INFO:     Started server process [143903]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://localhost:5000 (Press CTRL+C to quit)
Annapurna Labs Graviton2 Annapurna Labs Graviton2 Graviton2 150 64 None None https://docs.google.com/spreadsheets/d/1DqYgQnEDLQVQm5acMAhLgHLD8xXCG9BIrk-_Nv6jF3k/edit#gid=224728652
INFO:     127.0.0.1:59808 - "GET /v1/cloud/?provider=aws&instance_type=m6g.xlarge&verbose=true&allocation=TOTAL&criteria=gwp&criteria=adp&criteria=pe HTTP/1.1" 500 Internal Server Error
ERROR:    Exception in ASGI application
Traceback (most recent call last):
  File "/home/olivier/.local/share/virtualenvs/boaviztapi-xkfCAuIg/lib/python3.9/site-packages/uvicorn/protocols/http/h11_impl.py", line 428, in run_asgi
    result = await app(  # type: ignore[func-returns-value]
  File "/home/olivier/.local/share/virtualenvs/boaviztapi-xkfCAuIg/lib/python3.9/site-packages/uvicorn/middleware/proxy_headers.py", line 78, in __call__
    return await self.app(scope, receive, send)
  File "/home/olivier/.local/share/virtualenvs/boaviztapi-xkfCAuIg/lib/python3.9/site-packages/fastapi/applications.py", line 276, in __call__
    await super().__call__(scope, receive, send)
  File "/home/olivier/.local/share/virtualenvs/boaviztapi-xkfCAuIg/lib/python3.9/site-packages/starlette/applications.py", line 122, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/olivier/.local/share/virtualenvs/boaviztapi-xkfCAuIg/lib/python3.9/site-packages/starlette/middleware/errors.py", line 184, in __call__
    raise exc
  File "/home/olivier/.local/share/virtualenvs/boaviztapi-xkfCAuIg/lib/python3.9/site-packages/starlette/middleware/errors.py", line 162, in __call__
    await self.app(scope, receive, _send)
  File "/home/olivier/.local/share/virtualenvs/boaviztapi-xkfCAuIg/lib/python3.9/site-packages/starlette/middleware/cors.py", line 84, in __call__
    await self.app(scope, receive, send)
  File "/home/olivier/.local/share/virtualenvs/boaviztapi-xkfCAuIg/lib/python3.9/site-packages/starlette/middleware/exceptions.py", line 79, in __call__
    raise exc
  File "/home/olivier/.local/share/virtualenvs/boaviztapi-xkfCAuIg/lib/python3.9/site-packages/starlette/middleware/exceptions.py", line 68, in __call__
    await self.app(scope, receive, sender)
  File "/home/olivier/.local/share/virtualenvs/boaviztapi-xkfCAuIg/lib/python3.9/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in __call__
    raise e
  File "/home/olivier/.local/share/virtualenvs/boaviztapi-xkfCAuIg/lib/python3.9/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/olivier/.local/share/virtualenvs/boaviztapi-xkfCAuIg/lib/python3.9/site-packages/starlette/routing.py", line 718, in __call__
    await route.handle(scope, receive, send)
  File "/home/olivier/.local/share/virtualenvs/boaviztapi-xkfCAuIg/lib/python3.9/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/olivier/.local/share/virtualenvs/boaviztapi-xkfCAuIg/lib/python3.9/site-packages/starlette/routing.py", line 66, in app
    response = await func(request)
  File "/home/olivier/.local/share/virtualenvs/boaviztapi-xkfCAuIg/lib/python3.9/site-packages/fastapi/routing.py", line 237, in app
    raw_response = await run_endpoint_function(
  File "/home/olivier/.local/share/virtualenvs/boaviztapi-xkfCAuIg/lib/python3.9/site-packages/fastapi/routing.py", line 163, in run_endpoint_function
    return await dependant.call(**values)
  File "/home/olivier/atelier/boavizta/boaviztapi/boaviztapi/routers/cloud_router.py", line 58, in instance_cloud_impact
    return await server_impact(
  File "/home/olivier/atelier/boavizta/boaviztapi/boaviztapi/routers/server_router.py", line 73, in server_impact
    impacts = bottom_up(model=device, allocation=allocation, selected_criteria=criteria)
  File "/home/olivier/atelier/boavizta/boaviztapi/boaviztapi/service/bottom_up.py", line 42, in bottom_up
    single_impact = get_model_single_impact(model, phase, criteria.name, allocation_type=allocation)
  File "/home/olivier/atelier/boavizta/boaviztapi/boaviztapi/service/bottom_up.py", line 16, in get_model_single_impact
    impact, significant_figures, min_impact, max_impact, warnings = impact_function(impact_type)
  File "/home/olivier/atelier/boavizta/boaviztapi/boaviztapi/model/device/server.py", line 216, in impact_embedded
    impact, sign_fig, min_impact, max_impact, c_warning = super().impact_embedded(impact_type)
  File "/home/olivier/atelier/boavizta/boaviztapi/boaviztapi/model/device/server.py", line 135, in impact_embedded
    impact, sign_fig, min_impact, max_impact, c_warning = getattr(component, f'impact_embedded')(impact_type)
  File "/home/olivier/atelier/boavizta/boaviztapi/boaviztapi/model/component/cpu.py", line 85, in impact_embedded
    sign_figures = self.__compute_significant_numbers(core_impact.value, cpu_die_impact.value, cpu_impact.value)
  File "/home/olivier/atelier/boavizta/boaviztapi/boaviztapi/model/component/cpu.py", line 155, in __compute_significant_numbers
    return rd.min_significant_figures(self.die_size_per_core.value, core_impact, cpu_die_impact, cpu_impact)
  File "/home/olivier/atelier/boavizta/boaviztapi/boaviztapi/model/boattribute.py", line 36, in value
    self.complete_function()
  File "/home/olivier/atelier/boavizta/boaviztapi/boaviztapi/model/component/cpu.py", line 201, in _complete_die_size_per_core
    row2 = sub.iloc[1]
  File "/home/olivier/.local/share/virtualenvs/boaviztapi-xkfCAuIg/lib/python3.9/site-packages/pandas/core/indexing.py", line 1103, in __getitem__
    return self._getitem_axis(maybe_callable, axis=axis)
  File "/home/olivier/.local/share/virtualenvs/boaviztapi-xkfCAuIg/lib/python3.9/site-packages/pandas/core/indexing.py", line 1656, in _getitem_axis
    self._validate_integer(key, axis)
  File "/home/olivier/.local/share/virtualenvs/boaviztapi-xkfCAuIg/lib/python3.9/site-packages/pandas/core/indexing.py", line 1589, in _validate_integer
    raise IndexError("single positional indexer is out-of-bounds")
IndexError: single positional indexer is out-of-bounds
demeringo commented 1 year ago

I confirm it works great now, thank you for the fix @da-ekchajzer 🙏