fix ping #63
							
								
								
									
										137
									
								
								conn.go
									
									
									
									
									
								
							
							
						
						
									
										137
									
								
								conn.go
									
									
									
									
									
								
							@@ -241,28 +241,30 @@ func (w *wrapperConn) Exec(query string, args []driver.Value) (driver.Result, er
 | 
			
		||||
		ctx = context.Background()
 | 
			
		||||
	}
 | 
			
		||||
	// nolint:staticcheck
 | 
			
		||||
	labels := []string{labelMethod, "Exec", labelQuery, labelUnknown}
 | 
			
		||||
	if execer, ok := w.conn.(driver.Execer); ok {
 | 
			
		||||
		ts := time.Now()
 | 
			
		||||
		res, err := execer.Exec(query, args)
 | 
			
		||||
		td := time.Since(ts)
 | 
			
		||||
		te := td.Seconds()
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			w.opts.Meter.Counter(meterRequestTotal, append(labels, labelStatus, labelFailure)...).Inc()
 | 
			
		||||
		} else {
 | 
			
		||||
			w.opts.Meter.Counter(meterRequestTotal, append(labels, labelStatus, labelSuccess)...).Inc()
 | 
			
		||||
		}
 | 
			
		||||
		w.opts.Meter.Summary(meterRequestLatencyMicroseconds, labels...).Update(te)
 | 
			
		||||
		w.opts.Meter.Histogram(meterRequestDurationSeconds, labels...).Update(te)
 | 
			
		||||
	execer, ok := w.conn.(driver.Execer)
 | 
			
		||||
	if !ok {
 | 
			
		||||
		if w.opts.LoggerEnabled {
 | 
			
		||||
			w.opts.Logger.Fields(w.opts.LoggerObserver(ctx, "Exec", labelUnknown, td, err)...).Log(ctx, w.opts.LoggerLevel)
 | 
			
		||||
			w.opts.Logger.Fields(w.opts.LoggerObserver(ctx, "Exec", labelUnknown, 0, ErrUnsupported)...).Log(ctx, w.opts.LoggerLevel)
 | 
			
		||||
		}
 | 
			
		||||
		return res, err
 | 
			
		||||
		return nil, ErrUnsupported
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	labels := []string{labelMethod, "Exec", labelQuery, labelUnknown}
 | 
			
		||||
	ts := time.Now()
 | 
			
		||||
	res, err := execer.Exec(query, args)
 | 
			
		||||
	td := time.Since(ts)
 | 
			
		||||
	te := td.Seconds()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		w.opts.Meter.Counter(meterRequestTotal, append(labels, labelStatus, labelFailure)...).Inc()
 | 
			
		||||
	} else {
 | 
			
		||||
		w.opts.Meter.Counter(meterRequestTotal, append(labels, labelStatus, labelSuccess)...).Inc()
 | 
			
		||||
	}
 | 
			
		||||
	w.opts.Meter.Summary(meterRequestLatencyMicroseconds, labels...).Update(te)
 | 
			
		||||
	w.opts.Meter.Histogram(meterRequestDurationSeconds, labels...).Update(te)
 | 
			
		||||
	if w.opts.LoggerEnabled {
 | 
			
		||||
		w.opts.Logger.Fields(w.opts.LoggerObserver(ctx, "Exec", labelUnknown, 0, ErrUnsupported)...).Log(ctx, w.opts.LoggerLevel)
 | 
			
		||||
		w.opts.Logger.Fields(w.opts.LoggerObserver(ctx, "Exec", labelUnknown, td, err)...).Log(ctx, w.opts.LoggerLevel)
 | 
			
		||||
	}
 | 
			
		||||
	return nil, ErrUnsupported
 | 
			
		||||
	return res, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Exec implements driver.StmtExecContext ExecContext
 | 
			
		||||
