195 lines
4.5 KiB
Go
195 lines
4.5 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"intent-system/pkg/api"
|
|
"intent-system/pkg/config"
|
|
"intent-system/pkg/itypes"
|
|
"intent-system/pkg/services"
|
|
"os"
|
|
"os/signal"
|
|
|
|
"github.com/civet148/log"
|
|
"github.com/urfave/cli/v2"
|
|
)
|
|
|
|
const (
|
|
Version = "v0.5.11"
|
|
ProgramName = "intent-system"
|
|
)
|
|
|
|
var (
|
|
BuildTime = "2024-05-11"
|
|
GitCommit = ""
|
|
)
|
|
|
|
const (
|
|
CMD_NAME_RUN = "run"
|
|
CMD_NAME_START = "start"
|
|
)
|
|
|
|
const (
|
|
CMD_FLAG_NAME_DSN = "dsn"
|
|
CMD_FLAG_NAME_POSTGRESQL = "pg"
|
|
CMD_FLAG_NAME_DEBUG = "debug"
|
|
CMD_FLAG_NAME_STATIC = "static"
|
|
CMD_FLAG_NAME_DOMAIN = "domain"
|
|
CMD_FLAG_NAME_IMAGE_PATH = "image-path"
|
|
CMD_FLAG_NAME_IMAGE_PREFIX = "image-prefix"
|
|
CMD_FLAG_NAME_GATEWAY_URL = "gateway-url"
|
|
CMD_FLAG_NAME_GATEWAY_KEY = "gateway-key"
|
|
CMD_FLAG_NAME_GATEWAY_SECRET = "gateway-secret"
|
|
CMD_FLAG_NAME_SUB_CRON = "sub-cron"
|
|
)
|
|
|
|
var manager api.ManagerApi
|
|
|
|
func init() {
|
|
}
|
|
|
|
func grace() {
|
|
//capture signal of Ctrl+C and gracefully exit
|
|
sigChannel := make(chan os.Signal, 1)
|
|
signal.Notify(sigChannel, os.Interrupt)
|
|
go func() {
|
|
for {
|
|
select {
|
|
case s := <-sigChannel:
|
|
{
|
|
if s != nil && s == os.Interrupt {
|
|
fmt.Printf("Ctrl+C signal captured, program exiting...\n")
|
|
if manager != nil {
|
|
manager.Close()
|
|
}
|
|
close(sigChannel)
|
|
os.Exit(0)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}()
|
|
}
|
|
|
|
func main() {
|
|
|
|
grace()
|
|
|
|
local := []*cli.Command{
|
|
runCmd,
|
|
}
|
|
app := &cli.App{
|
|
Name: ProgramName,
|
|
Version: fmt.Sprintf("%s %s commit %s", Version, BuildTime, GitCommit),
|
|
Flags: []cli.Flag{},
|
|
Commands: local,
|
|
Action: nil,
|
|
}
|
|
if err := app.Run(os.Args); err != nil {
|
|
log.Errorf("exit in error %s", err)
|
|
os.Exit(1)
|
|
return
|
|
}
|
|
}
|
|
|
|
var runCmd = &cli.Command{
|
|
Name: CMD_NAME_RUN,
|
|
Usage: "run as a web service",
|
|
ArgsUsage: "[listen address]",
|
|
Aliases: []string{CMD_NAME_START},
|
|
Flags: []cli.Flag{
|
|
&cli.BoolFlag{
|
|
Name: CMD_FLAG_NAME_DEBUG,
|
|
Usage: "open debug log mode",
|
|
},
|
|
&cli.StringFlag{
|
|
Name: CMD_FLAG_NAME_DSN,
|
|
Usage: "data source name of database",
|
|
Value: itypes.DEFAULT_DATA_SOURCE_NAME,
|
|
Aliases: []string{"n"},
|
|
},
|
|
//&cli.StringFlag{
|
|
// Name: CMD_FLAG_NAME_STATIC,
|
|
// Usage: "frontend static path",
|
|
// Value: itypes.DefaultStaticHome,
|
|
//},
|
|
&cli.StringFlag{
|
|
Name: CMD_FLAG_NAME_IMAGE_PATH,
|
|
Usage: "image saving path",
|
|
Value: itypes.DefaultImagesHome,
|
|
Aliases: []string{"i"},
|
|
},
|
|
&cli.StringFlag{
|
|
Name: CMD_FLAG_NAME_DOMAIN,
|
|
Usage: "domain url",
|
|
Required: true,
|
|
Aliases: []string{"d"},
|
|
},
|
|
&cli.StringFlag{
|
|
Name: CMD_FLAG_NAME_IMAGE_PREFIX,
|
|
Usage: "image url prefix",
|
|
Value: itypes.DEFAULT_IMAGE_PREFIX,
|
|
Aliases: []string{"p"},
|
|
},
|
|
&cli.StringFlag{
|
|
Name: CMD_FLAG_NAME_GATEWAY_URL,
|
|
Usage: "sdk gateway url",
|
|
Aliases: []string{"g"},
|
|
Required: true,
|
|
},
|
|
&cli.StringFlag{
|
|
Name: CMD_FLAG_NAME_GATEWAY_KEY,
|
|
Usage: "sdk gateway access key",
|
|
Aliases: []string{"k"},
|
|
Required: true,
|
|
}, &cli.StringFlag{
|
|
Name: CMD_FLAG_NAME_GATEWAY_SECRET,
|
|
Usage: "sdk gateway access secret",
|
|
Aliases: []string{"s"},
|
|
Required: true,
|
|
},
|
|
&cli.StringFlag{
|
|
Name: CMD_FLAG_NAME_POSTGRESQL,
|
|
Usage: "Postgresql connection string for news sync",
|
|
Required: true,
|
|
},
|
|
|
|
&cli.StringFlag{
|
|
Name: CMD_FLAG_NAME_SUB_CRON,
|
|
Usage: "cron task for email subscription",
|
|
Value: itypes.DEFAULT_SUB_CRON_EMAIL_PUSH,
|
|
},
|
|
},
|
|
Action: func(cctx *cli.Context) error {
|
|
cfg := &config.Config{
|
|
Version: Version,
|
|
HttpAddr: itypes.DEFAULT_HTTP_LISTEN_ADDR,
|
|
DSN: cctx.String(CMD_FLAG_NAME_DSN),
|
|
Debug: cctx.Bool(CMD_FLAG_NAME_DEBUG),
|
|
Domain: cctx.String(CMD_FLAG_NAME_DOMAIN),
|
|
Static: cctx.String(CMD_FLAG_NAME_STATIC),
|
|
ImagePath: cctx.String(CMD_FLAG_NAME_IMAGE_PATH),
|
|
ImagePrefix: cctx.String(CMD_FLAG_NAME_IMAGE_PREFIX),
|
|
GatewayUrl: cctx.String(CMD_FLAG_NAME_GATEWAY_URL),
|
|
GatewayKey: cctx.String(CMD_FLAG_NAME_GATEWAY_KEY),
|
|
GatewaySecret: cctx.String(CMD_FLAG_NAME_GATEWAY_SECRET),
|
|
Postgresql: cctx.String(CMD_FLAG_NAME_POSTGRESQL),
|
|
SubCron: cctx.String(CMD_FLAG_NAME_SUB_CRON),
|
|
}
|
|
|
|
cfg.Version = Version
|
|
if cfg.Debug {
|
|
log.SetLevel("debug")
|
|
}
|
|
log.Json("configuration", cfg)
|
|
if cctx.Args().First() != "" {
|
|
cfg.HttpAddr = cctx.Args().First()
|
|
}
|
|
if err := cfg.Save(); err != nil {
|
|
return err
|
|
}
|
|
//start up as a web server
|
|
manager = services.NewManager(cfg)
|
|
return manager.Run()
|
|
},
|
|
}
|