@@ -377,8 +377,9 @@ type writeStorage interface {
377
377
}
378
378
379
379
type handler struct {
380
- store writeStorage
381
- opts handlerOpts
380
+ store writeStorage
381
+ acceptedMessageTypes MessageTypes
382
+ opts handlerOpts
382
383
}
383
384
384
385
type handlerOpts struct {
@@ -455,15 +456,20 @@ func SnappyDecompressorMiddleware(logger *slog.Logger) func(http.Handler) http.H
455
456
456
457
// NewHandler returns HTTP handler that receives Remote Write 2.0
457
458
// protocol https://prometheus.io/docs/specs/remote_write_spec_2_0/.
458
- func NewHandler (store writeStorage , opts ... HandlerOption ) http.Handler {
459
+ func NewHandler (store writeStorage , acceptedMessageTypes MessageTypes , opts ... HandlerOption ) http.Handler {
459
460
o := handlerOpts {
460
461
logger : slog .New (nopSlogHandler {}),
461
462
middlewares : []func (http.Handler ) http.Handler {SnappyDecompressorMiddleware (slog .New (nopSlogHandler {}))},
462
463
}
463
464
for _ , opt := range opts {
464
465
opt (& o )
465
466
}
466
- h := & handler {opts : o , store : store }
467
+
468
+ h := & handler {
469
+ opts : o ,
470
+ store : store ,
471
+ acceptedMessageTypes : acceptedMessageTypes ,
472
+ }
467
473
468
474
// Apply all middlewares in order
469
475
var handler http.Handler = h
@@ -524,6 +530,13 @@ func (h *handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
524
530
return
525
531
}
526
532
533
+ if ! h .acceptedMessageTypes .Contains (msgType ) {
534
+ err := fmt .Errorf ("%v protobuf message is not accepted by this server; only accepts %v" , msgType , h .acceptedMessageTypes .String ())
535
+ h .opts .logger .Error ("Unaccepted message type" , "msgType" , msgType , "err" , err )
536
+ http .Error (w , err .Error (), http .StatusUnsupportedMediaType )
537
+ return
538
+ }
539
+
527
540
writeResponse , storeErr := h .store .Store (r .Context (), msgType , r )
528
541
529
542
// Set required X-Prometheus-Remote-Write-Written-* response headers, in all cases, alongwith any user-defined headers.
0 commit comments