Skip to content

Commit a851106

Browse files
committed
Addd tags, jaeger connection decorator
0 parents  commit a851106

File tree

6 files changed

+237
-0
lines changed

6 files changed

+237
-0
lines changed

.gitignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
.idea/
2+
/.env
3+
/vendor/
4+
/phpunit.xml
5+
composer.lock

composer.json

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
{
2+
"name": "code-tool/doctrine-dbal-jaeger",
3+
"require": {
4+
"php": "^7.2",
5+
"doctrine/dbal": "^2.8",
6+
"code-tool/jaeger-client-php": "^2.15"
7+
},
8+
"require-dev": {
9+
"phpunit/phpunit": "^7.2"
10+
},
11+
"config": {
12+
"sort-packages": true
13+
},
14+
"autoload": {
15+
"psr-4": {
16+
"Doctrine\\DBAL\\Jaeger\\": "src/"
17+
}
18+
},
19+
"autoload-dev": {
20+
"psr-4": {
21+
"Doctrine\\DBAL\\Jaeger\\Tests\\": "tests/"
22+
}
23+
},
24+
"prefer-stable": true,
25+
"minimum-stability": "dev"
26+
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
namespace Doctrine\DBAL\Jaeger\Decorator;
5+
6+
use Doctrine\DBAL\Driver\Connection as DriverConnection;
7+
use Doctrine\DBAL\ParameterType;
8+
9+
class AbstractConnectionDecorator implements DriverConnection
10+
{
11+
private $connection;
12+
13+
public function __construct(DriverConnection $connection)
14+
{
15+
$this->connection = $connection;
16+
}
17+
18+
public function prepare($prepareString)
19+
{
20+
return $this->connection->prepare($prepareString);
21+
}
22+
23+
public function query()
24+
{
25+
return $this->connection->query();
26+
}
27+
28+
public function quote($input, $type = ParameterType::STRING)
29+
{
30+
return $this->connection->quote($input, $type);
31+
}
32+
33+
public function exec($statement)
34+
{
35+
return $this->connection->exec($statement);
36+
}
37+
38+
public function lastInsertId($name = null)
39+
{
40+
return $this->connection->lastInsertId($name);
41+
}
42+
43+
public function beginTransaction()
44+
{
45+
return $this->connection->beginTransaction();
46+
}
47+
48+
public function commit()
49+
{
50+
return $this->connection->commit();
51+
}
52+
53+
public function rollBack()
54+
{
55+
return $this->connection->rollBack();
56+
}
57+
58+
public function errorCode()
59+
{
60+
return $this->connection->errorCode();
61+
}
62+
63+
public function errorInfo()
64+
{
65+
return $this->connection->errorInfo();
66+
}
67+
}
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
namespace Doctrine\DBAL\Jaeger\Decorator;
5+
6+
use Doctrine\DBAL\Driver\Connection as DriverConnection;
7+
use Doctrine\DBAL\Jaeger\Tag\DbalErrorCodeTag;
8+
use Doctrine\DBAL\Jaeger\Tag\DbalRowNumberTag;
9+
use Jaeger\Tag\DbStatementTag;
10+
use Jaeger\Tag\ErrorTag;
11+
use Jaeger\Tracer\TracerInterface;
12+
13+
class JaegerConnectionDecorator extends AbstractConnectionDecorator
14+
{
15+
private $tracer;
16+
17+
public function __construct(DriverConnection $connection, TracerInterface $tracer)
18+
{
19+
$this->tracer = $tracer;
20+
parent::__construct($connection);
21+
}
22+
23+
public function prepare($prepareString)
24+
{
25+
$span = $this->tracer
26+
->start('dbal.prepare')
27+
->addTag(new DbStatementTag($prepareString));
28+
try {
29+
return parent::prepare($prepareString);
30+
} catch (\Exception $e) {
31+
$span->addTag(new DbalErrorCodeTag($e->getCode()))
32+
->addTag(new ErrorTag());
33+
throw $e;
34+
} finally {
35+
$this->tracer->finish($span);
36+
}
37+
}
38+
39+
public function query()
40+
{
41+
$span = $this->tracer->start('dbal.query');
42+
try {
43+
return parent::query();
44+
} catch (\Exception $e) {
45+
$span->addTag(new DbalErrorCodeTag($e->getCode()))
46+
->addTag(new ErrorTag());
47+
throw $e;
48+
} finally {
49+
$this->tracer->finish($span);
50+
}
51+
}
52+
53+
public function exec($statement)
54+
{
55+
$span = $this->tracer->start('dbal.exec');
56+
try {
57+
$rows = parent::exec($statement);
58+
$span->addTag(new DbalRowNumberTag($rows));
59+
60+
return $rows;
61+
} catch (\Exception $e) {
62+
$span->addTag(new DbalErrorCodeTag($e->getCode()))
63+
->addTag(new ErrorTag());
64+
throw $e;
65+
} finally {
66+
$this->tracer->finish($span);
67+
}
68+
}
69+
70+
public function beginTransaction()
71+
{
72+
$span = $this->tracer->start('dbal.transaction');
73+
try {
74+
return parent::beginTransaction();
75+
} catch (\Exception $e) {
76+
$span->addTag(new DbalErrorCodeTag($e->getCode()))
77+
->addTag(new ErrorTag());
78+
throw $e;
79+
} finally {
80+
$this->tracer->finish($span);
81+
}
82+
}
83+
84+
public function commit()
85+
{
86+
$span = $this->tracer->start('dbal.commit');
87+
try {
88+
return parent::commit();
89+
} catch (\Exception $e) {
90+
$span->addTag(new DbalErrorCodeTag($e->getCode()))
91+
->addTag(new ErrorTag());
92+
throw $e;
93+
} finally {
94+
$this->tracer->finish($span);
95+
}
96+
}
97+
98+
public function rollBack()
99+
{
100+
$span = $this->tracer->start('dbal.rollback');
101+
try {
102+
return parent::rollBack();
103+
} catch (\Exception $e) {
104+
$span->addTag(new DbalErrorCodeTag($e->getCode()))
105+
->addTag(new ErrorTag());
106+
throw $e;
107+
} finally {
108+
$this->tracer->finish($span);
109+
}
110+
}
111+
}

src/Tag/DbalErrorCodeTag.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
namespace Doctrine\DBAL\Jaeger\Tag;
5+
6+
use Jaeger\Tag\StringTag;
7+
8+
class DbalErrorCodeTag extends StringTag
9+
{
10+
public function __construct($value)
11+
{
12+
parent::__construct('dbal.error', (string)$value);
13+
}
14+
}

src/Tag/DbalRowNumberTag.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
namespace Doctrine\DBAL\Jaeger\Tag;
5+
6+
use Jaeger\Tag\LongTag;
7+
8+
class DbalRowNumberTag extends LongTag
9+
{
10+
public function __construct(int $value)
11+
{
12+
parent::__construct('dbal.rows', $value);
13+
}
14+
}

0 commit comments

Comments
 (0)