mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
* Alerting: Add optional metadata to GET silence responses - ruleMetadata: to request rule metadata. - accesscontrol: to request access control metadata.
70 lines
2.0 KiB
Go
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)
|
|
}
|
|
}
|