Skip to content

Commit 40ac769

Browse files
committed
Merge remote-tracking branch 'origin/AestekFeedbacks'
2 parents dc751f6 + cb4e640 commit 40ac769

File tree

3 files changed

+85
-35
lines changed

3 files changed

+85
-35
lines changed

.travis.yml

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
language: go
2+
go:
3+
- 1.x
4+
script:
5+
- go get -u
6+
- GOOS=linux go build -o consul-wrapper-linux
7+
- GOOS=darwin go build -o consul-wrapper-macos
8+
- GOOS=windows go build -o consul-wrapper-windows.exe
9+
sudo: false
10+
before_deploy:
11+
- echo "Deploying $TRAVIS_TAG to GitHub releases"
12+
- tar czf consul-wrapper-linux.tar.gz consul-wrapper-linux
13+
- tar czf consul-wrapper-macos.tar.gz consul-wrapper-macos
14+
- zip -r consul-wrapper-windows.zip consul-wrapper-windows.exe
15+
deploy:
16+
provider: releases
17+
api_key:
18+
secure: NsedjJtO6wzdnrWrX+c/8fxX8njUeNfSzWQqS/ggk9uKZD5dG2VcyRYzdVRbRqXEaiExuE/Id84xSzBZlKkdbBYJByvkZlyoPlr/w8OSkdJo++S9JhNkZWOSM7pjy9XTnGfk12K1TQAOf4JltHxwGRLsvazIOwpGrC9+suIXmxMHGpi73xGdwRRHRVvCrWwSIgFidqRgg4JTPRxhYNGEfRjiwTLnCf/SDK2gp7LlpeYsQqnYU094g00pZn2t/N5DrLtzwa+1jsJ7R8Tz1e6ubFwlI9jUYQ5r5jFrVAi0uTN6q3T+M6PJ6h/GfRp8XPbI28v+6gk0EIx/xXoOiuALXzaole8HETrHMHQwGxa8bvn1qRJT7NSN097oB2U3o9B61sYkyX7GFcmSerK2knKUv036eArirZEM4oSVMBB6GkZY6AuEq3fOyiTEcCPVt9ZGFiPVpfyCgvOHS0MKbaC8Zt9rlrrekeIqBOCepsKttms8y6hgn8cjMkugN3sRLrZWeeX3GL8QutZWECnKlXwA660oE6IR4V7Uf27jWBwZ8ULcU1vEu0OmyLEnn6nNXnX3SsRmqsxoqZNhnUKXWTz51JJog1cyyelevY2tNS8IjWy953Jzh1Ps46NUNDDSFOMCGHN7E80B5CVnNj/Iac1fzXN/4zmL5jtqV+69UlRMSzk=
19+
file_glob: true
20+
file:
21+
- consul-wrapper-*.tar.gz
22+
- consul-wrapper-*.zip
23+
skip_cleanup: true
24+
on:
25+
repo: tionebsalocin/consul-wrapper

README.md

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,11 @@ If by any change the command stops working it will be deregistered automatically
88

