Просмотр исходного кода

CLI: Add datasource list command

Lists all the datasources for an account via the CLI
Jason Wilder 11 лет назад
Родитель
Сommit
dda760b9b5
2 измененных файлов с 61 добавлено и 1 удалено
  1. 2 1
      main.go
  2. 59 0
      pkg/cmd/datasource.go

+ 2 - 1
main.go

@@ -32,7 +32,8 @@ func main() {
 	app.Usage = "grafana web"
 	app.Version = version
 	app.Commands = []cli.Command{cmd.Web, cmd.ImportJson,
-		cmd.ListAccounts, cmd.CreateAccount, cmd.DeleteAccount}
+		cmd.ListAccounts, cmd.CreateAccount, cmd.DeleteAccount,
+		cmd.ListDataSources}
 	app.Flags = append(app.Flags, []cli.Flag{}...)
 	app.Run(os.Args)
 

+ 59 - 0
pkg/cmd/datasource.go

@@ -0,0 +1,59 @@
+package cmd
+
+import (
+	"fmt"
+	"github.com/codegangsta/cli"
+	"github.com/grafana/grafana/pkg/bus"
+	"github.com/grafana/grafana/pkg/log"
+	m "github.com/grafana/grafana/pkg/models"
+	"github.com/grafana/grafana/pkg/services/sqlstore"
+	"github.com/grafana/grafana/pkg/setting"
+	"os"
+	"text/tabwriter"
+)
+
+var ListDataSources = cli.Command{
+	Name:        "datasource",
+	Usage:       "list datasources",
+	Description: "Lists the datasources in the system",
+	Action:      listDatasources,
+	Flags: []cli.Flag{
+		cli.StringFlag{
+			Name:  "config",
+			Value: "grafana.ini",
+			Usage: "path to config file",
+		},
+	},
+}
+
+func listDatasources(c *cli.Context) {
+	setting.NewConfigContext()
+	sqlstore.NewEngine()
+	sqlstore.EnsureAdminUser()
+
+	if !c.Args().Present() {
+		log.ConsoleFatal("Account name arg is required")
+	}
+
+	name := c.Args().First()
+	accountQuery := m.GetAccountByNameQuery{Name: name}
+	if err := bus.Dispatch(&accountQuery); err != nil {
+		log.ConsoleFatalf("Failed to find account: %s", err)
+	}
+
+	accountId := accountQuery.Result.Id
+
+	query := m.GetDataSourcesQuery{AccountId: accountId}
+	if err := bus.Dispatch(&query); err != nil {
+		log.ConsoleFatalf("Failed to find datasources: %s", err)
+	}
+
+	w := tabwriter.NewWriter(os.Stdout, 20, 1, 4, ' ', 0)
+
+	fmt.Fprintf(w, "ID\tNAME\tURL\tTYPE\tACCESS\tDEFAULT\n")
+	for _, ds := range query.Result {
+		fmt.Fprintf(w, "%d\t%s\t%s\t%s\t%s\t%t\n", ds.Id, ds.Name, ds.Url, ds.Type,
+			ds.Access, ds.IsDefault)
+	}
+	w.Flush()
+}