mirror of
https://github.com/Fishwaldo/restic-nats.git
synced 2025-03-15 11:31:42 +00:00
145 lines
No EOL
3.6 KiB
Go
145 lines
No EOL
3.6 KiB
Go
package rns
|
|
|
|
import (
|
|
"context"
|
|
"io"
|
|
"io/ioutil"
|
|
)
|
|
|
|
func (rns *ResticNatsClient) OpenRepo(ctx context.Context, hostname string) (OpenRepoResult, error) {
|
|
var err error
|
|
op := OpenRepoOp{Bucket: rns.bucket, Client: rns.Conn.Opts.Name, Hostname: hostname}
|
|
msg := NewRNSClientMsg(NatsOpenCmd)
|
|
|
|
var result OpenRepoResult
|
|
if err = rns.sendOperation(ctx, msg, op, &result); err != nil {
|
|
return OpenRepoResult{}, err
|
|
}
|
|
|
|
if !result.Ok {
|
|
rns.logger.Error("Open Repository Failed: %s", result.Err)
|
|
} else {
|
|
rns.clientid = result.ClientID
|
|
}
|
|
return result, nil
|
|
}
|
|
|
|
func (rns *ResticNatsClient) Stat(ctx context.Context, dir, filename string) (StatResult, error) {
|
|
var err error
|
|
op := StatOp{Directory: dir, Filename: filename}
|
|
msg := NewRNSClientMsg(NatsStatCmd)
|
|
|
|
var result StatResult
|
|
if err = rns.sendOperation(ctx, msg, op, &result); err != nil {
|
|
return StatResult{}, err
|
|
}
|
|
|
|
if !result.Ok {
|
|
rns.logger.Error("Stat File Failed: %s", result.Err)
|
|
}
|
|
return result, nil
|
|
}
|
|
|
|
func (rns *ResticNatsClient) List(ctx context.Context, dir string, recursive bool) (ListResult, error) {
|
|
var err error
|
|
op := ListOp{BaseDir: dir, Recurse: recursive}
|
|
msg := NewRNSClientMsg(NatsListCmd)
|
|
|
|
var result ListResult
|
|
if err = rns.sendOperation(ctx, msg, op, &result); err != nil {
|
|
return ListResult{}, err
|
|
}
|
|
|
|
if !result.Ok {
|
|
rns.logger.Error("List Dir Failed: %s", result.Err)
|
|
}
|
|
return result, nil
|
|
}
|
|
|
|
func (rns *ResticNatsClient) Load(ctx context.Context, dir string, filename string, length int, offset int64) (LoadResult, error) {
|
|
var err error
|
|
op := LoadOp{Dir: dir, Name: filename, Length: length, Offset: offset}
|
|
msg := NewRNSClientMsg(NatsLoadCmd)
|
|
|
|
var result LoadResult
|
|
if err = rns.sendOperation(ctx, msg, op, &result); err != nil {
|
|
return LoadResult{}, err
|
|
}
|
|
if !result.Ok {
|
|
rns.logger.Error("Load Failed: %s", result.Err)
|
|
}
|
|
return result, nil
|
|
}
|
|
|
|
func (rns *ResticNatsClient) Save(ctx context.Context, dir string, filename string, rd io.Reader) (SaveResult, error) {
|
|
var err error
|
|
op := SaveOp{Dir: dir, Name: filename}
|
|
op.Data, err = ioutil.ReadAll(rd)
|
|
if err != nil {
|
|
rns.logger.Error("ReadAll Failed: %s", err)
|
|
return SaveResult{}, err
|
|
}
|
|
op.Filesize = len(op.Data)
|
|
msg := NewRNSClientMsg(NatsSaveCmd)
|
|
|
|
var result SaveResult
|
|
if err = rns.sendOperation(ctx, msg, op, &result); err != nil {
|
|
return SaveResult{}, err
|
|
}
|
|
|
|
if !result.Ok {
|
|
rns.logger.Error("Save Failed: %s", result.Err)
|
|
}
|
|
return result, nil
|
|
}
|
|
|
|
func (rns *ResticNatsClient) Remove(ctx context.Context, dir string, filename string) (RemoveResult, error) {
|
|
var err error
|
|
op := RemoveOp{Dir: dir, Name: filename}
|
|
msg := NewRNSClientMsg(NatsRemoveCmd)
|
|
|
|
var result RemoveResult
|
|
if err = rns.sendOperation(ctx, msg, op, &result); err != nil {
|
|
return RemoveResult{}, err
|
|
}
|
|
|
|
if !result.Ok {
|
|
rns.logger.Error("Remove File Failed: %s", result.Err)
|
|
}
|
|
return result, nil
|
|
}
|
|
|
|
func (rns *ResticNatsClient) Mkdir(ctx context.Context, dir string) (MkdirResult, error) {
|
|
var err error
|
|
op := MkdirOp{Dir: dir}
|
|
msg := NewRNSClientMsg(NatsMkdirCmd)
|
|
|
|
var result MkdirResult
|
|
if err = rns.sendOperation(ctx, msg, op, &result); err != nil {
|
|
return MkdirResult{}, err
|
|
}
|
|
|
|
if !result.Ok {
|
|
rns.logger.Error("Mkdir Failed: %s", result.Err)
|
|
}
|
|
return result, nil
|
|
|
|
}
|
|
|
|
func (rns *ResticNatsClient) Close(ctx context.Context) (CloseResult, error) {
|
|
var err error
|
|
op := CloseOp{}
|
|
rns.clientid = ""
|
|
msg := NewRNSClientMsg(NatsCloseCmd)
|
|
|
|
var result CloseResult
|
|
if err = rns.sendOperation(ctx, msg, op, &result); err != nil {
|
|
return CloseResult{}, err
|
|
}
|
|
|
|
if !result.Ok {
|
|
rns.logger.Error("Close Failed: %s", result.Err)
|
|
}
|
|
return result, nil
|
|
|
|
} |