Skip to content

Scenario Failure: wind_turbine #159

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
github-actions bot opened this issue Apr 21, 2025 · 0 comments
Open

Scenario Failure: wind_turbine #159

github-actions bot opened this issue Apr 21, 2025 · 0 comments
Assignees

Comments

@github-actions
Copy link

Benchmark Failure: wind_turbine

Scenario ID: wind_turbine
Backend System: openeo.vito.be
Failure Count: 1
Timestamp: 2025-04-21 13:05:28

Links:


Contact Information


Process Graph

{
  "wind_turbine": {
    "arguments": {
      "spatial_extent": {
        "east": 8.888,
        "north": 54.981,
        "south": 53.951,
        "west": 8.858
      },
      "year": 2024
    },
    "namespace": "https://raw.githubusercontent.com/ESA-APEx/apex_algorithms/refs/heads/main/algorithm_catalog/dhi/wind_turbine/openeo_udp/wind_turbine.json",
    "process_id": "wind_turbine_detection"
  },
  "save1": {
    "process_id": "save_result",
    "arguments": {
      "data": {
        "from_node": "wind_turbine"
      },
      "format": "GEOJSON"
    },
    "result": true
  }
}

Error Logs

scenario = BenchmarkScenario(id='wind_turbine', description='Wind turbine detection', backend='openeo.vito.be', process_graph={'w...s.json': 'https://s3.waw3-1.cloudferro.com/swift/v1/apex-examples/fusets_mogpr/fusets_mogpr.nc'}, reference_options={})
connection_factory = <function connection_factory.<locals>.get_connection at 0x7f034cc5b920>
tmp_path = PosixPath('/home/runner/work/apex_algorithms/apex_algorithms/qa/benchmarks/tmp_path_root/test_run_benchmark_wind_turbin0')
track_metric = <function track_metric.<locals>.append at 0x7f034cc5bba0>
upload_assets_on_fail = <function upload_assets_on_fail.<locals>.collect at 0x7f034cc5b880>
request = <FixtureRequest for <Function test_run_benchmark[wind_turbine]>>

    @pytest.mark.parametrize(
        "scenario",
        [
            # Use scenario id as parameterization id to give nicer test names.
            pytest.param(uc, id=uc.id)
            for uc in get_benchmark_scenarios()
        ],
    )
    def test_run_benchmark(
        scenario: BenchmarkScenario,
        connection_factory,
        tmp_path: Path,
        track_metric,
        upload_assets_on_fail,
        request
    ):
        track_metric("scenario_id", scenario.id)
        # Check if a backend override has been provided via cli options.
        override_backend = request.config.getoption("--override-backend")
        backend = scenario.backend
        if override_backend:
            _log.info(f"Overriding backend URL with {override_backend!r}")
            backend = override_backend
    
        connection: openeo.Connection = connection_factory(url=backend)
    
        # TODO #14 scenario option to use synchronous instead of batch job mode?
        job = connection.create_job(
            process_graph=scenario.process_graph,
            title=f"APEx benchmark {scenario.id}",
            additional=scenario.job_options,
        )
        track_metric("job_id", job.job_id)
    
        # TODO: monitor timing and progress
        # TODO: abort excessively long batch jobs? https://github.com/Open-EO/openeo-python-client/issues/589
>       job.start_and_wait()

tests/test_benchmarks.py:56: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/opt/hostedtoolcache/Python/3.12.10/x64/lib/python3.12/site-packages/openeo/rest/job.py:292: in start_and_wait
    self.start()
/opt/hostedtoolcache/Python/3.12.10/x64/lib/python3.12/site-packages/openeo/rest/job.py:126: in start
    self.connection.post(f"/jobs/{self.job_id}/results", expected_status=202)
/opt/hostedtoolcache/Python/3.12.10/x64/lib/python3.12/site-packages/openeo/rest/_connection.py:205: in post
    return self.request("post", path=path, json=json, allow_redirects=False, **kwargs)
/opt/hostedtoolcache/Python/3.12.10/x64/lib/python3.12/site-packages/openeo/rest/connection.py:664: in request
    return _request()
