@@ -33,36 +33,51 @@ import (
3333
3434// CreateHandler creates an http.Handler for the PromQL langserver REST API.
3535//
36- // Expects a prometheus Client as a second argument.
36+ // If metadata is fetched from a remote Prometheus, the metadataService
37+ // implementation from the promql-langserver/prometheus package can be used,
38+ // otherwise you need to provide your own implementation of the interface.
39+ //
3740// The provided Logger should be synchronized.
3841func CreateHandler (ctx context.Context , metadataService promClient.MetadataService , logger log.Logger ) (http.Handler , error ) {
39- return CreateInstHandler (ctx , metadataService , nil , logger )
42+ return createHandler (ctx , metadataService , logger , false )
4043}
4144
4245// CreateInstHandler creates an instrumented http.Handler for the PromQL langserver REST API.
46+ // In addition to the endpoints created with CreateHandler, a /metrics endpoint // is provided.
47+ //
48+ // If you use the REST API with some middleware that already provides its own
49+ // instrumentation, use CreateHandler instead.
50+ //
51+ // If metadata is fetched from a remote Prometheus, the metadataService
52+ // implementation from the promql-langserver/prometheus package can be used,
53+ // otherwise you need to provide your own implementation of the interface.
4354//
44- // Expects a prometheus Client as a second argument and a Registry as third argument.
4555// The provided Logger should be synchronized.
46- func CreateInstHandler (ctx context.Context , metadataService promClient.MetadataService , r * prometheus.Registry , logger log.Logger ) (http.Handler , error ) {
56+ func CreateInstHandler (ctx context.Context , metadataService promClient.MetadataService , logger log.Logger ) (http.Handler , error ) {
57+ return createHandler (ctx , metadataService , logger , true )
58+ }
59+ func createHandler (ctx context.Context , metadataService promClient.MetadataService , logger log.Logger , metricsEnpoint bool ) (http.Handler , error ) {
4760 lgs , err := langserver .CreateHeadlessServer (ctx , metadataService , logger )
4861 if err != nil {
4962 return nil , err
5063 }
5164
5265 ls := & langserverHandler {langserver : lgs }
5366 ls .m = make (map [string ]http.Handler )
54- ls .createHandlers (r )
67+ ls .createHandlers (metricsEnpoint )
5568
5669 return ls , nil
5770}
5871
59- func (h * langserverHandler ) createHandlers (r * prometheus. Registry ) {
72+ func (h * langserverHandler ) createHandlers (metricsEndpoint bool ) {
6073 diagnostics := newSubHandler (h , diagnosticsHandler )
6174 completion := newSubHandler (h , completionHandler )
6275 hover := newSubHandler (h , hoverHandler )
6376 signatureHelp := newSubHandler (h , signatureHelpHandler )
6477
65- if r != nil {
78+ if metricsEndpoint {
79+ r := prometheus .NewRegistry ()
80+
6681 httpRequestsTotal := prometheus .NewCounterVec (prometheus.CounterOpts {
6782 Name : "http_requests_total" ,
6883 Help : "Count of all HTTP requests" ,
0 commit comments