| 
									
										
										
										
											2015-02-15 06:31:37 +08:00
										 |  |  | 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" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-16 02:30:35 +08:00
										 |  |  | var ListAccounts = cli.Command{ | 
					
						
							| 
									
										
										
										
											2015-02-15 06:31:37 +08:00
										 |  |  | 	Name:        "account", | 
					
						
							|  |  |  | 	Usage:       "list accounts", | 
					
						
							|  |  |  | 	Description: "Lists the accounts in the system", | 
					
						
							|  |  |  | 	Action:      listAccounts, | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-16 02:30:35 +08:00
										 |  |  | var CreateAccount = cli.Command{ | 
					
						
							| 
									
										
										
										
											2015-02-16 01:08:55 +08:00
										 |  |  | 	Name:        "account:create", | 
					
						
							|  |  |  | 	Usage:       "create a new account", | 
					
						
							|  |  |  | 	Description: "Creates a new account", | 
					
						
							|  |  |  | 	Action:      createAccount, | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-16 02:30:35 +08:00
										 |  |  | var DeleteAccount = cli.Command{ | 
					
						
							| 
									
										
										
										
											2015-02-16 02:26:52 +08:00
										 |  |  | 	Name:        "account:delete", | 
					
						
							|  |  |  | 	Usage:       "delete an existing account", | 
					
						
							|  |  |  | 	Description: "Deletes an existing account", | 
					
						
							|  |  |  | 	Action:      deleteAccount, | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-15 06:31:37 +08:00
										 |  |  | func listAccounts(c *cli.Context) { | 
					
						
							|  |  |  | 	setting.NewConfigContext() | 
					
						
							|  |  |  | 	sqlstore.NewEngine() | 
					
						
							|  |  |  | 	sqlstore.EnsureAdminUser() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	accountsQuery := m.GetAccountsQuery{} | 
					
						
							|  |  |  | 	if err := bus.Dispatch(&accountsQuery); err != nil { | 
					
						
							| 
									
										
										
										
											2015-02-16 01:48:34 +08:00
										 |  |  | 		log.ConsoleFatalf("Failed to find accounts: %s", err) | 
					
						
							| 
									
										
										
										
											2015-02-15 06:31:37 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	w := tabwriter.NewWriter(os.Stdout, 20, 1, 4, ' ', 0) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	fmt.Fprintf(w, "ID\tNAME\n") | 
					
						
							|  |  |  | 	for _, account := range accountsQuery.Result { | 
					
						
							|  |  |  | 		fmt.Fprintf(w, "%d\t%s\n", account.Id, account.Name) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	w.Flush() | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2015-02-16 01:08:55 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | func createAccount(c *cli.Context) { | 
					
						
							|  |  |  | 	setting.NewConfigContext() | 
					
						
							|  |  |  | 	sqlstore.NewEngine() | 
					
						
							|  |  |  | 	sqlstore.EnsureAdminUser() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if !c.Args().Present() { | 
					
						
							| 
									
										
										
										
											2015-02-16 01:48:34 +08:00
										 |  |  | 		log.ConsoleFatal("Account name arg is required") | 
					
						
							| 
									
										
										
										
											2015-02-16 01:08:55 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	name := c.Args().First() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	adminQuery := m.GetUserByLoginQuery{LoginOrEmail: setting.AdminUser} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if err := bus.Dispatch(&adminQuery); err == m.ErrUserNotFound { | 
					
						
							| 
									
										
										
										
											2015-02-16 01:48:34 +08:00
										 |  |  | 		log.ConsoleFatalf("Failed to find default admin user: %s", err) | 
					
						
							| 
									
										
										
										
											2015-02-16 01:08:55 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	adminUser := adminQuery.Result | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	cmd := m.CreateAccountCommand{Name: name, UserId: adminUser.Id} | 
					
						
							|  |  |  | 	if err := bus.Dispatch(&cmd); err != nil { | 
					
						
							| 
									
										
										
										
											2015-02-16 01:48:34 +08:00
										 |  |  | 		log.ConsoleFatalf("Failed to create account: %s", err) | 
					
						
							| 
									
										
										
										
											2015-02-16 01:08:55 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-02-16 01:48:34 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	log.ConsoleInfof("Account %s created for admin user %s\n", name, adminUser.Email) | 
					
						
							| 
									
										
										
										
											2015-02-16 01:08:55 +08:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2015-02-16 02:26:52 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | func deleteAccount(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 | 
					
						
							|  |  |  | 	cmd := m.DeleteAccountCommand{Id: accountId} | 
					
						
							|  |  |  | 	if err := bus.Dispatch(&cmd); err != nil { | 
					
						
							|  |  |  | 		log.ConsoleFatalf("Failed to delete account: %s", err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	log.ConsoleInfof("Account %s deleted", name) | 
					
						
							|  |  |  | } |