Skip to content

Commit

Permalink
Use log/slog instead of custom log interface
Browse files Browse the repository at this point in the history
  • Loading branch information
vansante committed Sep 6, 2023
1 parent ed661f2 commit a79c35e
Show file tree
Hide file tree
Showing 7 changed files with 99 additions and 149 deletions.
44 changes: 27 additions & 17 deletions file.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,25 @@ import (
"errors"
"fmt"
"io"
"log/slog"
"net/http"
"os"
)

// file is the base file for the remote file handles
type file struct {
embedLogger
client *http.Client
ctx context.Context
baseURL string
sharedSecret string
fileID FileID
offset int64
logger *slog.Logger
}

// SetLogger sets a new structured logger, replacing the default slog logger
func (f *file) SetLogger(logger *slog.Logger) {
f.logger = logger
}

// Seek seeks to the given offset from the given mode
Expand Down Expand Up @@ -51,7 +57,7 @@ func (f *file) SharedSecret() string {
}

// Stat returns the remote file information
func (f *file) Stat() (fi os.FileInfo, err error) {
func (f *file) Stat() (os.FileInfo, error) {
info, err := f.stat()
if err != nil {
return nil, err
Expand All @@ -60,12 +66,14 @@ func (f *file) Stat() (fi os.FileInfo, err error) {
}

// Close tells the server to close the remote file
func (f *file) Close() (err error) {
func (f *file) Close() error {
return f.close()
}

// prepareRequest prepares a new HTTP request
func (f *file) prepareRequest(method, url string, body io.Reader) (req *http.Request, err error) {
func (f *file) prepareRequest(method, url string, body io.Reader) (*http.Request, error) {
var req *http.Request
var err error
if f.ctx == nil {
req, err = http.NewRequest(method, url, body)
} else {
Expand All @@ -79,20 +87,22 @@ func (f *file) prepareRequest(method, url string, body io.Reader) (req *http.Req
}

// stat returns the remote file information
func (f *file) stat() (fi FileInfo, err error) {
func (f *file) stat() (FileInfo, error) {
fi := FileInfo{}

url := fmt.Sprintf("%s/%s", f.baseURL, f.fileID)
req, err := f.prepareRequest(http.MethodOptions, url, nil)
if err != nil {
f.Errorf("file.stat: Error creating request for %s: %v", f.fileID, err)
f.logger.Error("networkfile.File.stat: Error creating request", "fileID", f.fileID, "error", err)
return fi, err
}

resp, err := f.client.Do(req)
if err != nil {
if errors.Is(err, context.DeadlineExceeded) || errors.Is(err, context.Canceled) {
f.Infof("file.stat: Context expired for %s: %v", f.fileID, err)
f.logger.Info("networkfile.File.stat: Context expired", "fileID", f.fileID, "error", err)
} else {
f.Errorf("file.stat: Error executing request for %s: %v", f.fileID, err)
f.logger.Error("networkfile.File.stat: Error executing request", "fileID", f.fileID, "error", err)
}
return fi, err
}
Expand All @@ -102,47 +112,47 @@ func (f *file) stat() (fi FileInfo, err error) {

err = responseCodeToError(resp, http.StatusOK)
if err != nil {
f.Infof("file.stat: A remote error occurred for %s: %v", f.fileID, err)
f.logger.Info("networkfile.File.stat: A remote error occurred", "fileID", f.fileID, "error", err)
return fi, err
}

decoder := json.NewDecoder(resp.Body)
err = decoder.Decode(&fi)
if err != nil {
f.Errorf("file.stat: Error decoding file info for %s: %v", f.fileID, err)
f.logger.Error("networkfile.File.stat: Error decoding file info", "fileID", f.fileID, "error", err)
return fi, err
}

f.Debugf("file.stat: File info for %s: %v", f.fileID, fi)
f.logger.Debug("networkfile.File.stat: File info", "fileID", f.fileID, "fileInfo", fi)
return fi, nil
}

// close tells the remote server to close the file
func (f *file) close() (err error) {
func (f *file) close() error {
url := fmt.Sprintf("%s/%s", f.baseURL, f.fileID)
req, err := f.prepareRequest(http.MethodDelete, url, nil)
if err != nil {
f.Errorf("file.close: Error creating request: %v", err)
f.logger.Error("networkfile.File.close: Error creating request", "error", err)
return err
}

resp, err := f.client.Do(req)
if err != nil {
if errors.Is(err, context.DeadlineExceeded) || errors.Is(err, context.Canceled) {
f.Infof("file.close: Context expired for %s: %v", f.fileID, err)
f.logger.Info("networkfile.File.close: Context expired", "fileID", f.fileID, "error", err)
} else {
f.Errorf("file.close: Error executing request for %s: %v", f.fileID, err)
f.logger.Error("networkfile.File.close: Error executing request", "fileID", f.fileID, "error", err)
}
return err
}
_ = resp.Body.Close()

err = responseCodeToError(resp, http.StatusNoContent)
if err != nil {
f.Infof("file.close: A remote error occurred for %s: %v", f.fileID, err)
f.logger.Info("networkfile.File.close: A remote error occurred", "fileID", f.fileID, "error", err)
return err
}

f.Debugf("file.close: The remote file %s was closed", f.fileID)
f.logger.Debug("networkfile.File.close: The remote file was closed", "fileID", f.fileID)
return nil
}
42 changes: 0 additions & 42 deletions logger.go

This file was deleted.

15 changes: 9 additions & 6 deletions reader.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"errors"
"fmt"
"io"
"log/slog"
"net/http"
)

Expand All @@ -23,6 +24,7 @@ func NewReader(ctx context.Context, baseURL, sharedSecret string, fileID FileID)
sharedSecret: sharedSecret,
fileID: fileID,
offset: 0,
logger: slog.Default(),
},
}
}
Expand All @@ -37,6 +39,7 @@ func NewCustomClientReader(ctx context.Context, httpClient *http.Client, baseURL
sharedSecret: sharedSecret,
fileID: fileID,
offset: 0,
logger: slog.Default(),
},
}
}
Expand All @@ -63,17 +66,17 @@ func (r *Reader) read(buf []byte, offset int64) (n int, err error) {

req, err := r.prepareRequest(http.MethodGet, url, nil)
if err != nil {
r.Errorf("Reader.read: Error creating request for %s: %v", r.fileID, err)
r.logger.Error("networkfile.Reader.read: Error creating request", "fileID", r.fileID, "error", err)
return 0, err
}
req.Header.Set(HeaderRange, fmt.Sprintf("%d-%d", offset, len(buf)))

resp, err := r.client.Do(req)
if err != nil {
if errors.Is(err, context.DeadlineExceeded) || errors.Is(err, context.Canceled) {
r.Infof("Reader.read: Context expired for %s: %v", r.fileID, err)
r.logger.Info("networkfile.Reader.read: Context expired", "fileID", r.fileID, "error", err)
} else {
r.Errorf("Reader.read: Error executing request for %s: %v", r.fileID, err)
r.logger.Error("networkfile.Reader.read: Error executing request", "fileID", r.fileID, "error", err)
}
return 0, err
}
Expand All @@ -83,7 +86,7 @@ func (r *Reader) read(buf []byte, offset int64) (n int, err error) {

err = responseCodeToError(resp, http.StatusPartialContent)
if err != nil {
r.Infof("Reader.read: A remote error occurred for %s: %v", r.fileID, err)
r.logger.Info("networkfile.Reader.read: A remote error occurred", "fileID", r.fileID, "error", err)
return 0, err
}

Expand All @@ -96,9 +99,9 @@ func (r *Reader) read(buf []byte, offset int64) (n int, err error) {

if err != nil && !errors.Is(err, io.EOF) {
if errors.Is(err, context.DeadlineExceeded) || errors.Is(err, context.Canceled) {
r.Infof("Reader.read: Context expired for %s: %v", r.fileID, err)
r.logger.Info("networkfile.Reader.read: Context expired", "fileID", r.fileID, "error", err)
} else {
r.Errorf("Reader.read: Error reading http body for %s: %v", r.fileID, err)
r.logger.Error("networkfile.Reader.read: Error reading http body", "fileID", r.fileID, "error", err)
}
return n, err
}
Expand Down
Loading

0 comments on commit a79c35e

Please sign in to comment.