From d2263c19c46cc08f224e43d5116e81e70ae642cc Mon Sep 17 00:00:00 2001 From: zijiren233 Date: Tue, 17 Oct 2023 21:16:08 +0800 Subject: [PATCH] Feat: add data-dir flag --- cmd/flags/config.go | 2 + cmd/root.go | 9 ++++- internal/bootstrap/config.go | 7 +--- internal/bootstrap/db.go | 18 +++++++-- internal/bootstrap/log.go | 4 ++ ~/.synctv/config.yaml | 38 +++++++++++++++++++ ~/.synctv/log/log-2023-10-17T12-57-19.013.log | 9 +++++ ~/.synctv/log/log-2023-10-17T13-06-50.095.log | 9 +++++ ~/.synctv/log/log-2023-10-17T13-07-14.103.log | 9 +++++ ~/.synctv/log/log.log | 9 +++++ 10 files changed, 104 insertions(+), 10 deletions(-) create mode 100644 ~/.synctv/config.yaml create mode 100644 ~/.synctv/log/log-2023-10-17T12-57-19.013.log create mode 100644 ~/.synctv/log/log-2023-10-17T13-06-50.095.log create mode 100644 ~/.synctv/log/log-2023-10-17T13-07-14.103.log create mode 100644 ~/.synctv/log/log.log diff --git a/cmd/flags/config.go b/cmd/flags/config.go index 4ed6aab..e10dead 100644 --- a/cmd/flags/config.go +++ b/cmd/flags/config.go @@ -15,4 +15,6 @@ var ( EnvNoPrefix bool GitHubBaseURL string + + DataDir string ) diff --git a/cmd/root.go b/cmd/root.go index f02afbf..9765d95 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -3,7 +3,9 @@ package cmd import ( "fmt" "os" + "path/filepath" + "github.com/mitchellh/go-homedir" "github.com/spf13/cobra" "github.com/synctv-org/synctv/cmd/flags" "github.com/synctv-org/synctv/internal/version" @@ -28,6 +30,11 @@ func init() { RootCmd.PersistentFlags().BoolVar(&flags.EnvNoPrefix, "env-no-prefix", false, "env no SYNCTV_ prefix") RootCmd.PersistentFlags().BoolVar(&flags.SkipConfig, "skip-config", false, "skip config") RootCmd.PersistentFlags().BoolVar(&flags.SkipEnv, "skip-env", false, "skip env") - RootCmd.PersistentFlags().StringVarP(&flags.ConfigFile, "config", "f", "", "config file path") RootCmd.PersistentFlags().StringVar(&flags.GitHubBaseURL, "github-base-url", "https://api.github.com/", "github api base url") + home, err := homedir.Dir() + if err != nil { + home = "~" + } + RootCmd.PersistentFlags().StringVar(&flags.DataDir, "data-dir", filepath.Join(home, ".synctv"), "data dir") + RootCmd.PersistentFlags().StringVarP(&flags.ConfigFile, "config", "f", filepath.Join(flags.DataDir, "config.yaml"), "config file path") } diff --git a/internal/bootstrap/config.go b/internal/bootstrap/config.go index e3babe2..2b4b1c3 100644 --- a/internal/bootstrap/config.go +++ b/internal/bootstrap/config.go @@ -6,7 +6,6 @@ import ( "path/filepath" "github.com/caarlos0/env/v9" - "github.com/mitchellh/go-homedir" log "github.com/sirupsen/logrus" "github.com/synctv-org/synctv/cmd/flags" @@ -27,11 +26,7 @@ func InitConfig(ctx context.Context) error { conf.Conf = conf.DefaultConfig() if !flags.SkipConfig { if flags.ConfigFile == "" { - homeDir, err := homedir.Dir() - if err != nil { - log.Fatalf("find home dir error: %v", err) - } - flags.ConfigFile = filepath.Join(homeDir, ".config", "synctv", "config.yaml") + flags.ConfigFile = filepath.Join(flags.DataDir, "config.yaml") } else { fileAbs, err := filepath.Abs(flags.ConfigFile) if err != nil { diff --git a/internal/bootstrap/db.go b/internal/bootstrap/db.go index 9401e04..fb555dc 100644 --- a/internal/bootstrap/db.go +++ b/internal/bootstrap/db.go @@ -3,10 +3,12 @@ package bootstrap import ( "context" "fmt" + "path/filepath" "strings" "github.com/glebarez/sqlite" log "github.com/sirupsen/logrus" + "github.com/synctv-org/synctv/cmd/flags" "github.com/synctv-org/synctv/internal/conf" "github.com/synctv-org/synctv/internal/db" "gorm.io/driver/mysql" @@ -27,6 +29,7 @@ func InitDatabase(ctx context.Context) error { conf.Conf.Database.DBName, conf.Conf.Database.SslMode, ) + log.Infof("mysql database unix socket: %s", conf.Conf.Database.Host) } else { dsn = fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local&tls=%s", conf.Conf.Database.User, @@ -36,6 +39,7 @@ func InitDatabase(ctx context.Context) error { conf.Conf.Database.DBName, conf.Conf.Database.SslMode, ) + log.Infof("mysql database tcp: %s:%d", conf.Conf.Database.Host, conf.Conf.Database.Port) } dialector = mysql.New(mysql.Config{ DSN: dsn, @@ -50,10 +54,16 @@ func InitDatabase(ctx context.Context) error { var dsn string if conf.Conf.Database.DBName == "memory" || strings.HasPrefix(conf.Conf.Database.DBName, ":memory:") { dsn = "file::memory:?cache=shared" - } else if !strings.HasSuffix(conf.Conf.Database.DBName, ".db") { - dsn = fmt.Sprintf("%s.db?_journal_mode=WAL&_vacuum=incremental", conf.Conf.Database.DBName) + log.Infof("sqlite3 database memory") } else { - dsn = conf.Conf.Database.DBName + if !strings.HasSuffix(conf.Conf.Database.DBName, ".db") { + conf.Conf.Database.DBName = conf.Conf.Database.DBName + ".db" + } + if !filepath.IsAbs(conf.Conf.Database.DBName) { + conf.Conf.Database.DBName = filepath.Join(flags.DataDir, conf.Conf.Database.DBName) + } + dsn = fmt.Sprintf("%s?_journal_mode=WAL&_vacuum=incremental", conf.Conf.Database.DBName) + log.Infof("sqlite3 database file: %s", conf.Conf.Database.DBName) } dialector = sqlite.Open(dsn) opts = append(opts, &gorm.Config{}) @@ -67,6 +77,7 @@ func InitDatabase(ctx context.Context) error { conf.Conf.Database.DBName, conf.Conf.Database.SslMode, ) + log.Infof("postgres database unix socket: %s", conf.Conf.Database.Host) } else { dsn = fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=%s", conf.Conf.Database.Host, @@ -76,6 +87,7 @@ func InitDatabase(ctx context.Context) error { conf.Conf.Database.DBName, conf.Conf.Database.SslMode, ) + log.Infof("postgres database tcp: %s:%d", conf.Conf.Database.Host, conf.Conf.Database.Port) } dialector = mysql.Open(dsn) opts = append(opts, &gorm.Config{}) diff --git a/internal/bootstrap/log.go b/internal/bootstrap/log.go index dcfc28a..5049a89 100644 --- a/internal/bootstrap/log.go +++ b/internal/bootstrap/log.go @@ -5,6 +5,7 @@ import ( "io" "log" "os" + "path/filepath" "github.com/natefinch/lumberjack" "github.com/sirupsen/logrus" @@ -26,6 +27,9 @@ func setLog(l *logrus.Logger) { func InitLog(ctx context.Context) error { setLog(logrus.StandardLogger()) if conf.Conf.Log.Enable { + if !filepath.IsAbs(conf.Conf.Log.FilePath) { + conf.Conf.Log.FilePath = filepath.Join(flags.DataDir, conf.Conf.Log.FilePath) + } var l = &lumberjack.Logger{ Filename: conf.Conf.Log.FilePath, MaxSize: conf.Conf.Log.MaxSize, diff --git a/~/.synctv/config.yaml b/~/.synctv/config.yaml new file mode 100644 index 0000000..fc25b92 --- /dev/null +++ b/~/.synctv/config.yaml @@ -0,0 +1,38 @@ +log: + enable: true # enable log to file (default: true) + log_format: text # log format, can be set: text | json (default: text) + file_path: log/log.log # log file path (default: log/log.log) + max_size: 10 # max size per log file (default: 10 megabytes) + max_backups: 10 # max backups (default: 10) + max_age: 28 # max age (default: 28 days) + compress: false # compress (default: false) +server: + listen: 0.0.0.0 # server listen addr (default: 0.0.0.0) + port: 8080 # server listen port (default: 8080) + quic: true # enable http3/quic, need enable ssl, set cert and key file (default: true) + cert_path: "" # cert path + key_path: "" # key path +jwt: + secret: sXpUIwmOZqwqnyJHfaQtzkSjINgcsXGJ # jwt secret (default rand string) + expire: 12 # expire time (default: 12 hour) +# you can use rtmp to publish live +rtmp: + enable: true # enable rtmp server (default: true) + port: 0 # rtmp server port (default use server port) + custom_publish_host: "" # publish host (default use http header host) + rtmp_player: false # enable rtmp player (default: false) + hls_player: true # enable hls player (default: true) +# you can use proxy to proxy movie and live when custom headers or network is slow to connect to origin server +proxy: + movie_proxy: true # enable movie proxy (default: true) + live_proxy: true # enable live proxy (default: true) +room: + must_password: false # must input password to create room (default: false) +database: + type: sqlite3 # database type, support sqlite3, mysql, postgres + host: "" # database host, when type is not sqlite3, and port is 0, it will use unix socket file + port: 0 # database port + user: "" # database user + password: "" # database password + db_name: synctv # database name, when type is sqlite3, it will use sqlite db file or memory + ssl_mode: disable # database ssl mode, default disable diff --git a/~/.synctv/log/log-2023-10-17T12-57-19.013.log b/~/.synctv/log/log-2023-10-17T12-57-19.013.log new file mode 100644 index 0000000..734854e --- /dev/null +++ b/~/.synctv/log/log-2023-10-17T12-57-19.013.log @@ -0,0 +1,9 @@ +INFO[0000]/Users/zijiren/workspace/go/synctv/internal/bootstrap/log.go:46 github.com/synctv-org/synctv/internal/bootstrap.InitLog() log: enable log to stdout and file: ~/.synctv/log/log.log +INFO[0000]/Users/zijiren/workspace/go/synctv/internal/bootstrap/db.go:66 github.com/synctv-org/synctv/internal/bootstrap.InitDatabase() sqlite3 database file: ~/.synctv/memery.db +INFO[0000]/Users/zijiren/workspace/go/synctv/cmd/server.go:118 github.com/synctv-org/synctv/cmd.Server() rtmp run on tcp://127.0.0.1:8088 +INFO[0000]/Users/zijiren/workspace/go/synctv/cmd/server.go:126 github.com/synctv-org/synctv/cmd.Server() website run on http://127.0.0.1:8088 +INFO[0000]/Users/zijiren/workspace/go/synctv/internal/sysNotify/sysNotify.go:99 github.com/synctv-org/synctv/internal/sysNotify.(*SysNotify).waitCbk() wait sys notify +INFO[0002]/Users/zijiren/workspace/go/synctv/internal/sysNotify/sysNotify.go:101 github.com/synctv-org/synctv/internal/sysNotify.(*SysNotify).waitCbk() receive sys notify: interrupt +INFO[0002]/Users/zijiren/workspace/go/synctv/internal/sysNotify/sysNotify.go:106 github.com/synctv-org/synctv/internal/sysNotify.(*SysNotify).waitCbk() task: NotifyTypeEXIT running... +INFO[0002]/Users/zijiren/workspace/go/synctv/internal/sysNotify/sysNotify.go:73 github.com/synctv-org/synctv/internal/sysNotify.runTask.func1() task: check-update running +INFO[0002]/Users/zijiren/workspace/go/synctv/internal/sysNotify/sysNotify.go:77 github.com/synctv-org/synctv/internal/sysNotify.runTask.func1() task: check-update done diff --git a/~/.synctv/log/log-2023-10-17T13-06-50.095.log b/~/.synctv/log/log-2023-10-17T13-06-50.095.log new file mode 100644 index 0000000..52ea583 --- /dev/null +++ b/~/.synctv/log/log-2023-10-17T13-06-50.095.log @@ -0,0 +1,9 @@ +INFO[0000]/Users/zijiren/workspace/go/synctv/internal/bootstrap/log.go:46 github.com/synctv-org/synctv/internal/bootstrap.InitLog() log: enable log to stdout and file: ~/.synctv/log/log.log +INFO[0000]/Users/zijiren/workspace/go/synctv/internal/bootstrap/db.go:66 github.com/synctv-org/synctv/internal/bootstrap.InitDatabase() sqlite3 database file: ~/.synctv/memery.db +INFO[0000]/Users/zijiren/workspace/go/synctv/cmd/server.go:118 github.com/synctv-org/synctv/cmd.Server() rtmp run on tcp://127.0.0.1:8088 +INFO[0000]/Users/zijiren/workspace/go/synctv/cmd/server.go:126 github.com/synctv-org/synctv/cmd.Server() website run on http://127.0.0.1:8088 +INFO[0000]/Users/zijiren/workspace/go/synctv/internal/sysNotify/sysNotify.go:99 github.com/synctv-org/synctv/internal/sysNotify.(*SysNotify).waitCbk() wait sys notify +INFO[0001]/Users/zijiren/workspace/go/synctv/internal/sysNotify/sysNotify.go:101 github.com/synctv-org/synctv/internal/sysNotify.(*SysNotify).waitCbk() receive sys notify: interrupt +INFO[0001]/Users/zijiren/workspace/go/synctv/internal/sysNotify/sysNotify.go:106 github.com/synctv-org/synctv/internal/sysNotify.(*SysNotify).waitCbk() task: NotifyTypeEXIT running... +INFO[0001]/Users/zijiren/workspace/go/synctv/internal/sysNotify/sysNotify.go:73 github.com/synctv-org/synctv/internal/sysNotify.runTask.func1() task: check-update running +INFO[0001]/Users/zijiren/workspace/go/synctv/internal/sysNotify/sysNotify.go:77 github.com/synctv-org/synctv/internal/sysNotify.runTask.func1() task: check-update done diff --git a/~/.synctv/log/log-2023-10-17T13-07-14.103.log b/~/.synctv/log/log-2023-10-17T13-07-14.103.log new file mode 100644 index 0000000..664b214 --- /dev/null +++ b/~/.synctv/log/log-2023-10-17T13-07-14.103.log @@ -0,0 +1,9 @@ +INFO[0000]/Users/zijiren/workspace/go/synctv/internal/bootstrap/log.go:46 github.com/synctv-org/synctv/internal/bootstrap.InitLog() log: enable log to stdout and file: ~/.synctv/log/log.log +INFO[0000]/Users/zijiren/workspace/go/synctv/internal/bootstrap/db.go:66 github.com/synctv-org/synctv/internal/bootstrap.InitDatabase() sqlite3 database file: ~/.synctv/memery.db +INFO[0000]/Users/zijiren/workspace/go/synctv/cmd/server.go:118 github.com/synctv-org/synctv/cmd.Server() rtmp run on tcp://127.0.0.1:8088 +INFO[0000]/Users/zijiren/workspace/go/synctv/cmd/server.go:126 github.com/synctv-org/synctv/cmd.Server() website run on http://127.0.0.1:8088 +INFO[0000]/Users/zijiren/workspace/go/synctv/internal/sysNotify/sysNotify.go:99 github.com/synctv-org/synctv/internal/sysNotify.(*SysNotify).waitCbk() wait sys notify +INFO[0021]/Users/zijiren/workspace/go/synctv/internal/sysNotify/sysNotify.go:101 github.com/synctv-org/synctv/internal/sysNotify.(*SysNotify).waitCbk() receive sys notify: interrupt +INFO[0021]/Users/zijiren/workspace/go/synctv/internal/sysNotify/sysNotify.go:106 github.com/synctv-org/synctv/internal/sysNotify.(*SysNotify).waitCbk() task: NotifyTypeEXIT running... +INFO[0021]/Users/zijiren/workspace/go/synctv/internal/sysNotify/sysNotify.go:73 github.com/synctv-org/synctv/internal/sysNotify.runTask.func1() task: check-update running +INFO[0021]/Users/zijiren/workspace/go/synctv/internal/sysNotify/sysNotify.go:77 github.com/synctv-org/synctv/internal/sysNotify.runTask.func1() task: check-update done diff --git a/~/.synctv/log/log.log b/~/.synctv/log/log.log new file mode 100644 index 0000000..99bab94 --- /dev/null +++ b/~/.synctv/log/log.log @@ -0,0 +1,9 @@ +INFO[0000]/Users/zijiren/workspace/go/synctv/internal/bootstrap/log.go:46 github.com/synctv-org/synctv/internal/bootstrap.InitLog() log: enable log to stdout and file: ~/.synctv/log/log.log +INFO[0000]/Users/zijiren/workspace/go/synctv/internal/bootstrap/db.go:66 github.com/synctv-org/synctv/internal/bootstrap.InitDatabase() sqlite3 database file: ~/.synctv/memery.db +INFO[0000]/Users/zijiren/workspace/go/synctv/cmd/server.go:118 github.com/synctv-org/synctv/cmd.Server() rtmp run on tcp://127.0.0.1:8088 +INFO[0000]/Users/zijiren/workspace/go/synctv/cmd/server.go:126 github.com/synctv-org/synctv/cmd.Server() website run on http://127.0.0.1:8088 +INFO[0000]/Users/zijiren/workspace/go/synctv/internal/sysNotify/sysNotify.go:99 github.com/synctv-org/synctv/internal/sysNotify.(*SysNotify).waitCbk() wait sys notify +INFO[0013]/Users/zijiren/workspace/go/synctv/internal/sysNotify/sysNotify.go:101 github.com/synctv-org/synctv/internal/sysNotify.(*SysNotify).waitCbk() receive sys notify: interrupt +INFO[0013]/Users/zijiren/workspace/go/synctv/internal/sysNotify/sysNotify.go:106 github.com/synctv-org/synctv/internal/sysNotify.(*SysNotify).waitCbk() task: NotifyTypeEXIT running... +INFO[0013]/Users/zijiren/workspace/go/synctv/internal/sysNotify/sysNotify.go:73 github.com/synctv-org/synctv/internal/sysNotify.runTask.func1() task: check-update running +INFO[0013]/Users/zijiren/workspace/go/synctv/internal/sysNotify/sysNotify.go:77 github.com/synctv-org/synctv/internal/sysNotify.runTask.func1() task: check-update done