Skip to content

Commit

Permalink
added better error handling and responses
Browse files Browse the repository at this point in the history
  • Loading branch information
eliasuran committed Feb 26, 2024
1 parent 7b2da68 commit 4d104c8
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 28 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
### Manual installation

```sh
git clone https://github/eliasuran/gomon
git clone https://github/eliasuran/gomon@latest
cd gomon
go install
```
Expand Down
66 changes: 39 additions & 27 deletions gomon.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ func main() {
// sjekk help flag har blitt gitt og display hjelp message om den er det
help := lib.ParseFlags()
if help {
fmt.Println("Provide the path to a directory containing a main.go file to run it using through gomon")
fmt.Println("Provide the path to a directory containing a main.go file to run it using gomon")
return
}

Expand All @@ -34,16 +34,20 @@ func main() {
file := getPath()

// starter server og får prosessen til serveren som bruker til å interacte serveren som kjører
process := startServer(file)

// gir response om at serveren har startet
response(200, "Server started successfully!")
process, err := startServer(file)
if err != nil {
// gir response om at en error var funnet i initial build
response(400, "Found error in server")
} else {
// gir response om at serveren har startet
response(200, "Server started successfully!")
}

// starter listener som sjekker for endringer i fila før programmet starter for første gang
changeListener(file, process)
}

func startServer(file string) *os.Process {
func startServer(file string) (*os.Process, error) {
// initialiserer go build cmd
cmd := exec.Command("go", "build", "-o", filepath.Join(file, "server"), file)
cmd.Stdout = os.Stdout
Expand All @@ -53,6 +57,7 @@ func startServer(file string) *os.Process {
err := cmd.Run()
if err != nil {
response(400, "Error building program: "+err.Error())
return nil, err
}

// kjører executablen som ble laget
Expand All @@ -62,19 +67,20 @@ func startServer(file string) *os.Process {
err = cmd.Start()
if err != nil {
response(400, "Error starting server: "+err.Error())
return nil, err
}

// lagrer prosessen i en variabel, dette gjør at jeg slipper å returnere cmd siden dette er det eneste den brukes til (for nå)
process := cmd.Process

// returnerer prosessen
return process
return process, nil
}

func response(status int, message string) {
t := time.Now().Format("15:04:05")
formatting := "%s | [ %d ] %s"
if status == 400 {
if status != 200 {
color.Red(formatting, t, status, message)
return
}
Expand All @@ -85,47 +91,53 @@ func response(status int, message string) {
func changeListener(filePath string, process *os.Process) {
fullPath := filepath.Join(filePath, "main.go")
initialStat, err := os.Stat(fullPath)

if err != nil {
response(400, "Error doing something: "+err.Error())
} else {
for {
stat, err := os.Stat(fullPath)
if err != nil {
response(400, "Error in code, pls fix")
break
}
response(400, "Error getting initial stats of file: "+err.Error())
return
}

for {
stat, err := os.Stat(fullPath)
if err != nil {
response(400, "Error getting newest stats of file: "+err.Error())
break
}

if stat.ModTime() != initialStat.ModTime() {
response(200, "Change in file, resarting server...")
if stat.ModTime() != initialStat.ModTime() {
response(200, "Change in file, resarting server...")

if process != nil {
if process != nil {
go func() {
err = process.Signal(syscall.SIGTERM)
if err != nil {
response(400, "Error when killing previous process: "+err.Error())
}
process.Wait()
}

process = startServer(filePath)
}()
}

initialStat = stat
process, err = startServer(filePath)
if err != nil {
response(400, "Error starting server: "+err.Error())
} else {
response(200, "Sucessfully updated")
}

time.Sleep(1 * time.Second)
initialStat = stat
}

time.Sleep(1 * time.Second)
}

}

func getPath() string {
files := os.Args[1:]
if len(files) == 0 {
fmt.Println("No file provided\nProvide -help flag for help")
response(400, "No file provided\nProvide -help flag for help")
os.Exit(1)
} else if len(files) != 1 {
fmt.Println("Too many files provided")
response(400, "Too many files provided\nProvide -help flag for help")
os.Exit(1)
}

Expand Down
Binary file added test/server
Binary file not shown.

0 comments on commit 4d104c8

Please sign in to comment.