Feat: add data-dir flag

pull/21/head
zijiren233 2 years ago
parent d0dfaf33b8
commit d2263c19c4

@ -15,4 +15,6 @@ var (
EnvNoPrefix bool
GitHubBaseURL string
DataDir string
)

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

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

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

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

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

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

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

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

@ -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
Loading…
Cancel
Save