This repository has been archived by the owner on Oct 3, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 83
/
PDO.php
109 lines (98 loc) · 3.35 KB
/
PDO.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
<?php
/**
* Copyright 2017 OpenCensus Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
namespace OpenCensus\Trace\Integrations;
use OpenCensus\Trace\Span;
/**
* This class handles instrumenting PDO requests using the opencensus extension.
*
* Example:
* ```
* use OpenCensus\Trace\Integrations\PDO;
*
* PDO::load();
* ```
*/
class PDO implements IntegrationInterface
{
/**
* Static method to add instrumentation to the PDO requests
*/
public static function load()
{
if (!extension_loaded('opencensus')) {
trigger_error('opencensus extension required to load PDO integrations.', E_USER_WARNING);
return;
}
// public int PDO::exec(string $query)
opencensus_trace_method('PDO', 'exec', [static::class, 'handleQuery']);
// public PDOStatement PDO::query(string $query)
// public PDOStatement PDO::query(string $query, int PDO::FETCH_COLUMN, int $colno)
// public PDOStatement PDO::query(string $query, int PDO::FETCH_CLASS, string $classname, array $ctorargs)
// public PDOStatement PDO::query(string $query, int PDO::FETCH_INFO, object $object)
opencensus_trace_method('PDO', 'query', [static::class, 'handleQuery']);
// public bool PDO::commit ( void )
opencensus_trace_method('PDO', 'commit');
// public PDO::__construct(string $dsn [, string $username [, string $password [, array $options]]])
opencensus_trace_method('PDO', '__construct', [static::class, 'handleConnect']);
// public bool PDOStatement::execute([array $params])
opencensus_trace_method('PDOStatement', 'execute', [static::class, 'handleStatementExecute']);
}
/**
* Handle extracting the SQL query from the first argument
*
* @internal
* @param PDO $pdo The connectoin
* @param string $query The SQL query to extract
* @return array
*/
public static function handleQuery($pdo, $query)
{
return [
'attributes' => ['query' => $query],
'kind' => Span::KIND_CLIENT
];
}
/**
* Handle extracting the Data Source Name (DSN) from the constructor aruments to PDO
*
* @internal
* @param PDO $pdo
* @param string $dsn The connection DSN
* @return array
*/
public static function handleConnect($pdo, $dsn)
{
return [
'attributes' => ['dsn' => $dsn],
'kind' => Span::KIND_CLIENT
];
}
/**
* Handle extracting the SQL query from a PDOStatement instance
*
* @internal
* @param PDOStatement $statement The prepared statement
* @return array
*/
public static function handleStatementExecute($statement)
{
return [
'attributes' => ['query' => $statement->queryString],
'kind' => Span::KIND_CLIENT
];
}
}