mirror of https://github.com/grafana/grafana.git
				
				
				
			
		
			
	
	
		
			46 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
		
		
			
		
	
	
			46 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
|  | package api | ||
|  | 
 | ||
|  | import ( | ||
|  | 	"errors" | ||
|  | 	"net/http" | ||
|  | 	"strings" | ||
|  | 
 | ||
|  | 	"github.com/grafana/grafana-plugin-sdk-go/backend" | ||
|  | 	"github.com/grafana/grafana/pkg/plugins/backendplugin" | ||
|  | 	"github.com/grafana/grafana/pkg/web" | ||
|  | ) | ||
|  | 
 | ||
|  | func (hs *HTTPServer) pluginMetricsEndpoint(ctx *web.Context) { | ||
|  | 	if !hs.Cfg.MetricsEndpointEnabled { | ||
|  | 		return | ||
|  | 	} | ||
|  | 
 | ||
|  | 	if ctx.Req.Method != http.MethodGet || !strings.HasPrefix(ctx.Req.URL.Path, "/metrics/plugins/") { | ||
|  | 		return | ||
|  | 	} | ||
|  | 
 | ||
|  | 	if hs.metricsEndpointBasicAuthEnabled() && !BasicAuthenticatedRequest(ctx.Req, hs.Cfg.MetricsEndpointBasicAuthUsername, hs.Cfg.MetricsEndpointBasicAuthPassword) { | ||
|  | 		ctx.Resp.WriteHeader(http.StatusUnauthorized) | ||
|  | 		return | ||
|  | 	} | ||
|  | 
 | ||
|  | 	pathParts := strings.SplitAfter(ctx.Req.URL.Path, "/") | ||
|  | 	pluginID := pathParts[len(pathParts)-1] | ||
|  | 
 | ||
|  | 	resp, err := hs.pluginClient.CollectMetrics(ctx.Req.Context(), &backend.CollectMetricsRequest{PluginContext: backend.PluginContext{PluginID: pluginID}}) | ||
|  | 	if err != nil { | ||
|  | 		if errors.Is(err, backendplugin.ErrPluginNotRegistered) { | ||
|  | 			ctx.Resp.WriteHeader(http.StatusNotFound) | ||
|  | 			return | ||
|  | 		} | ||
|  | 
 | ||
|  | 		ctx.Resp.WriteHeader(http.StatusInternalServerError) | ||
|  | 		return | ||
|  | 	} | ||
|  | 
 | ||
|  | 	ctx.Resp.Header().Set("Content-Type", "text/plain") | ||
|  | 	if _, err := ctx.Resp.Write(resp.PrometheusMetrics); err != nil { | ||
|  | 		hs.log.Error("Failed to write to response", "err", err) | ||
|  | 	} | ||
|  | } |