class ActuatorOpenApiCustomizer implements GlobalOpenApiCustomizer {

	/**
	 * The Path pathern.
	 */
	private final Pattern pathPathern = Pattern.compile("\\{(.*?)}");

	/**
	 * The Web endpoint properties.
	 */
	private final WebEndpointProperties webEndpointProperties;

	/**
	 * Instantiates a new Actuator open api customizer.
	 *
	 * @param webEndpointProperties the web endpoint properties
	 */
	public ActuatorOpenApiCustomizer(WebEndpointProperties webEndpointProperties) {
		this.webEndpointProperties = webEndpointProperties;
	}

	private Stream<Entry<String, PathItem>> actuatorPathEntryStream(OpenAPI openApi, String relativeSubPath) {
		String pathPrefix = webEndpointProperties.getBasePath() + Optional.ofNullable(relativeSubPath).orElse("");
		return Optional.ofNullable(openApi.getPaths())
				.map(Paths::entrySet)
				.map(Set::stream)
				.map(s -> s.filter(entry -> entry.getKey().startsWith(pathPrefix)))
				.orElse(Stream.empty());
	}

	private void handleActuatorPathParam(OpenAPI openApi) {<FILL_FUNCTION_BODY>}

	private void handleActuatorOperationIdUniqueness(OpenAPI openApi) {
		Set<String> usedOperationIds = new HashSet<>();
		actuatorPathEntryStream(openApi, null)
				.sorted(Comparator.comparing(Entry::getKey))
				.forEachOrdered(stringPathItemEntry -> {
					stringPathItemEntry.getValue().readOperations().forEach(operation -> {
						String initialOperationId = operation.getOperationId();
						String uniqueOperationId = operation.getOperationId();
						int counter = 1;
						while (!usedOperationIds.add(uniqueOperationId)) {
							uniqueOperationId = initialOperationId + "_" + ++counter;
						}
						operation.setOperationId(uniqueOperationId);
					});
				});
	}

	@Override
	public void customise(OpenAPI openApi) {
		handleActuatorPathParam(openApi);
		handleActuatorOperationIdUniqueness(openApi);
	}
}

		actuatorPathEntryStream(openApi, DEFAULT_PATH_SEPARATOR).forEach(stringPathItemEntry -> {
			String path = stringPathItemEntry.getKey();
			Matcher matcher = pathPathern.matcher(path);
			while (matcher.find()) {
				String pathParam = matcher.group(1);
				PathItem pathItem = stringPathItemEntry.getValue();
				pathItem.readOperations().forEach(operation -> {
					List<Parameter> existingParameters = operation.getParameters();
					Optional<Parameter> existingParam = Optional.empty();
					if (!CollectionUtils.isEmpty(existingParameters))
						existingParam = existingParameters.stream().filter(p -> pathParam.equals(p.getName())).findAny();
					if (!existingParam.isPresent())
						operation.addParametersItem(new PathParameter().name(pathParam).schema(new StringSchema()));
				});
			}
		});
	
<no_super_class>