Skip to content

Commit 604d7ca

Browse files
authored
Merge pull request #3 from OpenTagOS/feature/prepared_execute_tracing
Prepared statement execute call tracing.
2 parents fde94a8 + 41c3553 commit 604d7ca

File tree

2 files changed

+58
-1
lines changed

2 files changed

+58
-1
lines changed

src/Wrapper/JaegerConnectionWrapper.php

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public function prepare($prepareString)
6565
->addTag(new DbStatementTag($prepareString))
6666
->addTag(new DbalNestingLevelTag($this->getTransactionNestingLevel()));
6767
try {
68-
return parent::prepare($prepareString);
68+
return $this->wrappedPrepare($prepareString);
6969
} catch (\Exception $e) {
7070
$span->addTag(new DbalErrorCodeTag($e->getCode()))
7171
->addTag(new ErrorTag());
@@ -75,6 +75,20 @@ public function prepare($prepareString)
7575
}
7676
}
7777

78+
private function wrappedPrepare($sql)
79+
{
80+
try {
81+
$stmt = new JaegerStatementWrapper($sql, $this);
82+
} catch (\Throwable $e) {
83+
$this->handleExceptionDuringQuery($e, $sql);
84+
}
85+
86+
$stmt->setFetchMode($this->defaultFetchMode);
87+
$stmt->setTracer($this->tracer);
88+
89+
return $stmt;
90+
}
91+
7892
public function executeQuery($query, array $params = [], $types = [], QueryCacheProfile $qcp = null)
7993
{
8094
$span = $this->tracer
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
namespace Doctrine\DBAL\Jaeger\Wrapper;
5+
6+
use Doctrine\DBAL\Jaeger\Tag\DbalErrorCodeTag;
7+
use Doctrine\DBAL\Statement;
8+
use Jaeger\Tag\DbStatementTag;
9+
use Jaeger\Tag\ErrorTag;
10+
use Jaeger\Tracer\TracerInterface;
11+
12+
class JaegerStatementWrapper extends Statement
13+
{
14+
/**
15+
* @var TracerInterface $tracer
16+
*/
17+
private $tracer;
18+
19+
public function setTracer(TracerInterface $tracer)
20+
{
21+
$this->tracer = $tracer;
22+
23+
return $this;
24+
}
25+
26+
public function execute($params = null)
27+
{
28+
$span = $this->tracer
29+
->start('dbal.prepare.execute')
30+
->addTag(new DbStatementTag($this->sql));
31+
32+
try {
33+
return parent::execute($params);
34+
} catch (\Exception $e) {
35+
$span->addTag(new DbalErrorCodeTag($e->getCode()))
36+
->addTag(new ErrorTag());
37+
38+
throw $e;
39+
} finally {
40+
$this->tracer->finish($span);
41+
}
42+
}
43+
}

0 commit comments

Comments
 (0)