mirror of
https://github.com/mxpv/podsync.git
synced 2024-05-11 05:55:04 +00:00
Use default database directory
This commit is contained in:
committed by
Maksym Pavlenko
parent
7f24306898
commit
e89c143ad7
+1
-1
@@ -86,7 +86,7 @@ func main() {
|
||||
log.WithError(err).Fatal("failed to load configuration file")
|
||||
}
|
||||
|
||||
db, err := storage.NewBadger(opts.ConfigPath)
|
||||
db, err := storage.NewBadger(&cfg.Database)
|
||||
if err != nil {
|
||||
log.WithError(err).Fatal("failed to open database")
|
||||
}
|
||||
|
||||
+14
-2
@@ -2,6 +2,7 @@ package config
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"path/filepath"
|
||||
"time"
|
||||
|
||||
"github.com/BurntSushi/toml"
|
||||
@@ -53,9 +54,16 @@ type Server struct {
|
||||
DataDir string `toml:"data_dir"`
|
||||
}
|
||||
|
||||
type Database struct {
|
||||
// Dir is a directory to keep database files
|
||||
Dir string `toml:"dir"`
|
||||
}
|
||||
|
||||
type Config struct {
|
||||
// Server is the web server configuration
|
||||
Server Server `toml:"server"`
|
||||
// Database configuration
|
||||
Database Database `toml:"database"`
|
||||
// Feeds is a list of feeds to host by this app.
|
||||
// ID will be used as feed ID in http://podsync.net/{FEED_ID}.xml
|
||||
Feeds map[string]*Feed
|
||||
@@ -75,7 +83,7 @@ func LoadConfig(path string) (*Config, error) {
|
||||
feed.ID = id
|
||||
}
|
||||
|
||||
config.applyDefaults()
|
||||
config.applyDefaults(path)
|
||||
|
||||
if err := config.validate(); err != nil {
|
||||
return nil, err
|
||||
@@ -104,7 +112,7 @@ func (c *Config) validate() error {
|
||||
return result.ErrorOrNil()
|
||||
}
|
||||
|
||||
func (c *Config) applyDefaults() {
|
||||
func (c *Config) applyDefaults(configPath string) {
|
||||
if c.Server.Hostname == "" {
|
||||
if c.Server.Port != 0 && c.Server.Port != 80 {
|
||||
c.Server.Hostname = fmt.Sprintf("http://localhost:%d", c.Server.Port)
|
||||
@@ -113,6 +121,10 @@ func (c *Config) applyDefaults() {
|
||||
}
|
||||
}
|
||||
|
||||
if c.Database.Dir == "" {
|
||||
c.Database.Dir = filepath.Join(filepath.Dir(configPath), "db")
|
||||
}
|
||||
|
||||
for _, feed := range c.Feeds {
|
||||
if feed.UpdatePeriod.Duration == 0 {
|
||||
feed.UpdatePeriod.Duration = model.DefaultUpdatePeriod
|
||||
|
||||
@@ -22,6 +22,9 @@ vimeo = "321"
|
||||
port = 80
|
||||
data_dir = "test/data/"
|
||||
|
||||
[database]
|
||||
dir = "/home/user/db/"
|
||||
|
||||
[feeds]
|
||||
[feeds.XYZ]
|
||||
url = "https://youtube.com/watch?v=ygIUF678y40"
|
||||
@@ -46,6 +49,8 @@ data_dir = "test/data/"
|
||||
assert.Equal(t, "test/data/", config.Server.DataDir)
|
||||
assert.EqualValues(t, 80, config.Server.Port)
|
||||
|
||||
assert.Equal(t, "/home/user/db/", config.Database.Dir)
|
||||
|
||||
assert.Equal(t, "123", config.Tokens.YouTube)
|
||||
assert.Equal(t, "321", config.Tokens.Vimeo)
|
||||
|
||||
@@ -96,21 +101,27 @@ func TestDefaultHostname(t *testing.T) {
|
||||
}
|
||||
|
||||
t.Run("empty hostname", func(t *testing.T) {
|
||||
cfg.applyDefaults()
|
||||
cfg.applyDefaults("")
|
||||
assert.Equal(t, "http://localhost", cfg.Server.Hostname)
|
||||
})
|
||||
|
||||
t.Run("empty hostname with port", func(t *testing.T) {
|
||||
cfg.Server.Hostname = ""
|
||||
cfg.Server.Port = 7979
|
||||
cfg.applyDefaults()
|
||||
cfg.applyDefaults("")
|
||||
assert.Equal(t, "http://localhost:7979", cfg.Server.Hostname)
|
||||
})
|
||||
|
||||
t.Run("skip overwrite", func(t *testing.T) {
|
||||
cfg.Server.Hostname = "https://my.host:4443"
|
||||
cfg.Server.Port = 80
|
||||
cfg.applyDefaults()
|
||||
cfg.applyDefaults("")
|
||||
assert.Equal(t, "https://my.host:4443", cfg.Server.Hostname)
|
||||
})
|
||||
}
|
||||
|
||||
func TestDefaultDatabasePath(t *testing.T) {
|
||||
cfg := Config{}
|
||||
cfg.applyDefaults("/home/user/podsync/config.toml")
|
||||
assert.Equal(t, "/home/user/podsync/db", cfg.Database.Dir)
|
||||
}
|
||||
|
||||
+12
-1
@@ -4,11 +4,13 @@ import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"github.com/dgraph-io/badger"
|
||||
"github.com/pkg/errors"
|
||||
log "github.com/sirupsen/logrus"
|
||||
|
||||
"github.com/mxpv/podsync/pkg/config"
|
||||
"github.com/mxpv/podsync/pkg/model"
|
||||
)
|
||||
|
||||
@@ -28,9 +30,18 @@ type Badger struct {
|
||||
|
||||
var _ Storage = (*Badger)(nil)
|
||||
|
||||
func NewBadger(dir string) (*Badger, error) {
|
||||
func NewBadger(config *config.Database) (*Badger, error) {
|
||||
var (
|
||||
dir = config.Dir
|
||||
)
|
||||
|
||||
log.Infof("opening database %q", dir)
|
||||
|
||||
// Make sure database directory exists
|
||||
if err := os.MkdirAll(dir, 0755); err != nil {
|
||||
return nil, errors.Wrap(err, "could not mkdir database dir")
|
||||
}
|
||||
|
||||
opts := badger.DefaultOptions(dir)
|
||||
opts.Logger = log.New()
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ import (
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/mxpv/podsync/pkg/config"
|
||||
"github.com/mxpv/podsync/pkg/link"
|
||||
"github.com/mxpv/podsync/pkg/model"
|
||||
)
|
||||
@@ -20,7 +21,7 @@ func TestNewBadger(t *testing.T) {
|
||||
dir, err := ioutil.TempDir("", "podsync-badger-")
|
||||
require.NoError(t, err)
|
||||
|
||||
db, err := NewBadger(dir)
|
||||
db, err := NewBadger(&config.Database{Dir: dir})
|
||||
require.NoError(t, err)
|
||||
|
||||
err = db.Close()
|
||||
@@ -35,7 +36,7 @@ func TestBadger_Version(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
defer os.RemoveAll(dir)
|
||||
|
||||
db, err := NewBadger(dir)
|
||||
db, err := NewBadger(&config.Database{Dir: dir})
|
||||
require.NoError(t, err)
|
||||
defer db.Close()
|
||||
|
||||
@@ -49,7 +50,7 @@ func TestBadger_AddFeed(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
defer os.RemoveAll(dir)
|
||||
|
||||
db, err := NewBadger(dir)
|
||||
db, err := NewBadger(&config.Database{Dir: dir})
|
||||
require.NoError(t, err)
|
||||
defer db.Close()
|
||||
|
||||
@@ -62,7 +63,7 @@ func TestBadger_GetFeed(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
defer os.RemoveAll(dir)
|
||||
|
||||
db, err := NewBadger(dir)
|
||||
db, err := NewBadger(&config.Database{Dir: dir})
|
||||
require.NoError(t, err)
|
||||
defer db.Close()
|
||||
|
||||
@@ -82,7 +83,7 @@ func TestBadger_WalkFeeds(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
defer os.RemoveAll(dir)
|
||||
|
||||
db, err := NewBadger(dir)
|
||||
db, err := NewBadger(&config.Database{Dir: dir})
|
||||
require.NoError(t, err)
|
||||
defer db.Close()
|
||||
|
||||
@@ -108,7 +109,7 @@ func TestBadger_DeleteFeed(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
defer os.RemoveAll(dir)
|
||||
|
||||
db, err := NewBadger(dir)
|
||||
db, err := NewBadger(&config.Database{Dir: dir})
|
||||
require.NoError(t, err)
|
||||
defer db.Close()
|
||||
|
||||
@@ -141,7 +142,7 @@ func TestBadger_WalkFiles(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
defer os.RemoveAll(dir)
|
||||
|
||||
db, err := NewBadger(dir)
|
||||
db, err := NewBadger(&config.Database{Dir: dir})
|
||||
require.NoError(t, err)
|
||||
defer db.Close()
|
||||
|
||||
@@ -170,7 +171,7 @@ func TestBadger_UpdateFile(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
defer os.RemoveAll(dir)
|
||||
|
||||
db, err := NewBadger(dir)
|
||||
db, err := NewBadger(&config.Database{Dir: dir})
|
||||
require.NoError(t, err)
|
||||
defer db.Close()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user