43 lines
1.1 KiB
Go
43 lines
1.1 KiB
Go
package triplestore
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"io"
|
|
|
|
"github.com/FAU-CDI/wisski-distillery/internal/dis/component"
|
|
)
|
|
|
|
func (ts *Triplestore) BackupName() string { return "triplestore" }
|
|
|
|
// Backup makes a backup of all Triplestore repositories databases into the path dest.
|
|
func (ts *Triplestore) Backup(scontext *component.StagingContext) error {
|
|
return scontext.AddDirectory("", func(ctx context.Context) error {
|
|
// list all the directories
|
|
repos, err := ts.listRepositories(ctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, repo := range repos {
|
|
if err := scontext.AddFile(repo.ID+".nq", func(ctx context.Context, file io.Writer) error {
|
|
_, err := ts.SnapshotDB(ctx, file, repo.ID)
|
|
return err
|
|
}); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
})
|
|
}
|
|
|
|
func (ts Triplestore) listRepositories(ctx context.Context) (repos []Repository, err error) {
|
|
res, err := ts.OpenRaw(ctx, "GET", "/rest/repositories", nil, "", "application/json")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer res.Body.Close()
|
|
|
|
err = json.NewDecoder(res.Body).Decode(&repos)
|
|
return
|
|
}
|