diff --git a/cmd/sap.go b/cmd/sap.go index 8d56243..006a77c 100644 --- a/cmd/sap.go +++ b/cmd/sap.go @@ -26,10 +26,12 @@ func init() { sapCmd.Flags().String("db-username", "postgres", "database username") sapCmd.Flags().String("db-password", "Me8140@01", "database user password") - sapCmd.Flags().String("db-host", "10.136.49.104", "database host address") + sapCmd.Flags().String("db-host", "db", "database host address") sapCmd.Flags().Int("db-port", 5432, "database tcp port") sapCmd.Flags().String("db-name", "falcon", "database user password") - sapCmd.Flags().String("nats-host", "10.136.49.95", "nats.io broker host address") + sapCmd.Flags().String("nats-host", "nats", "nats.io broker host address") sapCmd.Flags().Int("nats-port", 4222, "nats.io broker tcp port") + sapCmd.Flags().String("nsq-host", "nats", "NSQ queue system host address") + sapCmd.Flags().Int("nsq-port", 4222, "NSQ queue system tcp port") sapCmd.Flags().String("log-level", "debug", "log level trace") } diff --git a/sap/app/app.go b/sap/app/app.go index 0e899da..5a82c01 100644 --- a/sap/app/app.go +++ b/sap/app/app.go @@ -1,5 +1,113 @@ package app -import "github.com/spf13/cobra" +import ( + "context" + "fmt" + "os" + "os/signal" + "syscall" -func Run(cmd *cobra.Command, args []string) {} + cml04eventer "git.espin.casa/albert/cml04-eventer" + "git.espin.casa/albert/cml04-falcon-system/internal/storage" + "git.espin.casa/albert/logger" + "github.com/nats-io/nats.go" + "github.com/spf13/cobra" +) + +func Run(cmd *cobra.Command, args []string) { + // read flags + logLevel, _ := cmd.Flags().GetString("log-level") + dbUser, _ := cmd.Flags().GetString("db-username") + dbPass, _ := cmd.Flags().GetString("db-password") + dbHost, _ := cmd.Flags().GetString("db-host") + dbPort, _ := cmd.Flags().GetInt("db-port") + dbName, _ := cmd.Flags().GetString("db-name") + natsHost, _ := cmd.Flags().GetString("nats-host") + natsPort, _ := cmd.Flags().GetInt("nats-port") + nsqHost, _ := cmd.Flags().GetString("nsq-host") + nsqPort, _ := cmd.Flags().GetInt("nsq-port") + // setup logger + log := logger.New(os.Stdout, logLevel) + // log fields + logFields := logger.LogFields{ + "nsq_host": nsqHost, + "nsq_port": nsqPort, + "nats_host": natsHost, + "nats_port": natsPort, + "log_level": logLevel, + } + // NATS connect + nc, err := nats.Connect(fmt.Sprintf("nats://%s:%d", natsHost, natsPort)) + if err != nil { + log.Error("create nats connection failed", err, logFields) + return + } + // on close disconnects + defer nc.Close() + // create storager + storage, err := storage.New(&storage.DBConfig{ + Username: dbUser, + Password: dbPass, + Host: dbHost, + Port: dbPort, + Name: dbName, + }) + // handle error + if err != nil { + log.Error("create storage failed", err, logFields) + return + } + // create nsq subscriber + subscriber, err := cml04eventer.NewSubscriber(&cml04eventer.SubscriberConfig{ + NSQAddress: nsqHost, + NSQPort: nsqPort, + Unmarshaler: cml04eventer.JSONMarshaler{}, + Channel: "cml04-falcon-system", + }, log) + // handle error + if err != nil { + log.Error("create nsq subscriber failed", err, logFields) + return + } + // on exit close subscriber + defer subscriber.Close() + // create context with cancel + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + eventChan, err := subscriber.SubscribeEvent(ctx, "FALCON-IN") + // handle error + if err != nil { + log.Error("nsq subscription failed", err, logFields) + return + } + go func() { + for event := range eventChan { + + } + }() + // info banner + log.Info("started cml04-falcon-sap service", logFields) + // wait signal to finish + signal := WaitSignal() + log.Info("signal received", logFields.Add(logger.LogFields{ + "signal": signal, + })) +} + +// 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 + } + } +}