/
main.go
137 lines (112 loc) · 3.51 KB
/
main.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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
package main
import (
"context"
"flag"
"fmt"
"net"
"strings"
"os"
"os/signal"
"syscall"
pb "github.com/David-solly/auth_microservice/pkg/api/v1"
token_grpc "github.com/David-solly/auth_microservice/pkg/api/v1/service"
"github.com/David-solly/consul_hcsd/discover"
"github.com/David-solly/consul_hcsd/discover/models"
"github.com/go-kit/kit/log"
"google.golang.org/grpc"
)
func main() {
// #### For debugging and local testing
// if err := godotenv.Load("../../.env"); err != nil {
// log.Fatal("Server could not load environmental variables")
// }
// Logging domain.
var logger log.Logger
{
logger = log.NewLogfmtLogger(os.Stderr)
logger = log.With(logger, "ts", log.DefaultTimestampUTC)
logger = log.With(logger, "caller", log.DefaultCaller)
}
errChan := make(chan error)
if _, err := token_grpc.RedisInit(); err != nil {
logger.Log("err", err)
os.Exit(1)
}
//fmt.Print"Starting grpc server...")
// parse variable from input command
var (
consulAddr = flag.String("consul.addr", "", "consul address")
consulPort = flag.String("consul.port", "", "consul port")
advertiseAddr = flag.String("advertise.addr", "", "advertise address")
advertisePort = flag.String("advertise.port", "", "advertise port")
advertiseHealthPort = flag.String("health.port", "", "health port")
)
flag.Parse()
if envAdd := os.Getenv("POD_IP"); envAdd != "" {
repl := strings.ReplaceAll(envAdd, ".", "-")
if advertiseAddr != nil {
newAdd := fmt.Sprintf("%s.%s", repl, *advertiseAddr)
advertiseAddr = &newAdd
} else {
advertiseAddr = &envAdd
}
}
var (
gRPCAddr = flag.String("grpc", ""+*advertiseAddr+":"+*advertisePort,
"gRPC listen address")
)
flag.Parse()
ctx := context.Background()
// init lorem service
var svc token_grpc.TokenServiceInterface
svc = token_grpc.TokenService{}
// creating Endpoints struct
endpoints := token_grpc.TokenServiceEndpoints{
GenerateEndpoint: token_grpc.MakeTokenServiceGenerateEndpoint(svc),
VerifyEndpoint: token_grpc.MakeTokenServiceVerifyEndpoint(svc),
AffectEndpoint: token_grpc.MakeTokenServicAffectEndpoint(svc),
RenewEndpoint: token_grpc.MakeTokenServiceRenewEndpoint(svc),
}
//execute grpc server
go func() {
listener, err := net.Listen("tcp", *gRPCAddr)
if err != nil {
errChan <- err
return
}
handler := token_grpc.NewGRPCServer(ctx, endpoints)
gRPCServer := grpc.NewServer()
pb.RegisterTokenServiceServer(gRPCServer, handler)
fmt.Printf("Service info %v", gRPCServer.GetServiceInfo())
errChan <- gRPCServer.Serve(listener)
}()
go func() {
c := make(chan os.Signal, 1)
signal.Notify(c, syscall.SIGINT, syscall.SIGTERM)
errChan <- fmt.Errorf("%s", <-c)
}()
// Register Service to Consul
discover.ConfigureAndAdvertise(
&models.AddressConfig{
ConsulAddr: *consulAddr,
ConsulPort: *consulPort,
AdvertiseAddr: *advertiseAddr,
AdvertisePort: *advertisePort,
AdvertiseHealthPort: *advertiseHealthPort},
&models.ServiceConfig{
ID: "JWT",
Name: "JWT-Service",
Tags: []string{"jwt", "generate", "refresh", "verify"},
})
//notifyOnStart()
error := <-errChan
logger.Log("err", error)
discover.ErrChanHC <- error
// deregister service
}
/*
run command
go run . -consul.addr localhost -consul.port 8500 -advertise.addr localhost -advertise.port 8081 -health.port 8082
//debuggings args
"args": ["-consul.addr", "localhost", "-consul.port", "8500","-advertise.addr", "localhost","-advertise.port", "8081","-health.port", "8082"]
*/