94 lines
1.8 KiB
Go
94 lines
1.8 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"flag"
|
|
"fmt"
|
|
"io"
|
|
"log"
|
|
"os"
|
|
"strings"
|
|
|
|
"github.com/influxdata/influxdb/chronograf"
|
|
"github.com/influxdata/influxdb/chronograf/bolt"
|
|
"github.com/influxdata/influxdb/pkger"
|
|
)
|
|
|
|
var chronografDBPath string
|
|
var outputFile string
|
|
|
|
func exec(dbPath, out string) error {
|
|
logger := log.New(os.Stdout, "", 0)
|
|
|
|
c := bolt.NewClient()
|
|
c.Path = dbPath
|
|
|
|
ctx := context.Background()
|
|
|
|
if err := c.Open(ctx, nil, chronograf.BuildInfo{}); err != nil {
|
|
return err
|
|
}
|
|
|
|
dashboardStore := c.DashboardsStore
|
|
|
|
ds, err := dashboardStore.All(ctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
pkg := &pkger.Pkg{
|
|
Objects: make([]pkger.Object, 0),
|
|
}
|
|
|
|
hasVar := map[string]bool{}
|
|
for _, d1 := range ds {
|
|
d2, vs, err := Convert1To2Dashboard(d1)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
pkg.Objects = append(pkg.Objects, pkger.DashboardToObject(d2, d2.Name))
|
|
|
|
for _, v := range vs {
|
|
name := strings.ToLower(v.Name)
|
|
if hasVar[name] {
|
|
// TODO(desa): not sure what we actually want to do here
|
|
logger.Printf("Found duplicate variables with name %q skipping\n", name)
|
|
continue
|
|
}
|
|
hasVar[name] = true
|
|
|
|
pkg.Objects = append(pkg.Objects, pkger.VariableToObject(v, name))
|
|
}
|
|
}
|
|
|
|
f, err := os.Create(out)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer f.Close()
|
|
|
|
b, err := pkg.Encode(pkger.EncodingYAML)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
_, err = io.Copy(f, bytes.NewReader(b))
|
|
return err
|
|
}
|
|
|
|
func main() {
|
|
flag.StringVar(&chronografDBPath, "db", "", "path to the chronograf database")
|
|
flag.StringVar(&outputFile, "output", "dashboards.yml", "path to the output yaml file")
|
|
flag.Parse()
|
|
|
|
if chronografDBPath == "" {
|
|
fmt.Fprintln(os.Stdout, "must supply db flag")
|
|
return
|
|
}
|
|
|
|
if err := exec(chronografDBPath, outputFile); err != nil {
|
|
fmt.Fprintln(os.Stderr, err.Error())
|
|
}
|
|
}
|