/opt/hostedtoolcache/Python/3.12.10/x64/lib/python3.12/site-packages/openeo/rest/connection.py:657: in _request
    return super(Connection, self).request(
/opt/hostedtoolcache/Python/3.12.10/x64/lib/python3.12/site-packages/openeo/rest/_connection.py:132: in request
    self._raise_api_error(resp)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <Connection to 'https://openeo.vito.be/openeo/1.2/' with OidcBearerAuth>
response = <Response [402]>

    def _raise_api_error(self, response: requests.Response):
        """Convert API error response to Python exception"""
        status_code = response.status_code
        try:
            info = response.json()
        except Exception:
            info = None
    
        # Valid JSON object with "code" and "message" fields indicates a proper openEO API error.
        if isinstance(info, dict):
            error_code = info.get("code")
            error_message = info.get("message")
            if error_code and isinstance(error_code, str) and error_message and isinstance(error_message, str):
                raise OpenEoApiError(
                    http_status_code=status_code,
                    code=error_code,
                    message=error_message,
                    id=info.get("id"),
                    url=info.get("url"),
                )
    
        # Failed to parse it as a compliant openEO API error: show body as-is in the exception.
        text = response.text
        error_message = None
        _log.warning(f"Failed to parse API error response: [{status_code}] {text!r} (headers: {response.headers})")
    
        # TODO: eliminate this VITO-backend specific error massaging?
        if status_code == 502 and "Proxy Error" in text:
            error_message = (
                "Received 502 Proxy Error."
                " This typically happens when a synchronous openEO processing request takes too long and is aborted."
                " Consider using a batch job instead."
            )
    
>       raise OpenEoApiPlainError(message=text, http_status_code=status_code, error_message=error_message)
E       openeo.rest.OpenEoApiPlainError: [402] {"message":"You do not have sufficient credits to perform this request. Please visit https://portal.terrascope.be/pages/pricing to find more information on how to buy additional credits."}

/opt/hostedtoolcache/Python/3.12.10/x64/lib/python3.12/site-packages/openeo/rest/_connection.py:175: OpenEoApiPlainError
----------------------------- Captured stdout call -----------------------------
0:00:00 Job 'j-25042113052344a694d50a995d1719fb': send 'start'
------------------------------ Captured log call -------------------------------
INFO     conftest:conftest.py:125 Connecting to 'openeo.vito.be'
INFO     openeo.config:config.py:193 Loaded openEO client config from sources: []
INFO     conftest:conftest.py:138 Checking for auth_env_var='OPENEO_AUTH_CLIENT_CREDENTIALS_TERRASCOPE' to drive auth against url='openeo.vito.be'.
INFO     conftest:conftest.py:142 Extracted provider_id='terrascope' client_id='openeo-apex-service-account' from auth_env_var='OPENEO_AUTH_CLIENT_CREDENTIALS_TERRASCOPE'
INFO     openeo.rest.connection:connection.py:232 Found OIDC providers: ['egi', 'terrascope', 'CDSE']
INFO     openeo.rest.auth.oidc:oidc.py:404 Doing 'client_credentials' token request 'https://sso.terrascope.be/auth/realms/terrascope/protocol/openid-connect/token' with post data fields ['grant_type', 'client_id', 'client_secret', 'scope'] (client_id 'openeo-apex-service-account')
INFO     openeo.rest.connection:connection.py:329 Obtained tokens: ['access_token', 'id_token']
WARNING  openeo.rest._connection:_connection.py:165 Failed to parse API error response: [402] '{"message":"You do not have sufficient credits to perform this request. Please visit https://portal.terrascope.be/pages/pricing to find more information on how to buy additional credits."}' (headers: {'Content-Type': 'application/json', 'X-Served-By': 'traefik_credits_check', 'Date': 'Mon, 21 Apr 2025 13:05:23 GMT', 'Content-Length': '188', 'Strict-Transport-Security': 'max-age=31536000; includeSubDomains'})
- Generated track_metrics report: report/metrics.json, _ParquetS3StorageSettings(bucket='apex-benchmarks', key='metrics/v1/metrics.parquet') -
-------------------- `upload_assets` stats: {'uploaded': 0} --------------------
- tests/test_benchmarks.py::test_run_benchmark[wind_turbine]:
- Generated html report: file:///home/runner/work/apex_algorithms/apex_algorithms/qa/benchmarks/report/report.html -
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant