diff --git a/README.md b/README.md index d89f5d90c..76ce6fe4e 100644 --- a/README.md +++ b/README.md @@ -58,6 +58,8 @@ The backend to which to write logs can be specified with the `--logs.write.endpo ```txt mdox-exec="./observatorium-api -h" Usage of ./observatorium-api: + -alerting.alertmanager.endpoint string + The endpoint against which to make requests for alerts and silences -debug.block-profile-rate int The percentage of goroutine blocking events that are reported in the blocking profile. (default 10) -debug.mutex-profile-fraction int @@ -106,8 +108,6 @@ Usage of ./observatorium-api: The HTTP write timeout for proxied requests to the logs endpoint. (default 10m0s) -logs.write.endpoint string The endpoint against which to make write requests for logs. - -metrics.alertmanager.endpoint string - The endpoint against which to make requests for alerts and silences -metrics.read.endpoint string The endpoint against which to send read requests for metrics. -metrics.rules.endpoint string diff --git a/api/metrics/v1/alertmanager_enforcer.go b/api/alerting/v1/alertmanager_enforcer.go similarity index 100% rename from api/metrics/v1/alertmanager_enforcer.go rename to api/alerting/v1/alertmanager_enforcer.go diff --git a/api/metrics/v1/alertmanager_enforcer_test.go b/api/alerting/v1/alertmanager_enforcer_test.go similarity index 97% rename from api/metrics/v1/alertmanager_enforcer_test.go rename to api/alerting/v1/alertmanager_enforcer_test.go index 7a62971a6..e19e8ed58 100644 --- a/api/metrics/v1/alertmanager_enforcer_test.go +++ b/api/alerting/v1/alertmanager_enforcer_test.go @@ -127,12 +127,12 @@ func TestWithEnforceTenancyOnSilenceID(t *testing.T) { r.Use(authentication.WithTenantID(map[string]string{tenantName: tenantID})) r.With(WithEnforceTenancyOnSilenceID(label, upstreamURL, srv.Client().Transport)).Method( http.MethodGet, - "/{tenant}/am/api/v2/silence/{silenceID}", + "/{tenant}/api/v2/silence/{silenceID}", next, ) r.With(WithEnforceTenancyOnSilenceID(label, upstreamURL, srv.Client().Transport)).Method( http.MethodDelete, - "/{tenant}/am/api/v2/silence/{silenceID}", + "/{tenant}/api/v2/silence/{silenceID}", next, ) @@ -140,7 +140,7 @@ func TestWithEnforceTenancyOnSilenceID(t *testing.T) { } newRequest := func(method string) *http.Request { - req := httptest.NewRequest(method, "/"+tenantName+"/am/api/v2/silence/"+silID, nil) + req := httptest.NewRequest(method, "/"+tenantName+"/api/v2/silence/"+silID, nil) rctx := chi.NewRouteContext() rctx.URLParams.Add("tenant", tenantName) rctx.URLParams.Add("silenceID", silID) diff --git a/api/alerting/v1/http.go b/api/alerting/v1/http.go new file mode 100644 index 000000000..2d06bb606 --- /dev/null +++ b/api/alerting/v1/http.go @@ -0,0 +1,252 @@ +package v1 + +import ( + "net" + "net/http" + "net/http/httputil" + "net/url" + "time" + + "github.com/go-chi/chi/v5" + "github.com/go-kit/log" + "github.com/prometheus/client_golang/prometheus" + "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" + + "github.com/observatorium/api/proxy" + "github.com/observatorium/api/server" + "github.com/observatorium/api/tls" + "github.com/observatorium/api/tracing" +) + +const ( + dialTimeout = 30 * time.Second // Set as in http.DefaultTransport +) + +const ( + AlertsRoute = "/api/v2/alerts" + SilencesRoute = "/api/v2/silences" + SilenceRoute = "/api/v2/silence/{silenceID}" +) + +type handlerConfiguration struct { + logger log.Logger + registry *prometheus.Registry + instrument handlerInstrumenter + tenantLabel string + alertsReadMiddlewares []func(http.Handler) http.Handler + silenceReadMiddlewares []func(http.Handler) http.Handler + silenceWriteMiddlewares []func(http.Handler) http.Handler + silenceIDReadMiddlewares []func(http.Handler) http.Handler + silenceIDWriteMiddlewares []func(http.Handler) http.Handler +} + +// HandlerOption modifies the handler's configuration. +type HandlerOption func(h *handlerConfiguration) + +// WithLogger add a custom logger for the handler to use. +func WithLogger(logger log.Logger) HandlerOption { + return func(h *handlerConfiguration) { + h.logger = logger + } +} + +// WithRegistry adds a custom Prometheus registry for the handler to use. +func WithRegistry(r *prometheus.Registry) HandlerOption { + return func(h *handlerConfiguration) { + h.registry = r + } +} + +// WithHandlerInstrumenter adds a custom HTTP handler instrument middleware for the handler to use. +func WithHandlerInstrumenter(instrumenter handlerInstrumenter) HandlerOption { + return func(h *handlerConfiguration) { + h.instrument = instrumenter + } +} + +// WithTenantLabel adds tenant label for the handler to use. +func WithTenantLabel(tenantLabel string) HandlerOption { + return func(h *handlerConfiguration) { + h.tenantLabel = tenantLabel + } +} + +// WithAlertsReadMiddleware adds a middleware for the read alerts operation. +func WithAlertsReadMiddleware(m ...func(http.Handler) http.Handler) HandlerOption { + return func(h *handlerConfiguration) { + h.alertsReadMiddlewares = append(h.alertsReadMiddlewares, m...) + } +} + +// WithSilenceReadMiddleware adds a middleware for the read silences operation. +func WithSilenceReadMiddleware(m ...func(http.Handler) http.Handler) HandlerOption { + return func(h *handlerConfiguration) { + h.silenceReadMiddlewares = append(h.silenceReadMiddlewares, m...) + } +} + +// WithSilenceWriteMiddleware adds a middleware for the create silence operation. +func WithSilenceWriteMiddleware(m ...func(http.Handler) http.Handler) HandlerOption { + return func(h *handlerConfiguration) { + h.silenceWriteMiddlewares = append(h.silenceWriteMiddlewares, m...) + } +} + +// WithSilenceIDReadMiddleware adds a middleware for the read silence by ID operation. +func WithSilenceIDReadMiddleware(m ...func(http.Handler) http.Handler) HandlerOption { + return func(h *handlerConfiguration) { + h.silenceIDReadMiddlewares = append(h.silenceIDReadMiddlewares, m...) + } +} + +// WithSilenceIDWriteMiddleware adds a middleware for the delete silence by ID operation. +func WithSilenceIDWriteMiddleware(m ...func(http.Handler) http.Handler) HandlerOption { + return func(h *handlerConfiguration) { + h.silenceIDWriteMiddlewares = append(h.silenceIDWriteMiddlewares, m...) + } +} + +// WithGlobalMiddleware adds a middleware for all operations. +func WithGlobalMiddleware(m ...func(http.Handler) http.Handler) HandlerOption { + return func(h *handlerConfiguration) { + h.alertsReadMiddlewares = append(h.alertsReadMiddlewares, m...) + h.silenceReadMiddlewares = append(h.silenceReadMiddlewares, m...) + h.silenceWriteMiddlewares = append(h.silenceWriteMiddlewares, m...) + h.silenceIDReadMiddlewares = append(h.silenceIDReadMiddlewares, m...) + h.silenceIDWriteMiddlewares = append(h.silenceIDWriteMiddlewares, m...) + } +} + +type handlerInstrumenter interface { + NewHandler(labels prometheus.Labels, handler http.Handler) http.HandlerFunc +} + +type nopInstrumentHandler struct{} + +func (n nopInstrumentHandler) NewHandler(_ prometheus.Labels, handler http.Handler) http.HandlerFunc { + return handler.ServeHTTP +} + +// NewHandler creates the new alerting v1 handler, proxying a subset of the +// Alertmanager v2 API (active alerts and silences). +func NewHandler(endpoint *url.URL, tlsOptions *tls.UpstreamOptions, opts ...HandlerOption) http.Handler { + c := &handlerConfiguration{ + logger: log.NewNopLogger(), + registry: prometheus.NewRegistry(), + instrument: nopInstrumentHandler{}, + } + + for _, o := range opts { + o(c) + } + + r := chi.NewRouter() + r.Use(tracing.WithChiRoutePattern) + r.Use(func(handler http.Handler) http.Handler { + return c.instrument.NewHandler(nil, handler) + }) + + if endpoint == nil { + return r + } + + alertmanagerTransport := &http.Transport{ + DialContext: (&net.Dialer{ + Timeout: dialTimeout, + }).DialContext, + TLSClientConfig: tlsOptions.NewClientConfig(), + } + + var proxyAlertmanager http.Handler + { + middlewares := proxy.Middlewares( + proxy.MiddlewareSetUpstream(endpoint), + proxy.MiddlewareSetPrefixHeader(), + proxy.MiddlewareLogger(c.logger), + proxy.MiddlewareMetrics(c.registry, prometheus.Labels{"proxy": "alertingv1-alertmanager"}), + ) + + proxyAlertmanager = &httputil.ReverseProxy{ + Director: middlewares, + ErrorLog: proxy.Logger(c.logger), + Transport: otelhttp.NewTransport(alertmanagerTransport), + } + } + + r.Group(func(r chi.Router) { + r.Use(func(handler http.Handler) http.Handler { + return server.InjectLabelsCtx( + prometheus.Labels{"group": "alertingv1", "handler": "alerts"}, + handler, + ) + }) + r.Use(c.alertsReadMiddlewares...) + r.Use(server.StripTenantPrefix("/api/alerting/v1")) + + r.Method(http.MethodGet, AlertsRoute, proxyAlertmanager) + }) + + r.Group(func(r chi.Router) { + r.Use(func(handler http.Handler) http.Handler { + return server.InjectLabelsCtx( + prometheus.Labels{"group": "alertingv1", "handler": "silences"}, + handler, + ) + }) + r.Use(c.silenceReadMiddlewares...) + r.Use(server.StripTenantPrefix("/api/alerting/v1")) + + r.Method(http.MethodGet, SilencesRoute, proxyAlertmanager) + }) + + r.Group(func(r chi.Router) { + r.Use(func(handler http.Handler) http.Handler { + return server.InjectLabelsCtx( + prometheus.Labels{"group": "alertingv1", "handler": "silences"}, + handler, + ) + }) + r.Use(c.silenceWriteMiddlewares...) + r.Use(WithEnforceTenancyOnSilenceMatchers(c.tenantLabel)) + r.Use(server.StripTenantPrefix("/api/alerting/v1")) + + r.Method(http.MethodPost, SilencesRoute, proxyAlertmanager) + }) + + alertmanagerSilenceTransport := otelhttp.NewTransport(alertmanagerTransport) + enforceTenancyOnSilenceID := WithEnforceTenancyOnSilenceID( + c.tenantLabel, + endpoint, + alertmanagerSilenceTransport, + ) + + r.Group(func(r chi.Router) { + r.Use(func(handler http.Handler) http.Handler { + return server.InjectLabelsCtx( + prometheus.Labels{"group": "alertingv1", "handler": "silence"}, + handler, + ) + }) + r.Use(enforceTenancyOnSilenceID) + r.Use(c.silenceIDReadMiddlewares...) + r.Use(server.StripTenantPrefix("/api/alerting/v1")) + + r.Method(http.MethodGet, SilenceRoute, proxyAlertmanager) + }) + + r.Group(func(r chi.Router) { + r.Use(func(handler http.Handler) http.Handler { + return server.InjectLabelsCtx( + prometheus.Labels{"group": "alertingv1", "handler": "silence"}, + handler, + ) + }) + r.Use(enforceTenancyOnSilenceID) + r.Use(c.silenceIDWriteMiddlewares...) + r.Use(server.StripTenantPrefix("/api/alerting/v1")) + + r.Method(http.MethodDelete, SilenceRoute, proxyAlertmanager) + }) + + return r +} diff --git a/api/metrics/v1/http.go b/api/metrics/v1/http.go index 2f48ec180..e165b1589 100644 --- a/api/metrics/v1/http.go +++ b/api/metrics/v1/http.go @@ -34,30 +34,17 @@ const ( ReceiveRoute = "/api/v1/receive" RulesRoute = "/api/v1/rules" RulesRawRoute = "/api/v1/rules/raw" - - AlertmanagerAlertsRoute = "/am/api/v2/alerts" - AlertmanagerSilencesRoute = "/am/api/v2/silences" - AlertmanagerSilenceRoute = "/am/api/v2/silence/{silenceID}" ) -type alertmanagerMiddleware struct { - alertsReadMiddlewares []func(http.Handler) http.Handler - silenceReadMiddlewares []func(http.Handler) http.Handler - silenceWriteMiddlewares []func(http.Handler) http.Handler - silenceIDReadMiddlewares []func(http.Handler) http.Handler - silenceIDWriteMiddlewares []func(http.Handler) http.Handler -} - type handlerConfiguration struct { - logger log.Logger - registry *prometheus.Registry - instrument handlerInstrumenter - tenantLabel string - queryMiddlewares []func(http.Handler) http.Handler - readMiddlewares []func(http.Handler) http.Handler - uiMiddlewares []func(http.Handler) http.Handler - writeMiddlewares []func(http.Handler) http.Handler - alertmanagerMiddleware alertmanagerMiddleware + logger log.Logger + registry *prometheus.Registry + instrument handlerInstrumenter + tenantLabel string + queryMiddlewares []func(http.Handler) http.Handler + readMiddlewares []func(http.Handler) http.Handler + uiMiddlewares []func(http.Handler) http.Handler + writeMiddlewares []func(http.Handler) http.Handler } // HandlerOption modifies the handler's configuration. @@ -119,36 +106,6 @@ func WithWriteMiddleware(m func(http.Handler) http.Handler) HandlerOption { } } -func WithAlertmanagerAlertsReadMiddleware(m ...func(http.Handler) http.Handler) HandlerOption { - return func(h *handlerConfiguration) { - h.alertmanagerMiddleware.alertsReadMiddlewares = append(h.alertmanagerMiddleware.alertsReadMiddlewares, m...) - } -} - -func WithAlertmanagerSilenceReadMiddleware(m ...func(http.Handler) http.Handler) HandlerOption { - return func(h *handlerConfiguration) { - h.alertmanagerMiddleware.silenceReadMiddlewares = append(h.alertmanagerMiddleware.silenceReadMiddlewares, m...) - } -} - -func WithAlertmanagerSilenceWriteMiddleware(m ...func(http.Handler) http.Handler) HandlerOption { - return func(h *handlerConfiguration) { - h.alertmanagerMiddleware.silenceWriteMiddlewares = append(h.alertmanagerMiddleware.silenceWriteMiddlewares, m...) - } -} - -func WithAlertmanagerSilenceIDReadMiddleware(m ...func(http.Handler) http.Handler) HandlerOption { - return func(h *handlerConfiguration) { - h.alertmanagerMiddleware.silenceIDReadMiddlewares = append(h.alertmanagerMiddleware.silenceIDReadMiddlewares, m...) - } -} - -func WithAlertmanagerSilenceIDWriteMiddleware(m ...func(http.Handler) http.Handler) HandlerOption { - return func(h *handlerConfiguration) { - h.alertmanagerMiddleware.silenceIDWriteMiddlewares = append(h.alertmanagerMiddleware.silenceIDWriteMiddlewares, m...) - } -} - // WithGlobalMiddleware adds a middleware for all operations. func WithGlobalMiddleware(m ...func(http.Handler) http.Handler) HandlerOption { return func(h *handlerConfiguration) { @@ -156,11 +113,6 @@ func WithGlobalMiddleware(m ...func(http.Handler) http.Handler) HandlerOption { h.uiMiddlewares = append(h.uiMiddlewares, m...) h.queryMiddlewares = append(h.queryMiddlewares, m...) h.readMiddlewares = append(h.readMiddlewares, m...) - h.alertmanagerMiddleware.alertsReadMiddlewares = append(h.alertmanagerMiddleware.alertsReadMiddlewares, m...) - h.alertmanagerMiddleware.silenceReadMiddlewares = append(h.alertmanagerMiddleware.silenceReadMiddlewares, m...) - h.alertmanagerMiddleware.silenceWriteMiddlewares = append(h.alertmanagerMiddleware.silenceWriteMiddlewares, m...) - h.alertmanagerMiddleware.silenceIDReadMiddlewares = append(h.alertmanagerMiddleware.silenceIDReadMiddlewares, m...) - h.alertmanagerMiddleware.silenceIDWriteMiddlewares = append(h.alertmanagerMiddleware.silenceIDWriteMiddlewares, m...) } } @@ -175,10 +127,9 @@ func (n nopInstrumentHandler) NewHandler(_ prometheus.Labels, handler http.Handl } type Endpoints struct { - ReadEndpoint *url.URL - WriteEndpoint *url.URL - RulesEndpoint *url.URL - AlertmanagerEndpoint *url.URL + ReadEndpoint *url.URL + WriteEndpoint *url.URL + RulesEndpoint *url.URL } // NewHandler creates the new metrics v1 handler. @@ -415,106 +366,5 @@ func NewHandler(endpoints Endpoints, tlsOptions *tls.UpstreamOptions, opts ...Ha }) } - if endpoints.AlertmanagerEndpoint != nil { - var proxyAlertmanager http.Handler - - alertmanagerTransport := &http.Transport{ - DialContext: (&net.Dialer{ - Timeout: dialTimeout, - }).DialContext, - TLSClientConfig: tlsOptions.NewClientConfig(), - } - - { - middlewares := proxy.Middlewares( - proxy.MiddlewareSetUpstream(endpoints.AlertmanagerEndpoint), - proxy.MiddlewareSetPrefixHeader(), - proxy.MiddlewareLogger(c.logger), - proxy.MiddlewareMetrics(c.registry, prometheus.Labels{"proxy": "alertmanagerv2"}), - ) - - proxyAlertmanager = &httputil.ReverseProxy{ - Director: middlewares, - ErrorLog: proxy.Logger(c.logger), - Transport: otelhttp.NewTransport(alertmanagerTransport), - } - } - - r.Group(func(r chi.Router) { - r.Use(func(handler http.Handler) http.Handler { - return server.InjectLabelsCtx( - prometheus.Labels{"group": "metricsv1", "handler": "alerts"}, - handler, - ) - }) - r.Use(c.alertmanagerMiddleware.alertsReadMiddlewares...) - r.Use(server.StripTenantPrefixWithSubRoute("/api/metrics/v1", "/am")) - - r.Method(http.MethodGet, AlertmanagerAlertsRoute, proxyAlertmanager) - }) - - r.Group(func(r chi.Router) { - r.Use(func(handler http.Handler) http.Handler { - return server.InjectLabelsCtx( - prometheus.Labels{"group": "metricsv1", "handler": "silences"}, - handler, - ) - }) - r.Use(c.alertmanagerMiddleware.silenceReadMiddlewares...) - r.Use(server.StripTenantPrefixWithSubRoute("/api/metrics/v1", "/am")) - - r.Method(http.MethodGet, AlertmanagerSilencesRoute, proxyAlertmanager) - }) - - r.Group(func(r chi.Router) { - r.Use(func(handler http.Handler) http.Handler { - return server.InjectLabelsCtx( - prometheus.Labels{"group": "metricsv1", "handler": "silences"}, - handler, - ) - }) - r.Use(c.alertmanagerMiddleware.silenceWriteMiddlewares...) - r.Use(WithEnforceTenancyOnSilenceMatchers(c.tenantLabel)) - r.Use(server.StripTenantPrefixWithSubRoute("/api/metrics/v1", "/am")) - - r.Method(http.MethodPost, AlertmanagerSilencesRoute, proxyAlertmanager) - }) - - alertmanagerSilenceTransport := otelhttp.NewTransport(alertmanagerTransport) - enforceTenancyOnSilenceID := WithEnforceTenancyOnSilenceID( - c.tenantLabel, - endpoints.AlertmanagerEndpoint, - alertmanagerSilenceTransport, - ) - - r.Group(func(r chi.Router) { - r.Use(func(handler http.Handler) http.Handler { - return server.InjectLabelsCtx( - prometheus.Labels{"group": "metricsv1", "handler": "silence"}, - handler, - ) - }) - r.Use(enforceTenancyOnSilenceID) - r.Use(c.alertmanagerMiddleware.silenceIDReadMiddlewares...) - r.Use(server.StripTenantPrefixWithSubRoute("/api/metrics/v1", "/am")) - - r.Method(http.MethodGet, AlertmanagerSilenceRoute, proxyAlertmanager) - }) - - r.Group(func(r chi.Router) { - r.Use(func(handler http.Handler) http.Handler { - return server.InjectLabelsCtx( - prometheus.Labels{"group": "metricsv1", "handler": "silence"}, - handler, - ) - }) - r.Use(enforceTenancyOnSilenceID) - r.Use(c.alertmanagerMiddleware.silenceIDWriteMiddlewares...) - r.Use(server.StripTenantPrefixWithSubRoute("/api/metrics/v1", "/am")) - - r.Method(http.MethodDelete, AlertmanagerSilenceRoute, proxyAlertmanager) - }) - } - return r } diff --git a/client/client.gen.go b/client/client.gen.go index bcd4e8b95..2e78e6af2 100644 --- a/client/client.gen.go +++ b/client/client.gen.go @@ -540,6 +540,39 @@ type StartTS = string // Tenant defines model for tenant. type Tenant = string +// GetAlertsParams defines parameters for GetAlerts. +type GetAlertsParams struct { + // Active Include active alerts in results. If false, excludes active alerts and returns only suppressed (silenced or inhibited) alerts. + Active *bool `form:"active,omitempty" json:"active,omitempty"` + + // Silenced Include silenced alerts in results. If false, excludes silenced alerts. Note that true (default) shows both silenced and non-silenced alerts. + Silenced *bool `form:"silenced,omitempty" json:"silenced,omitempty"` + + // Inhibited Include inhibited alerts in results. If false, excludes inhibited alerts. Note that true (default) shows both inhibited and non-inhibited alerts. + Inhibited *bool `form:"inhibited,omitempty" json:"inhibited,omitempty"` + + // Unprocessed Include unprocessed alerts in results. If false, excludes unprocessed alerts. Note that true (default) shows both processed and unprocessed alerts. + Unprocessed *bool `form:"unprocessed,omitempty" json:"unprocessed,omitempty"` + + // Receiver A regex matching receivers to filter alerts by + Receiver *string `form:"receiver,omitempty" json:"receiver,omitempty"` + + // Filter A matcher expression to filter alerts. For example `alertname="MyAlert"`. It can be repeated to apply multiple matchers. + Filter *[]string `form:"filter,omitempty" json:"filter,omitempty"` +} + +// GetSilencesParams defines parameters for GetSilences. +type GetSilencesParams struct { + // Filter A matcher expression to filter silences. For example `alertname="MyAlert"`. It can be repeated to apply multiple matchers. + Filter *[]string `form:"filter,omitempty" json:"filter,omitempty"` +} + +// PostSilenceParams defines parameters for PostSilence. +type PostSilenceParams struct { + // Filter A matcher expression to filter silences. For example `alertname="MyAlert"`. It can be repeated to apply multiple matchers. + Filter *[]string `form:"filter,omitempty" json:"filter,omitempty"` +} + // GetLogLabelValuesParams defines parameters for GetLogLabelValues. type GetLogLabelValuesParams struct { // Start Start timestamp @@ -640,39 +673,6 @@ type GetLogsParams struct { Delay *int `form:"delay,omitempty" json:"delay,omitempty"` } -// GetAlertsParams defines parameters for GetAlerts. -type GetAlertsParams struct { - // Active Include active alerts in results. If false, excludes active alerts and returns only suppressed (silenced or inhibited) alerts. - Active *bool `form:"active,omitempty" json:"active,omitempty"` - - // Silenced Include silenced alerts in results. If false, excludes silenced alerts. Note that true (default) shows both silenced and non-silenced alerts. - Silenced *bool `form:"silenced,omitempty" json:"silenced,omitempty"` - - // Inhibited Include inhibited alerts in results. If false, excludes inhibited alerts. Note that true (default) shows both inhibited and non-inhibited alerts. - Inhibited *bool `form:"inhibited,omitempty" json:"inhibited,omitempty"` - - // Unprocessed Include unprocessed alerts in results. If false, excludes unprocessed alerts. Note that true (default) shows both processed and unprocessed alerts. - Unprocessed *bool `form:"unprocessed,omitempty" json:"unprocessed,omitempty"` - - // Receiver A regex matching receivers to filter alerts by - Receiver *string `form:"receiver,omitempty" json:"receiver,omitempty"` - - // Filter A matcher expression to filter alerts. For example `alertname="MyAlert"`. It can be repeated to apply multiple matchers. - Filter *[]string `form:"filter,omitempty" json:"filter,omitempty"` -} - -// GetSilencesParams defines parameters for GetSilences. -type GetSilencesParams struct { - // Filter A matcher expression to filter silences. For example `alertname="MyAlert"`. It can be repeated to apply multiple matchers. - Filter *[]string `form:"filter,omitempty" json:"filter,omitempty"` -} - -// PostSilenceParams defines parameters for PostSilence. -type PostSilenceParams struct { - // Filter A matcher expression to filter silences. For example `alertname="MyAlert"`. It can be repeated to apply multiple matchers. - Filter *[]string `form:"filter,omitempty" json:"filter,omitempty"` -} - // GetLabelValuesParams defines parameters for GetLabelValues. type GetLabelValuesParams struct { // Match Repeated series selector argument @@ -760,15 +760,15 @@ type GetSeriesParams struct { End *EndTS `form:"end,omitempty" json:"end,omitempty"` } +// PostSilenceJSONRequestBody defines body for PostSilence for application/json ContentType. +type PostSilenceJSONRequestBody = PostableSilence + // PostlogEntriesJSONRequestBody defines body for PostlogEntries for application/json ContentType. type PostlogEntriesJSONRequestBody = PushLogs // PostLogSeriesFormdataRequestBody defines body for PostLogSeries for application/x-www-form-urlencoded ContentType. type PostLogSeriesFormdataRequestBody PostLogSeriesFormdataBody -// PostSilenceJSONRequestBody defines body for PostSilence for application/json ContentType. -type PostSilenceJSONRequestBody = PostableSilence - // AsRangeVectors returns the union data inside the LogInstantQueryResponse_Result_Item as a RangeVectors func (t LogInstantQueryResponse_Result_Item) AsRangeVectors() (RangeVectors, error) { var body RangeVectors @@ -1328,6 +1328,23 @@ func WithRequestEditorFn(fn RequestEditorFn) ClientOption { // The interface specification for the client above. type ClientInterface interface { + // GetAlerts request + GetAlerts(ctx context.Context, tenant Tenant, params *GetAlertsParams, reqEditors ...RequestEditorFn) (*http.Response, error) + + // DeleteSilence request + DeleteSilence(ctx context.Context, tenant Tenant, silenceID openapi_types.UUID, reqEditors ...RequestEditorFn) (*http.Response, error) + + // GetSilence request + GetSilence(ctx context.Context, tenant Tenant, silenceID openapi_types.UUID, reqEditors ...RequestEditorFn) (*http.Response, error) + + // GetSilences request + GetSilences(ctx context.Context, tenant Tenant, params *GetSilencesParams, reqEditors ...RequestEditorFn) (*http.Response, error) + + // PostSilenceWithBody request with any body + PostSilenceWithBody(ctx context.Context, tenant Tenant, params *PostSilenceParams, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) + + PostSilence(ctx context.Context, tenant Tenant, params *PostSilenceParams, body PostSilenceJSONRequestBody, reqEditors ...RequestEditorFn) (*http.Response, error) + // GetLogLabelValues request GetLogLabelValues(ctx context.Context, tenant Tenant, name string, params *GetLogLabelValuesParams, reqEditors ...RequestEditorFn) (*http.Response, error) @@ -1380,23 +1397,6 @@ type ClientInterface interface { // GetLogsPromRules request GetLogsPromRules(ctx context.Context, tenant Tenant, reqEditors ...RequestEditorFn) (*http.Response, error) - // GetAlerts request - GetAlerts(ctx context.Context, tenant Tenant, params *GetAlertsParams, reqEditors ...RequestEditorFn) (*http.Response, error) - - // DeleteSilence request - DeleteSilence(ctx context.Context, tenant Tenant, silenceID openapi_types.UUID, reqEditors ...RequestEditorFn) (*http.Response, error) - - // GetSilence request - GetSilence(ctx context.Context, tenant Tenant, silenceID openapi_types.UUID, reqEditors ...RequestEditorFn) (*http.Response, error) - - // GetSilences request - GetSilences(ctx context.Context, tenant Tenant, params *GetSilencesParams, reqEditors ...RequestEditorFn) (*http.Response, error) - - // PostSilenceWithBody request with any body - PostSilenceWithBody(ctx context.Context, tenant Tenant, params *PostSilenceParams, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) - - PostSilence(ctx context.Context, tenant Tenant, params *PostSilenceParams, body PostSilenceJSONRequestBody, reqEditors ...RequestEditorFn) (*http.Response, error) - // GetLabelValues request GetLabelValues(ctx context.Context, tenant Tenant, labelName string, params *GetLabelValuesParams, reqEditors ...RequestEditorFn) (*http.Response, error) @@ -1422,8 +1422,8 @@ type ClientInterface interface { GetSeries(ctx context.Context, tenant Tenant, params *GetSeriesParams, reqEditors ...RequestEditorFn) (*http.Response, error) } -func (c *Client) GetLogLabelValues(ctx context.Context, tenant Tenant, name string, params *GetLogLabelValuesParams, reqEditors ...RequestEditorFn) (*http.Response, error) { - req, err := NewGetLogLabelValuesRequest(c.Server, tenant, name, params) +func (c *Client) GetAlerts(ctx context.Context, tenant Tenant, params *GetAlertsParams, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewGetAlertsRequest(c.Server, tenant, params) if err != nil { return nil, err } @@ -1434,8 +1434,8 @@ func (c *Client) GetLogLabelValues(ctx context.Context, tenant Tenant, name stri return c.Client.Do(req) } -func (c *Client) GetLogLabels(ctx context.Context, tenant Tenant, params *GetLogLabelsParams, reqEditors ...RequestEditorFn) (*http.Response, error) { - req, err := NewGetLogLabelsRequest(c.Server, tenant, params) +func (c *Client) DeleteSilence(ctx context.Context, tenant Tenant, silenceID openapi_types.UUID, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewDeleteSilenceRequest(c.Server, tenant, silenceID) if err != nil { return nil, err } @@ -1446,8 +1446,8 @@ func (c *Client) GetLogLabels(ctx context.Context, tenant Tenant, params *GetLog return c.Client.Do(req) } -func (c *Client) PostlogEntriesWithBody(ctx context.Context, tenant Tenant, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) { - req, err := NewPostlogEntriesRequestWithBody(c.Server, tenant, contentType, body) +func (c *Client) GetSilence(ctx context.Context, tenant Tenant, silenceID openapi_types.UUID, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewGetSilenceRequest(c.Server, tenant, silenceID) if err != nil { return nil, err } @@ -1458,8 +1458,8 @@ func (c *Client) PostlogEntriesWithBody(ctx context.Context, tenant Tenant, cont return c.Client.Do(req) } -func (c *Client) PostlogEntries(ctx context.Context, tenant Tenant, body PostlogEntriesJSONRequestBody, reqEditors ...RequestEditorFn) (*http.Response, error) { - req, err := NewPostlogEntriesRequest(c.Server, tenant, body) +func (c *Client) GetSilences(ctx context.Context, tenant Tenant, params *GetSilencesParams, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewGetSilencesRequest(c.Server, tenant, params) if err != nil { return nil, err } @@ -1470,8 +1470,8 @@ func (c *Client) PostlogEntries(ctx context.Context, tenant Tenant, body Postlog return c.Client.Do(req) } -func (c *Client) GetLogInstantQuery(ctx context.Context, tenant Tenant, params *GetLogInstantQueryParams, reqEditors ...RequestEditorFn) (*http.Response, error) { - req, err := NewGetLogInstantQueryRequest(c.Server, tenant, params) +func (c *Client) PostSilenceWithBody(ctx context.Context, tenant Tenant, params *PostSilenceParams, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewPostSilenceRequestWithBody(c.Server, tenant, params, contentType, body) if err != nil { return nil, err } @@ -1482,8 +1482,8 @@ func (c *Client) GetLogInstantQuery(ctx context.Context, tenant Tenant, params * return c.Client.Do(req) } -func (c *Client) GetLogRangeQuery(ctx context.Context, tenant Tenant, params *GetLogRangeQueryParams, reqEditors ...RequestEditorFn) (*http.Response, error) { - req, err := NewGetLogRangeQueryRequest(c.Server, tenant, params) +func (c *Client) PostSilence(ctx context.Context, tenant Tenant, params *PostSilenceParams, body PostSilenceJSONRequestBody, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewPostSilenceRequest(c.Server, tenant, params, body) if err != nil { return nil, err } @@ -1494,8 +1494,8 @@ func (c *Client) GetLogRangeQuery(ctx context.Context, tenant Tenant, params *Ge return c.Client.Do(req) } -func (c *Client) GetAllLogsRules(ctx context.Context, tenant Tenant, reqEditors ...RequestEditorFn) (*http.Response, error) { - req, err := NewGetAllLogsRulesRequest(c.Server, tenant) +func (c *Client) GetLogLabelValues(ctx context.Context, tenant Tenant, name string, params *GetLogLabelValuesParams, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewGetLogLabelValuesRequest(c.Server, tenant, name, params) if err != nil { return nil, err } @@ -1506,8 +1506,8 @@ func (c *Client) GetAllLogsRules(ctx context.Context, tenant Tenant, reqEditors return c.Client.Do(req) } -func (c *Client) DeleteLogsRules(ctx context.Context, tenant Tenant, namespace LogRulesNamespace, reqEditors ...RequestEditorFn) (*http.Response, error) { - req, err := NewDeleteLogsRulesRequest(c.Server, tenant, namespace) +func (c *Client) GetLogLabels(ctx context.Context, tenant Tenant, params *GetLogLabelsParams, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewGetLogLabelsRequest(c.Server, tenant, params) if err != nil { return nil, err } @@ -1518,8 +1518,8 @@ func (c *Client) DeleteLogsRules(ctx context.Context, tenant Tenant, namespace L return c.Client.Do(req) } -func (c *Client) GetLogsRules(ctx context.Context, tenant Tenant, namespace LogRulesNamespace, reqEditors ...RequestEditorFn) (*http.Response, error) { - req, err := NewGetLogsRulesRequest(c.Server, tenant, namespace) +func (c *Client) PostlogEntriesWithBody(ctx context.Context, tenant Tenant, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewPostlogEntriesRequestWithBody(c.Server, tenant, contentType, body) if err != nil { return nil, err } @@ -1530,8 +1530,8 @@ func (c *Client) GetLogsRules(ctx context.Context, tenant Tenant, namespace LogR return c.Client.Do(req) } -func (c *Client) SetLogsRulesWithBody(ctx context.Context, tenant Tenant, namespace LogRulesNamespace, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) { - req, err := NewSetLogsRulesRequestWithBody(c.Server, tenant, namespace, contentType, body) +func (c *Client) PostlogEntries(ctx context.Context, tenant Tenant, body PostlogEntriesJSONRequestBody, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewPostlogEntriesRequest(c.Server, tenant, body) if err != nil { return nil, err } @@ -1542,8 +1542,8 @@ func (c *Client) SetLogsRulesWithBody(ctx context.Context, tenant Tenant, namesp return c.Client.Do(req) } -func (c *Client) DeleteLogsRulesGroup(ctx context.Context, tenant Tenant, namespace LogRulesNamespace, group LogRulesGroup, reqEditors ...RequestEditorFn) (*http.Response, error) { - req, err := NewDeleteLogsRulesGroupRequest(c.Server, tenant, namespace, group) +func (c *Client) GetLogInstantQuery(ctx context.Context, tenant Tenant, params *GetLogInstantQueryParams, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewGetLogInstantQueryRequest(c.Server, tenant, params) if err != nil { return nil, err } @@ -1554,8 +1554,8 @@ func (c *Client) DeleteLogsRulesGroup(ctx context.Context, tenant Tenant, namesp return c.Client.Do(req) } -func (c *Client) GetLogsRulesGroup(ctx context.Context, tenant Tenant, namespace LogRulesNamespace, group LogRulesGroup, reqEditors ...RequestEditorFn) (*http.Response, error) { - req, err := NewGetLogsRulesGroupRequest(c.Server, tenant, namespace, group) +func (c *Client) GetLogRangeQuery(ctx context.Context, tenant Tenant, params *GetLogRangeQueryParams, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewGetLogRangeQueryRequest(c.Server, tenant, params) if err != nil { return nil, err } @@ -1566,8 +1566,8 @@ func (c *Client) GetLogsRulesGroup(ctx context.Context, tenant Tenant, namespace return c.Client.Do(req) } -func (c *Client) GetLogSeries(ctx context.Context, tenant Tenant, params *GetLogSeriesParams, reqEditors ...RequestEditorFn) (*http.Response, error) { - req, err := NewGetLogSeriesRequest(c.Server, tenant, params) +func (c *Client) GetAllLogsRules(ctx context.Context, tenant Tenant, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewGetAllLogsRulesRequest(c.Server, tenant) if err != nil { return nil, err } @@ -1578,8 +1578,8 @@ func (c *Client) GetLogSeries(ctx context.Context, tenant Tenant, params *GetLog return c.Client.Do(req) } -func (c *Client) PostLogSeriesWithBody(ctx context.Context, tenant Tenant, params *PostLogSeriesParams, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) { - req, err := NewPostLogSeriesRequestWithBody(c.Server, tenant, params, contentType, body) +func (c *Client) DeleteLogsRules(ctx context.Context, tenant Tenant, namespace LogRulesNamespace, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewDeleteLogsRulesRequest(c.Server, tenant, namespace) if err != nil { return nil, err } @@ -1590,8 +1590,8 @@ func (c *Client) PostLogSeriesWithBody(ctx context.Context, tenant Tenant, param return c.Client.Do(req) } -func (c *Client) PostLogSeriesWithFormdataBody(ctx context.Context, tenant Tenant, params *PostLogSeriesParams, body PostLogSeriesFormdataRequestBody, reqEditors ...RequestEditorFn) (*http.Response, error) { - req, err := NewPostLogSeriesRequestWithFormdataBody(c.Server, tenant, params, body) +func (c *Client) GetLogsRules(ctx context.Context, tenant Tenant, namespace LogRulesNamespace, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewGetLogsRulesRequest(c.Server, tenant, namespace) if err != nil { return nil, err } @@ -1602,8 +1602,8 @@ func (c *Client) PostLogSeriesWithFormdataBody(ctx context.Context, tenant Tenan return c.Client.Do(req) } -func (c *Client) GetLogs(ctx context.Context, tenant Tenant, params *GetLogsParams, reqEditors ...RequestEditorFn) (*http.Response, error) { - req, err := NewGetLogsRequest(c.Server, tenant, params) +func (c *Client) SetLogsRulesWithBody(ctx context.Context, tenant Tenant, namespace LogRulesNamespace, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewSetLogsRulesRequestWithBody(c.Server, tenant, namespace, contentType, body) if err != nil { return nil, err } @@ -1614,8 +1614,8 @@ func (c *Client) GetLogs(ctx context.Context, tenant Tenant, params *GetLogsPara return c.Client.Do(req) } -func (c *Client) GetLogsPromAlerts(ctx context.Context, tenant Tenant, reqEditors ...RequestEditorFn) (*http.Response, error) { - req, err := NewGetLogsPromAlertsRequest(c.Server, tenant) +func (c *Client) DeleteLogsRulesGroup(ctx context.Context, tenant Tenant, namespace LogRulesNamespace, group LogRulesGroup, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewDeleteLogsRulesGroupRequest(c.Server, tenant, namespace, group) if err != nil { return nil, err } @@ -1626,8 +1626,8 @@ func (c *Client) GetLogsPromAlerts(ctx context.Context, tenant Tenant, reqEditor return c.Client.Do(req) } -func (c *Client) GetLogsPromRules(ctx context.Context, tenant Tenant, reqEditors ...RequestEditorFn) (*http.Response, error) { - req, err := NewGetLogsPromRulesRequest(c.Server, tenant) +func (c *Client) GetLogsRulesGroup(ctx context.Context, tenant Tenant, namespace LogRulesNamespace, group LogRulesGroup, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewGetLogsRulesGroupRequest(c.Server, tenant, namespace, group) if err != nil { return nil, err } @@ -1638,8 +1638,8 @@ func (c *Client) GetLogsPromRules(ctx context.Context, tenant Tenant, reqEditors return c.Client.Do(req) } -func (c *Client) GetAlerts(ctx context.Context, tenant Tenant, params *GetAlertsParams, reqEditors ...RequestEditorFn) (*http.Response, error) { - req, err := NewGetAlertsRequest(c.Server, tenant, params) +func (c *Client) GetLogSeries(ctx context.Context, tenant Tenant, params *GetLogSeriesParams, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewGetLogSeriesRequest(c.Server, tenant, params) if err != nil { return nil, err } @@ -1650,8 +1650,8 @@ func (c *Client) GetAlerts(ctx context.Context, tenant Tenant, params *GetAlerts return c.Client.Do(req) } -func (c *Client) DeleteSilence(ctx context.Context, tenant Tenant, silenceID openapi_types.UUID, reqEditors ...RequestEditorFn) (*http.Response, error) { - req, err := NewDeleteSilenceRequest(c.Server, tenant, silenceID) +func (c *Client) PostLogSeriesWithBody(ctx context.Context, tenant Tenant, params *PostLogSeriesParams, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewPostLogSeriesRequestWithBody(c.Server, tenant, params, contentType, body) if err != nil { return nil, err } @@ -1662,8 +1662,8 @@ func (c *Client) DeleteSilence(ctx context.Context, tenant Tenant, silenceID ope return c.Client.Do(req) } -func (c *Client) GetSilence(ctx context.Context, tenant Tenant, silenceID openapi_types.UUID, reqEditors ...RequestEditorFn) (*http.Response, error) { - req, err := NewGetSilenceRequest(c.Server, tenant, silenceID) +func (c *Client) PostLogSeriesWithFormdataBody(ctx context.Context, tenant Tenant, params *PostLogSeriesParams, body PostLogSeriesFormdataRequestBody, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewPostLogSeriesRequestWithFormdataBody(c.Server, tenant, params, body) if err != nil { return nil, err } @@ -1674,8 +1674,8 @@ func (c *Client) GetSilence(ctx context.Context, tenant Tenant, silenceID openap return c.Client.Do(req) } -func (c *Client) GetSilences(ctx context.Context, tenant Tenant, params *GetSilencesParams, reqEditors ...RequestEditorFn) (*http.Response, error) { - req, err := NewGetSilencesRequest(c.Server, tenant, params) +func (c *Client) GetLogs(ctx context.Context, tenant Tenant, params *GetLogsParams, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewGetLogsRequest(c.Server, tenant, params) if err != nil { return nil, err } @@ -1686,8 +1686,8 @@ func (c *Client) GetSilences(ctx context.Context, tenant Tenant, params *GetSile return c.Client.Do(req) } -func (c *Client) PostSilenceWithBody(ctx context.Context, tenant Tenant, params *PostSilenceParams, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) { - req, err := NewPostSilenceRequestWithBody(c.Server, tenant, params, contentType, body) +func (c *Client) GetLogsPromAlerts(ctx context.Context, tenant Tenant, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewGetLogsPromAlertsRequest(c.Server, tenant) if err != nil { return nil, err } @@ -1698,8 +1698,8 @@ func (c *Client) PostSilenceWithBody(ctx context.Context, tenant Tenant, params return c.Client.Do(req) } -func (c *Client) PostSilence(ctx context.Context, tenant Tenant, params *PostSilenceParams, body PostSilenceJSONRequestBody, reqEditors ...RequestEditorFn) (*http.Response, error) { - req, err := NewPostSilenceRequest(c.Server, tenant, params, body) +func (c *Client) GetLogsPromRules(ctx context.Context, tenant Tenant, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewGetLogsPromRulesRequest(c.Server, tenant) if err != nil { return nil, err } @@ -1806,8 +1806,8 @@ func (c *Client) GetSeries(ctx context.Context, tenant Tenant, params *GetSeries return c.Client.Do(req) } -// NewGetLogLabelValuesRequest generates requests for GetLogLabelValues -func NewGetLogLabelValuesRequest(server string, tenant Tenant, name string, params *GetLogLabelValuesParams) (*http.Request, error) { +// NewGetAlertsRequest generates requests for GetAlerts +func NewGetAlertsRequest(server string, tenant Tenant, params *GetAlertsParams) (*http.Request, error) { var err error var pathParam0 string @@ -1817,19 +1817,12 @@ func NewGetLogLabelValuesRequest(server string, tenant Tenant, name string, para return nil, err } - var pathParam1 string - - pathParam1, err = runtime.StyleParamWithLocation("simple", false, "name", runtime.ParamLocationPath, name) - if err != nil { - return nil, err - } - serverURL, err := url.Parse(server) if err != nil { return nil, err } - operationPath := fmt.Sprintf("/api/logs/v1/%s/loki/api/v1/label/%s/values", pathParam0, pathParam1) + operationPath := fmt.Sprintf("/api/alerting/v1/%s/api/v2/alerts", pathParam0) if operationPath[0] == '/' { operationPath = "." + operationPath } @@ -1842,9 +1835,9 @@ func NewGetLogLabelValuesRequest(server string, tenant Tenant, name string, para if params != nil { queryValues := queryURL.Query() - if params.Start != nil { + if params.Active != nil { - if queryFrag, err := runtime.StyleParamWithLocation("form", true, "start", runtime.ParamLocationQuery, *params.Start); err != nil { + if queryFrag, err := runtime.StyleParamWithLocation("form", true, "active", runtime.ParamLocationQuery, *params.Active); err != nil { return nil, err } else if parsed, err := url.ParseQuery(queryFrag); err != nil { return nil, err @@ -1858,9 +1851,9 @@ func NewGetLogLabelValuesRequest(server string, tenant Tenant, name string, para } - if params.End != nil { + if params.Silenced != nil { - if queryFrag, err := runtime.StyleParamWithLocation("form", true, "end", runtime.ParamLocationQuery, *params.End); err != nil { + if queryFrag, err := runtime.StyleParamWithLocation("form", true, "silenced", runtime.ParamLocationQuery, *params.Silenced); err != nil { return nil, err } else if parsed, err := url.ParseQuery(queryFrag); err != nil { return nil, err @@ -1874,49 +1867,41 @@ func NewGetLogLabelValuesRequest(server string, tenant Tenant, name string, para } - queryURL.RawQuery = queryValues.Encode() - } - - req, err := http.NewRequest("GET", queryURL.String(), nil) - if err != nil { - return nil, err - } - - return req, nil -} + if params.Inhibited != nil { -// NewGetLogLabelsRequest generates requests for GetLogLabels -func NewGetLogLabelsRequest(server string, tenant Tenant, params *GetLogLabelsParams) (*http.Request, error) { - var err error + if queryFrag, err := runtime.StyleParamWithLocation("form", true, "inhibited", runtime.ParamLocationQuery, *params.Inhibited); err != nil { + return nil, err + } else if parsed, err := url.ParseQuery(queryFrag); err != nil { + return nil, err + } else { + for k, v := range parsed { + for _, v2 := range v { + queryValues.Add(k, v2) + } + } + } - var pathParam0 string + } - pathParam0, err = runtime.StyleParamWithLocation("simple", false, "tenant", runtime.ParamLocationPath, tenant) - if err != nil { - return nil, err - } + if params.Unprocessed != nil { - serverURL, err := url.Parse(server) - if err != nil { - return nil, err - } - - operationPath := fmt.Sprintf("/api/logs/v1/%s/loki/api/v1/labels", pathParam0) - if operationPath[0] == '/' { - operationPath = "." + operationPath - } - - queryURL, err := serverURL.Parse(operationPath) - if err != nil { - return nil, err - } + if queryFrag, err := runtime.StyleParamWithLocation("form", true, "unprocessed", runtime.ParamLocationQuery, *params.Unprocessed); err != nil { + return nil, err + } else if parsed, err := url.ParseQuery(queryFrag); err != nil { + return nil, err + } else { + for k, v := range parsed { + for _, v2 := range v { + queryValues.Add(k, v2) + } + } + } - if params != nil { - queryValues := queryURL.Query() + } - if params.Start != nil { + if params.Receiver != nil { - if queryFrag, err := runtime.StyleParamWithLocation("form", true, "start", runtime.ParamLocationQuery, *params.Start); err != nil { + if queryFrag, err := runtime.StyleParamWithLocation("form", true, "receiver", runtime.ParamLocationQuery, *params.Receiver); err != nil { return nil, err } else if parsed, err := url.ParseQuery(queryFrag); err != nil { return nil, err @@ -1930,9 +1915,9 @@ func NewGetLogLabelsRequest(server string, tenant Tenant, params *GetLogLabelsPa } - if params.End != nil { + if params.Filter != nil { - if queryFrag, err := runtime.StyleParamWithLocation("form", true, "end", runtime.ParamLocationQuery, *params.End); err != nil { + if queryFrag, err := runtime.StyleParamWithLocation("form", true, "filter", runtime.ParamLocationQuery, *params.Filter); err != nil { return nil, err } else if parsed, err := url.ParseQuery(queryFrag); err != nil { return nil, err @@ -1957,19 +1942,49 @@ func NewGetLogLabelsRequest(server string, tenant Tenant, params *GetLogLabelsPa return req, nil } -// NewPostlogEntriesRequest calls the generic PostlogEntries builder with application/json body -func NewPostlogEntriesRequest(server string, tenant Tenant, body PostlogEntriesJSONRequestBody) (*http.Request, error) { - var bodyReader io.Reader - buf, err := json.Marshal(body) +// NewDeleteSilenceRequest generates requests for DeleteSilence +func NewDeleteSilenceRequest(server string, tenant Tenant, silenceID openapi_types.UUID) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParamWithLocation("simple", false, "tenant", runtime.ParamLocationPath, tenant) if err != nil { return nil, err } - bodyReader = bytes.NewReader(buf) - return NewPostlogEntriesRequestWithBody(server, tenant, "application/json", bodyReader) + + var pathParam1 string + + pathParam1, err = runtime.StyleParamWithLocation("simple", false, "silenceID", runtime.ParamLocationPath, silenceID) + if err != nil { + return nil, err + } + + serverURL, err := url.Parse(server) + if err != nil { + return nil, err + } + + operationPath := fmt.Sprintf("/api/alerting/v1/%s/api/v2/silence/%s", pathParam0, pathParam1) + if operationPath[0] == '/' { + operationPath = "." + operationPath + } + + queryURL, err := serverURL.Parse(operationPath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("DELETE", queryURL.String(), nil) + if err != nil { + return nil, err + } + + return req, nil } -// NewPostlogEntriesRequestWithBody generates requests for PostlogEntries with any type of body -func NewPostlogEntriesRequestWithBody(server string, tenant Tenant, contentType string, body io.Reader) (*http.Request, error) { +// NewGetSilenceRequest generates requests for GetSilence +func NewGetSilenceRequest(server string, tenant Tenant, silenceID openapi_types.UUID) (*http.Request, error) { var err error var pathParam0 string @@ -1979,12 +1994,19 @@ func NewPostlogEntriesRequestWithBody(server string, tenant Tenant, contentType return nil, err } + var pathParam1 string + + pathParam1, err = runtime.StyleParamWithLocation("simple", false, "silenceID", runtime.ParamLocationPath, silenceID) + if err != nil { + return nil, err + } + serverURL, err := url.Parse(server) if err != nil { return nil, err } - operationPath := fmt.Sprintf("/api/logs/v1/%s/loki/api/v1/push", pathParam0) + operationPath := fmt.Sprintf("/api/alerting/v1/%s/api/v2/silence/%s", pathParam0, pathParam1) if operationPath[0] == '/' { operationPath = "." + operationPath } @@ -1994,18 +2016,16 @@ func NewPostlogEntriesRequestWithBody(server string, tenant Tenant, contentType return nil, err } - req, err := http.NewRequest("POST", queryURL.String(), body) + req, err := http.NewRequest("GET", queryURL.String(), nil) if err != nil { return nil, err } - req.Header.Add("Content-Type", contentType) - return req, nil } -// NewGetLogInstantQueryRequest generates requests for GetLogInstantQuery -func NewGetLogInstantQueryRequest(server string, tenant Tenant, params *GetLogInstantQueryParams) (*http.Request, error) { +// NewGetSilencesRequest generates requests for GetSilences +func NewGetSilencesRequest(server string, tenant Tenant, params *GetSilencesParams) (*http.Request, error) { var err error var pathParam0 string @@ -2020,7 +2040,7 @@ func NewGetLogInstantQueryRequest(server string, tenant Tenant, params *GetLogIn return nil, err } - operationPath := fmt.Sprintf("/api/logs/v1/%s/loki/api/v1/query", pathParam0) + operationPath := fmt.Sprintf("/api/alerting/v1/%s/api/v2/silences", pathParam0) if operationPath[0] == '/' { operationPath = "." + operationPath } @@ -2033,9 +2053,9 @@ func NewGetLogInstantQueryRequest(server string, tenant Tenant, params *GetLogIn if params != nil { queryValues := queryURL.Query() - if params.Query != nil { + if params.Filter != nil { - if queryFrag, err := runtime.StyleParamWithLocation("form", true, "query", runtime.ParamLocationQuery, *params.Query); err != nil { + if queryFrag, err := runtime.StyleParamWithLocation("form", true, "filter", runtime.ParamLocationQuery, *params.Filter); err != nil { return nil, err } else if parsed, err := url.ParseQuery(queryFrag); err != nil { return nil, err @@ -2049,41 +2069,60 @@ func NewGetLogInstantQueryRequest(server string, tenant Tenant, params *GetLogIn } - if params.Limit != nil { + queryURL.RawQuery = queryValues.Encode() + } - if queryFrag, err := runtime.StyleParamWithLocation("form", true, "limit", runtime.ParamLocationQuery, *params.Limit); err != nil { - return nil, err - } else if parsed, err := url.ParseQuery(queryFrag); err != nil { - return nil, err - } else { - for k, v := range parsed { - for _, v2 := range v { - queryValues.Add(k, v2) - } - } - } + req, err := http.NewRequest("GET", queryURL.String(), nil) + if err != nil { + return nil, err + } - } + return req, nil +} - if params.Time != nil { +// NewPostSilenceRequest calls the generic PostSilence builder with application/json body +func NewPostSilenceRequest(server string, tenant Tenant, params *PostSilenceParams, body PostSilenceJSONRequestBody) (*http.Request, error) { + var bodyReader io.Reader + buf, err := json.Marshal(body) + if err != nil { + return nil, err + } + bodyReader = bytes.NewReader(buf) + return NewPostSilenceRequestWithBody(server, tenant, params, "application/json", bodyReader) +} - if queryFrag, err := runtime.StyleParamWithLocation("form", true, "time", runtime.ParamLocationQuery, *params.Time); err != nil { - return nil, err - } else if parsed, err := url.ParseQuery(queryFrag); err != nil { - return nil, err - } else { - for k, v := range parsed { - for _, v2 := range v { - queryValues.Add(k, v2) - } - } - } +// NewPostSilenceRequestWithBody generates requests for PostSilence with any type of body +func NewPostSilenceRequestWithBody(server string, tenant Tenant, params *PostSilenceParams, contentType string, body io.Reader) (*http.Request, error) { + var err error - } + var pathParam0 string - if params.Direction != nil { + pathParam0, err = runtime.StyleParamWithLocation("simple", false, "tenant", runtime.ParamLocationPath, tenant) + if err != nil { + return nil, err + } - if queryFrag, err := runtime.StyleParamWithLocation("form", true, "direction", runtime.ParamLocationQuery, *params.Direction); err != nil { + serverURL, err := url.Parse(server) + if err != nil { + return nil, err + } + + operationPath := fmt.Sprintf("/api/alerting/v1/%s/api/v2/silences", pathParam0) + if operationPath[0] == '/' { + operationPath = "." + operationPath + } + + queryURL, err := serverURL.Parse(operationPath) + if err != nil { + return nil, err + } + + if params != nil { + queryValues := queryURL.Query() + + if params.Filter != nil { + + if queryFrag, err := runtime.StyleParamWithLocation("form", true, "filter", runtime.ParamLocationQuery, *params.Filter); err != nil { return nil, err } else if parsed, err := url.ParseQuery(queryFrag); err != nil { return nil, err @@ -2100,16 +2139,18 @@ func NewGetLogInstantQueryRequest(server string, tenant Tenant, params *GetLogIn queryURL.RawQuery = queryValues.Encode() } - req, err := http.NewRequest("GET", queryURL.String(), nil) + req, err := http.NewRequest("POST", queryURL.String(), body) if err != nil { return nil, err } + req.Header.Add("Content-Type", contentType) + return req, nil } -// NewGetLogRangeQueryRequest generates requests for GetLogRangeQuery -func NewGetLogRangeQueryRequest(server string, tenant Tenant, params *GetLogRangeQueryParams) (*http.Request, error) { +// NewGetLogLabelValuesRequest generates requests for GetLogLabelValues +func NewGetLogLabelValuesRequest(server string, tenant Tenant, name string, params *GetLogLabelValuesParams) (*http.Request, error) { var err error var pathParam0 string @@ -2119,12 +2160,19 @@ func NewGetLogRangeQueryRequest(server string, tenant Tenant, params *GetLogRang return nil, err } + var pathParam1 string + + pathParam1, err = runtime.StyleParamWithLocation("simple", false, "name", runtime.ParamLocationPath, name) + if err != nil { + return nil, err + } + serverURL, err := url.Parse(server) if err != nil { return nil, err } - operationPath := fmt.Sprintf("/api/logs/v1/%s/loki/api/v1/query_range", pathParam0) + operationPath := fmt.Sprintf("/api/logs/v1/%s/loki/api/v1/label/%s/values", pathParam0, pathParam1) if operationPath[0] == '/' { operationPath = "." + operationPath } @@ -2137,22 +2185,6 @@ func NewGetLogRangeQueryRequest(server string, tenant Tenant, params *GetLogRang if params != nil { queryValues := queryURL.Query() - if params.Query != nil { - - if queryFrag, err := runtime.StyleParamWithLocation("form", true, "query", runtime.ParamLocationQuery, *params.Query); err != nil { - return nil, err - } else if parsed, err := url.ParseQuery(queryFrag); err != nil { - return nil, err - } else { - for k, v := range parsed { - for _, v2 := range v { - queryValues.Add(k, v2) - } - } - } - - } - if params.Start != nil { if queryFrag, err := runtime.StyleParamWithLocation("form", true, "start", runtime.ParamLocationQuery, *params.Start); err != nil { @@ -2185,9 +2217,49 @@ func NewGetLogRangeQueryRequest(server string, tenant Tenant, params *GetLogRang } - if params.Limit != nil { + queryURL.RawQuery = queryValues.Encode() + } - if queryFrag, err := runtime.StyleParamWithLocation("form", true, "limit", runtime.ParamLocationQuery, *params.Limit); err != nil { + req, err := http.NewRequest("GET", queryURL.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewGetLogLabelsRequest generates requests for GetLogLabels +func NewGetLogLabelsRequest(server string, tenant Tenant, params *GetLogLabelsParams) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParamWithLocation("simple", false, "tenant", runtime.ParamLocationPath, tenant) + if err != nil { + return nil, err + } + + serverURL, err := url.Parse(server) + if err != nil { + return nil, err + } + + operationPath := fmt.Sprintf("/api/logs/v1/%s/loki/api/v1/labels", pathParam0) + if operationPath[0] == '/' { + operationPath = "." + operationPath + } + + queryURL, err := serverURL.Parse(operationPath) + if err != nil { + return nil, err + } + + if params != nil { + queryValues := queryURL.Query() + + if params.Start != nil { + + if queryFrag, err := runtime.StyleParamWithLocation("form", true, "start", runtime.ParamLocationQuery, *params.Start); err != nil { return nil, err } else if parsed, err := url.ParseQuery(queryFrag); err != nil { return nil, err @@ -2201,41 +2273,9 @@ func NewGetLogRangeQueryRequest(server string, tenant Tenant, params *GetLogRang } - if params.Step != nil { + if params.End != nil { - if queryFrag, err := runtime.StyleParamWithLocation("form", true, "step", runtime.ParamLocationQuery, *params.Step); err != nil { - return nil, err - } else if parsed, err := url.ParseQuery(queryFrag); err != nil { - return nil, err - } else { - for k, v := range parsed { - for _, v2 := range v { - queryValues.Add(k, v2) - } - } - } - - } - - if params.Interval != nil { - - if queryFrag, err := runtime.StyleParamWithLocation("form", true, "interval", runtime.ParamLocationQuery, *params.Interval); err != nil { - return nil, err - } else if parsed, err := url.ParseQuery(queryFrag); err != nil { - return nil, err - } else { - for k, v := range parsed { - for _, v2 := range v { - queryValues.Add(k, v2) - } - } - } - - } - - if params.Direction != nil { - - if queryFrag, err := runtime.StyleParamWithLocation("form", true, "direction", runtime.ParamLocationQuery, *params.Direction); err != nil { + if queryFrag, err := runtime.StyleParamWithLocation("form", true, "end", runtime.ParamLocationQuery, *params.End); err != nil { return nil, err } else if parsed, err := url.ParseQuery(queryFrag); err != nil { return nil, err @@ -2260,42 +2300,19 @@ func NewGetLogRangeQueryRequest(server string, tenant Tenant, params *GetLogRang return req, nil } -// NewGetAllLogsRulesRequest generates requests for GetAllLogsRules -func NewGetAllLogsRulesRequest(server string, tenant Tenant) (*http.Request, error) { - var err error - - var pathParam0 string - - pathParam0, err = runtime.StyleParamWithLocation("simple", false, "tenant", runtime.ParamLocationPath, tenant) - if err != nil { - return nil, err - } - - serverURL, err := url.Parse(server) - if err != nil { - return nil, err - } - - operationPath := fmt.Sprintf("/api/logs/v1/%s/loki/api/v1/rules", pathParam0) - if operationPath[0] == '/' { - operationPath = "." + operationPath - } - - queryURL, err := serverURL.Parse(operationPath) - if err != nil { - return nil, err - } - - req, err := http.NewRequest("GET", queryURL.String(), nil) +// NewPostlogEntriesRequest calls the generic PostlogEntries builder with application/json body +func NewPostlogEntriesRequest(server string, tenant Tenant, body PostlogEntriesJSONRequestBody) (*http.Request, error) { + var bodyReader io.Reader + buf, err := json.Marshal(body) if err != nil { return nil, err } - - return req, nil + bodyReader = bytes.NewReader(buf) + return NewPostlogEntriesRequestWithBody(server, tenant, "application/json", bodyReader) } -// NewDeleteLogsRulesRequest generates requests for DeleteLogsRules -func NewDeleteLogsRulesRequest(server string, tenant Tenant, namespace LogRulesNamespace) (*http.Request, error) { +// NewPostlogEntriesRequestWithBody generates requests for PostlogEntries with any type of body +func NewPostlogEntriesRequestWithBody(server string, tenant Tenant, contentType string, body io.Reader) (*http.Request, error) { var err error var pathParam0 string @@ -2305,19 +2322,12 @@ func NewDeleteLogsRulesRequest(server string, tenant Tenant, namespace LogRulesN return nil, err } - var pathParam1 string - - pathParam1, err = runtime.StyleParamWithLocation("simple", false, "namespace", runtime.ParamLocationPath, namespace) - if err != nil { - return nil, err - } - serverURL, err := url.Parse(server) if err != nil { return nil, err } - operationPath := fmt.Sprintf("/api/logs/v1/%s/loki/api/v1/rules/%s", pathParam0, pathParam1) + operationPath := fmt.Sprintf("/api/logs/v1/%s/loki/api/v1/push", pathParam0) if operationPath[0] == '/' { operationPath = "." + operationPath } @@ -2327,16 +2337,18 @@ func NewDeleteLogsRulesRequest(server string, tenant Tenant, namespace LogRulesN return nil, err } - req, err := http.NewRequest("DELETE", queryURL.String(), nil) + req, err := http.NewRequest("POST", queryURL.String(), body) if err != nil { return nil, err } + req.Header.Add("Content-Type", contentType) + return req, nil } -// NewGetLogsRulesRequest generates requests for GetLogsRules -func NewGetLogsRulesRequest(server string, tenant Tenant, namespace LogRulesNamespace) (*http.Request, error) { +// NewGetLogInstantQueryRequest generates requests for GetLogInstantQuery +func NewGetLogInstantQueryRequest(server string, tenant Tenant, params *GetLogInstantQueryParams) (*http.Request, error) { var err error var pathParam0 string @@ -2346,19 +2358,12 @@ func NewGetLogsRulesRequest(server string, tenant Tenant, namespace LogRulesName return nil, err } - var pathParam1 string - - pathParam1, err = runtime.StyleParamWithLocation("simple", false, "namespace", runtime.ParamLocationPath, namespace) - if err != nil { - return nil, err - } - serverURL, err := url.Parse(server) if err != nil { return nil, err } - operationPath := fmt.Sprintf("/api/logs/v1/%s/loki/api/v1/rules/%s", pathParam0, pathParam1) + operationPath := fmt.Sprintf("/api/logs/v1/%s/loki/api/v1/query", pathParam0) if operationPath[0] == '/' { operationPath = "." + operationPath } @@ -2368,59 +2373,86 @@ func NewGetLogsRulesRequest(server string, tenant Tenant, namespace LogRulesName return nil, err } - req, err := http.NewRequest("GET", queryURL.String(), nil) - if err != nil { - return nil, err - } + if params != nil { + queryValues := queryURL.Query() - return req, nil -} + if params.Query != nil { -// NewSetLogsRulesRequestWithBody generates requests for SetLogsRules with any type of body -func NewSetLogsRulesRequestWithBody(server string, tenant Tenant, namespace LogRulesNamespace, contentType string, body io.Reader) (*http.Request, error) { - var err error + if queryFrag, err := runtime.StyleParamWithLocation("form", true, "query", runtime.ParamLocationQuery, *params.Query); err != nil { + return nil, err + } else if parsed, err := url.ParseQuery(queryFrag); err != nil { + return nil, err + } else { + for k, v := range parsed { + for _, v2 := range v { + queryValues.Add(k, v2) + } + } + } - var pathParam0 string + } - pathParam0, err = runtime.StyleParamWithLocation("simple", false, "tenant", runtime.ParamLocationPath, tenant) - if err != nil { - return nil, err - } + if params.Limit != nil { - var pathParam1 string + if queryFrag, err := runtime.StyleParamWithLocation("form", true, "limit", runtime.ParamLocationQuery, *params.Limit); err != nil { + return nil, err + } else if parsed, err := url.ParseQuery(queryFrag); err != nil { + return nil, err + } else { + for k, v := range parsed { + for _, v2 := range v { + queryValues.Add(k, v2) + } + } + } - pathParam1, err = runtime.StyleParamWithLocation("simple", false, "namespace", runtime.ParamLocationPath, namespace) - if err != nil { - return nil, err - } + } - serverURL, err := url.Parse(server) - if err != nil { - return nil, err - } + if params.Time != nil { - operationPath := fmt.Sprintf("/api/logs/v1/%s/loki/api/v1/rules/%s", pathParam0, pathParam1) - if operationPath[0] == '/' { - operationPath = "." + operationPath - } + if queryFrag, err := runtime.StyleParamWithLocation("form", true, "time", runtime.ParamLocationQuery, *params.Time); err != nil { + return nil, err + } else if parsed, err := url.ParseQuery(queryFrag); err != nil { + return nil, err + } else { + for k, v := range parsed { + for _, v2 := range v { + queryValues.Add(k, v2) + } + } + } - queryURL, err := serverURL.Parse(operationPath) - if err != nil { - return nil, err + } + + if params.Direction != nil { + + if queryFrag, err := runtime.StyleParamWithLocation("form", true, "direction", runtime.ParamLocationQuery, *params.Direction); err != nil { + return nil, err + } else if parsed, err := url.ParseQuery(queryFrag); err != nil { + return nil, err + } else { + for k, v := range parsed { + for _, v2 := range v { + queryValues.Add(k, v2) + } + } + } + + } + + queryURL.RawQuery = queryValues.Encode() } - req, err := http.NewRequest("POST", queryURL.String(), body) + req, err := http.NewRequest("GET", queryURL.String(), nil) if err != nil { return nil, err } - req.Header.Add("Content-Type", contentType) - return req, nil } -// NewDeleteLogsRulesGroupRequest generates requests for DeleteLogsRulesGroup -func NewDeleteLogsRulesGroupRequest(server string, tenant Tenant, namespace LogRulesNamespace, group LogRulesGroup) (*http.Request, error) { +// NewGetLogRangeQueryRequest generates requests for GetLogRangeQuery +func NewGetLogRangeQueryRequest(server string, tenant Tenant, params *GetLogRangeQueryParams) (*http.Request, error) { var err error var pathParam0 string @@ -2430,26 +2462,12 @@ func NewDeleteLogsRulesGroupRequest(server string, tenant Tenant, namespace LogR return nil, err } - var pathParam1 string - - pathParam1, err = runtime.StyleParamWithLocation("simple", false, "namespace", runtime.ParamLocationPath, namespace) - if err != nil { - return nil, err - } - - var pathParam2 string - - pathParam2, err = runtime.StyleParamWithLocation("simple", false, "group", runtime.ParamLocationPath, group) - if err != nil { - return nil, err - } - serverURL, err := url.Parse(server) if err != nil { return nil, err } - operationPath := fmt.Sprintf("/api/logs/v1/%s/loki/api/v1/rules/%s/%s", pathParam0, pathParam1, pathParam2) + operationPath := fmt.Sprintf("/api/logs/v1/%s/loki/api/v1/query_range", pathParam0) if operationPath[0] == '/' { operationPath = "." + operationPath } @@ -2459,106 +2477,92 @@ func NewDeleteLogsRulesGroupRequest(server string, tenant Tenant, namespace LogR return nil, err } - req, err := http.NewRequest("DELETE", queryURL.String(), nil) - if err != nil { - return nil, err - } - - return req, nil -} - -// NewGetLogsRulesGroupRequest generates requests for GetLogsRulesGroup -func NewGetLogsRulesGroupRequest(server string, tenant Tenant, namespace LogRulesNamespace, group LogRulesGroup) (*http.Request, error) { - var err error - - var pathParam0 string - - pathParam0, err = runtime.StyleParamWithLocation("simple", false, "tenant", runtime.ParamLocationPath, tenant) - if err != nil { - return nil, err - } - - var pathParam1 string - - pathParam1, err = runtime.StyleParamWithLocation("simple", false, "namespace", runtime.ParamLocationPath, namespace) - if err != nil { - return nil, err - } - - var pathParam2 string + if params != nil { + queryValues := queryURL.Query() - pathParam2, err = runtime.StyleParamWithLocation("simple", false, "group", runtime.ParamLocationPath, group) - if err != nil { - return nil, err - } + if params.Query != nil { - serverURL, err := url.Parse(server) - if err != nil { - return nil, err - } + if queryFrag, err := runtime.StyleParamWithLocation("form", true, "query", runtime.ParamLocationQuery, *params.Query); err != nil { + return nil, err + } else if parsed, err := url.ParseQuery(queryFrag); err != nil { + return nil, err + } else { + for k, v := range parsed { + for _, v2 := range v { + queryValues.Add(k, v2) + } + } + } - operationPath := fmt.Sprintf("/api/logs/v1/%s/loki/api/v1/rules/%s/%s", pathParam0, pathParam1, pathParam2) - if operationPath[0] == '/' { - operationPath = "." + operationPath - } + } - queryURL, err := serverURL.Parse(operationPath) - if err != nil { - return nil, err - } + if params.Start != nil { - req, err := http.NewRequest("GET", queryURL.String(), nil) - if err != nil { - return nil, err - } + if queryFrag, err := runtime.StyleParamWithLocation("form", true, "start", runtime.ParamLocationQuery, *params.Start); err != nil { + return nil, err + } else if parsed, err := url.ParseQuery(queryFrag); err != nil { + return nil, err + } else { + for k, v := range parsed { + for _, v2 := range v { + queryValues.Add(k, v2) + } + } + } - return req, nil -} + } -// NewGetLogSeriesRequest generates requests for GetLogSeries -func NewGetLogSeriesRequest(server string, tenant Tenant, params *GetLogSeriesParams) (*http.Request, error) { - var err error + if params.End != nil { - var pathParam0 string + if queryFrag, err := runtime.StyleParamWithLocation("form", true, "end", runtime.ParamLocationQuery, *params.End); err != nil { + return nil, err + } else if parsed, err := url.ParseQuery(queryFrag); err != nil { + return nil, err + } else { + for k, v := range parsed { + for _, v2 := range v { + queryValues.Add(k, v2) + } + } + } - pathParam0, err = runtime.StyleParamWithLocation("simple", false, "tenant", runtime.ParamLocationPath, tenant) - if err != nil { - return nil, err - } + } - serverURL, err := url.Parse(server) - if err != nil { - return nil, err - } + if params.Limit != nil { - operationPath := fmt.Sprintf("/api/logs/v1/%s/loki/api/v1/series", pathParam0) - if operationPath[0] == '/' { - operationPath = "." + operationPath - } + if queryFrag, err := runtime.StyleParamWithLocation("form", true, "limit", runtime.ParamLocationQuery, *params.Limit); err != nil { + return nil, err + } else if parsed, err := url.ParseQuery(queryFrag); err != nil { + return nil, err + } else { + for k, v := range parsed { + for _, v2 := range v { + queryValues.Add(k, v2) + } + } + } - queryURL, err := serverURL.Parse(operationPath) - if err != nil { - return nil, err - } + } - if params != nil { - queryValues := queryURL.Query() + if params.Step != nil { - if queryFrag, err := runtime.StyleParamWithLocation("form", true, "match[]", runtime.ParamLocationQuery, params.Match); err != nil { - return nil, err - } else if parsed, err := url.ParseQuery(queryFrag); err != nil { - return nil, err - } else { - for k, v := range parsed { - for _, v2 := range v { - queryValues.Add(k, v2) + if queryFrag, err := runtime.StyleParamWithLocation("form", true, "step", runtime.ParamLocationQuery, *params.Step); err != nil { + return nil, err + } else if parsed, err := url.ParseQuery(queryFrag); err != nil { + return nil, err + } else { + for k, v := range parsed { + for _, v2 := range v { + queryValues.Add(k, v2) + } } } + } - if params.Start != nil { + if params.Interval != nil { - if queryFrag, err := runtime.StyleParamWithLocation("form", true, "start", runtime.ParamLocationQuery, *params.Start); err != nil { + if queryFrag, err := runtime.StyleParamWithLocation("form", true, "interval", runtime.ParamLocationQuery, *params.Interval); err != nil { return nil, err } else if parsed, err := url.ParseQuery(queryFrag); err != nil { return nil, err @@ -2572,9 +2576,9 @@ func NewGetLogSeriesRequest(server string, tenant Tenant, params *GetLogSeriesPa } - if params.End != nil { + if params.Direction != nil { - if queryFrag, err := runtime.StyleParamWithLocation("form", true, "end", runtime.ParamLocationQuery, *params.End); err != nil { + if queryFrag, err := runtime.StyleParamWithLocation("form", true, "direction", runtime.ParamLocationQuery, *params.Direction); err != nil { return nil, err } else if parsed, err := url.ParseQuery(queryFrag); err != nil { return nil, err @@ -2599,24 +2603,54 @@ func NewGetLogSeriesRequest(server string, tenant Tenant, params *GetLogSeriesPa return req, nil } -// NewPostLogSeriesRequestWithFormdataBody calls the generic PostLogSeries builder with application/x-www-form-urlencoded body -func NewPostLogSeriesRequestWithFormdataBody(server string, tenant Tenant, params *PostLogSeriesParams, body PostLogSeriesFormdataRequestBody) (*http.Request, error) { - var bodyReader io.Reader - bodyStr, err := runtime.MarshalForm(body, nil) +// NewGetAllLogsRulesRequest generates requests for GetAllLogsRules +func NewGetAllLogsRulesRequest(server string, tenant Tenant) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParamWithLocation("simple", false, "tenant", runtime.ParamLocationPath, tenant) if err != nil { return nil, err } - bodyReader = strings.NewReader(bodyStr.Encode()) - return NewPostLogSeriesRequestWithBody(server, tenant, params, "application/x-www-form-urlencoded", bodyReader) + + serverURL, err := url.Parse(server) + if err != nil { + return nil, err + } + + operationPath := fmt.Sprintf("/api/logs/v1/%s/loki/api/v1/rules", pathParam0) + if operationPath[0] == '/' { + operationPath = "." + operationPath + } + + queryURL, err := serverURL.Parse(operationPath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("GET", queryURL.String(), nil) + if err != nil { + return nil, err + } + + return req, nil } -// NewPostLogSeriesRequestWithBody generates requests for PostLogSeries with any type of body -func NewPostLogSeriesRequestWithBody(server string, tenant Tenant, params *PostLogSeriesParams, contentType string, body io.Reader) (*http.Request, error) { +// NewDeleteLogsRulesRequest generates requests for DeleteLogsRules +func NewDeleteLogsRulesRequest(server string, tenant Tenant, namespace LogRulesNamespace) (*http.Request, error) { var err error var pathParam0 string - pathParam0, err = runtime.StyleParamWithLocation("simple", false, "tenant", runtime.ParamLocationPath, tenant) + pathParam0, err = runtime.StyleParamWithLocation("simple", false, "tenant", runtime.ParamLocationPath, tenant) + if err != nil { + return nil, err + } + + var pathParam1 string + + pathParam1, err = runtime.StyleParamWithLocation("simple", false, "namespace", runtime.ParamLocationPath, namespace) if err != nil { return nil, err } @@ -2626,7 +2660,7 @@ func NewPostLogSeriesRequestWithBody(server string, tenant Tenant, params *PostL return nil, err } - operationPath := fmt.Sprintf("/api/logs/v1/%s/loki/api/v1/series", pathParam0) + operationPath := fmt.Sprintf("/api/logs/v1/%s/loki/api/v1/rules/%s", pathParam0, pathParam1) if operationPath[0] == '/' { operationPath = "." + operationPath } @@ -2636,68 +2670,16 @@ func NewPostLogSeriesRequestWithBody(server string, tenant Tenant, params *PostL return nil, err } - if params != nil { - queryValues := queryURL.Query() - - if queryFrag, err := runtime.StyleParamWithLocation("form", true, "match[]", runtime.ParamLocationQuery, params.Match); err != nil { - return nil, err - } else if parsed, err := url.ParseQuery(queryFrag); err != nil { - return nil, err - } else { - for k, v := range parsed { - for _, v2 := range v { - queryValues.Add(k, v2) - } - } - } - - if params.Start != nil { - - if queryFrag, err := runtime.StyleParamWithLocation("form", true, "start", runtime.ParamLocationQuery, *params.Start); err != nil { - return nil, err - } else if parsed, err := url.ParseQuery(queryFrag); err != nil { - return nil, err - } else { - for k, v := range parsed { - for _, v2 := range v { - queryValues.Add(k, v2) - } - } - } - - } - - if params.End != nil { - - if queryFrag, err := runtime.StyleParamWithLocation("form", true, "end", runtime.ParamLocationQuery, *params.End); err != nil { - return nil, err - } else if parsed, err := url.ParseQuery(queryFrag); err != nil { - return nil, err - } else { - for k, v := range parsed { - for _, v2 := range v { - queryValues.Add(k, v2) - } - } - } - - } - - queryURL.RawQuery = queryValues.Encode() - } - - req, err := http.NewRequest("POST", queryURL.String(), body) + req, err := http.NewRequest("DELETE", queryURL.String(), nil) if err != nil { return nil, err } - req.Header.Add("Content-Type", contentType) - return req, nil } -// NewGetLogsRequest generates requests for GetLogs -func NewGetLogsRequest(server string, tenant Tenant, params *GetLogsParams) (*http.Request, error) { +// NewGetLogsRulesRequest generates requests for GetLogsRules +func NewGetLogsRulesRequest(server string, tenant Tenant, namespace LogRulesNamespace) (*http.Request, error) { var err error var pathParam0 string @@ -2707,12 +2689,19 @@ func NewGetLogsRequest(server string, tenant Tenant, params *GetLogsParams) (*ht return nil, err } + var pathParam1 string + + pathParam1, err = runtime.StyleParamWithLocation("simple", false, "namespace", runtime.ParamLocationPath, namespace) + if err != nil { + return nil, err + } + serverURL, err := url.Parse(server) if err != nil { return nil, err } - operationPath := fmt.Sprintf("/api/logs/v1/%s/loki/api/v1/tail", pathParam0) + operationPath := fmt.Sprintf("/api/logs/v1/%s/loki/api/v1/rules/%s", pathParam0, pathParam1) if operationPath[0] == '/' { operationPath = "." + operationPath } @@ -2722,70 +2711,59 @@ func NewGetLogsRequest(server string, tenant Tenant, params *GetLogsParams) (*ht return nil, err } - if params != nil { - queryValues := queryURL.Query() - - if params.Start != nil { + req, err := http.NewRequest("GET", queryURL.String(), nil) + if err != nil { + return nil, err + } - if queryFrag, err := runtime.StyleParamWithLocation("form", true, "start", runtime.ParamLocationQuery, *params.Start); err != nil { - return nil, err - } else if parsed, err := url.ParseQuery(queryFrag); err != nil { - return nil, err - } else { - for k, v := range parsed { - for _, v2 := range v { - queryValues.Add(k, v2) - } - } - } + return req, nil +} - } +// NewSetLogsRulesRequestWithBody generates requests for SetLogsRules with any type of body +func NewSetLogsRulesRequestWithBody(server string, tenant Tenant, namespace LogRulesNamespace, contentType string, body io.Reader) (*http.Request, error) { + var err error - if params.Query != nil { + var pathParam0 string - if queryFrag, err := runtime.StyleParamWithLocation("form", true, "query", runtime.ParamLocationQuery, *params.Query); err != nil { - return nil, err - } else if parsed, err := url.ParseQuery(queryFrag); err != nil { - return nil, err - } else { - for k, v := range parsed { - for _, v2 := range v { - queryValues.Add(k, v2) - } - } - } + pathParam0, err = runtime.StyleParamWithLocation("simple", false, "tenant", runtime.ParamLocationPath, tenant) + if err != nil { + return nil, err + } - } + var pathParam1 string - if params.Delay != nil { + pathParam1, err = runtime.StyleParamWithLocation("simple", false, "namespace", runtime.ParamLocationPath, namespace) + if err != nil { + return nil, err + } - if queryFrag, err := runtime.StyleParamWithLocation("form", true, "delay", runtime.ParamLocationQuery, *params.Delay); err != nil { - return nil, err - } else if parsed, err := url.ParseQuery(queryFrag); err != nil { - return nil, err - } else { - for k, v := range parsed { - for _, v2 := range v { - queryValues.Add(k, v2) - } - } - } + serverURL, err := url.Parse(server) + if err != nil { + return nil, err + } - } + operationPath := fmt.Sprintf("/api/logs/v1/%s/loki/api/v1/rules/%s", pathParam0, pathParam1) + if operationPath[0] == '/' { + operationPath = "." + operationPath + } - queryURL.RawQuery = queryValues.Encode() + queryURL, err := serverURL.Parse(operationPath) + if err != nil { + return nil, err } - req, err := http.NewRequest("GET", queryURL.String(), nil) + req, err := http.NewRequest("POST", queryURL.String(), body) if err != nil { return nil, err } + req.Header.Add("Content-Type", contentType) + return req, nil } -// NewGetLogsPromAlertsRequest generates requests for GetLogsPromAlerts -func NewGetLogsPromAlertsRequest(server string, tenant Tenant) (*http.Request, error) { +// NewDeleteLogsRulesGroupRequest generates requests for DeleteLogsRulesGroup +func NewDeleteLogsRulesGroupRequest(server string, tenant Tenant, namespace LogRulesNamespace, group LogRulesGroup) (*http.Request, error) { var err error var pathParam0 string @@ -2795,12 +2773,26 @@ func NewGetLogsPromAlertsRequest(server string, tenant Tenant) (*http.Request, e return nil, err } + var pathParam1 string + + pathParam1, err = runtime.StyleParamWithLocation("simple", false, "namespace", runtime.ParamLocationPath, namespace) + if err != nil { + return nil, err + } + + var pathParam2 string + + pathParam2, err = runtime.StyleParamWithLocation("simple", false, "group", runtime.ParamLocationPath, group) + if err != nil { + return nil, err + } + serverURL, err := url.Parse(server) if err != nil { return nil, err } - operationPath := fmt.Sprintf("/api/logs/v1/%s/prometheus/api/v1/alerts", pathParam0) + operationPath := fmt.Sprintf("/api/logs/v1/%s/loki/api/v1/rules/%s/%s", pathParam0, pathParam1, pathParam2) if operationPath[0] == '/' { operationPath = "." + operationPath } @@ -2810,7 +2802,7 @@ func NewGetLogsPromAlertsRequest(server string, tenant Tenant) (*http.Request, e return nil, err } - req, err := http.NewRequest("GET", queryURL.String(), nil) + req, err := http.NewRequest("DELETE", queryURL.String(), nil) if err != nil { return nil, err } @@ -2818,8 +2810,8 @@ func NewGetLogsPromAlertsRequest(server string, tenant Tenant) (*http.Request, e return req, nil } -// NewGetLogsPromRulesRequest generates requests for GetLogsPromRules -func NewGetLogsPromRulesRequest(server string, tenant Tenant) (*http.Request, error) { +// NewGetLogsRulesGroupRequest generates requests for GetLogsRulesGroup +func NewGetLogsRulesGroupRequest(server string, tenant Tenant, namespace LogRulesNamespace, group LogRulesGroup) (*http.Request, error) { var err error var pathParam0 string @@ -2829,12 +2821,26 @@ func NewGetLogsPromRulesRequest(server string, tenant Tenant) (*http.Request, er return nil, err } + var pathParam1 string + + pathParam1, err = runtime.StyleParamWithLocation("simple", false, "namespace", runtime.ParamLocationPath, namespace) + if err != nil { + return nil, err + } + + var pathParam2 string + + pathParam2, err = runtime.StyleParamWithLocation("simple", false, "group", runtime.ParamLocationPath, group) + if err != nil { + return nil, err + } + serverURL, err := url.Parse(server) if err != nil { return nil, err } - operationPath := fmt.Sprintf("/api/logs/v1/%s/prometheus/api/v1/rules", pathParam0) + operationPath := fmt.Sprintf("/api/logs/v1/%s/loki/api/v1/rules/%s/%s", pathParam0, pathParam1, pathParam2) if operationPath[0] == '/' { operationPath = "." + operationPath } @@ -2852,8 +2858,8 @@ func NewGetLogsPromRulesRequest(server string, tenant Tenant) (*http.Request, er return req, nil } -// NewGetAlertsRequest generates requests for GetAlerts -func NewGetAlertsRequest(server string, tenant Tenant, params *GetAlertsParams) (*http.Request, error) { +// NewGetLogSeriesRequest generates requests for GetLogSeries +func NewGetLogSeriesRequest(server string, tenant Tenant, params *GetLogSeriesParams) (*http.Request, error) { var err error var pathParam0 string @@ -2868,7 +2874,7 @@ func NewGetAlertsRequest(server string, tenant Tenant, params *GetAlertsParams) return nil, err } - operationPath := fmt.Sprintf("/api/metrics/v1/%s/am/api/v2/alerts", pathParam0) + operationPath := fmt.Sprintf("/api/logs/v1/%s/loki/api/v1/series", pathParam0) if operationPath[0] == '/' { operationPath = "." + operationPath } @@ -2881,73 +2887,21 @@ func NewGetAlertsRequest(server string, tenant Tenant, params *GetAlertsParams) if params != nil { queryValues := queryURL.Query() - if params.Active != nil { - - if queryFrag, err := runtime.StyleParamWithLocation("form", true, "active", runtime.ParamLocationQuery, *params.Active); err != nil { - return nil, err - } else if parsed, err := url.ParseQuery(queryFrag); err != nil { - return nil, err - } else { - for k, v := range parsed { - for _, v2 := range v { - queryValues.Add(k, v2) - } - } - } - - } - - if params.Silenced != nil { - - if queryFrag, err := runtime.StyleParamWithLocation("form", true, "silenced", runtime.ParamLocationQuery, *params.Silenced); err != nil { - return nil, err - } else if parsed, err := url.ParseQuery(queryFrag); err != nil { - return nil, err - } else { - for k, v := range parsed { - for _, v2 := range v { - queryValues.Add(k, v2) - } - } - } - - } - - if params.Inhibited != nil { - - if queryFrag, err := runtime.StyleParamWithLocation("form", true, "inhibited", runtime.ParamLocationQuery, *params.Inhibited); err != nil { - return nil, err - } else if parsed, err := url.ParseQuery(queryFrag); err != nil { - return nil, err - } else { - for k, v := range parsed { - for _, v2 := range v { - queryValues.Add(k, v2) - } - } - } - - } - - if params.Unprocessed != nil { - - if queryFrag, err := runtime.StyleParamWithLocation("form", true, "unprocessed", runtime.ParamLocationQuery, *params.Unprocessed); err != nil { - return nil, err - } else if parsed, err := url.ParseQuery(queryFrag); err != nil { - return nil, err - } else { - for k, v := range parsed { - for _, v2 := range v { - queryValues.Add(k, v2) - } + if queryFrag, err := runtime.StyleParamWithLocation("form", true, "match[]", runtime.ParamLocationQuery, params.Match); err != nil { + return nil, err + } else if parsed, err := url.ParseQuery(queryFrag); err != nil { + return nil, err + } else { + for k, v := range parsed { + for _, v2 := range v { + queryValues.Add(k, v2) } } - } - if params.Receiver != nil { + if params.Start != nil { - if queryFrag, err := runtime.StyleParamWithLocation("form", true, "receiver", runtime.ParamLocationQuery, *params.Receiver); err != nil { + if queryFrag, err := runtime.StyleParamWithLocation("form", true, "start", runtime.ParamLocationQuery, *params.Start); err != nil { return nil, err } else if parsed, err := url.ParseQuery(queryFrag); err != nil { return nil, err @@ -2961,9 +2915,9 @@ func NewGetAlertsRequest(server string, tenant Tenant, params *GetAlertsParams) } - if params.Filter != nil { + if params.End != nil { - if queryFrag, err := runtime.StyleParamWithLocation("form", true, "filter", runtime.ParamLocationQuery, *params.Filter); err != nil { + if queryFrag, err := runtime.StyleParamWithLocation("form", true, "end", runtime.ParamLocationQuery, *params.End); err != nil { return nil, err } else if parsed, err := url.ParseQuery(queryFrag); err != nil { return nil, err @@ -2988,20 +2942,24 @@ func NewGetAlertsRequest(server string, tenant Tenant, params *GetAlertsParams) return req, nil } -// NewDeleteSilenceRequest generates requests for DeleteSilence -func NewDeleteSilenceRequest(server string, tenant Tenant, silenceID openapi_types.UUID) (*http.Request, error) { - var err error - - var pathParam0 string - - pathParam0, err = runtime.StyleParamWithLocation("simple", false, "tenant", runtime.ParamLocationPath, tenant) +// NewPostLogSeriesRequestWithFormdataBody calls the generic PostLogSeries builder with application/x-www-form-urlencoded body +func NewPostLogSeriesRequestWithFormdataBody(server string, tenant Tenant, params *PostLogSeriesParams, body PostLogSeriesFormdataRequestBody) (*http.Request, error) { + var bodyReader io.Reader + bodyStr, err := runtime.MarshalForm(body, nil) if err != nil { return nil, err } + bodyReader = strings.NewReader(bodyStr.Encode()) + return NewPostLogSeriesRequestWithBody(server, tenant, params, "application/x-www-form-urlencoded", bodyReader) +} - var pathParam1 string +// NewPostLogSeriesRequestWithBody generates requests for PostLogSeries with any type of body +func NewPostLogSeriesRequestWithBody(server string, tenant Tenant, params *PostLogSeriesParams, contentType string, body io.Reader) (*http.Request, error) { + var err error - pathParam1, err = runtime.StyleParamWithLocation("simple", false, "silenceID", runtime.ParamLocationPath, silenceID) + var pathParam0 string + + pathParam0, err = runtime.StyleParamWithLocation("simple", false, "tenant", runtime.ParamLocationPath, tenant) if err != nil { return nil, err } @@ -3011,7 +2969,7 @@ func NewDeleteSilenceRequest(server string, tenant Tenant, silenceID openapi_typ return nil, err } - operationPath := fmt.Sprintf("/api/metrics/v1/%s/am/api/v2/silence/%s", pathParam0, pathParam1) + operationPath := fmt.Sprintf("/api/logs/v1/%s/loki/api/v1/series", pathParam0) if operationPath[0] == '/' { operationPath = "." + operationPath } @@ -3021,57 +2979,68 @@ func NewDeleteSilenceRequest(server string, tenant Tenant, silenceID openapi_typ return nil, err } - req, err := http.NewRequest("DELETE", queryURL.String(), nil) - if err != nil { - return nil, err - } + if params != nil { + queryValues := queryURL.Query() - return req, nil -} + if queryFrag, err := runtime.StyleParamWithLocation("form", true, "match[]", runtime.ParamLocationQuery, params.Match); err != nil { + return nil, err + } else if parsed, err := url.ParseQuery(queryFrag); err != nil { + return nil, err + } else { + for k, v := range parsed { + for _, v2 := range v { + queryValues.Add(k, v2) + } + } + } -// NewGetSilenceRequest generates requests for GetSilence -func NewGetSilenceRequest(server string, tenant Tenant, silenceID openapi_types.UUID) (*http.Request, error) { - var err error + if params.Start != nil { - var pathParam0 string + if queryFrag, err := runtime.StyleParamWithLocation("form", true, "start", runtime.ParamLocationQuery, *params.Start); err != nil { + return nil, err + } else if parsed, err := url.ParseQuery(queryFrag); err != nil { + return nil, err + } else { + for k, v := range parsed { + for _, v2 := range v { + queryValues.Add(k, v2) + } + } + } - pathParam0, err = runtime.StyleParamWithLocation("simple", false, "tenant", runtime.ParamLocationPath, tenant) - if err != nil { - return nil, err - } + } - var pathParam1 string + if params.End != nil { - pathParam1, err = runtime.StyleParamWithLocation("simple", false, "silenceID", runtime.ParamLocationPath, silenceID) - if err != nil { - return nil, err - } + if queryFrag, err := runtime.StyleParamWithLocation("form", true, "end", runtime.ParamLocationQuery, *params.End); err != nil { + return nil, err + } else if parsed, err := url.ParseQuery(queryFrag); err != nil { + return nil, err + } else { + for k, v := range parsed { + for _, v2 := range v { + queryValues.Add(k, v2) + } + } + } - serverURL, err := url.Parse(server) - if err != nil { - return nil, err - } + } - operationPath := fmt.Sprintf("/api/metrics/v1/%s/am/api/v2/silence/%s", pathParam0, pathParam1) - if operationPath[0] == '/' { - operationPath = "." + operationPath + queryURL.RawQuery = queryValues.Encode() } - queryURL, err := serverURL.Parse(operationPath) + req, err := http.NewRequest("POST", queryURL.String(), body) if err != nil { return nil, err } - req, err := http.NewRequest("GET", queryURL.String(), nil) - if err != nil { - return nil, err - } + req.Header.Add("Content-Type", contentType) return req, nil } -// NewGetSilencesRequest generates requests for GetSilences -func NewGetSilencesRequest(server string, tenant Tenant, params *GetSilencesParams) (*http.Request, error) { +// NewGetLogsRequest generates requests for GetLogs +func NewGetLogsRequest(server string, tenant Tenant, params *GetLogsParams) (*http.Request, error) { var err error var pathParam0 string @@ -3086,7 +3055,7 @@ func NewGetSilencesRequest(server string, tenant Tenant, params *GetSilencesPara return nil, err } - operationPath := fmt.Sprintf("/api/metrics/v1/%s/am/api/v2/silences", pathParam0) + operationPath := fmt.Sprintf("/api/logs/v1/%s/loki/api/v1/tail", pathParam0) if operationPath[0] == '/' { operationPath = "." + operationPath } @@ -3099,9 +3068,41 @@ func NewGetSilencesRequest(server string, tenant Tenant, params *GetSilencesPara if params != nil { queryValues := queryURL.Query() - if params.Filter != nil { + if params.Start != nil { - if queryFrag, err := runtime.StyleParamWithLocation("form", true, "filter", runtime.ParamLocationQuery, *params.Filter); err != nil { + if queryFrag, err := runtime.StyleParamWithLocation("form", true, "start", runtime.ParamLocationQuery, *params.Start); err != nil { + return nil, err + } else if parsed, err := url.ParseQuery(queryFrag); err != nil { + return nil, err + } else { + for k, v := range parsed { + for _, v2 := range v { + queryValues.Add(k, v2) + } + } + } + + } + + if params.Query != nil { + + if queryFrag, err := runtime.StyleParamWithLocation("form", true, "query", runtime.ParamLocationQuery, *params.Query); err != nil { + return nil, err + } else if parsed, err := url.ParseQuery(queryFrag); err != nil { + return nil, err + } else { + for k, v := range parsed { + for _, v2 := range v { + queryValues.Add(k, v2) + } + } + } + + } + + if params.Delay != nil { + + if queryFrag, err := runtime.StyleParamWithLocation("form", true, "delay", runtime.ParamLocationQuery, *params.Delay); err != nil { return nil, err } else if parsed, err := url.ParseQuery(queryFrag); err != nil { return nil, err @@ -3126,19 +3127,8 @@ func NewGetSilencesRequest(server string, tenant Tenant, params *GetSilencesPara return req, nil } -// NewPostSilenceRequest calls the generic PostSilence builder with application/json body -func NewPostSilenceRequest(server string, tenant Tenant, params *PostSilenceParams, body PostSilenceJSONRequestBody) (*http.Request, error) { - var bodyReader io.Reader - buf, err := json.Marshal(body) - if err != nil { - return nil, err - } - bodyReader = bytes.NewReader(buf) - return NewPostSilenceRequestWithBody(server, tenant, params, "application/json", bodyReader) -} - -// NewPostSilenceRequestWithBody generates requests for PostSilence with any type of body -func NewPostSilenceRequestWithBody(server string, tenant Tenant, params *PostSilenceParams, contentType string, body io.Reader) (*http.Request, error) { +// NewGetLogsPromAlertsRequest generates requests for GetLogsPromAlerts +func NewGetLogsPromAlertsRequest(server string, tenant Tenant) (*http.Request, error) { var err error var pathParam0 string @@ -3153,7 +3143,7 @@ func NewPostSilenceRequestWithBody(server string, tenant Tenant, params *PostSil return nil, err } - operationPath := fmt.Sprintf("/api/metrics/v1/%s/am/api/v2/silences", pathParam0) + operationPath := fmt.Sprintf("/api/logs/v1/%s/prometheus/api/v1/alerts", pathParam0) if operationPath[0] == '/' { operationPath = "." + operationPath } @@ -3163,34 +3153,44 @@ func NewPostSilenceRequestWithBody(server string, tenant Tenant, params *PostSil return nil, err } - if params != nil { - queryValues := queryURL.Query() + req, err := http.NewRequest("GET", queryURL.String(), nil) + if err != nil { + return nil, err + } - if params.Filter != nil { + return req, nil +} - if queryFrag, err := runtime.StyleParamWithLocation("form", true, "filter", runtime.ParamLocationQuery, *params.Filter); err != nil { - return nil, err - } else if parsed, err := url.ParseQuery(queryFrag); err != nil { - return nil, err - } else { - for k, v := range parsed { - for _, v2 := range v { - queryValues.Add(k, v2) - } - } - } +// NewGetLogsPromRulesRequest generates requests for GetLogsPromRules +func NewGetLogsPromRulesRequest(server string, tenant Tenant) (*http.Request, error) { + var err error - } + var pathParam0 string - queryURL.RawQuery = queryValues.Encode() + pathParam0, err = runtime.StyleParamWithLocation("simple", false, "tenant", runtime.ParamLocationPath, tenant) + if err != nil { + return nil, err } - req, err := http.NewRequest("POST", queryURL.String(), body) + serverURL, err := url.Parse(server) if err != nil { return nil, err } - req.Header.Add("Content-Type", contentType) + operationPath := fmt.Sprintf("/api/logs/v1/%s/prometheus/api/v1/rules", pathParam0) + if operationPath[0] == '/' { + operationPath = "." + operationPath + } + + queryURL, err := serverURL.Parse(operationPath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("GET", queryURL.String(), nil) + if err != nil { + return nil, err + } return req, nil } @@ -3919,6 +3919,23 @@ func WithBaseURL(baseURL string) ClientOption { // ClientWithResponsesInterface is the interface specification for the client with responses above. type ClientWithResponsesInterface interface { + // GetAlertsWithResponse request + GetAlertsWithResponse(ctx context.Context, tenant Tenant, params *GetAlertsParams, reqEditors ...RequestEditorFn) (*GetAlertsResponse, error) + + // DeleteSilenceWithResponse request + DeleteSilenceWithResponse(ctx context.Context, tenant Tenant, silenceID openapi_types.UUID, reqEditors ...RequestEditorFn) (*DeleteSilenceResponse, error) + + // GetSilenceWithResponse request + GetSilenceWithResponse(ctx context.Context, tenant Tenant, silenceID openapi_types.UUID, reqEditors ...RequestEditorFn) (*GetSilenceResponse, error) + + // GetSilencesWithResponse request + GetSilencesWithResponse(ctx context.Context, tenant Tenant, params *GetSilencesParams, reqEditors ...RequestEditorFn) (*GetSilencesResponse, error) + + // PostSilenceWithBodyWithResponse request with any body + PostSilenceWithBodyWithResponse(ctx context.Context, tenant Tenant, params *PostSilenceParams, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*PostSilenceResponse, error) + + PostSilenceWithResponse(ctx context.Context, tenant Tenant, params *PostSilenceParams, body PostSilenceJSONRequestBody, reqEditors ...RequestEditorFn) (*PostSilenceResponse, error) + // GetLogLabelValuesWithResponse request GetLogLabelValuesWithResponse(ctx context.Context, tenant Tenant, name string, params *GetLogLabelValuesParams, reqEditors ...RequestEditorFn) (*GetLogLabelValuesResponse, error) @@ -3971,23 +3988,6 @@ type ClientWithResponsesInterface interface { // GetLogsPromRulesWithResponse request GetLogsPromRulesWithResponse(ctx context.Context, tenant Tenant, reqEditors ...RequestEditorFn) (*GetLogsPromRulesResponse, error) - // GetAlertsWithResponse request - GetAlertsWithResponse(ctx context.Context, tenant Tenant, params *GetAlertsParams, reqEditors ...RequestEditorFn) (*GetAlertsResponse, error) - - // DeleteSilenceWithResponse request - DeleteSilenceWithResponse(ctx context.Context, tenant Tenant, silenceID openapi_types.UUID, reqEditors ...RequestEditorFn) (*DeleteSilenceResponse, error) - - // GetSilenceWithResponse request - GetSilenceWithResponse(ctx context.Context, tenant Tenant, silenceID openapi_types.UUID, reqEditors ...RequestEditorFn) (*GetSilenceResponse, error) - - // GetSilencesWithResponse request - GetSilencesWithResponse(ctx context.Context, tenant Tenant, params *GetSilencesParams, reqEditors ...RequestEditorFn) (*GetSilencesResponse, error) - - // PostSilenceWithBodyWithResponse request with any body - PostSilenceWithBodyWithResponse(ctx context.Context, tenant Tenant, params *PostSilenceParams, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*PostSilenceResponse, error) - - PostSilenceWithResponse(ctx context.Context, tenant Tenant, params *PostSilenceParams, body PostSilenceJSONRequestBody, reqEditors ...RequestEditorFn) (*PostSilenceResponse, error) - // GetLabelValuesWithResponse request GetLabelValuesWithResponse(ctx context.Context, tenant Tenant, labelName string, params *GetLabelValuesParams, reqEditors ...RequestEditorFn) (*GetLabelValuesResponse, error) @@ -4013,14 +4013,14 @@ type ClientWithResponsesInterface interface { GetSeriesWithResponse(ctx context.Context, tenant Tenant, params *GetSeriesParams, reqEditors ...RequestEditorFn) (*GetSeriesResponse, error) } -type GetLogLabelValuesResponse struct { +type GetAlertsResponse struct { Body []byte HTTPResponse *http.Response - JSON2XX *LogLabelValuesResponse + JSON2XX *GettableAlerts } // Status returns HTTPResponse.Status -func (r GetLogLabelValuesResponse) Status() string { +func (r GetAlertsResponse) Status() string { if r.HTTPResponse != nil { return r.HTTPResponse.Status } @@ -4028,21 +4028,20 @@ func (r GetLogLabelValuesResponse) Status() string { } // StatusCode returns HTTPResponse.StatusCode -func (r GetLogLabelValuesResponse) StatusCode() int { +func (r GetAlertsResponse) StatusCode() int { if r.HTTPResponse != nil { return r.HTTPResponse.StatusCode } return 0 } -type GetLogLabelsResponse struct { +type DeleteSilenceResponse struct { Body []byte HTTPResponse *http.Response - JSON2XX *LogLabelsResponse } // Status returns HTTPResponse.Status -func (r GetLogLabelsResponse) Status() string { +func (r DeleteSilenceResponse) Status() string { if r.HTTPResponse != nil { return r.HTTPResponse.Status } @@ -4050,20 +4049,21 @@ func (r GetLogLabelsResponse) Status() string { } // StatusCode returns HTTPResponse.StatusCode -func (r GetLogLabelsResponse) StatusCode() int { +func (r DeleteSilenceResponse) StatusCode() int { if r.HTTPResponse != nil { return r.HTTPResponse.StatusCode } return 0 } -type PostlogEntriesResponse struct { +type GetSilenceResponse struct { Body []byte HTTPResponse *http.Response + JSON2XX *GettableSilence } // Status returns HTTPResponse.Status -func (r PostlogEntriesResponse) Status() string { +func (r GetSilenceResponse) Status() string { if r.HTTPResponse != nil { return r.HTTPResponse.Status } @@ -4071,21 +4071,21 @@ func (r PostlogEntriesResponse) Status() string { } // StatusCode returns HTTPResponse.StatusCode -func (r PostlogEntriesResponse) StatusCode() int { +func (r GetSilenceResponse) StatusCode() int { if r.HTTPResponse != nil { return r.HTTPResponse.StatusCode } return 0 } -type GetLogInstantQueryResponse struct { +type GetSilencesResponse struct { Body []byte HTTPResponse *http.Response - JSON2XX *LogQueryResponse + JSON2XX *GettableSilences } // Status returns HTTPResponse.Status -func (r GetLogInstantQueryResponse) Status() string { +func (r GetSilencesResponse) Status() string { if r.HTTPResponse != nil { return r.HTTPResponse.Status } @@ -4093,21 +4093,21 @@ func (r GetLogInstantQueryResponse) Status() string { } // StatusCode returns HTTPResponse.StatusCode -func (r GetLogInstantQueryResponse) StatusCode() int { +func (r GetSilencesResponse) StatusCode() int { if r.HTTPResponse != nil { return r.HTTPResponse.StatusCode } return 0 } -type GetLogRangeQueryResponse struct { +type PostSilenceResponse struct { Body []byte HTTPResponse *http.Response - JSON2XX *LogQueryRangeResponse + JSON2XX *PostableSilenceResponse } // Status returns HTTPResponse.Status -func (r GetLogRangeQueryResponse) Status() string { +func (r PostSilenceResponse) Status() string { if r.HTTPResponse != nil { return r.HTTPResponse.Status } @@ -4115,21 +4115,21 @@ func (r GetLogRangeQueryResponse) Status() string { } // StatusCode returns HTTPResponse.StatusCode -func (r GetLogRangeQueryResponse) StatusCode() int { +func (r PostSilenceResponse) StatusCode() int { if r.HTTPResponse != nil { return r.HTTPResponse.StatusCode } return 0 } -type GetAllLogsRulesResponse struct { +type GetLogLabelValuesResponse struct { Body []byte HTTPResponse *http.Response - YAML2XX *AllLogRulesResponse + JSON2XX *LogLabelValuesResponse } // Status returns HTTPResponse.Status -func (r GetAllLogsRulesResponse) Status() string { +func (r GetLogLabelValuesResponse) Status() string { if r.HTTPResponse != nil { return r.HTTPResponse.Status } @@ -4137,20 +4137,21 @@ func (r GetAllLogsRulesResponse) Status() string { } // StatusCode returns HTTPResponse.StatusCode -func (r GetAllLogsRulesResponse) StatusCode() int { +func (r GetLogLabelValuesResponse) StatusCode() int { if r.HTTPResponse != nil { return r.HTTPResponse.StatusCode } return 0 } -type DeleteLogsRulesResponse struct { +type GetLogLabelsResponse struct { Body []byte HTTPResponse *http.Response + JSON2XX *LogLabelsResponse } // Status returns HTTPResponse.Status -func (r DeleteLogsRulesResponse) Status() string { +func (r GetLogLabelsResponse) Status() string { if r.HTTPResponse != nil { return r.HTTPResponse.Status } @@ -4158,21 +4159,20 @@ func (r DeleteLogsRulesResponse) Status() string { } // StatusCode returns HTTPResponse.StatusCode -func (r DeleteLogsRulesResponse) StatusCode() int { +func (r GetLogLabelsResponse) StatusCode() int { if r.HTTPResponse != nil { return r.HTTPResponse.StatusCode } return 0 } -type GetLogsRulesResponse struct { +type PostlogEntriesResponse struct { Body []byte HTTPResponse *http.Response - YAML2XX *LogRulesNamespaceResponse } // Status returns HTTPResponse.Status -func (r GetLogsRulesResponse) Status() string { +func (r PostlogEntriesResponse) Status() string { if r.HTTPResponse != nil { return r.HTTPResponse.Status } @@ -4180,20 +4180,21 @@ func (r GetLogsRulesResponse) Status() string { } // StatusCode returns HTTPResponse.StatusCode -func (r GetLogsRulesResponse) StatusCode() int { +func (r PostlogEntriesResponse) StatusCode() int { if r.HTTPResponse != nil { return r.HTTPResponse.StatusCode } return 0 } -type SetLogsRulesResponse struct { +type GetLogInstantQueryResponse struct { Body []byte HTTPResponse *http.Response + JSON2XX *LogQueryResponse } // Status returns HTTPResponse.Status -func (r SetLogsRulesResponse) Status() string { +func (r GetLogInstantQueryResponse) Status() string { if r.HTTPResponse != nil { return r.HTTPResponse.Status } @@ -4201,20 +4202,21 @@ func (r SetLogsRulesResponse) Status() string { } // StatusCode returns HTTPResponse.StatusCode -func (r SetLogsRulesResponse) StatusCode() int { +func (r GetLogInstantQueryResponse) StatusCode() int { if r.HTTPResponse != nil { return r.HTTPResponse.StatusCode } return 0 } -type DeleteLogsRulesGroupResponse struct { +type GetLogRangeQueryResponse struct { Body []byte HTTPResponse *http.Response + JSON2XX *LogQueryRangeResponse } // Status returns HTTPResponse.Status -func (r DeleteLogsRulesGroupResponse) Status() string { +func (r GetLogRangeQueryResponse) Status() string { if r.HTTPResponse != nil { return r.HTTPResponse.Status } @@ -4222,21 +4224,21 @@ func (r DeleteLogsRulesGroupResponse) Status() string { } // StatusCode returns HTTPResponse.StatusCode -func (r DeleteLogsRulesGroupResponse) StatusCode() int { +func (r GetLogRangeQueryResponse) StatusCode() int { if r.HTTPResponse != nil { return r.HTTPResponse.StatusCode } return 0 } -type GetLogsRulesGroupResponse struct { +type GetAllLogsRulesResponse struct { Body []byte HTTPResponse *http.Response - YAML2XX *LogRulesGroupResponse + YAML2XX *AllLogRulesResponse } // Status returns HTTPResponse.Status -func (r GetLogsRulesGroupResponse) Status() string { +func (r GetAllLogsRulesResponse) Status() string { if r.HTTPResponse != nil { return r.HTTPResponse.Status } @@ -4244,21 +4246,20 @@ func (r GetLogsRulesGroupResponse) Status() string { } // StatusCode returns HTTPResponse.StatusCode -func (r GetLogsRulesGroupResponse) StatusCode() int { +func (r GetAllLogsRulesResponse) StatusCode() int { if r.HTTPResponse != nil { return r.HTTPResponse.StatusCode } return 0 } -type GetLogSeriesResponse struct { +type DeleteLogsRulesResponse struct { Body []byte HTTPResponse *http.Response - JSON2XX *LogSeriesResponse } // Status returns HTTPResponse.Status -func (r GetLogSeriesResponse) Status() string { +func (r DeleteLogsRulesResponse) Status() string { if r.HTTPResponse != nil { return r.HTTPResponse.Status } @@ -4266,20 +4267,21 @@ func (r GetLogSeriesResponse) Status() string { } // StatusCode returns HTTPResponse.StatusCode -func (r GetLogSeriesResponse) StatusCode() int { +func (r DeleteLogsRulesResponse) StatusCode() int { if r.HTTPResponse != nil { return r.HTTPResponse.StatusCode } return 0 } -type PostLogSeriesResponse struct { +type GetLogsRulesResponse struct { Body []byte HTTPResponse *http.Response + YAML2XX *LogRulesNamespaceResponse } // Status returns HTTPResponse.Status -func (r PostLogSeriesResponse) Status() string { +func (r GetLogsRulesResponse) Status() string { if r.HTTPResponse != nil { return r.HTTPResponse.Status } @@ -4287,21 +4289,20 @@ func (r PostLogSeriesResponse) Status() string { } // StatusCode returns HTTPResponse.StatusCode -func (r PostLogSeriesResponse) StatusCode() int { +func (r GetLogsRulesResponse) StatusCode() int { if r.HTTPResponse != nil { return r.HTTPResponse.StatusCode } return 0 } -type GetLogsResponse struct { +type SetLogsRulesResponse struct { Body []byte HTTPResponse *http.Response - JSON2XX *LogReadResponse } // Status returns HTTPResponse.Status -func (r GetLogsResponse) Status() string { +func (r SetLogsRulesResponse) Status() string { if r.HTTPResponse != nil { return r.HTTPResponse.Status } @@ -4309,21 +4310,20 @@ func (r GetLogsResponse) Status() string { } // StatusCode returns HTTPResponse.StatusCode -func (r GetLogsResponse) StatusCode() int { +func (r SetLogsRulesResponse) StatusCode() int { if r.HTTPResponse != nil { return r.HTTPResponse.StatusCode } return 0 } -type GetLogsPromAlertsResponse struct { +type DeleteLogsRulesGroupResponse struct { Body []byte HTTPResponse *http.Response - JSON2XX *LogRulesPrometheusResponse } // Status returns HTTPResponse.Status -func (r GetLogsPromAlertsResponse) Status() string { +func (r DeleteLogsRulesGroupResponse) Status() string { if r.HTTPResponse != nil { return r.HTTPResponse.Status } @@ -4331,21 +4331,21 @@ func (r GetLogsPromAlertsResponse) Status() string { } // StatusCode returns HTTPResponse.StatusCode -func (r GetLogsPromAlertsResponse) StatusCode() int { +func (r DeleteLogsRulesGroupResponse) StatusCode() int { if r.HTTPResponse != nil { return r.HTTPResponse.StatusCode } return 0 } -type GetLogsPromRulesResponse struct { +type GetLogsRulesGroupResponse struct { Body []byte HTTPResponse *http.Response - JSON2XX *LogRulesPrometheusResponse + YAML2XX *LogRulesGroupResponse } // Status returns HTTPResponse.Status -func (r GetLogsPromRulesResponse) Status() string { +func (r GetLogsRulesGroupResponse) Status() string { if r.HTTPResponse != nil { return r.HTTPResponse.Status } @@ -4353,21 +4353,21 @@ func (r GetLogsPromRulesResponse) Status() string { } // StatusCode returns HTTPResponse.StatusCode -func (r GetLogsPromRulesResponse) StatusCode() int { +func (r GetLogsRulesGroupResponse) StatusCode() int { if r.HTTPResponse != nil { return r.HTTPResponse.StatusCode } return 0 } -type GetAlertsResponse struct { +type GetLogSeriesResponse struct { Body []byte HTTPResponse *http.Response - JSON2XX *GettableAlerts + JSON2XX *LogSeriesResponse } // Status returns HTTPResponse.Status -func (r GetAlertsResponse) Status() string { +func (r GetLogSeriesResponse) Status() string { if r.HTTPResponse != nil { return r.HTTPResponse.Status } @@ -4375,20 +4375,20 @@ func (r GetAlertsResponse) Status() string { } // StatusCode returns HTTPResponse.StatusCode -func (r GetAlertsResponse) StatusCode() int { +func (r GetLogSeriesResponse) StatusCode() int { if r.HTTPResponse != nil { return r.HTTPResponse.StatusCode } return 0 } -type DeleteSilenceResponse struct { +type PostLogSeriesResponse struct { Body []byte HTTPResponse *http.Response } // Status returns HTTPResponse.Status -func (r DeleteSilenceResponse) Status() string { +func (r PostLogSeriesResponse) Status() string { if r.HTTPResponse != nil { return r.HTTPResponse.Status } @@ -4396,21 +4396,21 @@ func (r DeleteSilenceResponse) Status() string { } // StatusCode returns HTTPResponse.StatusCode -func (r DeleteSilenceResponse) StatusCode() int { +func (r PostLogSeriesResponse) StatusCode() int { if r.HTTPResponse != nil { return r.HTTPResponse.StatusCode } return 0 } -type GetSilenceResponse struct { +type GetLogsResponse struct { Body []byte HTTPResponse *http.Response - JSON2XX *GettableSilence + JSON2XX *LogReadResponse } // Status returns HTTPResponse.Status -func (r GetSilenceResponse) Status() string { +func (r GetLogsResponse) Status() string { if r.HTTPResponse != nil { return r.HTTPResponse.Status } @@ -4418,21 +4418,21 @@ func (r GetSilenceResponse) Status() string { } // StatusCode returns HTTPResponse.StatusCode -func (r GetSilenceResponse) StatusCode() int { +func (r GetLogsResponse) StatusCode() int { if r.HTTPResponse != nil { return r.HTTPResponse.StatusCode } return 0 } -type GetSilencesResponse struct { +type GetLogsPromAlertsResponse struct { Body []byte HTTPResponse *http.Response - JSON2XX *GettableSilences + JSON2XX *LogRulesPrometheusResponse } // Status returns HTTPResponse.Status -func (r GetSilencesResponse) Status() string { +func (r GetLogsPromAlertsResponse) Status() string { if r.HTTPResponse != nil { return r.HTTPResponse.Status } @@ -4440,21 +4440,21 @@ func (r GetSilencesResponse) Status() string { } // StatusCode returns HTTPResponse.StatusCode -func (r GetSilencesResponse) StatusCode() int { +func (r GetLogsPromAlertsResponse) StatusCode() int { if r.HTTPResponse != nil { return r.HTTPResponse.StatusCode } return 0 } -type PostSilenceResponse struct { +type GetLogsPromRulesResponse struct { Body []byte HTTPResponse *http.Response - JSON2XX *PostableSilenceResponse + JSON2XX *LogRulesPrometheusResponse } // Status returns HTTPResponse.Status -func (r PostSilenceResponse) Status() string { +func (r GetLogsPromRulesResponse) Status() string { if r.HTTPResponse != nil { return r.HTTPResponse.Status } @@ -4462,7 +4462,7 @@ func (r PostSilenceResponse) Status() string { } // StatusCode returns HTTPResponse.StatusCode -func (r PostSilenceResponse) StatusCode() int { +func (r GetLogsPromRulesResponse) StatusCode() int { if r.HTTPResponse != nil { return r.HTTPResponse.StatusCode } @@ -4644,6 +4644,59 @@ func (r GetSeriesResponse) StatusCode() int { return 0 } +// GetAlertsWithResponse request returning *GetAlertsResponse +func (c *ClientWithResponses) GetAlertsWithResponse(ctx context.Context, tenant Tenant, params *GetAlertsParams, reqEditors ...RequestEditorFn) (*GetAlertsResponse, error) { + rsp, err := c.GetAlerts(ctx, tenant, params, reqEditors...) + if err != nil { + return nil, err + } + return ParseGetAlertsResponse(rsp) +} + +// DeleteSilenceWithResponse request returning *DeleteSilenceResponse +func (c *ClientWithResponses) DeleteSilenceWithResponse(ctx context.Context, tenant Tenant, silenceID openapi_types.UUID, reqEditors ...RequestEditorFn) (*DeleteSilenceResponse, error) { + rsp, err := c.DeleteSilence(ctx, tenant, silenceID, reqEditors...) + if err != nil { + return nil, err + } + return ParseDeleteSilenceResponse(rsp) +} + +// GetSilenceWithResponse request returning *GetSilenceResponse +func (c *ClientWithResponses) GetSilenceWithResponse(ctx context.Context, tenant Tenant, silenceID openapi_types.UUID, reqEditors ...RequestEditorFn) (*GetSilenceResponse, error) { + rsp, err := c.GetSilence(ctx, tenant, silenceID, reqEditors...) + if err != nil { + return nil, err + } + return ParseGetSilenceResponse(rsp) +} + +// GetSilencesWithResponse request returning *GetSilencesResponse +func (c *ClientWithResponses) GetSilencesWithResponse(ctx context.Context, tenant Tenant, params *GetSilencesParams, reqEditors ...RequestEditorFn) (*GetSilencesResponse, error) { + rsp, err := c.GetSilences(ctx, tenant, params, reqEditors...) + if err != nil { + return nil, err + } + return ParseGetSilencesResponse(rsp) +} + +// PostSilenceWithBodyWithResponse request with arbitrary body returning *PostSilenceResponse +func (c *ClientWithResponses) PostSilenceWithBodyWithResponse(ctx context.Context, tenant Tenant, params *PostSilenceParams, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*PostSilenceResponse, error) { + rsp, err := c.PostSilenceWithBody(ctx, tenant, params, contentType, body, reqEditors...) + if err != nil { + return nil, err + } + return ParsePostSilenceResponse(rsp) +} + +func (c *ClientWithResponses) PostSilenceWithResponse(ctx context.Context, tenant Tenant, params *PostSilenceParams, body PostSilenceJSONRequestBody, reqEditors ...RequestEditorFn) (*PostSilenceResponse, error) { + rsp, err := c.PostSilence(ctx, tenant, params, body, reqEditors...) + if err != nil { + return nil, err + } + return ParsePostSilenceResponse(rsp) +} + // GetLogLabelValuesWithResponse request returning *GetLogLabelValuesResponse func (c *ClientWithResponses) GetLogLabelValuesWithResponse(ctx context.Context, tenant Tenant, name string, params *GetLogLabelValuesParams, reqEditors ...RequestEditorFn) (*GetLogLabelValuesResponse, error) { rsp, err := c.GetLogLabelValues(ctx, tenant, name, params, reqEditors...) @@ -4783,78 +4836,25 @@ func (c *ClientWithResponses) GetLogsWithResponse(ctx context.Context, tenant Te if err != nil { return nil, err } - return ParseGetLogsResponse(rsp) -} - -// GetLogsPromAlertsWithResponse request returning *GetLogsPromAlertsResponse -func (c *ClientWithResponses) GetLogsPromAlertsWithResponse(ctx context.Context, tenant Tenant, reqEditors ...RequestEditorFn) (*GetLogsPromAlertsResponse, error) { - rsp, err := c.GetLogsPromAlerts(ctx, tenant, reqEditors...) - if err != nil { - return nil, err - } - return ParseGetLogsPromAlertsResponse(rsp) -} - -// GetLogsPromRulesWithResponse request returning *GetLogsPromRulesResponse -func (c *ClientWithResponses) GetLogsPromRulesWithResponse(ctx context.Context, tenant Tenant, reqEditors ...RequestEditorFn) (*GetLogsPromRulesResponse, error) { - rsp, err := c.GetLogsPromRules(ctx, tenant, reqEditors...) - if err != nil { - return nil, err - } - return ParseGetLogsPromRulesResponse(rsp) -} - -// GetAlertsWithResponse request returning *GetAlertsResponse -func (c *ClientWithResponses) GetAlertsWithResponse(ctx context.Context, tenant Tenant, params *GetAlertsParams, reqEditors ...RequestEditorFn) (*GetAlertsResponse, error) { - rsp, err := c.GetAlerts(ctx, tenant, params, reqEditors...) - if err != nil { - return nil, err - } - return ParseGetAlertsResponse(rsp) -} - -// DeleteSilenceWithResponse request returning *DeleteSilenceResponse -func (c *ClientWithResponses) DeleteSilenceWithResponse(ctx context.Context, tenant Tenant, silenceID openapi_types.UUID, reqEditors ...RequestEditorFn) (*DeleteSilenceResponse, error) { - rsp, err := c.DeleteSilence(ctx, tenant, silenceID, reqEditors...) - if err != nil { - return nil, err - } - return ParseDeleteSilenceResponse(rsp) -} - -// GetSilenceWithResponse request returning *GetSilenceResponse -func (c *ClientWithResponses) GetSilenceWithResponse(ctx context.Context, tenant Tenant, silenceID openapi_types.UUID, reqEditors ...RequestEditorFn) (*GetSilenceResponse, error) { - rsp, err := c.GetSilence(ctx, tenant, silenceID, reqEditors...) - if err != nil { - return nil, err - } - return ParseGetSilenceResponse(rsp) -} - -// GetSilencesWithResponse request returning *GetSilencesResponse -func (c *ClientWithResponses) GetSilencesWithResponse(ctx context.Context, tenant Tenant, params *GetSilencesParams, reqEditors ...RequestEditorFn) (*GetSilencesResponse, error) { - rsp, err := c.GetSilences(ctx, tenant, params, reqEditors...) - if err != nil { - return nil, err - } - return ParseGetSilencesResponse(rsp) + return ParseGetLogsResponse(rsp) } -// PostSilenceWithBodyWithResponse request with arbitrary body returning *PostSilenceResponse -func (c *ClientWithResponses) PostSilenceWithBodyWithResponse(ctx context.Context, tenant Tenant, params *PostSilenceParams, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*PostSilenceResponse, error) { - rsp, err := c.PostSilenceWithBody(ctx, tenant, params, contentType, body, reqEditors...) +// GetLogsPromAlertsWithResponse request returning *GetLogsPromAlertsResponse +func (c *ClientWithResponses) GetLogsPromAlertsWithResponse(ctx context.Context, tenant Tenant, reqEditors ...RequestEditorFn) (*GetLogsPromAlertsResponse, error) { + rsp, err := c.GetLogsPromAlerts(ctx, tenant, reqEditors...) if err != nil { return nil, err } - return ParsePostSilenceResponse(rsp) + return ParseGetLogsPromAlertsResponse(rsp) } -func (c *ClientWithResponses) PostSilenceWithResponse(ctx context.Context, tenant Tenant, params *PostSilenceParams, body PostSilenceJSONRequestBody, reqEditors ...RequestEditorFn) (*PostSilenceResponse, error) { - rsp, err := c.PostSilence(ctx, tenant, params, body, reqEditors...) +// GetLogsPromRulesWithResponse request returning *GetLogsPromRulesResponse +func (c *ClientWithResponses) GetLogsPromRulesWithResponse(ctx context.Context, tenant Tenant, reqEditors ...RequestEditorFn) (*GetLogsPromRulesResponse, error) { + rsp, err := c.GetLogsPromRules(ctx, tenant, reqEditors...) if err != nil { return nil, err } - return ParsePostSilenceResponse(rsp) + return ParseGetLogsPromRulesResponse(rsp) } // GetLabelValuesWithResponse request returning *GetLabelValuesResponse @@ -4929,6 +4929,126 @@ func (c *ClientWithResponses) GetSeriesWithResponse(ctx context.Context, tenant return ParseGetSeriesResponse(rsp) } +// ParseGetAlertsResponse parses an HTTP response from a GetAlertsWithResponse call +func ParseGetAlertsResponse(rsp *http.Response) (*GetAlertsResponse, error) { + bodyBytes, err := io.ReadAll(rsp.Body) + defer func() { _ = rsp.Body.Close() }() + if err != nil { + return nil, err + } + + response := &GetAlertsResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode/100 == 2: + var dest GettableAlerts + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON2XX = &dest + + } + + return response, nil +} + +// ParseDeleteSilenceResponse parses an HTTP response from a DeleteSilenceWithResponse call +func ParseDeleteSilenceResponse(rsp *http.Response) (*DeleteSilenceResponse, error) { + bodyBytes, err := io.ReadAll(rsp.Body) + defer func() { _ = rsp.Body.Close() }() + if err != nil { + return nil, err + } + + response := &DeleteSilenceResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + return response, nil +} + +// ParseGetSilenceResponse parses an HTTP response from a GetSilenceWithResponse call +func ParseGetSilenceResponse(rsp *http.Response) (*GetSilenceResponse, error) { + bodyBytes, err := io.ReadAll(rsp.Body) + defer func() { _ = rsp.Body.Close() }() + if err != nil { + return nil, err + } + + response := &GetSilenceResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode/100 == 2: + var dest GettableSilence + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON2XX = &dest + + } + + return response, nil +} + +// ParseGetSilencesResponse parses an HTTP response from a GetSilencesWithResponse call +func ParseGetSilencesResponse(rsp *http.Response) (*GetSilencesResponse, error) { + bodyBytes, err := io.ReadAll(rsp.Body) + defer func() { _ = rsp.Body.Close() }() + if err != nil { + return nil, err + } + + response := &GetSilencesResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode/100 == 2: + var dest GettableSilences + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON2XX = &dest + + } + + return response, nil +} + +// ParsePostSilenceResponse parses an HTTP response from a PostSilenceWithResponse call +func ParsePostSilenceResponse(rsp *http.Response) (*PostSilenceResponse, error) { + bodyBytes, err := io.ReadAll(rsp.Body) + defer func() { _ = rsp.Body.Close() }() + if err != nil { + return nil, err + } + + response := &PostSilenceResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode/100 == 2: + var dest PostableSilenceResponse + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON2XX = &dest + + } + + return response, nil +} + // ParseGetLogLabelValuesResponse parses an HTTP response from a GetLogLabelValuesWithResponse call func ParseGetLogLabelValuesResponse(rsp *http.Response) (*GetLogLabelValuesResponse, error) { bodyBytes, err := io.ReadAll(rsp.Body) @@ -5295,126 +5415,6 @@ func ParseGetLogsPromRulesResponse(rsp *http.Response) (*GetLogsPromRulesRespons return response, nil } -// ParseGetAlertsResponse parses an HTTP response from a GetAlertsWithResponse call -func ParseGetAlertsResponse(rsp *http.Response) (*GetAlertsResponse, error) { - bodyBytes, err := io.ReadAll(rsp.Body) - defer func() { _ = rsp.Body.Close() }() - if err != nil { - return nil, err - } - - response := &GetAlertsResponse{ - Body: bodyBytes, - HTTPResponse: rsp, - } - - switch { - case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode/100 == 2: - var dest GettableAlerts - if err := json.Unmarshal(bodyBytes, &dest); err != nil { - return nil, err - } - response.JSON2XX = &dest - - } - - return response, nil -} - -// ParseDeleteSilenceResponse parses an HTTP response from a DeleteSilenceWithResponse call -func ParseDeleteSilenceResponse(rsp *http.Response) (*DeleteSilenceResponse, error) { - bodyBytes, err := io.ReadAll(rsp.Body) - defer func() { _ = rsp.Body.Close() }() - if err != nil { - return nil, err - } - - response := &DeleteSilenceResponse{ - Body: bodyBytes, - HTTPResponse: rsp, - } - - return response, nil -} - -// ParseGetSilenceResponse parses an HTTP response from a GetSilenceWithResponse call -func ParseGetSilenceResponse(rsp *http.Response) (*GetSilenceResponse, error) { - bodyBytes, err := io.ReadAll(rsp.Body) - defer func() { _ = rsp.Body.Close() }() - if err != nil { - return nil, err - } - - response := &GetSilenceResponse{ - Body: bodyBytes, - HTTPResponse: rsp, - } - - switch { - case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode/100 == 2: - var dest GettableSilence - if err := json.Unmarshal(bodyBytes, &dest); err != nil { - return nil, err - } - response.JSON2XX = &dest - - } - - return response, nil -} - -// ParseGetSilencesResponse parses an HTTP response from a GetSilencesWithResponse call -func ParseGetSilencesResponse(rsp *http.Response) (*GetSilencesResponse, error) { - bodyBytes, err := io.ReadAll(rsp.Body) - defer func() { _ = rsp.Body.Close() }() - if err != nil { - return nil, err - } - - response := &GetSilencesResponse{ - Body: bodyBytes, - HTTPResponse: rsp, - } - - switch { - case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode/100 == 2: - var dest GettableSilences - if err := json.Unmarshal(bodyBytes, &dest); err != nil { - return nil, err - } - response.JSON2XX = &dest - - } - - return response, nil -} - -// ParsePostSilenceResponse parses an HTTP response from a PostSilenceWithResponse call -func ParsePostSilenceResponse(rsp *http.Response) (*PostSilenceResponse, error) { - bodyBytes, err := io.ReadAll(rsp.Body) - defer func() { _ = rsp.Body.Close() }() - if err != nil { - return nil, err - } - - response := &PostSilenceResponse{ - Body: bodyBytes, - HTTPResponse: rsp, - } - - switch { - case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode/100 == 2: - var dest PostableSilenceResponse - if err := json.Unmarshal(bodyBytes, &dest); err != nil { - return nil, err - } - response.JSON2XX = &dest - - } - - return response, nil -} - // ParseGetLabelValuesResponse parses an HTTP response from a GetLabelValuesWithResponse call func ParseGetLabelValuesResponse(rsp *http.Response) (*GetLabelValuesResponse, error) { bodyBytes, err := io.ReadAll(rsp.Body) diff --git a/client/spec.yaml b/client/spec.yaml index 4ddaef3e0..013d42d64 100644 --- a/client/spec.yaml +++ b/client/spec.yaml @@ -16,6 +16,8 @@ tags: description: Calls related to metric endpoints - name: logs description: Calls related to logs endpoint + - name: alerting + description: Calls related to alerting endpoints paths: /api/metrics/v1/{tenant}/api/v1/rules/raw: parameters: @@ -238,7 +240,7 @@ paths: description: Bad request 5XX: description: Server side error - /api/metrics/v1/{tenant}/am/api/v2/alerts: + /api/alerting/v1/{tenant}/api/v2/alerts: parameters: - $ref: '#/components/parameters/tenant' - in: query @@ -279,7 +281,7 @@ paths: type: string get: tags: - - metrics/alertmanagerv2 + - alerting summary: Get list of alerts from Alertmanager operationId: getAlerts description: | @@ -295,7 +297,7 @@ paths: description: Bad request 5XX: description: Server side error - /api/metrics/v1/{tenant}/am/api/v2/silences: + /api/alerting/v1/{tenant}/api/v2/silences: parameters: - $ref: '#/components/parameters/tenant' - in: query @@ -307,7 +309,7 @@ paths: type: string get: tags: - - metrics/alertmanagerv2 + - alerting summary: Get list of silences from Alertmanager operationId: getSilences description: | @@ -325,7 +327,7 @@ paths: description: Server side error post: tags: - - metrics/alertmanagerv2 + - alerting summary: Create a new silence in Alertmanager operationId: postSilence description: | @@ -348,7 +350,7 @@ paths: description: Bad request 5XX: description: Server side error - /api/metrics/v1/{tenant}/am/api/v2/silence/{silenceID}: + /api/alerting/v1/{tenant}/api/v2/silence/{silenceID}: parameters: - $ref: '#/components/parameters/tenant' - in: path @@ -360,7 +362,7 @@ paths: format: uuid get: tags: - - metrics/alertmanagerv2 + - alerting summary: Get a silence by its ID operationId: getSilence description: | @@ -378,7 +380,7 @@ paths: description: Server side error delete: tags: - - metrics/alertmanagerv2 + - alerting summary: Delete a silence by its ID operationId: deleteSilence description: | diff --git a/jsonnet/lib/observatorium-api.libsonnet b/jsonnet/lib/observatorium-api.libsonnet index 3dc18d249..28909ae32 100644 --- a/jsonnet/lib/observatorium-api.libsonnet +++ b/jsonnet/lib/observatorium-api.libsonnet @@ -177,7 +177,7 @@ function(params) { ( if api.config.alertmanager != {} then [ - '--metrics.alertmanager.endpoint=' + api.config.alertmanager.endpoint, + '--alerting.alertmanager.endpoint=' + api.config.alertmanager.endpoint, ] else [] ) diff --git a/main.go b/main.go index af2ff1c78..71a5914d0 100644 --- a/main.go +++ b/main.go @@ -47,6 +47,7 @@ import ( "google.golang.org/grpc/metadata" "google.golang.org/grpc/status" + alertingv1 "github.com/observatorium/api/api/alerting/v1" logsv1 "github.com/observatorium/api/api/logs/v1" metricslegacy "github.com/observatorium/api/api/metrics/legacy" metricsv1 "github.com/observatorium/api/api/metrics/v1" @@ -102,6 +103,7 @@ type config struct { server serverConfig tls tlsConfig metrics metricsConfig + alerting alertingConfig logs logsConfig traces tracesConfig probes probesConfig @@ -146,7 +148,6 @@ type metricsConfig struct { readEndpoint *url.URL writeEndpoint *url.URL rulesEndpoint *url.URL - alertmanagerEndpoint *url.URL upstreamWriteTimeout time.Duration upstreamCAFile string upstreamCertFile string @@ -158,6 +159,13 @@ type metricsConfig struct { enableCertWatcher bool } +type alertingConfig struct { + // alertmanagerEndpoint is the upstream Alertmanager proxied by the alerting API surface. + alertmanagerEndpoint *url.URL + // enabled turns on the alerting API surface; set when --alerting.alertmanager.endpoint is provided. + enabled bool +} + type logsConfig struct { readEndpoint *url.URL writeEndpoint *url.URL @@ -542,6 +550,9 @@ func main() { for _, groupHandler := range legacyMetricsGroup { instrumenter.InitializeMetrics(prometheus.Labels{"group": groupHandler.group, "handler": groupHandler.handler}) } + for _, groupHandler := range alertingV1Group { + instrumenter.InitializeMetrics(prometheus.Labels{"group": groupHandler.group, "handler": groupHandler.handler}) + } var ( tenantIDs = map[string]string{} @@ -642,10 +653,9 @@ func main() { } eps := metricsv1.Endpoints{ - ReadEndpoint: cfg.metrics.readEndpoint, - WriteEndpoint: cfg.metrics.writeEndpoint, - RulesEndpoint: cfg.metrics.rulesEndpoint, - AlertmanagerEndpoint: cfg.metrics.alertmanagerEndpoint, + ReadEndpoint: cfg.metrics.readEndpoint, + WriteEndpoint: cfg.metrics.writeEndpoint, + RulesEndpoint: cfg.metrics.rulesEndpoint, } rateLimitMiddleware := ratelimit.WithLocalRateLimiter(rateLimits...) @@ -748,25 +758,70 @@ func main() { metricsv1.WithReadMiddleware(metricsv1.WithEnforceTenancyOnQuery(cfg.metrics.tenantLabel, matchParamName)), metricsv1.WithReadMiddleware(metricsv1.WithEnforceAuthorizationLabels()), metricsv1.WithUIMiddleware(authorization.WithAuthorizers(authorizers, rbac.Read, "metrics")), - metricsv1.WithAlertmanagerAlertsReadMiddleware( - authorization.WithAuthorizers(authorizers, rbac.Read, "metrics"), - metricsv1.WithEnforceTenancyOnFilter(cfg.metrics.tenantLabel), + ), + ) + }) + } + + // Alerting. + if cfg.alerting.enabled { + + var loadInterval *time.Duration + + if cfg.metrics.enableCertWatcher { + loadInterval = &cfg.tls.reloadInterval + } + + alertingUpstreamClientOptions, err := tls.NewUpstreamOptions( + context.Background(), + cfg.metrics.upstreamCertFile, + cfg.metrics.upstreamKeyFile, + cfg.metrics.upstreamCAFile, + loadInterval, + logger, + g) + if err != nil { + stdlog.Fatalf("failed to read upstream alerting TLS: %v", err) + } + + rateLimitMiddleware := ratelimit.WithLocalRateLimiter(rateLimits...) + if rateLimitClient != nil { + rateLimitMiddleware = ratelimit.WithSharedRateLimiter(logger, rateLimitClient, rateLimits...) + } + + alertingMiddlewares := []func(http.Handler) http.Handler{ + authentication.WithTenantMiddlewares(pm.Middlewares), + authentication.WithTenantHeader(cfg.metrics.tenantHeader, tenantIDs), + rateLimitMiddleware, + } + + r.Group(func(r chi.Router) { + r.Mount("/api/alerting/v1/{tenant}", alertingv1.NewHandler( + cfg.alerting.alertmanagerEndpoint, + alertingUpstreamClientOptions, + alertingv1.WithLogger(logger), + alertingv1.WithRegistry(reg), + alertingv1.WithHandlerInstrumenter(instrumenter), + alertingv1.WithTenantLabel(cfg.metrics.tenantLabel), + alertingv1.WithGlobalMiddleware(alertingMiddlewares...), + alertingv1.WithAlertsReadMiddleware( + authorization.WithAuthorizers(authorizers, rbac.Read, "alerting"), + alertingv1.WithEnforceTenancyOnFilter(cfg.metrics.tenantLabel), ), - metricsv1.WithAlertmanagerSilenceReadMiddleware( - authorization.WithAuthorizers(authorizers, rbac.Read, "metrics"), - metricsv1.WithEnforceTenancyOnFilter(cfg.metrics.tenantLabel), + alertingv1.WithSilenceReadMiddleware( + authorization.WithAuthorizers(authorizers, rbac.Read, "alerting"), + alertingv1.WithEnforceTenancyOnFilter(cfg.metrics.tenantLabel), ), - metricsv1.WithAlertmanagerSilenceWriteMiddleware( - authorization.WithAuthorizers(authorizers, rbac.Write, "metrics"), + alertingv1.WithSilenceWriteMiddleware( + authorization.WithAuthorizers(authorizers, rbac.Write, "alerting"), ), - metricsv1.WithAlertmanagerSilenceIDReadMiddleware( - authorization.WithAuthorizers(authorizers, rbac.Read, "metrics"), + alertingv1.WithSilenceIDReadMiddleware( + authorization.WithAuthorizers(authorizers, rbac.Read, "alerting"), ), - metricsv1.WithAlertmanagerSilenceIDWriteMiddleware( - authorization.WithAuthorizers(authorizers, rbac.Write, "metrics"), + alertingv1.WithSilenceIDWriteMiddleware( + authorization.WithAuthorizers(authorizers, rbac.Write, "alerting"), ), - ), - ) + )) }) } @@ -1107,22 +1162,22 @@ func (m *multiStringFlag) String() string { //nolint:funlen,gocognit func parseFlags() (config, error) { var ( - rawTLSCipherSuites string - rawMetricsReadEndpoint string - rawMetricsWriteEndpoint string - rawMetricsRulesEndpoint string - rawMetricsAlertmanagerEndpoint string - rawLogsReadEndpoint string - rawLogsRulesEndpoint string - rawLogsTailEndpoint string - rawLogsWriteEndpoint string - rawLogsRuleLabelFilters string - rawLogsAuthExtractSelectors string - rawTracesReadEndpoint string - rawTracesTempoEndpoint string - rawTracesWriteOTLPGRPCEndpoint string - rawTracesWriteOTLPHTTPEndpoint string - rawProbesEndpoint string + rawTLSCipherSuites string + rawMetricsReadEndpoint string + rawMetricsWriteEndpoint string + rawMetricsRulesEndpoint string + rawAlertingAlertmanagerEndpoint string + rawLogsReadEndpoint string + rawLogsRulesEndpoint string + rawLogsTailEndpoint string + rawLogsWriteEndpoint string + rawLogsRuleLabelFilters string + rawLogsAuthExtractSelectors string + rawTracesReadEndpoint string + rawTracesTempoEndpoint string + rawTracesWriteOTLPGRPCEndpoint string + rawTracesWriteOTLPHTTPEndpoint string + rawProbesEndpoint string ) cfg := config{} @@ -1194,7 +1249,7 @@ func parseFlags() (config, error) { "The endpoint against which to make write requests for metrics.") flag.StringVar(&rawMetricsRulesEndpoint, "metrics.rules.endpoint", "", "The endpoint against which to make get requests for listing recording/alerting rules and put requests for creating/updating recording/alerting rules.") - flag.StringVar(&rawMetricsAlertmanagerEndpoint, "metrics.alertmanager.endpoint", "", + flag.StringVar(&rawAlertingAlertmanagerEndpoint, "alerting.alertmanager.endpoint", "", "The endpoint against which to make requests for alerts and silences") flag.DurationVar(&cfg.metrics.upstreamWriteTimeout, "metrics.write-timeout", metricsMiddlewareTimeout, "The HTTP write timeout for proxied requests to the metrics endpoint.") @@ -1331,15 +1386,15 @@ func parseFlags() (config, error) { cfg.metrics.rulesEndpoint = metricsRulesEndpoint } - if rawMetricsAlertmanagerEndpoint != "" { - cfg.metrics.enabled = true + if rawAlertingAlertmanagerEndpoint != "" { + cfg.alerting.enabled = true - alertmanagerEndpoint, err := url.ParseRequestURI(rawMetricsAlertmanagerEndpoint) + alertmanagerEndpoint, err := url.ParseRequestURI(rawAlertingAlertmanagerEndpoint) if err != nil { - return cfg, fmt.Errorf("--metrics.alertmanager.endpoint %q is invalid: %w", rawMetricsAlertmanagerEndpoint, err) + return cfg, fmt.Errorf("--alerting.alertmanager.endpoint %q is invalid: %w", rawAlertingAlertmanagerEndpoint, err) } - cfg.metrics.alertmanagerEndpoint = alertmanagerEndpoint + cfg.alerting.alertmanagerEndpoint = alertmanagerEndpoint } if rawLogsReadEndpoint != "" { @@ -1651,6 +1706,10 @@ var metricsV1Group = []groupHandler{ {"metricsv1", "receive"}, {"metricsv1", "rules"}, {"metricsv1", "rules-raw"}, - {"metricsv1", "alerts"}, - {"metricsv1", "silences"}, +} + +var alertingV1Group = []groupHandler{ + {"alertingv1", "alerts"}, + {"alertingv1", "silences"}, + {"alertingv1", "silence"}, } diff --git a/test/config/rbac.yaml b/test/config/rbac.yaml index b082ecab4..a533c2781 100644 --- a/test/config/rbac.yaml +++ b/test/config/rbac.yaml @@ -2,6 +2,7 @@ roles: - name: read-write-oidc resources: - metrics + - alerting - logs - traces - probes @@ -13,6 +14,7 @@ roles: - name: read-write-another-tenant resources: - metrics + - alerting - logs - traces tenants: @@ -30,6 +32,7 @@ roles: - name: read-write-mtls resources: - metrics + - alerting - logs - traces tenants: diff --git a/test/e2e/alerts_test.go b/test/e2e/alerts_test.go index cb0d9f64e..cceac1aea 100644 --- a/test/e2e/alerts_test.go +++ b/test/e2e/alerts_test.go @@ -52,7 +52,7 @@ func TestAlertmanagerApiProxy(t *testing.T) { t.Run("alerts-check-then-write-then-read", func(t *testing.T) { // create a alertmanager that goes through the gateway proxy and requires auth token - runtime := httptransport.New(api.Endpoint("https"), "/api/metrics/v1/test-oidc/am"+client2.DefaultBasePath, []string{"https"}) + runtime := httptransport.New(api.Endpoint("https"), "/api/alerting/v1/test-oidc"+client2.DefaultBasePath, []string{"https"}) tenantAlertmanagerClient := alert.New(runtime, strfmt.Default) // create an alertmanager client that goes directly to the alertmanager @@ -152,7 +152,7 @@ func TestAlertmanagerApiProxy(t *testing.T) { t.Run("silence-check-then-write-then-read", func(t *testing.T) { // create a alertmanager that goes through the gateway proxy and requires auth token - runtime := httptransport.New(api.Endpoint("https"), "/api/metrics/v1/test-oidc/am"+client2.DefaultBasePath, []string{"https"}) + runtime := httptransport.New(api.Endpoint("https"), "/api/alerting/v1/test-oidc"+client2.DefaultBasePath, []string{"https"}) tenantSilenceClient := silence.New(runtime, strfmt.Default) // create an alertmanager client that goes directly to the alertmanager @@ -263,6 +263,22 @@ func TestAlertmanagerApiProxy(t *testing.T) { testutil.Equals(t, 1, len(tenantSilenceResult.Payload)) }) + + t.Run("alerting-rbac-is-independent-of-metrics", func(t *testing.T) { + // admin@example.com holds the "metrics" (read) resource on the test-attacker + // tenant but NOT "alerting". Since the Alertmanager endpoints are now + // authorized against the dedicated "alerting" resource, the request must be + // rejected even though the token is valid and grants metrics access. + url := "https://" + api.Endpoint("https") + "/api/alerting/v1/test-attacker" + client2.DefaultBasePath + "alerts" + req, err := http.NewRequestWithContext(testContextWithTimeout(t), http.MethodGet, url, nil) + testutil.Ok(t, err) + + resp, err := authClient.Do(req) + testutil.Ok(t, err) + defer resp.Body.Close() + + testutil.Equals(t, http.StatusForbidden, resp.StatusCode) + }) } func testContextWithTimeout(t *testing.T) context.Context { diff --git a/test/e2e/services.go b/test/e2e/services.go index 19065d3a0..940101e86 100644 --- a/test/e2e/services.go +++ b/test/e2e/services.go @@ -491,7 +491,7 @@ func newObservatoriumAPIService( } if opts.alertmanagerEndpoint != "" { - args = append(args, "--metrics.alertmanager.endpoint="+opts.alertmanagerEndpoint) + args = append(args, "--alerting.alertmanager.endpoint="+opts.alertmanagerEndpoint) } if opts.logsEndpoint != "" {