94 lines
2.5 KiB
Go
94 lines
2.5 KiB
Go
package app
|
|
|
|
import (
|
|
"flag"
|
|
"os"
|
|
"os/signal"
|
|
"syscall"
|
|
|
|
cml04eventer "git.espin.casa/albert/cml04-eventer"
|
|
"git.espin.casa/albert/cml04-gdm-int/pkg/api"
|
|
"git.espin.casa/albert/cml04-l2-rsm-in/internal/logging"
|
|
"git.espin.casa/albert/cml04-l2-rsm-in/internal/server"
|
|
"git.espin.casa/albert/cml04-l2-rsm-in/internal/service"
|
|
"git.espin.casa/albert/logger"
|
|
"google.golang.org/grpc"
|
|
"google.golang.org/grpc/credentials/insecure"
|
|
)
|
|
|
|
func Run() error {
|
|
// flags
|
|
l2InAddr := flag.String("l2-in-addr", "0.0.0.0:5012", "tcp l2 server address")
|
|
apiAddr := flag.String("l2-out-addr", "localhost:3333", "tcp adress")
|
|
nsqAddr := flag.String("nsq-addr", "10.1.152.13", "nsq server address")
|
|
nsqPort := flag.Int("nsq-port", 4150, "nsq server port")
|
|
logLevel := flag.String("log-level", "debug", "trace debug level")
|
|
flag.Parse()
|
|
// setup logger
|
|
log := logger.New(os.Stdout, *logLevel)
|
|
// log fields
|
|
logFields := logger.LogFields{
|
|
"log_level": *logLevel,
|
|
"l2_in_address": *l2InAddr,
|
|
"api_adress": *apiAddr,
|
|
"nsq_address": *nsqAddr,
|
|
"nsq_port": *nsqPort,
|
|
}
|
|
// create event publisher
|
|
publisher, err := cml04eventer.NewPublisher(&cml04eventer.PublisherImplConfig{
|
|
NSQAddress: *nsqAddr,
|
|
NSQPort: *nsqPort,
|
|
Marshaler: cml04eventer.JSONMarshaler{},
|
|
}, log)
|
|
if err != nil {
|
|
log.Error("failed to create event publisher", err, logFields)
|
|
return err
|
|
}
|
|
defer publisher.Close()
|
|
// api dial
|
|
conn, err := grpc.Dial(*apiAddr, grpc.WithTransportCredentials(insecure.NewCredentials()))
|
|
if err != nil {
|
|
log.Error("failed to dial api server", err, logger.LogFields{})
|
|
}
|
|
// create api client
|
|
client := api.NewRollDataServiceClient(conn)
|
|
defer conn.Close()
|
|
// create service
|
|
svc := service.NewService(client, publisher)
|
|
svc = logging.NewLoggingService(log, svc)
|
|
// create server
|
|
server := server.NewServer(*l2InAddr, log, svc)
|
|
// start tcp server (telegrams)
|
|
go func() {
|
|
if err := server.Run(); err != nil {
|
|
log.Error("server error", err, logFields)
|
|
}
|
|
}()
|
|
// info banner
|
|
log.Info("started cml04-l2-rsm-in telegram service", logFields)
|
|
// wait signal to finish
|
|
signal := WaitSignal()
|
|
log.Info("signal received", logFields.Add(logger.LogFields{
|
|
"signal": signal,
|
|
}))
|
|
return nil
|
|
}
|
|
|
|
// WaitSignal catching exit signal
|
|
func WaitSignal() os.Signal {
|
|
ch := make(chan os.Signal, 2)
|
|
signal.Notify(
|
|
ch,
|
|
syscall.SIGINT,
|
|
syscall.SIGQUIT,
|
|
syscall.SIGTERM,
|
|
)
|
|
for {
|
|
sig := <-ch
|
|
switch sig {
|
|
case syscall.SIGINT, syscall.SIGQUIT, syscall.SIGTERM:
|
|
return sig
|
|
}
|
|
}
|
|
}
|