|
7 | 7 | use Composer\InstalledVersions; |
8 | 8 | use GuzzleHttp\Psr7\Query; |
9 | 9 | use OpenTelemetry\API\Common\Time\Clock; |
| 10 | +use OpenTelemetry\API\Common\Time\ClockInterface; |
10 | 11 | use OpenTelemetry\API\Globals; |
11 | 12 | use OpenTelemetry\API\Instrumentation\CachedInstrumentation; |
12 | 13 | use OpenTelemetry\API\Trace\Span; |
@@ -172,13 +173,22 @@ public static function register(): void |
172 | 173 | return $promise; |
173 | 174 | } |
174 | 175 |
|
| 176 | + //https://opentelemetry.io/docs/specs/semconv/http/http-metrics/#http-client |
| 177 | + $requestDurationHistogram = $instrumentation->meter()->createHistogram( |
| 178 | + 'http.client.request.duration', |
| 179 | + 's', |
| 180 | + 'Duration of HTTP client requests.', |
| 181 | + ['ExplicitBucketBoundaries' => [0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10]] |
| 182 | + ); |
| 183 | + |
175 | 184 | /** @psalm-var array{'http.request.method':non-empty-string|null,'server.address':non-empty-string,'server.port':int} */ |
176 | 185 | $requestMeta = $scope->offsetGet('requestMeta'); |
177 | 186 | $requestMeta['http.request.method'] ??= '_OTHER'; |
| 187 | + /** @var int */ |
178 | 188 | $requestStart = $scope->offsetGet('requestStart'); |
179 | 189 |
|
180 | 190 | return $promise->then( |
181 | | - onFulfilled: function (ResponseInterface $response) use ($instrumentation, $requestMeta, $requestStart, $span) { |
| 191 | + onFulfilled: function (ResponseInterface $response) use ($requestDurationHistogram, $requestMeta, $requestStart, $span) { |
182 | 192 | $requestEnd = Clock::getDefault()->now(); |
183 | 193 | /** @psalm-var array{'http.response.status_code':int,'network.protocol.version':non-empty-string,'error.type'?:non-empty-string} */ |
184 | 194 | $responseMeta = [ |
@@ -208,17 +218,14 @@ public static function register(): void |
208 | 218 |
|
209 | 219 | $span->end($requestEnd); |
210 | 220 |
|
211 | | - //https://opentelemetry.io/docs/specs/semconv/http/http-metrics/#http-client |
212 | | - $instrumentation->meter()->createHistogram( |
213 | | - 'http.client.request.duration', |
214 | | - 's', |
215 | | - 'Duration of HTTP client requests.', |
216 | | - ['ExplicitBucketBoundaries' => [0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10]] |
217 | | - )->record($requestEnd - $requestStart, array_merge($requestMeta, $responseMeta)); |
| 221 | + $requestDurationHistogram->record( |
| 222 | + (float) (($requestEnd - $requestStart) / ClockInterface::NANOS_PER_SECOND), |
| 223 | + array_merge($requestMeta, $responseMeta) |
| 224 | + ); |
218 | 225 |
|
219 | 226 | return $response; |
220 | 227 | }, |
221 | | - onRejected: function (Throwable $t) use ($instrumentation, $requestMeta, $requestStart, $span) { |
| 228 | + onRejected: function (Throwable $t) use ($requestDurationHistogram, $requestMeta, $requestStart, $span) { |
222 | 229 | $requestEnd = Clock::getDefault()->now(); |
223 | 230 | $span->recordException($t); |
224 | 231 | if (is_a($t, ResponseException::class)) { |
@@ -255,13 +262,10 @@ public static function register(): void |
255 | 262 |
|
256 | 263 | $span->end($requestEnd); |
257 | 264 |
|
258 | | - //https://opentelemetry.io/docs/specs/semconv/http/http-metrics/#http-client |
259 | | - $instrumentation->meter()->createHistogram( |
260 | | - 'http.client.request.duration', |
261 | | - 's', |
262 | | - 'Duration of HTTP client requests.', |
263 | | - ['ExplicitBucketBoundaries' => [0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10]] |
264 | | - )->record($requestEnd - $requestStart, array_merge($requestMeta, $responseMeta)); |
| 265 | + $requestDurationHistogram->record( |
| 266 | + (float) (($requestEnd - $requestStart) / ClockInterface::NANOS_PER_SECOND), |
| 267 | + array_merge($requestMeta, $responseMeta) |
| 268 | + ); |
265 | 269 |
|
266 | 270 | throw $t; |
267 | 271 | } |
|
0 commit comments