|
@@ -110,8 +110,11 @@ func formatBytes(bytes int64) string {
|
|
|
|
|
|
|
|
// Start starts the command line interface
|
|
// Start starts the command line interface
|
|
|
func (c *CLI) Start() {
|
|
func (c *CLI) Start() {
|
|
|
- fmt.Printf("Node %s%s%s CLI Started\n", ColorGreen, c.server.Raft.nodeID, ColorReset)
|
|
|
|
|
- fmt.Println("Type 'help' for commands.")
|
|
|
|
|
|
|
+ // Boxed startup message
|
|
|
|
|
+ var sb strings.Builder
|
|
|
|
|
+ sb.WriteString(fmt.Sprintf("Node %s%s%s CLI Started\n", ColorGreen, c.server.Raft.nodeID, ColorReset))
|
|
|
|
|
+ sb.WriteString("Type 'help' for commands.")
|
|
|
|
|
+ printBoxed(sb.String())
|
|
|
|
|
|
|
|
// State Monitor Loop
|
|
// State Monitor Loop
|
|
|
go func() {
|
|
go func() {
|
|
@@ -394,6 +397,16 @@ func (c *CLI) registerDefaultCommands() {
|
|
|
printBoxed(sb.String())
|
|
printBoxed(sb.String())
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
|
|
+ c.RegisterCommand("quit", "Gracefully shutdown the node", func(parts []string, server *KVServer) {
|
|
|
|
|
+ printBoxed("Shutting down node...")
|
|
|
|
|
+ if err := server.Stop(); err != nil {
|
|
|
|
|
+ printBoxed(fmt.Sprintf("%sError stopping server:%s %v", ColorRed, ColorReset, err))
|
|
|
|
|
+ } else {
|
|
|
|
|
+ printBoxed(fmt.Sprintf("%sNode stopped successfully.%s", ColorGreen, ColorReset))
|
|
|
|
|
+ }
|
|
|
|
|
+ os.Exit(0)
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
c.RegisterCommand("help", "Show commands", func(parts []string, server *KVServer) {
|
|
c.RegisterCommand("help", "Show commands", func(parts []string, server *KVServer) {
|
|
|
var sb strings.Builder
|
|
var sb strings.Builder
|
|
|
sb.WriteString(fmt.Sprintf("%sCommands:%s\n", ColorGreen, ColorReset))
|
|
sb.WriteString(fmt.Sprintf("%sCommands:%s\n", ColorGreen, ColorReset))
|