001package io.prometheus.metrics.exporter.common; 002 003import io.prometheus.metrics.model.registry.PrometheusScrapeRequest; 004import java.io.UnsupportedEncodingException; 005import java.net.URLDecoder; 006import java.util.ArrayList; 007import java.util.Enumeration; 008import javax.annotation.Nullable; 009 010public interface PrometheusHttpRequest extends PrometheusScrapeRequest { 011 012 /** See {@code jakarta.servlet.http.HttpServletRequest.getQueryString()} */ 013 String getQueryString(); 014 015 /** See {@code jakarta.servlet.http.HttpServletRequest.getHeaders(String)} */ 016 Enumeration<String> getHeaders(String name); 017 018 /** See {@code jakarta.servlet.http.HttpServletRequest.getMethod()} */ 019 String getMethod(); 020 021 /** See {@code jakarta.servlet.http.HttpServletRequest.getHeader(String)} */ 022 @Nullable 023 default String getHeader(String name) { 024 Enumeration<String> headers = getHeaders(name); 025 if (headers == null || !headers.hasMoreElements()) { 026 return null; 027 } else { 028 return headers.nextElement(); 029 } 030 } 031 032 /** See {@code jakarta.servlet.ServletRequest.getParameter(String)} */ 033 @Nullable 034 default String getParameter(String name) { 035 String[] values = getParameterValues(name); 036 if (values == null || values.length == 0) { 037 return null; 038 } else { 039 return values[0]; 040 } 041 } 042 043 /** See {@code jakarta.servlet.ServletRequest.getParameterValues(String)} */ 044 @Override 045 @Nullable 046 default String[] getParameterValues(String name) { 047 try { 048 ArrayList<String> result = new ArrayList<>(); 049 String queryString = getQueryString(); 050 if (queryString != null) { 051 String[] pairs = queryString.split("&"); 052 for (String pair : pairs) { 053 int idx = pair.indexOf("="); 054 if (idx != -1 && URLDecoder.decode(pair.substring(0, idx), "UTF-8").equals(name)) { 055 result.add(URLDecoder.decode(pair.substring(idx + 1), "UTF-8")); 056 } 057 } 058 } 059 if (result.isEmpty()) { 060 // Servlet API: getParameterValues() returns null if the parameter does not exist. 061 return null; 062 } else { 063 return result.toArray(new String[0]); 064 } 065 } catch (UnsupportedEncodingException e) { 066 // UTF-8 encoding not supported. 067 throw new RuntimeException(e); 068 } 069 } 070}