mirror of
https://github.com/mxpv/podsync.git
synced 2024-05-11 05:55:04 +00:00
Allow Badger configuration #118
This commit is contained in:
@@ -73,6 +73,9 @@ vimeo = "{VIMEO_API_TOKEN}"
|
||||
# filters = { title = "regex for title here" } # Optional Golang regexp format. If set, then only download episodes with matching titles.
|
||||
# opml = true|false # Optional inclusion of the feed in the OPML file (default value: false)
|
||||
# clean = { keep_last = 10 } # Keep last 10 episodes (order desc by PubDate)
|
||||
|
||||
[database]
|
||||
badger = { truncate = true, file_io = true } # See https://github.com/dgraph-io/badger#memory-usage
|
||||
```
|
||||
|
||||
Episodes files will be kept at: `/path/to/data/directory/ID1`, feed will be accessible from: `http://localhost/ID1.xml`
|
||||
|
@@ -74,7 +74,15 @@ type Server struct {
|
||||
|
||||
type Database struct {
|
||||
// Dir is a directory to keep database files
|
||||
Dir string `toml:"dir"`
|
||||
Dir string `toml:"dir"`
|
||||
Badger *Badger `toml:"badger"`
|
||||
}
|
||||
|
||||
// Badger represents BadgerDB configuration parameters
|
||||
// See https://github.com/dgraph-io/badger#memory-usage
|
||||
type Badger struct {
|
||||
Truncate bool `toml:"truncate"`
|
||||
FileIO bool `toml:"file_io"`
|
||||
}
|
||||
|
||||
type Cleanup struct {
|
||||
|
@@ -36,16 +36,10 @@ dir = "/home/user/db/"
|
||||
clean = { keep_last = 10 }
|
||||
custom = { cover_art = "http://img", category = "TV", explicit = true, lang = "en" }
|
||||
`
|
||||
path := setup(t, file)
|
||||
defer os.Remove(path)
|
||||
|
||||
f, err := ioutil.TempFile("", "")
|
||||
require.NoError(t, err)
|
||||
|
||||
defer os.Remove(f.Name())
|
||||
|
||||
_, err = f.WriteString(file)
|
||||
require.NoError(t, err)
|
||||
|
||||
config, err := LoadConfig(f.Name())
|
||||
config, err := LoadConfig(path)
|
||||
assert.NoError(t, err)
|
||||
assert.NotNil(t, config)
|
||||
|
||||
@@ -72,6 +66,8 @@ dir = "/home/user/db/"
|
||||
assert.EqualValues(t, "TV", feed.Custom.Category)
|
||||
assert.True(t, feed.Custom.Explicit)
|
||||
assert.EqualValues(t, "en", feed.Custom.Language)
|
||||
|
||||
assert.Nil(t, config.Database.Badger)
|
||||
}
|
||||
|
||||
func TestApplyDefaults(t *testing.T) {
|
||||
@@ -83,15 +79,10 @@ data_dir = "/data"
|
||||
[feeds.A]
|
||||
url = "https://youtube.com/watch?v=ygIUF678y40"
|
||||
`
|
||||
f, err := ioutil.TempFile("", "")
|
||||
require.NoError(t, err)
|
||||
path := setup(t, file)
|
||||
defer os.Remove(path)
|
||||
|
||||
defer os.Remove(f.Name())
|
||||
|
||||
_, err = f.WriteString(file)
|
||||
require.NoError(t, err)
|
||||
|
||||
config, err := LoadConfig(f.Name())
|
||||
config, err := LoadConfig(path)
|
||||
assert.NoError(t, err)
|
||||
assert.NotNil(t, config)
|
||||
|
||||
@@ -135,3 +126,41 @@ func TestDefaultDatabasePath(t *testing.T) {
|
||||
cfg.applyDefaults("/home/user/podsync/config.toml")
|
||||
assert.Equal(t, "/home/user/podsync/db", cfg.Database.Dir)
|
||||
}
|
||||
|
||||
func TestLoadBadgerConfig(t *testing.T) {
|
||||
const file = `
|
||||
[server]
|
||||
data_dir = "/data"
|
||||
|
||||
[feeds]
|
||||
[feeds.A]
|
||||
url = "https://youtube.com/watch?v=ygIUF678y40"
|
||||
|
||||
[database]
|
||||
badger = { truncate = true, file_io = true }
|
||||
`
|
||||
path := setup(t, file)
|
||||
defer os.Remove(path)
|
||||
|
||||
config, err := LoadConfig(path)
|
||||
assert.NoError(t, err)
|
||||
require.NotNil(t, config)
|
||||
require.NotNil(t, config.Database.Badger)
|
||||
|
||||
assert.True(t, config.Database.Badger.Truncate)
|
||||
assert.True(t, config.Database.Badger.FileIO)
|
||||
}
|
||||
|
||||
func setup(t *testing.T, file string) string {
|
||||
t.Helper()
|
||||
|
||||
f, err := ioutil.TempFile("", "")
|
||||
require.NoError(t, err)
|
||||
|
||||
defer f.Close()
|
||||
|
||||
_, err = f.WriteString(file)
|
||||
require.NoError(t, err)
|
||||
|
||||
return f.Name()
|
||||
}
|
@@ -7,6 +7,7 @@ import (
|
||||
"os"
|
||||
|
||||
"github.com/dgraph-io/badger"
|
||||
"github.com/dgraph-io/badger/options"
|
||||
"github.com/pkg/errors"
|
||||
log "github.com/sirupsen/logrus"
|
||||
|
||||
@@ -44,6 +45,13 @@ func NewBadger(config *config.Database) (*Badger, error) {
|
||||
WithLogger(log.New()).
|
||||
WithTruncate(true)
|
||||
|
||||
if config.Badger != nil {
|
||||
opts.Truncate = config.Badger.Truncate
|
||||
if config.Badger.FileIO {
|
||||
opts.ValueLogLoadingMode = options.FileIO
|
||||
}
|
||||
}
|
||||
|
||||
db, err := badger.Open(opts)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "failed to open database")
|
||||
|
Reference in New Issue
Block a user