-
-
Notifications
You must be signed in to change notification settings - Fork 110
/
Copy pathlocal_server_list.go
88 lines (82 loc) · 2.76 KB
/
local_server_list.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
/*
* Copyright (c) 2021-present Fabien Potencier <fabien@symfony.com>
*
* This file is part of Symfony CLI project
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package commands
import (
"sort"
"github.com/olekukonko/tablewriter"
"github.com/pkg/errors"
"github.com/symfony-cli/console"
"github.com/symfony-cli/symfony-cli/local/pid"
"github.com/symfony-cli/symfony-cli/local/projects"
"github.com/symfony-cli/symfony-cli/local/proxy"
"github.com/symfony-cli/terminal"
)
var localServerListCmd = &console.Command{
Category: "local",
Name: "server:list",
Aliases: []*console.Alias{{Name: "server:list"}, {Name: "server:ls"}},
Usage: "List all configured local web servers",
Action: func(c *console.Context) error {
return printConfiguredServers()
},
}
func printConfiguredServers() error {
table := tablewriter.NewWriter(terminal.Stdout)
table.SetAutoFormatHeaders(false)
table.SetHeader([]string{terminal.Format("<header>Directory</>"), terminal.Format("<header>Port</>"), terminal.Format("<header>Domains</>")})
proxyProjects, err := proxy.ToConfiguredProjects()
if err != nil {
return errors.WithStack(err)
}
runningProjects, err := pid.ToConfiguredProjects(true)
if err != nil {
return errors.WithStack(err)
}
projects, err := projects.GetConfiguredAndRunning(proxyProjects, runningProjects)
if err != nil {
return errors.WithStack(err)
}
projectDirs := []string{}
for dir := range projects {
projectDirs = append(projectDirs, dir)
}
sort.Strings(projectDirs)
for _, dir := range projectDirs {
project := projects[dir]
domain := ""
if len(project.Domains) > 0 {
domain = terminal.Formatf("<href=%s://%s>%s</>", project.Scheme, project.Domains[0], project.Domains[0])
}
port := "Not running"
if project.Port > 0 {
port = terminal.Formatf("<href=%s://127.0.0.1:%d>%d</>", project.Scheme, project.Port, project.Port)
}
table.Append([]string{dir, port, domain})
if len(project.Domains) > 1 {
for i, domain := range project.Domains {
if i == 0 {
continue
}
table.Append([]string{"", "", terminal.Formatf("<href=%s://%s>%s</>", project.Scheme, domain, domain)})
}
}
}
table.Render()
return nil
}