grafana/pkg/services/ngalert/api/compat_silences.go
Matthew Jacobson 09cb3a6048
Alerting: Add optional metadata via query param to silence GET requests (#88000)
* Alerting: Add optional metadata to GET silence responses

- ruleMetadata: to request rule metadata.
- accesscontrol: to request access control metadata.
2024-05-30 12:04:47 -04:00

70 lines
2.0 KiB
Go

package api
import (
"fmt"
"github.com/grafana/grafana/pkg/services/ngalert/api/tooling/definitions"
"github.com/grafana/grafana/pkg/services/ngalert/models"
)
// Silence-specific compat functions to convert between API and model types.
func SilenceToGettableGrafanaSilence(s *models.SilenceWithMetadata) definitions.GettableGrafanaSilence {
gettable := definitions.GettableGrafanaSilence{
GettableSilence: (*definitions.GettableSilence)(s.Silence),
}
if s.Metadata.Permissions != nil {
gettable.Permissions = make(map[definitions.SilencePermission]bool, len(*s.Metadata.Permissions))
for _, permission := range models.SilencePermissions() {
p, err := SilencePermissionToAPI(permission)
if err != nil {
// Skip unknown permissions in response.
continue
}
gettable.Permissions[p] = s.Metadata.Permissions.Has(permission)
}
}
if s.Metadata.RuleMetadata != nil {
gettable.Metadata = &definitions.SilenceMetadata{
RuleUID: s.Metadata.RuleMetadata.RuleUID,
RuleTitle: s.Metadata.RuleMetadata.RuleTitle,
FolderUID: s.Metadata.RuleMetadata.FolderUID,
}
}
return gettable
}
func SilencesToGettableGrafanaSilences(silences []*models.SilenceWithMetadata) definitions.GettableGrafanaSilences {
res := make(definitions.GettableGrafanaSilences, 0, len(silences))
for _, sil := range silences {
apiSil := SilenceToGettableGrafanaSilence(sil)
res = append(res, &apiSil)
}
return res
}
func PostableSilenceToSilence(s definitions.PostableSilence) models.Silence {
return models.Silence{
ID: &s.ID,
Status: nil,
UpdatedAt: nil,
Silence: s.Silence,
}
}
func SilencePermissionToAPI(p models.SilencePermission) (definitions.SilencePermission, error) {
switch p {
case models.SilencePermissionRead:
return definitions.SilencePermissionRead, nil
case models.SilencePermissionCreate:
return definitions.SilencePermissionCreate, nil
case models.SilencePermissionWrite:
return definitions.SilencePermissionWrite, nil
default:
return "", fmt.Errorf("unknown permission: %s", p)
}
}