This commit adds and passes context around to (almost) every function. This allows cancelling (almost) every function call globally.
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
|
|
}
|