Skip to content

Commit c52f5a9

Browse files
authored
feat: server started message (#211)
Show the user how to connect to the server remotely when the server is started. Signed-off-by: Toma Puljak <[email protected]>
1 parent e4be3bc commit c52f5a9

File tree

3 files changed

+44
-11
lines changed

3 files changed

+44
-11
lines changed

pkg/cmd/server/server.go

+19-4
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,13 @@
44
package server
55

66
import (
7+
"fmt"
8+
"time"
9+
710
"github.com/daytonaio/daytona/pkg/server"
811
"github.com/daytonaio/daytona/pkg/server/config"
12+
"github.com/daytonaio/daytona/pkg/server/frpc"
13+
"github.com/daytonaio/daytona/pkg/views/util"
914

1015
log "github.com/sirupsen/logrus"
1116
"github.com/spf13/cobra"
@@ -20,17 +25,27 @@ var ServerCmd = &cobra.Command{
2025
// for now, force the log level to info when running the server
2126
log.SetLevel(log.InfoLevel)
2227
}
28+
errCh := make(chan error)
29+
30+
err := server.Start(errCh)
31+
if err != nil {
32+
log.Fatal(err)
33+
}
2334

24-
config, err := config.GetConfig()
35+
c, err := config.GetConfig()
2536
if err != nil {
2637
log.Fatal(err)
2738
}
2839

29-
if config == nil {
30-
log.Fatal("Server configuration is not set. Please run `daytona configure`.")
40+
select {
41+
case err := <-errCh:
42+
log.Fatal(err)
43+
// TODO: This is an optimistic check. We should check if the server is actually running
44+
case <-time.After(5 * time.Second):
45+
util.RenderBorderedMessage(fmt.Sprintf("Daytona Server running on port: %d.\nTo connect to the server remotely, use the following command on the client machine:\n\ndaytona profile add -a %s", c.ApiPort, frpc.GetApiUrl(c)))
3146
}
3247

33-
err = server.Start()
48+
err = <-errCh
3449
if err != nil {
3550
log.Fatal(err)
3651
}

pkg/server/server.go

+14-7
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ type Self struct {
2525
DNSName string `json:"DNSName"`
2626
}
2727

28-
func Start() error {
28+
func Start(errCh chan error) error {
2929
err := logs.Init()
3030
if err != nil {
3131
return err
@@ -66,13 +66,13 @@ func Start() error {
6666

6767
go func() {
6868
if err := frpc.ConnectServer(); err != nil {
69-
log.Fatal(err)
69+
errCh <- err
7070
}
7171
}()
7272

7373
go func() {
7474
if err := frpc.ConnectApi(); err != nil {
75-
log.Fatal(err)
75+
errCh <- err
7676
}
7777
}()
7878

@@ -95,18 +95,25 @@ func Start() error {
9595

9696
select {
9797
case err := <-errChan:
98-
log.Fatal(err)
98+
errCh <- err
9999
case <-time.After(1 * time.Second):
100100
go func() {
101101
errChan <- headscale.Connect()
102102
}()
103103
}
104104

105105
if err := <-errChan; err != nil {
106-
log.Fatal(err)
106+
errCh <- err
107107
}
108108
}()
109109

110-
log.Infof("Starting api server on port %d", c.ApiPort)
111-
return apiServer.Serve(apiListener)
110+
go func() {
111+
log.Infof("Starting api server on port %d", c.ApiPort)
112+
err := apiServer.Serve(apiListener)
113+
if err != nil {
114+
errCh <- err
115+
}
116+
}()
117+
118+
return nil
112119
}

pkg/views/util/globals.go

+11
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,14 @@ func RenderListLine(message string) {
2525
func RenderInfoMessageBold(message string) {
2626
fmt.Println(lipgloss.NewStyle().Bold(true).Padding(1, 0, 1, 1).Render(message))
2727
}
28+
29+
func RenderBorderedMessage(message string) {
30+
fmt.Println(lipgloss.
31+
NewStyle().
32+
Margin(1, 0).
33+
Padding(1, 1, 1, 1).
34+
BorderForeground(views.Green).
35+
Border(lipgloss.RoundedBorder()).
36+
Render(message),
37+
)
38+
}

0 commit comments

Comments
 (0)