diff --git a/opengrok-web/src/main/java/org/opengrok/web/servlet/MetricsServlet.java b/opengrok-web/src/main/java/org/opengrok/web/servlet/MetricsServlet.java index 38f65a9b465..4ff60340815 100644 --- a/opengrok-web/src/main/java/org/opengrok/web/servlet/MetricsServlet.java +++ b/opengrok-web/src/main/java/org/opengrok/web/servlet/MetricsServlet.java @@ -18,7 +18,7 @@ */ /* - * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2025, Oracle and/or its affiliates. All rights reserved. */ package org.opengrok.web.servlet; @@ -27,19 +27,33 @@ import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import org.opengrok.indexer.Metrics; +import org.opengrok.indexer.logger.LoggerFactory; import java.io.IOException; import java.io.PrintWriter; +import java.io.Serial; +import java.util.logging.Logger; +import java.util.logging.Level; @WebServlet("/metrics/prometheus") public class MetricsServlet extends HttpServlet { + @Serial private static final long serialVersionUID = 0L; + private static final Logger logger = LoggerFactory.getLogger(MetricsServlet.class); + @Override - protected void doGet(final HttpServletRequest req, final HttpServletResponse resp) throws IOException { + protected void doGet(final HttpServletRequest req, final HttpServletResponse resp) { try (PrintWriter pw = resp.getWriter()) { pw.print(Metrics.getPrometheusRegistry().scrape()); + } catch (IOException e) { + try { + resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, + String.format("failed to write the output data: %s", e.getMessage())); + } catch (IOException ex) { + logger.log(Level.WARNING, String.format("failed to send error code: %s", e.getMessage())); + } } } }