Add tracing and logging to html2pdf
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
This commit is contained in:
@@ -25,6 +25,9 @@ import (
|
|||||||
"github.com/chromedp/cdproto/page"
|
"github.com/chromedp/cdproto/page"
|
||||||
"github.com/chromedp/chromedp"
|
"github.com/chromedp/chromedp"
|
||||||
"go.gearno.de/kit/log"
|
"go.gearno.de/kit/log"
|
||||||
|
"go.opentelemetry.io/otel"
|
||||||
|
"go.opentelemetry.io/otel/codes"
|
||||||
|
"go.opentelemetry.io/otel/trace"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@@ -32,6 +35,8 @@ var (
|
|||||||
var ready bool
|
var ready bool
|
||||||
return chromedp.Evaluate(`document.readyState === 'complete'`, &ready).Do(ctx)
|
return chromedp.Evaluate(`document.readyState === 'complete'`, &ready).Do(ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tracerName = "github.com/getprobo/probo/pkg/html2pdf"
|
||||||
)
|
)
|
||||||
|
|
||||||
type (
|
type (
|
||||||
@@ -49,8 +54,10 @@ type (
|
|||||||
Option func(*Converter)
|
Option func(*Converter)
|
||||||
|
|
||||||
Converter struct {
|
Converter struct {
|
||||||
l *log.Logger
|
l *log.Logger
|
||||||
addr string
|
tracerProvider trace.TracerProvider
|
||||||
|
tracer trace.Tracer
|
||||||
|
addr string
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -60,16 +67,24 @@ func WithLogger(l *log.Logger) Option {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func WithTracerProvider(tp trace.TracerProvider) Option {
|
||||||
|
return func(c *Converter) {
|
||||||
|
c.tracerProvider = tp
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func NewConverter(addr string, opts ...Option) *Converter {
|
func NewConverter(addr string, opts ...Option) *Converter {
|
||||||
c := &Converter{
|
c := &Converter{
|
||||||
addr: addr,
|
addr: addr,
|
||||||
l: log.NewLogger(log.WithOutput(io.Discard)),
|
l: log.NewLogger(log.WithOutput(io.Discard)),
|
||||||
|
tracerProvider: otel.GetTracerProvider(),
|
||||||
}
|
}
|
||||||
for _, opt := range opts {
|
for _, opt := range opts {
|
||||||
opt(c)
|
opt(c)
|
||||||
}
|
}
|
||||||
|
|
||||||
c.l = c.l.Named("mdpdf").With(log.String("addr", addr))
|
c.l = c.l.Named("html2pdf").With(log.String("addr", addr))
|
||||||
|
c.tracer = c.tracerProvider.Tracer(tracerName)
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
@@ -93,6 +108,20 @@ func getPageDimensions(format PageFormat, orientation Orientation) (width, heigh
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *Converter) GeneratePDF(ctx context.Context, htmlDocument []byte, cfg RenderConfig) (io.Reader, error) {
|
func (c *Converter) GeneratePDF(ctx context.Context, htmlDocument []byte, cfg RenderConfig) (io.Reader, error) {
|
||||||
|
var (
|
||||||
|
rootSpan = trace.SpanFromContext(ctx)
|
||||||
|
span trace.Span
|
||||||
|
)
|
||||||
|
|
||||||
|
if rootSpan.IsRecording() {
|
||||||
|
ctx, span = c.tracer.Start(
|
||||||
|
ctx,
|
||||||
|
"GeneratePDF",
|
||||||
|
trace.WithSpanKind(trace.SpanKindInternal),
|
||||||
|
)
|
||||||
|
defer span.End()
|
||||||
|
}
|
||||||
|
|
||||||
allocCtx, cancel := chromedp.NewRemoteAllocator(ctx, c.addr)
|
allocCtx, cancel := chromedp.NewRemoteAllocator(ctx, c.addr)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
|
||||||
@@ -156,7 +185,14 @@ func (c *Converter) GeneratePDF(ctx context.Context, htmlDocument []byte, cfg Re
|
|||||||
)
|
)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("cannot run chromedp: %w", err)
|
err2 := fmt.Errorf("cannot run chromedp: %w", err)
|
||||||
|
|
||||||
|
if rootSpan.IsRecording() {
|
||||||
|
span.RecordError(err2)
|
||||||
|
span.SetStatus(codes.Error, err2.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil, err2
|
||||||
}
|
}
|
||||||
|
|
||||||
return bytes.NewReader(pdfBytes), nil
|
return bytes.NewReader(pdfBytes), nil
|
||||||
|
|||||||
Reference in New Issue
Block a user