1
0
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:
Maksym Pavlenko
2020-04-15 14:13:48 -07:00
parent 316af91787
commit 5b927fd1d6
4 changed files with 66 additions and 18 deletions

View File

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

View File

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

View File

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

View File

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