From cc3cd8cad0bc83788925f606a25fe0a0dfbca551 Mon Sep 17 00:00:00 2001 From: aespin Date: Wed, 2 Oct 2024 12:54:57 +0200 Subject: [PATCH] wip --- barcode_event.json | 19 -------- bundle/app/app.go | 112 +++++++++++++++++++++++++++++++++++++++++++++ cmd/barcode.go | 4 +- cmd/bundle.go | 28 +++++------- cmd/handset.go | 4 +- docker/Dockerfile | 12 +++-- 6 files changed, 134 insertions(+), 45 deletions(-) delete mode 100644 barcode_event.json create mode 100644 bundle/app/app.go diff --git a/barcode_event.json b/barcode_event.json deleted file mode 100644 index 1a40a24..0000000 --- a/barcode_event.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "event_id": "99260667-d229-4a24-9c1c-156f8cdc16fb", - "event_topic": "barcode.new", - "event_sender": "tester", - "event_meta": null, - "event_data": [ - 57, - 52, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55 - ], - "event_time": "2024-10-01T15:39:55+00:00" -} \ No newline at end of file diff --git a/bundle/app/app.go b/bundle/app/app.go new file mode 100644 index 0000000..cfc943f --- /dev/null +++ b/bundle/app/app.go @@ -0,0 +1,112 @@ +package app + +import ( + "context" + "fmt" + "os" + "os/signal" + "syscall" + + "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") + userName, _ := cmd.Flags().GetString("db-username") + userPass, _ := 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") + // setup logger + log := logger.New(os.Stdout, logLevel) + // log fields + logFields := logger.LogFields{ + "db_username": userName, + "db_password": "*****", + "db_host": dbHost, + "db_port": dbPort, + "db_name": dbName, + "nats_host": natsHost, + "nats_port": natsPort, + "log_level": logLevel, + } + // create storager + storage, err := storage.New(&storage.DBConfig{ + Username: userName, + Password: userPass, + Host: dbHost, + Port: dbPort, + Name: dbName, + }) + // handler error + if err != nil { + log.Error("create storage failed", err, logFields) + return + } + // 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 + } + defer nc.Close() + // create context + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + // NATS subscribe subject + nc.Subscribe("barcode.new", func(msg *nats.Msg) { + go func(log logger.LoggerAdapter) { + if err := ProcessBarcodeMessage(ctx, msg, storage, log); err != nil { + log.Error("process new barcode message failed", err, logger.LogFields{}) + return + } + }(log) + }) + nc.Subscribe("bundle.new", func(msg *nats.Msg) { + go func(log logger.LoggerAdapter) { + if err := ProcessBundleMessage(ctx, msg, storage, log); err != nil { + log.Error("process new bundle message failed", err, logger.LogFields{}) + return + } + }(log) + }) + // info banner + log.Info("started falcon barcoder service", logFields) + // wait signal to finish + signal := WaitSignal() + log.Info("signal received", logFields.Add(logger.LogFields{ + "signal": signal, + })) +} + +func ProcessBarcodeMessage(ctx context.Context, msg *nats.Msg, storage storage.Storager, log logger.LoggerAdapter) error { + return nil +} + +func ProcessBundleMessage(ctx context.Context, msg *nats.Msg, storage storage.Storager, log logger.LoggerAdapter) error { + 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 + } + } +} diff --git a/cmd/barcode.go b/cmd/barcode.go index 70f4d91..19cb9d8 100644 --- a/cmd/barcode.go +++ b/cmd/barcode.go @@ -21,10 +21,10 @@ func init() { // flags barcoderCmd.Flags().String("db-username", "postgres", "database username") barcoderCmd.Flags().String("db-password", "Me8140@01", "database user password") - barcoderCmd.Flags().String("db-host", "10.136.49.104", "database host address") + barcoderCmd.Flags().String("db-host", "db", "database host address") barcoderCmd.Flags().Int("db-port", 5432, "database tcp port") barcoderCmd.Flags().String("db-name", "falcon", "database user password") - barcoderCmd.Flags().String("nats-host", "10.136.49.95", "nats.io broker host address") + barcoderCmd.Flags().String("nats-host", "nats", "nats.io broker host address") barcoderCmd.Flags().Int("nats-port", 4222, "nats.io broker tcp port") barcoderCmd.Flags().String("log-level", "debug", "log level trace") } diff --git a/cmd/bundle.go b/cmd/bundle.go index 633e9b1..696e053 100644 --- a/cmd/bundle.go +++ b/cmd/bundle.go @@ -1,6 +1,5 @@ /* Copyright © 2024 NAME HERE - */ package cmd @@ -13,13 +12,8 @@ import ( // bundleCmd represents the bundle command var bundleCmd = &cobra.Command{ Use: "bundle", - Short: "A brief description of your command", - Long: `A longer description that spans multiple lines and likely contains examples -and usage of using your command. For example: - -Cobra is a CLI library for Go that empowers applications. -This application is a tool to generate the needed files -to quickly create a Cobra application.`, + Short: "bundle service manager.", + Long: "", Run: func(cmd *cobra.Command, args []string) { fmt.Println("bundle called") }, @@ -28,13 +22,13 @@ to quickly create a Cobra application.`, func init() { rootCmd.AddCommand(bundleCmd) - // Here you will define your flags and configuration settings. - - // Cobra supports Persistent Flags which will work for this command - // and all subcommands, e.g.: - // bundleCmd.PersistentFlags().String("foo", "", "A help for foo") - - // Cobra supports local flags which will only run when this command - // is called directly, e.g.: - // bundleCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") + // flags + bundleCmd.Flags().String("db-username", "postgres", "database username") + bundleCmd.Flags().String("db-password", "Me8140@01", "database user password") + bundleCmd.Flags().String("db-host", "db", "database host address") + bundleCmd.Flags().Int("db-port", 5432, "database tcp port") + bundleCmd.Flags().String("db-name", "falcon", "database user password") + bundleCmd.Flags().String("nats-host", "nats", "nats.io broker host address") + bundleCmd.Flags().Int("nats-port", 4222, "nats.io broker tcp port") + bundleCmd.Flags().String("log-level", "debug", "log level trace") } diff --git a/cmd/handset.go b/cmd/handset.go index 7a4ef65..4f027c1 100644 --- a/cmd/handset.go +++ b/cmd/handset.go @@ -12,7 +12,7 @@ import ( var handsetCmd = &cobra.Command{ Use: "handset", Short: "Handset service for reading/process barcodes.", - Long: "Handset service for reading and processing read barcodes from label on bundles.", + Long: "Handset service for reading and processing read barcodes from bundle labels.", Run: app.Run, } @@ -20,7 +20,7 @@ func init() { rootCmd.AddCommand(handsetCmd) handsetCmd.Flags().String("http-addr", ":9443", "nats.io broker host address") - handsetCmd.Flags().String("nats-host", "10.136.49.95", "nats.io broker host address") + handsetCmd.Flags().String("nats-host", "nats", "nats.io broker host address") handsetCmd.Flags().Int("nats-port", 4222, "nats.io broker tcp port") handsetCmd.Flags().String("log-level", "debug", "log level trace") } diff --git a/docker/Dockerfile b/docker/Dockerfile index 91eb788..c091bce 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -16,7 +16,7 @@ COPY . . RUN go get -d -v ./... -RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -mod=mod -ldflags "-s -w" -o myapp main.go +RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -mod=mod -ldflags "-s -w" -o cml04-falcon-system main.go # Etapa de producción @@ -28,11 +28,13 @@ ADD celsa2048.crt /usr/local/share/ca-certificates/celsa2048.crt RUN chmod 644 /usr/local/share/ca-certificates/celsa2048.crt RUN apt-get update \ && apt-get install -y --no-install-recommends ca-certificates -ADD assets /root/ -ADD templates /root/ +ADD assets /root/assets +ADD templates /root/templates +ADD server.crt /root/ +ADD server.key /root/ RUN update-ca-certificates WORKDIR /root/ -COPY --from=builder /app/myapp . +COPY --from=builder /app/cml04-falcon-system . -CMD ["./myapp"] \ No newline at end of file +CMD ["./cml04-falcon-system"] \ No newline at end of file