|
|
|
|
@ -19,6 +19,41 @@ var ( |
|
|
|
|
Description: "Lists the datasources in the system", |
|
|
|
|
Action: listDatasources, |
|
|
|
|
} |
|
|
|
|
CreateDataSource = cli.Command{ |
|
|
|
|
Name: "datasource:create", |
|
|
|
|
Usage: "creates a new datasource", |
|
|
|
|
Description: "Creates a new datasource", |
|
|
|
|
Action: createDataSource, |
|
|
|
|
Flags: []cli.Flag{ |
|
|
|
|
cli.StringFlag{ |
|
|
|
|
Name: "type", |
|
|
|
|
Value: "graphite", |
|
|
|
|
Usage: fmt.Sprintf("Datasource type [%s,%s,%s,%s]", |
|
|
|
|
m.DS_GRAPHITE, m.DS_INFLUXDB, m.DS_ES, m.DS_OPENTSDB), |
|
|
|
|
}, |
|
|
|
|
cli.StringFlag{ |
|
|
|
|
Name: "access", |
|
|
|
|
Value: "proxy", |
|
|
|
|
Usage: "Datasource access [proxy,direct]", |
|
|
|
|
}, |
|
|
|
|
cli.BoolFlag{ |
|
|
|
|
Name: "default", |
|
|
|
|
Usage: "Make this the default datasource", |
|
|
|
|
}, |
|
|
|
|
cli.StringFlag{ |
|
|
|
|
Name: "db", |
|
|
|
|
Usage: "InfluxDB DB", |
|
|
|
|
}, |
|
|
|
|
cli.StringFlag{ |
|
|
|
|
Name: "user", |
|
|
|
|
Usage: "InfluxDB username", |
|
|
|
|
}, |
|
|
|
|
cli.StringFlag{ |
|
|
|
|
Name: "password", |
|
|
|
|
Usage: "InfluxDB password", |
|
|
|
|
}, |
|
|
|
|
}, |
|
|
|
|
} |
|
|
|
|
DescribeDataSource = cli.Command{ |
|
|
|
|
Name: "datasource:info", |
|
|
|
|
Usage: "describe the details of a datasource", |
|
|
|
|
@ -27,6 +62,68 @@ var ( |
|
|
|
|
} |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
func createDataSource(c *cli.Context) { |
|
|
|
|
setting.NewConfigContext() |
|
|
|
|
sqlstore.NewEngine() |
|
|
|
|
sqlstore.EnsureAdminUser() |
|
|
|
|
|
|
|
|
|
if len(c.Args()) != 3 { |
|
|
|
|
log.ConsoleFatal("Missing required arguments") |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
name := c.Args().First() |
|
|
|
|
ds := c.Args()[1] |
|
|
|
|
url := c.Args()[2] |
|
|
|
|
dsType := c.String("type") |
|
|
|
|
dsAccess := c.String("access") |
|
|
|
|
dsDefault := c.Bool("default") |
|
|
|
|
|
|
|
|
|
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.GetDataSourceByNameQuery{AccountId: accountId, Name: ds} |
|
|
|
|
if err := bus.Dispatch(&query); err != nil { |
|
|
|
|
if err != m.ErrDataSourceNotFound { |
|
|
|
|
log.ConsoleFatalf("Failed to query for existing datasource: %s", err) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if query.Result.Id > 0 { |
|
|
|
|
log.ConsoleFatalf("DataSource %s already exists", ds) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
cmd := m.AddDataSourceCommand{ |
|
|
|
|
AccountId: accountId, |
|
|
|
|
Name: ds, |
|
|
|
|
Url: url, |
|
|
|
|
Type: m.DsType(dsType), |
|
|
|
|
Access: m.DsAccess(dsAccess), |
|
|
|
|
IsDefault: dsDefault, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
switch dsType { |
|
|
|
|
case m.DS_INFLUXDB: |
|
|
|
|
db := c.String("db") |
|
|
|
|
if db == "" { |
|
|
|
|
log.ConsoleFatal("db name is required for influxdb datasources") |
|
|
|
|
} |
|
|
|
|
cmd.Database = db |
|
|
|
|
cmd.User = c.String("user") |
|
|
|
|
cmd.Password = c.String("password") |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if err := bus.Dispatch(&cmd); err != nil { |
|
|
|
|
log.ConsoleFatalf("Failed to create datasource: %s", err) |
|
|
|
|
} |
|
|
|
|
datasource := cmd.Result |
|
|
|
|
|
|
|
|
|
log.ConsoleInfof("Datasource %s created", datasource.Name) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func listDatasources(c *cli.Context) { |
|
|
|
|
setting.NewConfigContext() |
|
|
|
|
sqlstore.NewEngine() |
|
|
|
|
@ -80,7 +177,7 @@ func describeDataSource(c *cli.Context) { |
|
|
|
|
|
|
|
|
|
query := m.GetDataSourceByNameQuery{AccountId: accountId, Name: ds} |
|
|
|
|
if err := bus.Dispatch(&query); err != nil { |
|
|
|
|
log.ConsoleFatalf("Failed to find accounts: %s", err) |
|
|
|
|
log.ConsoleFatalf("Failed to find datasource: %s", err) |
|
|
|
|
} |
|
|
|
|
datasource := query.Result |
|
|
|
|
|
|
|
|
|
|