blob: 949d557fb2a899f26e421737dd80dcd80d540add [file] [log] [blame]
package mirko
import (
"context"
"database/sql"
"database/sql/driver"
"time"
"github.com/gchaincl/sqlhooks"
"golang.org/x/net/trace"
)
type sqlHooks struct{}
func (h *sqlHooks) Before(ctx context.Context, query string, args ...interface{}) (context.Context, error) {
tr, ok := trace.FromContext(ctx)
if ok {
tr.LazyPrintf("SQL query: %s", query)
tr.LazyPrintf("SQL args: %+v", args)
}
return context.WithValue(ctx, "begin", time.Now()), nil
}
func (h *sqlHooks) After(ctx context.Context, query string, args ...interface{}) (context.Context, error) {
begin := ctx.Value("begin").(time.Time)
tr, ok := trace.FromContext(ctx)
if ok {
tr.LazyPrintf("SQL took: %s", time.Since(begin).String())
}
return ctx, nil
}
func TraceSQL(driver driver.Driver, wrapped string) {
sql.Register(wrapped, sqlhooks.Wrap(driver, &sqlHooks{}))
}