/
server.go
98 lines (89 loc) · 2.44 KB
/
server.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
89
90
91
92
93
94
95
96
97
98
package main
import (
"fmt"
"net"
"os"
"time"
"github.com/Sirupsen/logrus"
"github.com/codegangsta/cli"
"github.com/jfrazelle/hulk/api/grpc/server"
"github.com/jfrazelle/hulk/api/grpc/types"
"google.golang.org/grpc"
)
var serverCommand = cli.Command{
Name: "server",
Aliases: []string{"daemon"},
Usage: "Start hulk server",
Flags: []cli.Flag{
cli.StringFlag{
Name: "artifacts-dir",
Value: "/var/lib/hulk",
Usage: "Artifacts directory for saving the artifacts from the jobs",
},
cli.StringFlag{
Name: "state-dir",
Value: "/run/hulk",
Usage: "State directory",
},
cli.StringFlag{
Name: "smtp-server",
Usage: "SMTP server for email notifications",
},
cli.StringFlag{
Name: "smtp-sender",
Usage: "SMTP default sender email address for email notifications",
},
cli.StringFlag{
Name: "smtp-username",
Usage: "SMTP server username",
},
cli.StringFlag{
Name: "smtp-pass",
Usage: "SMTP server password",
},
},
Action: func(ctx *cli.Context) {
if err := startServer(
ctx.GlobalString("addr"),
ctx.String("artifacts-dir"),
ctx.String("state-dir"),
ctx.String("smtp-server"),
ctx.String("smtp-sender"),
ctx.String("smtp-username"),
ctx.String("smtp-pass"),
); err != nil {
logrus.Fatal(err)
}
},
}
func startServer(address, artifactsDir, stateDir, smtpServer, smtpSender, smtpUsername, smtpPassword string) error {
if err := os.RemoveAll(address); err != nil {
return fmt.Errorf("attempt to remove %s failed: %v", address, err)
}
l, err := net.Listen("unix", address)
if err != nil {
return fmt.Errorf("starting listener at %s failed: %v", address, err)
}
s := grpc.NewServer()
svr, err := server.NewServer(artifactsDir, stateDir, smtpServer, smtpSender, smtpUsername, smtpPassword)
if err != nil {
return fmt.Errorf("Creating new server failed: %v", err)
}
types.RegisterAPIServer(s, svr)
logrus.Debugf("GRPC API listen on %s", address)
return s.Serve(l)
}
func getClient(ctx *cli.Context) (types.APIClient, error) {
address := ctx.GlobalString("addr")
dialOpts := []grpc.DialOption{grpc.WithInsecure()}
dialOpts = append(dialOpts,
grpc.WithDialer(func(addr string, timeout time.Duration) (net.Conn, error) {
return net.DialTimeout("unix", addr, timeout)
},
))
conn, err := grpc.Dial(address, dialOpts...)
if err != nil {
return nil, fmt.Errorf("creating connection to %s failed: %v", address, err)
}
return types.NewAPIClient(conn), nil
}