2016-04-08 19:29:13 +00:00
// Copyright © 2016 Abcum Ltd
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package cli
import (
"fmt"
2016-07-19 11:05:32 +00:00
"os"
2016-04-08 19:29:13 +00:00
"github.com/spf13/cobra"
"github.com/abcum/surreal/db"
2016-07-19 11:05:32 +00:00
"github.com/abcum/surreal/log"
2016-07-04 10:33:07 +00:00
"github.com/abcum/surreal/tcp"
2016-04-08 19:29:13 +00:00
"github.com/abcum/surreal/web"
)
var startCmd = & cobra . Command {
2017-02-19 19:25:47 +00:00
Use : "start [flags]" ,
2016-04-08 19:29:13 +00:00
Short : "Start the database and http server" ,
2016-07-04 10:33:07 +00:00
PreRun : func ( cmd * cobra . Command , args [ ] string ) {
2016-04-08 19:29:13 +00:00
2017-02-22 01:40:24 +00:00
if opts . Logging . Output != "none" {
fmt . Print ( logo )
}
2016-04-08 19:29:13 +00:00
} ,
RunE : func ( cmd * cobra . Command , args [ ] string ) ( err error ) {
2016-07-04 10:33:07 +00:00
if err = db . Setup ( opts ) ; err != nil {
2016-07-19 11:05:32 +00:00
log . Fatal ( err )
2016-04-08 19:29:13 +00:00
return
}
2016-07-04 10:33:07 +00:00
if err = tcp . Setup ( opts ) ; err != nil {
2016-07-19 11:05:32 +00:00
log . Fatal ( err )
2016-04-08 19:29:13 +00:00
return
}
2016-07-04 10:33:07 +00:00
if err = web . Setup ( opts ) ; err != nil {
2016-07-19 11:05:32 +00:00
log . Fatal ( err )
2016-04-08 19:29:13 +00:00
return
}
return
} ,
2017-11-16 20:00:51 +00:00
PostRunE : func ( cmd * cobra . Command , args [ ] string ) ( err error ) {
2016-04-08 19:29:13 +00:00
2017-11-16 20:00:51 +00:00
if err = web . Exit ( ) ; err != nil {
log . Fatal ( err )
return
}
if err = tcp . Exit ( ) ; err != nil {
log . Fatal ( err )
return
}
if err = db . Exit ( ) ; err != nil {
log . Fatal ( err )
return
}
return
2016-04-08 19:29:13 +00:00
} ,
}
func init ( ) {
2016-07-19 11:05:32 +00:00
host , _ := os . Hostname ( )
2016-04-08 19:29:13 +00:00
2016-07-19 11:05:32 +00:00
startCmd . PersistentFlags ( ) . StringVarP ( & opts . Auth . Auth , "auth" , "a" , "root:root" , "Master database authentication details." )
startCmd . PersistentFlags ( ) . StringVar ( & opts . Auth . User , "auth-user" , "" , "The master username for the database. Use this as an alternative to the --auth flag." )
startCmd . PersistentFlags ( ) . StringVar ( & opts . Auth . Pass , "auth-pass" , "" , "The master password for the database. Use this as an alternative to the --auth flag." )
2017-02-21 00:09:42 +00:00
startCmd . PersistentFlags ( ) . StringSliceVar ( & opts . Auth . Addr , "auth-addr" , [ ] string { "0.0.0.0/0" } , "The IP address ranges from which master authentication is possible." )
2016-04-08 19:29:13 +00:00
2016-07-19 11:05:32 +00:00
startCmd . PersistentFlags ( ) . StringVar ( & opts . Cert . Crt , "cert-crt" , "" , "Path to the server certificate. Needed when running in secure mode." )
startCmd . PersistentFlags ( ) . StringVar ( & opts . Cert . Key , "cert-key" , "" , "Path to the server private key. Needed when running in secure mode." )
2016-04-08 19:29:13 +00:00
2016-07-19 11:05:11 +00:00
startCmd . PersistentFlags ( ) . StringVar ( & opts . DB . Cert . CA , "db-ca" , "" , "Path to the CA file used to connect to the remote database." )
startCmd . PersistentFlags ( ) . StringVar ( & opts . DB . Cert . Crt , "db-crt" , "" , "Path to the certificate file used to connect to the remote database." )
startCmd . PersistentFlags ( ) . StringVar ( & opts . DB . Cert . Key , "db-key" , "" , "Path to the private key file used to connect to the remote database." )
2016-07-19 11:05:32 +00:00
startCmd . PersistentFlags ( ) . StringVar ( & opts . DB . Path , "db-path" , "" , flag ( "db" ) )
2017-11-16 19:46:41 +00:00
startCmd . PersistentFlags ( ) . DurationVar ( & opts . DB . Time , "db-sync" , 0 , flag ( "sync" ) )
2016-07-04 10:33:07 +00:00
2017-02-20 16:16:19 +00:00
startCmd . PersistentFlags ( ) . StringSliceVarP ( & opts . Node . Join , "join" , "j" , nil , flag ( "join" ) )
2016-04-08 19:29:13 +00:00
2016-07-19 11:05:32 +00:00
startCmd . PersistentFlags ( ) . StringVarP ( & opts . DB . Code , "key" , "k" , "" , flag ( "key" ) )
2016-04-08 19:29:13 +00:00
2017-02-09 11:20:23 +00:00
startCmd . PersistentFlags ( ) . StringVarP ( & opts . Node . Host , "bind" , "b" , "0.0.0.0" , "The hostname or ip address to listen for connections on." )
2016-07-19 11:05:32 +00:00
startCmd . PersistentFlags ( ) . StringVarP ( & opts . Node . Name , "name" , "n" , host , "The name of this node, used for logs and statistics." )
startCmd . PersistentFlags ( ) . IntVar ( & opts . Port . Tcp , "port-tcp" , 33693 , "The port on which to serve the tcp server." )
startCmd . PersistentFlags ( ) . IntVar ( & opts . Port . Web , "port-web" , 8000 , "The port on which to serve the web server." )
2016-04-08 19:29:13 +00:00
}