|
1 | 1 | package stop |
2 | 2 |
|
3 | 3 | import ( |
| 4 | + "fmt" |
4 | 5 | "os" |
5 | 6 | "os/exec" |
6 | 7 | "runtime" |
| 8 | + "time" |
7 | 9 |
|
| 10 | + "github.com/charmbracelet/huh/spinner" |
| 11 | + "github.com/lgdd/lfr-cli/internal/conf" |
8 | 12 | "github.com/lgdd/lfr-cli/pkg/util/fileutil" |
9 | 13 | "github.com/lgdd/lfr-cli/pkg/util/logger" |
10 | 14 |
|
11 | 15 | "github.com/lgdd/lfr-cli/pkg/util/procutil" |
12 | 16 | "github.com/spf13/cobra" |
| 17 | + "github.com/spf13/viper" |
13 | 18 | ) |
14 | 19 |
|
15 | 20 | var ( |
@@ -48,4 +53,52 @@ func run(cmd *cobra.Command, args []string) { |
48 | 53 | logger.Fatal(err.Error()) |
49 | 54 | } |
50 | 55 |
|
| 56 | + isRunning, pid, err := procutil.IsCatalinaRunning() |
| 57 | + |
| 58 | + if err != nil { |
| 59 | + logger.Fatal(err.Error()) |
| 60 | + } |
| 61 | + |
| 62 | + if !isRunning { |
| 63 | + logger.Print("Liferay is already stopped.") |
| 64 | + os.Exit(0) |
| 65 | + } |
| 66 | + |
| 67 | + _ = spinner.New(). |
| 68 | + Title(fmt.Sprintf("Stopping Liferay (pid=%v)", pid)). |
| 69 | + Action(checkLiferayStatus). |
| 70 | + Accessible(viper.GetBool(conf.OutputAccessible)). |
| 71 | + Run() |
| 72 | + |
| 73 | + isRunning, pid, err = procutil.IsCatalinaRunning() |
| 74 | + |
| 75 | + if err != nil { |
| 76 | + logger.Fatal(err.Error()) |
| 77 | + } |
| 78 | + |
| 79 | + if isRunning { |
| 80 | + logger.PrintlnWarn("Liferay is still running.") |
| 81 | + logger.PrintfWarn("Be patient, but you might need to kill the process (pid=%v).", pid) |
| 82 | + } else { |
| 83 | + logger.PrintSuccess("Liferay stopped successfully.") |
| 84 | + } |
| 85 | +} |
| 86 | + |
| 87 | +func checkLiferayStatus() { |
| 88 | + isRunning, _, err := procutil.IsCatalinaRunning() |
| 89 | + |
| 90 | + if err != nil { |
| 91 | + logger.Fatal(err.Error()) |
| 92 | + } |
| 93 | + |
| 94 | + maxIterations := 60 |
| 95 | + iteration := 0 |
| 96 | + for isRunning && iteration < maxIterations { |
| 97 | + iteration = iteration + 1 |
| 98 | + isRunning, _, err = procutil.IsCatalinaRunning() |
| 99 | + if err != nil { |
| 100 | + logger.Fatal(err.Error()) |
| 101 | + } |
| 102 | + time.Sleep(1 * time.Second) |
| 103 | + } |
51 | 104 | } |
0 commit comments