@@ -337,38 +339,42 @@ func (w *wrapperConn) ExecContext(ctx context.Context, query string, args []driv
 | 
			
		||||
 | 
			
		||||
// Ping implements driver.Pinger Ping
 | 
			
		||||
func (w *wrapperConn) Ping(ctx context.Context) error {
 | 
			
		||||
	if conn, ok := w.conn.(driver.Pinger); ok {
 | 
			
		||||
		var nctx context.Context
 | 
			
		||||
		var span tracer.Span
 | 
			
		||||
		if w.ctx != nil {
 | 
			
		||||
			nctx, span = w.opts.Tracer.Start(w.ctx, "Ping")
 | 
			
		||||
		} else {
 | 
			
		||||
			nctx, span = w.opts.Tracer.Start(ctx, "Ping")
 | 
			
		||||
	conn, ok := w.conn.(driver.Pinger)
 | 
			
		||||
	if !ok {
 | 
			
		||||
		if w.opts.LoggerEnabled {
 | 
			
		||||
			w.opts.Logger.Fields(w.opts.LoggerObserver(ctx, "Ping", labelUnknown, 0, ErrUnsupported)...).Log(ctx, w.opts.LoggerLevel)
 | 
			
		||||
		}
 | 
			
		||||
		defer span.Finish()
 | 
			
		||||
		labels := []string{labelMethod, "Ping"}
 | 
			
		||||
		ts := time.Now()
 | 
			
		||||
		err := conn.Ping(nctx)
 | 
			
		||||
		td := time.Since(ts)
 | 
			
		||||
		te := td.Seconds()
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			w.opts.Meter.Counter(meterRequestTotal, append(labels, labelStatus, labelFailure)...).Inc()
 | 
			
		||||
			span.AddLabels("error", true)
 | 
			
		||||
			span.AddLabels("err", err.Error())
 | 
			
		||||
			if w.opts.LoggerEnabled {
 | 
			
		||||
				w.opts.Logger.Fields(w.opts.LoggerObserver(ctx, "Ping", labelUnknown, td, err)...).Log(ctx, w.opts.LoggerLevel)
 | 
			
		||||
			}
 | 
			
		||||
			return err
 | 
			
		||||
		} else {
 | 
			
		||||
			w.opts.Meter.Counter(meterRequestTotal, append(labels, labelStatus, labelSuccess)...).Inc()
 | 
			
		||||
		return ErrUnsupported
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var nctx context.Context
 | 
			
		||||
	var span tracer.Span
 | 
			
		||||
	if w.ctx != nil {
 | 
			
		||||
		nctx, span = w.opts.Tracer.Start(w.ctx, "Ping")
 | 
			
		||||
	} else {
 | 
			
		||||
		nctx, span = w.opts.Tracer.Start(ctx, "Ping")
 | 
			
		||||
	}
 | 
			
		||||
	defer span.Finish()
 | 
			
		||||
	labels := []string{labelMethod, "Ping"}
 | 
			
		||||
	ts := time.Now()
 | 
			
		||||
	err := conn.Ping(nctx)
 | 
			
		||||
	td := time.Since(ts)
 | 
			
		||||
	te := td.Seconds()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		w.opts.Meter.Counter(meterRequestTotal, append(labels, labelStatus, labelFailure)...).Inc()
 | 
			
		||||
		span.AddLabels("error", true)
 | 
			
		||||
		span.AddLabels("err", err.Error())
 | 
			
		||||
		if w.opts.LoggerEnabled {
 | 
			
		||||
			w.opts.Logger.Fields(w.opts.LoggerObserver(ctx, "Ping", labelUnknown, td, err)...).Log(ctx, w.opts.LoggerLevel)
 | 
			
		||||
		}
 | 
			
		||||
		w.opts.Meter.Summary(meterRequestLatencyMicroseconds, labels...).Update(te)
 | 
			
		||||
		w.opts.Meter.Histogram(meterRequestDurationSeconds, labels...).Update(te)
 | 
			
		||||
		return err
 | 
			
		||||
	} else {
 | 
			
		||||
		w.opts.Meter.Counter(meterRequestTotal, append(labels, labelStatus, labelSuccess)...).Inc()
 | 
			
		||||
	}
 | 
			
		||||
	if w.opts.LoggerEnabled {
 | 
			
		||||
		w.opts.Logger.Fields(w.opts.LoggerObserver(ctx, "Ping", labelUnknown, 0, ErrUnsupported)...).Log(ctx, w.opts.LoggerLevel)
 | 
			
		||||
	}
 | 
			
		||||
	return ErrUnsupported
 | 
			
		||||
	w.opts.Meter.Summary(meterRequestLatencyMicroseconds, labels...).Update(te)
 | 
			
		||||
	w.opts.Meter.Histogram(meterRequestDurationSeconds, labels...).Update(te)
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Query implements driver.Queryer Query
 | 
			
		||||
@@ -379,29 +385,32 @@ func (w *wrapperConn) Query(query string, args []driver.Value) (driver.Rows, err
 | 
			
		||||
	} else {
 | 
			
		||||
		ctx = context.Background()
 | 
			
		||||
	}
 | 
			
		||||
	// nolint:staticcheck
 | 
			
		||||
	if conn, ok := w.conn.(driver.Queryer); ok {
 | 
			
		||||
		labels := []string{labelMethod, "Query", labelQuery, labelUnknown}
 | 
			
		||||
		ts := time.Now()
 | 
			
		||||
		rows, err := conn.Query(query, args)
 | 
			
		||||
		td := time.Since(ts)
 | 
			
		||||
		te := td.Seconds()
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			w.opts.Meter.Counter(meterRequestTotal, append(labels, labelStatus, labelFailure)...).Inc()
 | 
			
		||||
		} else {
 | 
			
		||||
			w.opts.Meter.Counter(meterRequestTotal, append(labels, labelStatus, labelSuccess)...).Inc()
 | 
			
		||||
		}
 | 
			
		||||
		w.opts.Meter.Summary(meterRequestLatencyMicroseconds, labels...).Update(te)
 | 
			
		||||
		w.opts.Meter.Histogram(meterRequestDurationSeconds, labels...).Update(te)
 | 
			
		||||
 | 
			
		||||
	//nolint:staticcheck
 | 
			
		||||
	conn, ok := w.conn.(driver.Queryer)
 | 
			
		||||
	if !ok {
 | 
			
		||||
		if w.opts.LoggerEnabled {
 | 
			
		||||
			w.opts.Logger.Fields(w.opts.LoggerObserver(ctx, "Query", labelUnknown, td, err)...).Log(ctx, w.opts.LoggerLevel)
 | 
			
		||||
			w.opts.Logger.Fields(w.opts.LoggerObserver(ctx, "Query", labelUnknown, 0, ErrUnsupported)...).Log(ctx, w.opts.LoggerLevel)
 | 
			
		||||
		}
 | 
			
		||||
		return rows, err
 | 
			
		||||
		return nil, ErrUnsupported
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	labels := []string{labelMethod, "Query", labelQuery, labelUnknown}
 | 
			
		||||
	ts := time.Now()
 | 
			
		||||
	rows, err := conn.Query(query, args)
 | 
			
		||||
	td := time.Since(ts)
 | 
			
		||||
	te := td.Seconds()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		w.opts.Meter.Counter(meterRequestTotal, append(labels, labelStatus, labelFailure)...).Inc()
 | 
			
		||||
	} else {
 | 
			
		||||
		w.opts.Meter.Counter(meterRequestTotal, append(labels, labelStatus, labelSuccess)...).Inc()
 | 
			
		||||
	}
 | 
			
		||||
	w.opts.Meter.Summary(meterRequestLatencyMicroseconds, labels...).Update(te)
 | 
			
		||||
	w.opts.Meter.Histogram(meterRequestDurationSeconds, labels...).Update(te)
 | 
			
		||||
	if w.opts.LoggerEnabled {
 | 
			
		||||
		w.opts.Logger.Fields(w.opts.LoggerObserver(ctx, "Query", labelUnknown, 0, ErrUnsupported)...).Log(ctx, w.opts.LoggerLevel)
 | 
			
		||||
		w.opts.Logger.Fields(w.opts.LoggerObserver(ctx, "Query", labelUnknown, td, err)...).Log(ctx, w.opts.LoggerLevel)
 | 
			
		||||
	}
 | 
			
		||||
	return nil, ErrUnsupported
 | 
			
		||||
	return rows, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// QueryContext implements Driver.QueryerContext QueryContext
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user