99
```
1010
Usage of ./consul-wrapper:
11-
-args string
12-
String with all arguments
13-
-command string
14-
Command to run
15-
-frequency int
16-
Health Check Frequency (in seconds) (default 30)
11+
12+
./consul-wrapper [options] -service <ServiceName> <Command> [Args]
13+
14+
-frequency duration
15+
Health Check Frequency (in seconds) (default 30ns)
1716
-service string
1817
Consul Service Name
1918
-token string
@@ -23,11 +22,12 @@ Usage of ./consul-wrapper:
2322
## Example
2423

2524
```
26-
./consul-wrapper -service plop -frequency 10 -command consul -args "monitor -log-level trace"
27-
Registering 'plop' in consul
28-
Process is running
25+
./consul-wrapper -service plop -frequency 10s consul monitor -log-level trace
26+
2019/04/11 20:16:44 [ConsulWrapper] Registering 'plop' in consul
27+
...
28+
2019/04/11 20:17:14 [ConsulWrapper] Process is running
2929
...
30-
Process is running
31-
Process exited. Exit code: 0
32-
Deregistering 'plop' from consul
30+
2019/04/11 20:17:40 [ConsulWrapper] Error: signal: killed
31+
2019/04/11 20:17:40 [ConsulWrapper] Process stopped running. Exit code: -1
32+
2019/04/11 20:17:40 [ConsulWrapper] Deregistering 'plop' from consul
3333
```

main.go

Lines changed: 48 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,28 @@ import (
66
"log"
77
"os"
88
"os/exec"
9-
"strconv"
109
"time"
1110

1211
"github.com/hashicorp/consul/api"
1312
)
1413

15-
func processWatcher(pid int, checkName string, frequency int, client *api.Client) {
16-
channel := time.Tick(time.Duration(frequency) * time.Second)
14+
func processWatcher(pid int, checkName string, frequency time.Duration, client *api.Client) {
15+
channel := time.Tick(frequency)
1716
for range channel {
1817
_, err := os.FindProcess(pid)
1918
if err != nil {
20-
fmt.Println("Process is not running")
21-
client.Agent().FailTTL(checkName, "Process is not running")
19+
log.Println("[ConsulWrapper] Process is not running")
20+
err := client.Agent().FailTTL(checkName, "Process is not running")
21+
if err != nil {
22+
log.Println("[ConsulWrapper] Failed to send FAIL health check", err)
23+
}
2224
break
2325
}
24-
fmt.Println("Process is running")
25-
client.Agent().PassTTL(checkName, "Process is running")
26+
log.Println("[ConsulWrapper] Process is running")
27+
err = client.Agent().PassTTL(checkName, "Process is running")
28+
if err != nil {
29+
log.Println("[ConsulWrapper] Failed to send PASSING health check", err)
30+
}
2631
}
2732
}
2833

@@ -37,50 +42,70 @@ func getConsulClient(httpAddr string, token string) *api.Client {
3742
return consulClient
3843
}
3944

40-
func registerConsulService(name string, frequency int, client *api.Client) {
41-
fmt.Printf("Registering '%s' in consul\n", name)
42-
client.Agent().ServiceRegister(&api.AgentServiceRegistration{
45+
func registerConsulService(name string, frequency time.Duration, client *api.Client) {
46+
log.Printf("[ConsulWrapper] Registering '%s' in consul\n", name)
47+
err := client.Agent().ServiceRegister(&api.AgentServiceRegistration{
4348
ID: name,
4449
Name: name,
4550
Check: &api.AgentServiceCheck{
4651
CheckID: name,
4752
Name: name,
48-
DeregisterCriticalServiceAfter: strconv.Itoa(2*frequency) + "s",
49-
TTL: strconv.Itoa(3*frequency) + "s",
53+
DeregisterCriticalServiceAfter: fmt.Sprintf("%d", int64(2.1*frequency.Seconds())) + "s",
54+
TTL: fmt.Sprintf("%d", int64(3.1*frequency.Seconds())) + "s",
5055
},
5156
})
57+
if err != nil {
58+
log.Fatal(err)
59+
}
5260
}
5361

5462
func deregisterConsulService(name string, client *api.Client) {
55-
fmt.Printf("Deregister '%s' from consul\n", name)
56-
client.Agent().ServiceDeregister(name)
63+
log.Printf("[ConsulWrapper] Deregistering '%s' from consul\n", name)
64+
err := client.Agent().ServiceDeregister(name)
65+
if err != nil {
66+
log.Fatal(err)
67+
}
68+
}
69+
70+
func usage() {
71+
fmt.Fprintf(os.Stderr, "Usage of %s:\n\n", os.Args[0])
72+
fmt.Fprintf(os.Stderr, "\t%s [options] -service <ServiceName> <Command> [Args]\n\n", os.Args[0])
73+
flag.PrintDefaults()
5774
}
5875

5976
func main() {
6077
tokenPrt := flag.String("token", "", "Consul token used for registration")
6178
servicePtr := flag.String("service", "", "Consul Service Name")
62-
checkFrequencyPtr := flag.Int("frequency", 30, "Health Check Frequency (in seconds)")
63-
commandPtr := flag.String("command", "", "Command to run")
64-
argumentsPtr := flag.String("args", "", "String with all arguments")
79+
checkFrequencyPtr := flag.Duration("frequency", time.Duration(30), "Health Check Frequency (in seconds)")
80+
6581
flag.Parse()
82+
if *servicePtr == "" {
83+
usage()
84+
os.Exit(1)
85+
}
86+
arguments := flag.Args()
87+
88+
consulClient := getConsulClient("localhost:8500", *tokenPrt)
89+
registerConsulService(*servicePtr, *checkFrequencyPtr, consulClient)
6690

67-
cmd := exec.Command(*commandPtr, *argumentsPtr)
91+
cmd := exec.Command(arguments[0], arguments[1:]...)
92+
cmd.Stdout = os.Stdout
93+
cmd.Stderr = os.Stderr
6894
if err := cmd.Start(); err != nil {
69-
fmt.Println("Failed to start: ", err)
95+
log.Println("[ConsulWrapper] Failed to start: ", err)
7096
return
7197
}
7298

73-
consulClient := getConsulClient("localhost:8500", *tokenPrt)
74-
registerConsulService(*servicePtr, *checkFrequencyPtr, consulClient)
7599
go processWatcher(cmd.Process.Pid, *servicePtr, *checkFrequencyPtr, consulClient)
76100

77101
if err := cmd.Wait(); err != nil {
78102
exitCode := cmd.ProcessState.ExitCode()
79-
fmt.Printf("Process stopped running. Error: '%s' Exit code: %d\n", err.Error(), exitCode)
103+
log.Println("[ConsulWrapper] Error: ", err.Error())
104+
log.Println("[ConsulWrapper] Process stopped running. Exit code: ", exitCode)
80105
deregisterConsulService(*servicePtr, consulClient)
81106
os.Exit(exitCode)
82107
}
83108

84-
fmt.Println("Process exited. Exit code: ", cmd.ProcessState.ExitCode())
109+
log.Println("[ConsulWrapper] Process exited. Exit code: ", cmd.ProcessState.ExitCode())
85110
deregisterConsulService(*servicePtr, consulClient)
86111
}

0 commit comments

Comments
 (0)