mirror of
https://github.com/gotenberg/gotenberg.git
synced 2026-08-15 20:02:15 +01:00
huge refactoring
This commit is contained in:
56
internal/pkg/xcontext/xcontext.go
Normal file
56
internal/pkg/xcontext/xcontext.go
Normal file
@@ -0,0 +1,56 @@
|
||||
package xcontext
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/thecodingmachine/gotenberg/internal/pkg/xerror"
|
||||
"github.com/thecodingmachine/gotenberg/internal/pkg/xlog"
|
||||
"github.com/thecodingmachine/gotenberg/internal/pkg/xtime"
|
||||
)
|
||||
|
||||
// WithTimeout creates a context.Context which
|
||||
// times out after given seconds.
|
||||
func WithTimeout(logger xlog.Logger, seconds float64) (context.Context, context.CancelFunc) {
|
||||
const op string = "xcontext.WithTimeout"
|
||||
logger.DebugfOp(op, "creating context with '%.2fs' of timeout...", seconds)
|
||||
return context.WithTimeout(context.Background(), xtime.Duration(seconds))
|
||||
}
|
||||
|
||||
/*
|
||||
MustHandleError checks if there is an error
|
||||
in the given Context.
|
||||
|
||||
If no error, returns the previous error.
|
||||
|
||||
If context.DeadlineExceeded, wraps the previous
|
||||
error inside an xerror.Error with xerror.TimeoutCode.
|
||||
|
||||
Otherwise wraps the previous error inside an
|
||||
xerror.Error.
|
||||
|
||||
It panics if no previous error.
|
||||
*/
|
||||
func MustHandleError(ctx context.Context, previousErr error) error {
|
||||
const op string = "xcontext.MustHandleError"
|
||||
if previousErr == nil {
|
||||
panic(fmt.Sprintf("%s: previous error should not be nil", op))
|
||||
}
|
||||
err := ctx.Err()
|
||||
if err == nil {
|
||||
// we do not wrap the previous error
|
||||
// as it should be wrapped by the caller.
|
||||
return previousErr
|
||||
}
|
||||
// context has timed out
|
||||
if strings.Contains(err.Error(), context.DeadlineExceeded.Error()) {
|
||||
return xerror.Timeout(op, "context has timed out", previousErr)
|
||||
}
|
||||
/*
|
||||
context has another error: we do not
|
||||
wrap the error from the Context as the previous
|
||||
error should contain it.
|
||||
*/
|
||||
return xerror.New(op, previousErr)
|
||||
}
|
||||
Reference in New Issue
Block a user