This commit is contained in:
aespin 2024-10-02 12:54:57 +02:00
parent f2aca73855
commit cc3cd8cad0
6 changed files with 134 additions and 45 deletions

View File

@ -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"
}

112
bundle/app/app.go Normal file
View File

@ -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
}
}
}

View File

@ -21,10 +21,10 @@ func init() {
// flags // flags
barcoderCmd.Flags().String("db-username", "postgres", "database username") barcoderCmd.Flags().String("db-username", "postgres", "database username")
barcoderCmd.Flags().String("db-password", "Me8140@01", "database user password") 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().Int("db-port", 5432, "database tcp port")
barcoderCmd.Flags().String("db-name", "falcon", "database user password") 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().Int("nats-port", 4222, "nats.io broker tcp port")
barcoderCmd.Flags().String("log-level", "debug", "log level trace") barcoderCmd.Flags().String("log-level", "debug", "log level trace")
} }

View File

@ -1,6 +1,5 @@
/* /*
Copyright © 2024 NAME HERE <EMAIL ADDRESS> Copyright © 2024 NAME HERE <EMAIL ADDRESS>
*/ */
package cmd package cmd
@ -13,13 +12,8 @@ import (
// bundleCmd represents the bundle command // bundleCmd represents the bundle command
var bundleCmd = &cobra.Command{ var bundleCmd = &cobra.Command{
Use: "bundle", Use: "bundle",
Short: "A brief description of your command", Short: "bundle service manager.",
Long: `A longer description that spans multiple lines and likely contains examples Long: "",
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.`,
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
fmt.Println("bundle called") fmt.Println("bundle called")
}, },
@ -28,13 +22,13 @@ to quickly create a Cobra application.`,
func init() { func init() {
rootCmd.AddCommand(bundleCmd) rootCmd.AddCommand(bundleCmd)
// Here you will define your flags and configuration settings. // flags
bundleCmd.Flags().String("db-username", "postgres", "database username")
// Cobra supports Persistent Flags which will work for this command bundleCmd.Flags().String("db-password", "Me8140@01", "database user password")
// and all subcommands, e.g.: bundleCmd.Flags().String("db-host", "db", "database host address")
// bundleCmd.PersistentFlags().String("foo", "", "A help for foo") bundleCmd.Flags().Int("db-port", 5432, "database tcp port")
bundleCmd.Flags().String("db-name", "falcon", "database user password")
// Cobra supports local flags which will only run when this command bundleCmd.Flags().String("nats-host", "nats", "nats.io broker host address")
// is called directly, e.g.: bundleCmd.Flags().Int("nats-port", 4222, "nats.io broker tcp port")
// bundleCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") bundleCmd.Flags().String("log-level", "debug", "log level trace")
} }

View File

@ -12,7 +12,7 @@ import (
var handsetCmd = &cobra.Command{ var handsetCmd = &cobra.Command{
Use: "handset", Use: "handset",
Short: "Handset service for reading/process barcodes.", 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, Run: app.Run,
} }
@ -20,7 +20,7 @@ func init() {
rootCmd.AddCommand(handsetCmd) rootCmd.AddCommand(handsetCmd)
handsetCmd.Flags().String("http-addr", ":9443", "nats.io broker host address") 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().Int("nats-port", 4222, "nats.io broker tcp port")
handsetCmd.Flags().String("log-level", "debug", "log level trace") handsetCmd.Flags().String("log-level", "debug", "log level trace")
} }

View File

@ -16,7 +16,7 @@ COPY . .
RUN go get -d -v ./... 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 # 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 chmod 644 /usr/local/share/ca-certificates/celsa2048.crt
RUN apt-get update \ RUN apt-get update \
&& apt-get install -y --no-install-recommends ca-certificates && apt-get install -y --no-install-recommends ca-certificates
ADD assets /root/ ADD assets /root/assets
ADD templates /root/ ADD templates /root/templates
ADD server.crt /root/
ADD server.key /root/
RUN update-ca-certificates RUN update-ca-certificates
WORKDIR /root/ WORKDIR /root/
COPY --from=builder /app/myapp . COPY --from=builder /app/cml04-falcon-system .
CMD ["./myapp"] CMD ["./cml04-falcon-system"]