grafana/pkg/services/ngalert/api/tooling/cmd/clean-swagger/main.go
Owen Diehl e065e19583
Fix/ngalert generation (#33172)
* fixes pkg names & alerting openapi generation

* cleans up api generation, uses docker & removes python
2021-04-20 13:12:32 -04:00

76 lines
1.4 KiB
Go

package main
import (
"encoding/json"
"flag"
"io/ioutil"
"log"
"strings"
)
const RefKey = "$ref"
func main() {
var input, output string
flag.StringVar(&input, "if", "", "input file")
flag.StringVar(&output, "of", "", "output file")
flag.Parse()
if input == "" || output == "" {
log.Fatal("no file specified, input", input, ", output", output)
}
//nolint
b, err := ioutil.ReadFile(input)
if err != nil {
log.Fatal(err)
}
data := make(map[string]interface{})
if err := json.Unmarshal(b, &data); err != nil {
log.Fatal(err)
}
info, ok := data["info"].(map[string]interface{})
if info == nil {
log.Fatal("expecting 'info' field")
}
if !ok {
log.Fatal("unable to turn info field into map[string]interface{}")
}
if info["title"] == nil {
info["title"] = "Unified Alerting API"
}
definitions, ok := data["definitions"]
if !ok {
log.Fatal("no definitions")
}
defs := definitions.(map[string]interface{})
for k, v := range defs {
vMap := v.(map[string]interface{})
refKey, ok := vMap[RefKey]
if !ok {
continue
}
if strings.TrimPrefix(refKey.(string), "#/definitions/") == k {
log.Println("removing circular ref key", refKey)
delete(vMap, RefKey)
}
}
out, err := json.MarshalIndent(data, "", " ")
if err != nil {
log.Fatal(err)
}
err = ioutil.WriteFile(output, out, 0644)
if err != nil {
log.Fatal(err)
}
}