Skip to content

Actuator endpoints "templated" in hypermedia #1599

@TimHess

Description

@TimHess

Describe the bug

Prior to #1520, every endpoint listed in the response body for /actuator or /cloudfoundryapplication had "templated": false, which was not necessarily accurate since it should indicate whether the endpoint accepts parameters, and some of them do.

The change seems reasonable, but resulted in /loggers disappearing from Spring Boot Admin. I've not seen anywhere else that's affected.

As far as hypermedia goes, it seems like the responses should have additional data (like verb), but Steeltoe is not in control of the standard here, so our options seem to be either reverting to the old behavior or building new functionality to align with Spring's hypermedia response, which effectively duplicates the relevant endpoints (see a response below)

Steeltoe does not currently define named parameters for actuator routes (see the /mappings reponse), so it could get fairly involved to add this feature

This is the relevant portion of an /actuator response from a Spring app:

{
  "_links": {
    "caches-cache": {
      "href": "http://localhost:8080/actuator/caches/{cache}",
      "templated": true
    },
    "caches": {
      "href": "http://localhost:8080/actuator/caches",
      "templated": false
    },
    "health-path": {
      "href": "http://localhost:8080/actuator/health/{*path}",
      "templated": true
    },
    "health": {
      "href": "http://localhost:8080/actuator/health",
      "templated": false
    },
    "configprops": {
      "href": "http://localhost:8080/actuator/configprops",
      "templated": false
    },
    "configprops-prefix": {
      "href": "http://localhost:8080/actuator/configprops/{prefix}",
      "templated": true
    },
    "env": {
      "href": "http://localhost:8080/actuator/env",
      "templated": false
    },
    "env-toMatch": {
      "href": "http://localhost:8080/actuator/env/{toMatch}",
      "templated": true
    },
    "loggers-name": {
      "href": "http://localhost:8080/actuator/loggers/{name}",
      "templated": true
    },
    "loggers": {
      "href": "http://localhost:8080/actuator/loggers",
      "templated": false
    },
    "metrics": {
      "href": "http://localhost:8080/actuator/metrics",
      "templated": false
    },
    "metrics-requiredMetricName": {
      "href": "http://localhost:8080/actuator/metrics/{requiredMetricName}",
      "templated": true
    },
    "sbom": {
      "href": "http://localhost:8080/actuator/sbom",
      "templated": false
    },
    "sbom-id": {
      "href": "http://localhost:8080/actuator/sbom/{id}",
      "templated": true
    }
  }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type/bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions