diff --git a/client/client.gen.go b/client/client.gen.go index 055b4f14a..b4a7f9e24 100644 --- a/client/client.gen.go +++ b/client/client.gen.go @@ -16,6 +16,7 @@ import ( "github.com/ghodss/yaml" "github.com/oapi-codegen/runtime" + openapi_types "github.com/oapi-codegen/runtime/types" externalRef0 "github.com/observatorium/api/client/models" externalRef1 "github.com/observatorium/api/client/parameters" externalRef2 "github.com/observatorium/api/client/responses" @@ -121,6 +122,39 @@ 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 @@ -214,6 +248,9 @@ type PostlogEntriesJSONRequestBody = externalRef0.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 = externalRef0.PostableSilence + // RequestEditorFn is the function signature for the RequestEditor callback function type RequestEditorFn func(ctx context.Context, req *http.Request) error @@ -339,6 +376,23 @@ type ClientInterface interface { // GetLogsPromRules request GetLogsPromRules(ctx context.Context, tenant externalRef1.Tenant, reqEditors ...RequestEditorFn) (*http.Response, error) + // GetAlerts request + GetAlerts(ctx context.Context, tenant externalRef1.Tenant, params *GetAlertsParams, reqEditors ...RequestEditorFn) (*http.Response, error) + + // DeleteSilence request + DeleteSilence(ctx context.Context, tenant externalRef1.Tenant, silenceID openapi_types.UUID, reqEditors ...RequestEditorFn) (*http.Response, error) + + // GetSilence request + GetSilence(ctx context.Context, tenant externalRef1.Tenant, silenceID openapi_types.UUID, reqEditors ...RequestEditorFn) (*http.Response, error) + + // GetSilences request + GetSilences(ctx context.Context, tenant externalRef1.Tenant, params *GetSilencesParams, reqEditors ...RequestEditorFn) (*http.Response, error) + + // PostSilenceWithBody request with any body + PostSilenceWithBody(ctx context.Context, tenant externalRef1.Tenant, params *PostSilenceParams, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) + + PostSilence(ctx context.Context, tenant externalRef1.Tenant, params *PostSilenceParams, body PostSilenceJSONRequestBody, reqEditors ...RequestEditorFn) (*http.Response, error) + // GetLabelValues request GetLabelValues(ctx context.Context, tenant externalRef1.Tenant, labelName string, params *GetLabelValuesParams, reqEditors ...RequestEditorFn) (*http.Response, error) @@ -580,6 +634,78 @@ func (c *Client) GetLogsPromRules(ctx context.Context, tenant externalRef1.Tenan return c.Client.Do(req) } +func (c *Client) GetAlerts(ctx context.Context, tenant externalRef1.Tenant, params *GetAlertsParams, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewGetAlertsRequest(c.Server, tenant, params) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if err := c.applyEditors(ctx, req, reqEditors); err != nil { + return nil, err + } + return c.Client.Do(req) +} + +func (c *Client) DeleteSilence(ctx context.Context, tenant externalRef1.Tenant, silenceID openapi_types.UUID, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewDeleteSilenceRequest(c.Server, tenant, silenceID) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if err := c.applyEditors(ctx, req, reqEditors); err != nil { + return nil, err + } + return c.Client.Do(req) +} + +func (c *Client) GetSilence(ctx context.Context, tenant externalRef1.Tenant, silenceID openapi_types.UUID, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewGetSilenceRequest(c.Server, tenant, silenceID) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if err := c.applyEditors(ctx, req, reqEditors); err != nil { + return nil, err + } + return c.Client.Do(req) +} + +func (c *Client) GetSilences(ctx context.Context, tenant externalRef1.Tenant, params *GetSilencesParams, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewGetSilencesRequest(c.Server, tenant, params) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if err := c.applyEditors(ctx, req, reqEditors); err != nil { + return nil, err + } + return c.Client.Do(req) +} + +func (c *Client) PostSilenceWithBody(ctx context.Context, tenant externalRef1.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 + } + req = req.WithContext(ctx) + if err := c.applyEditors(ctx, req, reqEditors); err != nil { + return nil, err + } + return c.Client.Do(req) +} + +func (c *Client) PostSilence(ctx context.Context, tenant externalRef1.Tenant, params *PostSilenceParams, body PostSilenceJSONRequestBody, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewPostSilenceRequest(c.Server, tenant, params, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if err := c.applyEditors(ctx, req, reqEditors); err != nil { + return nil, err + } + return c.Client.Do(req) +} + func (c *Client) GetLabelValues(ctx context.Context, tenant externalRef1.Tenant, labelName string, params *GetLabelValuesParams, reqEditors ...RequestEditorFn) (*http.Response, error) { req, err := NewGetLabelValuesRequest(c.Server, tenant, labelName, params) if err != nil { @@ -1688,8 +1814,327 @@ func NewGetLogsPromAlertsRequest(server string, tenant externalRef1.Tenant) (*ht return req, nil } -// NewGetLogsPromRulesRequest generates requests for GetLogsPromRules -func NewGetLogsPromRulesRequest(server string, tenant externalRef1.Tenant) (*http.Request, error) { +// NewGetLogsPromRulesRequest generates requests for GetLogsPromRules +func NewGetLogsPromRulesRequest(server string, tenant externalRef1.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/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 +} + +// NewGetAlertsRequest generates requests for GetAlerts +func NewGetAlertsRequest(server string, tenant externalRef1.Tenant, params *GetAlertsParams) (*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/metrics/v1/%s/am/api/v2/alerts", 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.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 params.Receiver != 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 + } else { + for k, v := range parsed { + for _, v2 := range v { + queryValues.Add(k, v2) + } + } + } + + } + + 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 + } else { + for k, v := range parsed { + for _, v2 := range v { + queryValues.Add(k, v2) + } + } + } + + } + + queryURL.RawQuery = queryValues.Encode() + } + + req, err := http.NewRequest("GET", queryURL.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewDeleteSilenceRequest generates requests for DeleteSilence +func NewDeleteSilenceRequest(server string, tenant externalRef1.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 + } + + 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/metrics/v1/%s/am/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 +} + +// NewGetSilenceRequest generates requests for GetSilence +func NewGetSilenceRequest(server string, tenant externalRef1.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 + } + + 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/metrics/v1/%s/am/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("GET", queryURL.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewGetSilencesRequest generates requests for GetSilences +func NewGetSilencesRequest(server string, tenant externalRef1.Tenant, params *GetSilencesParams) (*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/metrics/v1/%s/am/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 + } else { + for k, v := range parsed { + for _, v2 := range v { + queryValues.Add(k, v2) + } + } + } + + } + + queryURL.RawQuery = queryValues.Encode() + } + + req, err := http.NewRequest("GET", queryURL.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewPostSilenceRequest calls the generic PostSilence builder with application/json body +func NewPostSilenceRequest(server string, tenant externalRef1.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 externalRef1.Tenant, params *PostSilenceParams, contentType string, body io.Reader) (*http.Request, error) { var err error var pathParam0 string @@ -1704,7 +2149,7 @@ func NewGetLogsPromRulesRequest(server string, tenant externalRef1.Tenant) (*htt return nil, err } - operationPath := fmt.Sprintf("/api/logs/v1/%s/prometheus/api/v1/rules", pathParam0) + operationPath := fmt.Sprintf("/api/metrics/v1/%s/am/api/v2/silences", pathParam0) if operationPath[0] == '/' { operationPath = "." + operationPath } @@ -1714,11 +2159,35 @@ func NewGetLogsPromRulesRequest(server string, tenant externalRef1.Tenant) (*htt return nil, err } - req, err := http.NewRequest("GET", queryURL.String(), nil) + 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 + } 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) if err != nil { return nil, err } + req.Header.Add("Content-Type", contentType) + return req, nil } @@ -2498,6 +2967,23 @@ type ClientWithResponsesInterface interface { // GetLogsPromRulesWithResponse request GetLogsPromRulesWithResponse(ctx context.Context, tenant externalRef1.Tenant, reqEditors ...RequestEditorFn) (*GetLogsPromRulesResponse, error) + // GetAlertsWithResponse request + GetAlertsWithResponse(ctx context.Context, tenant externalRef1.Tenant, params *GetAlertsParams, reqEditors ...RequestEditorFn) (*GetAlertsResponse, error) + + // DeleteSilenceWithResponse request + DeleteSilenceWithResponse(ctx context.Context, tenant externalRef1.Tenant, silenceID openapi_types.UUID, reqEditors ...RequestEditorFn) (*DeleteSilenceResponse, error) + + // GetSilenceWithResponse request + GetSilenceWithResponse(ctx context.Context, tenant externalRef1.Tenant, silenceID openapi_types.UUID, reqEditors ...RequestEditorFn) (*GetSilenceResponse, error) + + // GetSilencesWithResponse request + GetSilencesWithResponse(ctx context.Context, tenant externalRef1.Tenant, params *GetSilencesParams, reqEditors ...RequestEditorFn) (*GetSilencesResponse, error) + + // PostSilenceWithBodyWithResponse request with any body + PostSilenceWithBodyWithResponse(ctx context.Context, tenant externalRef1.Tenant, params *PostSilenceParams, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*PostSilenceResponse, error) + + PostSilenceWithResponse(ctx context.Context, tenant externalRef1.Tenant, params *PostSilenceParams, body PostSilenceJSONRequestBody, reqEditors ...RequestEditorFn) (*PostSilenceResponse, error) + // GetLabelValuesWithResponse request GetLabelValuesWithResponse(ctx context.Context, tenant externalRef1.Tenant, labelName string, params *GetLabelValuesParams, reqEditors ...RequestEditorFn) (*GetLabelValuesResponse, error) @@ -2870,6 +3356,115 @@ func (r GetLogsPromRulesResponse) StatusCode() int { return 0 } +type GetAlertsResponse struct { + Body []byte + HTTPResponse *http.Response + JSON2XX *externalRef0.GettableAlerts +} + +// Status returns HTTPResponse.Status +func (r GetAlertsResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r GetAlertsResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type DeleteSilenceResponse struct { + Body []byte + HTTPResponse *http.Response +} + +// Status returns HTTPResponse.Status +func (r DeleteSilenceResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r DeleteSilenceResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type GetSilenceResponse struct { + Body []byte + HTTPResponse *http.Response + JSON2XX *externalRef0.GettableSilence +} + +// Status returns HTTPResponse.Status +func (r GetSilenceResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r GetSilenceResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type GetSilencesResponse struct { + Body []byte + HTTPResponse *http.Response + JSON2XX *externalRef0.GettableSilences +} + +// Status returns HTTPResponse.Status +func (r GetSilencesResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r GetSilencesResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type PostSilenceResponse struct { + Body []byte + HTTPResponse *http.Response + JSON2XX *externalRef0.PostSilenceResponse +} + +// Status returns HTTPResponse.Status +func (r PostSilenceResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r PostSilenceResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + type GetLabelValuesResponse struct { Body []byte HTTPResponse *http.Response @@ -3205,6 +3800,59 @@ func (c *ClientWithResponses) GetLogsPromRulesWithResponse(ctx context.Context, return ParseGetLogsPromRulesResponse(rsp) } +// GetAlertsWithResponse request returning *GetAlertsResponse +func (c *ClientWithResponses) GetAlertsWithResponse(ctx context.Context, tenant externalRef1.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 externalRef1.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 externalRef1.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 externalRef1.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 externalRef1.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 externalRef1.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) +} + // GetLabelValuesWithResponse request returning *GetLabelValuesResponse func (c *ClientWithResponses) GetLabelValuesWithResponse(ctx context.Context, tenant externalRef1.Tenant, labelName string, params *GetLabelValuesParams, reqEditors ...RequestEditorFn) (*GetLabelValuesResponse, error) { rsp, err := c.GetLabelValues(ctx, tenant, labelName, params, reqEditors...) @@ -3643,6 +4291,126 @@ 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 externalRef0.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 externalRef0.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 externalRef0.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 externalRef0.PostSilenceResponse + 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/models/models.gen.go b/client/models/models.gen.go index beb78f918..0c8d22ec3 100644 --- a/client/models/models.gen.go +++ b/client/models/models.gen.go @@ -5,10 +5,18 @@ package models import ( "encoding/json" + "time" "github.com/oapi-codegen/runtime" ) +// Defines values for AlertStatusState. +const ( + AlertStatusStateActive AlertStatusState = "active" + AlertStatusStateSuppressed AlertStatusState = "suppressed" + AlertStatusStateUnprocessed AlertStatusState = "unprocessed" +) + // Defines values for AlertingRuleEvaluatedType. const ( Alerting AlertingRuleEvaluatedType = "alerting" @@ -47,6 +55,13 @@ const ( Recording RecordingRuleEvaluatedType = "recording" ) +// Defines values for SilenceStatusState. +const ( + SilenceStatusStateActive SilenceStatusState = "active" + SilenceStatusStateExpired SilenceStatusState = "expired" + SilenceStatusStatePending SilenceStatusState = "pending" +) + // ActiveAlert defines model for ActiveAlert. type ActiveAlert struct { ActiveAt string `json:"activeAt"` @@ -56,6 +71,23 @@ type ActiveAlert struct { Value string `json:"value"` } +// Alert defines model for Alert. +type Alert struct { + GeneratorURL *string `json:"generatorURL,omitempty"` + Labels LabelSet `json:"labels"` +} + +// AlertStatus defines model for AlertStatus. +type AlertStatus struct { + InhibitedBy []string `json:"inhibitedBy"` + MutedBy []string `json:"mutedBy"` + SilencedBy []string `json:"silencedBy"` + State AlertStatusState `json:"state"` +} + +// AlertStatusState defines model for AlertStatus.State. +type AlertStatusState string + // AlertingRule defines model for AlertingRule. type AlertingRule struct { Alert string `json:"alert"` @@ -83,12 +115,46 @@ type AlertingRuleEvaluated struct { // AlertingRuleEvaluatedType defines model for AlertingRuleEvaluated.Type. type AlertingRuleEvaluatedType string +// GettableAlert defines model for GettableAlert. +type GettableAlert struct { + Annotations LabelSet `json:"annotations"` + EndsAt time.Time `json:"endsAt"` + Fingerprint string `json:"fingerprint"` + GeneratorURL *string `json:"generatorURL,omitempty"` + Labels LabelSet `json:"labels"` + Receivers []Receiver `json:"receivers"` + StartsAt time.Time `json:"startsAt"` + Status AlertStatus `json:"status"` + UpdatedAt time.Time `json:"updatedAt"` +} + +// GettableAlerts defines model for GettableAlerts. +type GettableAlerts = []GettableAlert + +// GettableSilence defines model for GettableSilence. +type GettableSilence struct { + Comment string `json:"comment"` + CreatedBy string `json:"createdBy"` + EndsAt time.Time `json:"endsAt"` + Id string `json:"id"` + Matchers Matchers `json:"matchers"` + StartsAt time.Time `json:"startsAt"` + Status SilenceStatus `json:"status"` + UpdatedAt time.Time `json:"updatedAt"` +} + +// GettableSilences defines model for GettableSilences. +type GettableSilences = []GettableSilence + // InstantVectors defines model for InstantVectors. type InstantVectors struct { Metric map[string]string `json:"metric"` Values []ScalarOrString `json:"values"` } +// LabelSet defines model for LabelSet. +type LabelSet map[string]string + // LogInstantQueryResponse defines model for LogInstantQueryResponse. type LogInstantQueryResponse struct { Result []LogInstantQueryResponse_Result_Item `json:"result"` @@ -124,6 +190,17 @@ type LogSeriesRequest struct { Start *string `json:"start,omitempty"` } +// Matcher defines model for Matcher. +type Matcher struct { + IsEqual *bool `json:"isEqual,omitempty"` + IsRegex bool `json:"isRegex"` + Name string `json:"name"` + Value string `json:"value"` +} + +// Matchers defines model for Matchers. +type Matchers = []Matcher + // MetricInstantQueryResponse defines model for MetricInstantQueryResponse. type MetricInstantQueryResponse struct { Result []MetricInstantQueryResponse_Result_Item `json:"result"` @@ -152,6 +229,33 @@ type MetricRangeQueryResponse_Result_Item struct { // MetricRangeQueryResponseResultType defines model for MetricRangeQueryResponse.ResultType. type MetricRangeQueryResponseResultType string +// PostSilenceResponse defines model for PostSilenceResponse. +type PostSilenceResponse struct { + SilenceID *string `json:"silenceID,omitempty"` +} + +// PostableAlert defines model for PostableAlert. +type PostableAlert struct { + Annotations *LabelSet `json:"annotations,omitempty"` + EndsAt *time.Time `json:"endsAt,omitempty"` + GeneratorURL *string `json:"generatorURL,omitempty"` + Labels LabelSet `json:"labels"` + StartsAt *time.Time `json:"startsAt,omitempty"` +} + +// PostableAlerts defines model for PostableAlerts. +type PostableAlerts = []PostableAlert + +// PostableSilence defines model for PostableSilence. +type PostableSilence struct { + Comment string `json:"comment"` + CreatedBy string `json:"createdBy"` + EndsAt time.Time `json:"endsAt"` + Id *string `json:"id,omitempty"` + Matchers Matchers `json:"matchers"` + StartsAt time.Time `json:"startsAt"` +} + // PushLogs defines model for PushLogs. type PushLogs struct { Stream map[string]string `json:"stream"` @@ -164,6 +268,11 @@ type RangeVectors struct { Values []ScalarOrString `json:"values"` } +// Receiver defines model for Receiver. +type Receiver struct { + Name string `json:"name"` +} + // RecordingRule defines model for RecordingRule. type RecordingRule struct { Expr string `json:"expr"` @@ -239,6 +348,23 @@ type ScalarOrString_Item struct { union json.RawMessage } +// Silence defines model for Silence. +type Silence struct { + Comment string `json:"comment"` + CreatedBy string `json:"createdBy"` + EndsAt time.Time `json:"endsAt"` + Matchers Matchers `json:"matchers"` + StartsAt time.Time `json:"startsAt"` +} + +// SilenceStatus defines model for SilenceStatus. +type SilenceStatus struct { + State SilenceStatusState `json:"state"` +} + +// SilenceStatusState defines model for SilenceStatus.State. +type SilenceStatusState string + // StreamValues defines model for StreamValues. type StreamValues struct { Stream map[string]string `json:"stream"` diff --git a/client/models/models.yaml b/client/models/models.yaml index 3758022d8..f78912b94 100644 --- a/client/models/models.yaml +++ b/client/models/models.yaml @@ -1,5 +1,184 @@ components: schemas: + Matcher: + type: object + properties: + name: + type: string + value: + type: string + isRegex: + type: boolean + isEqual: + type: boolean + default: true + required: + - name + - value + - isRegex + Matchers: + type: array + items: + $ref: '#/components/schemas/Matcher' + minItems: 1 + LabelSet: + type: object + additionalProperties: + type: string + Silence: + type: object + properties: + matchers: + $ref: '#/components/schemas/Matchers' + startsAt: + type: string + format: date-time + endsAt: + type: string + format: date-time + createdBy: + type: string + comment: + type: string + required: + - matchers + - startsAt + - endsAt + - createdBy + - comment + SilenceStatus: + type: object + properties: + state: + type: string + enum: ["expired", "active", "pending"] + required: + - state + GettableSilence: + allOf: + - type: object + properties: + id: + type: string + status: + $ref: '#/components/schemas/SilenceStatus' + updatedAt: + type: string + format: date-time + required: + - id + - status + - updatedAt + - $ref: '#/components/schemas/Silence' + GettableSilences: + type: array + items: + $ref: '#/components/schemas/GettableSilence' + PostableSilence: + allOf: + - type: object + properties: + id: + type: string + - $ref: '#/components/schemas/Silence' + PostSilenceResponse: + type: object + properties: + silenceID: + type: string + Receiver: + type: object + properties: + name: + type: string + required: + - name + Alert: + type: object + properties: + labels: + $ref: '#/components/schemas/LabelSet' + generatorURL: + type: string + format: uri + required: + - labels + AlertStatus: + type: object + properties: + state: + type: string + enum: ['unprocessed', 'active', 'suppressed'] + silencedBy: + type: array + items: + type: string + inhibitedBy: + type: array + items: + type: string + mutedBy: + type: array + items: + type: string + required: + - state + - silencedBy + - inhibitedBy + - mutedBy + GettableAlert: + allOf: + - type: object + properties: + annotations: + $ref: '#/components/schemas/LabelSet' + receivers: + type: array + items: + $ref: '#/components/schemas/Receiver' + fingerprint: + type: string + startsAt: + type: string + format: date-time + updatedAt: + type: string + format: date-time + endsAt: + type: string + format: date-time + status: + $ref: '#/components/schemas/AlertStatus' + required: + - receivers + - fingerprint + - startsAt + - updatedAt + - endsAt + - annotations + - status + - $ref: '#/components/schemas/Alert' + GettableAlerts: + type: array + items: + $ref: '#/components/schemas/GettableAlert' + PostableAlert: + allOf: + - type: object + properties: + startsAt: + type: string + format: date-time + endsAt: + type: string + format: date-time + annotations: + $ref: '#/components/schemas/LabelSet' + - $ref: '#/components/schemas/Alert' + PostableAlerts: + type: array + items: + $ref: '#/components/schemas/PostableAlert' Rules: type: object required: diff --git a/client/spec.yaml b/client/spec.yaml index cef2249a7..997deea95 100644 --- a/client/spec.yaml +++ b/client/spec.yaml @@ -260,6 +260,158 @@ paths: description: Bad request "5XX": description: Server side error + /api/metrics/v1/{tenant}/am/api/v2/alerts: + parameters: + - $ref: ./parameters/parameters.yaml#/components/parameters/tenant + - in: query + name: active + description: Include active alerts in results. If false, excludes active alerts and returns only suppressed (silenced or inhibited) alerts. + schema: + type: boolean + default: true + - in: query + name: silenced + description: Include silenced alerts in results. If false, excludes silenced alerts. Note that true (default) shows both silenced and non-silenced alerts. + schema: + type: boolean + default: true + - in: query + name: inhibited + description: Include inhibited alerts in results. If false, excludes inhibited alerts. Note that true (default) shows both inhibited and non-inhibited alerts. + schema: + type: boolean + default: true + - in: query + name: unprocessed + description: Include unprocessed alerts in results. If false, excludes unprocessed alerts. Note that true (default) shows both processed and unprocessed alerts. + schema: + type: boolean + default: true + - in: query + name: receiver + description: A regex matching receivers to filter alerts by + schema: + type: string + - in: query + name: filter + description: A matcher expression to filter alerts. For example `alertname="MyAlert"`. It can be repeated to apply multiple matchers. + schema: + type: array + items: + type: string + get: + tags: + - metrics/alertmanagerv2 + summary: Get list of alerts from Alertmanager + operationId: getAlerts + description: | + Get list of alerts from Alertmanager for a tenant + responses: + "2XX": + description: List of alerts + content: + application/json: + schema: + $ref: ./models/models.yaml#/components/schemas/GettableAlerts + "4XX": + description: Bad request + "5XX": + description: Server side error + /api/metrics/v1/{tenant}/am/api/v2/silences: + parameters: + - $ref: ./parameters/parameters.yaml#/components/parameters/tenant + - in: query + name: filter + description: A matcher expression to filter silences. For example `alertname="MyAlert"`. It can be repeated to apply multiple matchers. + schema: + type: array + items: + type: string + get: + tags: + - metrics/alertmanagerv2 + summary: Get list of silences from Alertmanager + operationId: getSilences + description: | + Get list of silences from Alertmanager for a tenant + responses: + "2XX": + description: List of silences + content: + application/json: + schema: + $ref: ./models/models.yaml#/components/schemas/GettableSilences + "4XX": + description: Bad request + "5XX": + description: Server side error + post: + tags: + - metrics/alertmanagerv2 + summary: Create a new silence in Alertmanager + operationId: postSilence + description: | + Post a new silence or update an existing one + requestBody: + description: The silence to create + required: true + content: + application/json: + schema: + $ref: ./models/models.yaml#/components/schemas/PostableSilence + responses: + "2XX": + description: Silence created successfully + content: + application/json: + schema: + $ref: ./models/models.yaml#/components/schemas/PostSilenceResponse + "4XX": + description: Bad request + "5XX": + description: Server side error + /api/metrics/v1/{tenant}/am/api/v2/silence/{silenceID}: + parameters: + - $ref: ./parameters/parameters.yaml#/components/parameters/tenant + - in: path + name: silenceID + required: true + description: ID of the silence to get + schema: + type: string + format: uuid + get: + tags: + - metrics/alertmanagerv2 + summary: Get a silence by its ID + operationId: getSilence + description: | + Get a silence by its ID + responses: + "2XX": + description: Get silence response + content: + application/json: + schema: + $ref: ./models/models.yaml#/components/schemas/GettableSilence + "404": + description: A silence with the specified ID was not found + "5XX": + description: Server side error + delete: + tags: + - metrics/alertmanagerv2 + summary: Delete a silence by its ID + operationId: deleteSilence + description: | + Delete a silence by its ID + responses: + "2XX": + description: Delete silence response + "404": + description: A silence with the specified ID was not found + "5XX": + description: Server side error /api/logs/v1/{tenant}/loki/api/v1/push: parameters: - $ref: ./parameters/parameters.yaml#/components/parameters/tenant