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