|
3 | 3 | namespace Dapr;
|
4 | 4 |
|
5 | 5 | use Dapr\Deserialization\IDeserializer;
|
| 6 | +use Dapr\DistributedTracing\ActiveTrace; |
6 | 7 | use Dapr\exceptions\DaprException;
|
7 | 8 | use JetBrains\PhpStorm\Pure;
|
8 | 9 | use Psr\Log\LoggerInterface;
|
|
13 | 14 | */
|
14 | 15 | class DaprClient
|
15 | 16 | {
|
16 |
| - private static array $trace; |
17 |
| - private static bool $added_trace = false; |
18 | 17 | // temp hack to allow custom headers
|
19 | 18 | private static DaprClient $client;
|
20 | 19 | public array $extra_headers = [];
|
21 | 20 |
|
22 | 21 | public function __construct(
|
23 | 22 | protected LoggerInterface $logger,
|
24 | 23 | protected IDeserializer $deserializer,
|
| 24 | + protected ActiveTrace|null $trace, |
25 | 25 | protected string $port
|
26 | 26 | ) {
|
27 | 27 | self::$client = $this;
|
@@ -63,7 +63,6 @@ public function get(string $url, ?array $params = null): DaprResponse
|
63 | 63 | $return->headers,
|
64 | 64 | fn($carry, $item) => str_starts_with($item, 'etag:') ? str_replace('etag: ', '', $item) : $carry
|
65 | 65 | );
|
66 |
| - self::detect_trace_from_response($return); |
67 | 66 |
|
68 | 67 | $this->logger->debug('Got response: {response}', ['response' => $return]);
|
69 | 68 |
|
@@ -106,48 +105,12 @@ public function get(string $url, ?array $params = null): DaprResponse
|
106 | 105 |
|
107 | 106 | private function get_headers(): array
|
108 | 107 | {
|
109 |
| - return array_merge(["Accept: application/json"], self::detect_trace(), $this->extra_headers); |
110 |
| - } |
111 |
| - |
112 |
| - private function detect_trace(): array |
113 |
| - { |
114 |
| - if (isset(self::$trace)) { |
115 |
| - return self::$trace; |
116 |
| - } |
117 |
| - |
118 |
| - $existing_headers = getallheaders(); |
119 |
| - self::$trace = isset($existing_headers['Traceparent']) ? ['Traceparent: '.$existing_headers['Traceparent']] : []; |
120 |
| - |
121 |
| - if ( ! self::$added_trace && isset($existing_headers['Traceparent'])) { |
122 |
| - header('Traceparent: '.$existing_headers['Traceparent']); |
123 |
| - self::$added_trace = true; |
124 |
| - } |
125 |
| - |
126 |
| - return self::$trace; |
127 |
| - } |
128 |
| - |
129 |
| - /** |
130 |
| - * @param DaprResponse $response |
131 |
| - */ |
132 |
| - private function detect_trace_from_response(DaprResponse $response): void |
133 |
| - { |
134 |
| - if (isset(self::$trace)) { |
135 |
| - return; |
136 |
| - } |
| 108 | + $trace = $this->trace ? [ |
| 109 | + 'tracestate: '.$this->trace->trace_state, |
| 110 | + 'traceparent: '.$this->trace->trace_parent, |
| 111 | + ] : []; |
137 | 112 |
|
138 |
| - $header = array_filter( |
139 |
| - $response->headers, |
140 |
| - function ($ii) { |
141 |
| - return str_starts_with($ii, 'Traceparent:'); |
142 |
| - } |
143 |
| - ); |
144 |
| - if ( ! empty($header)) { |
145 |
| - self::$trace = $header; |
146 |
| - if ( ! self::$added_trace) { |
147 |
| - header('Traceparent: '.$header[0]); |
148 |
| - self::$added_trace = true; |
149 |
| - } |
150 |
| - } |
| 113 | + return array_merge(["Accept: application/json"], $trace, $this->extra_headers); |
151 | 114 | }
|
152 | 115 |
|
153 | 116 | /**
|
@@ -180,7 +143,6 @@ public function post(string $url, mixed $data, ?array $params = null): DaprRespo
|
180 | 143 | $response->data = json_decode($response->data, true);
|
181 | 144 | $response->code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
|
182 | 145 | $response->headers = explode("\r\n", curl_getinfo($curl, CURLINFO_HEADER_OUT));
|
183 |
| - self::detect_trace_from_response($response); |
184 | 146 | $this->logger->debug('Got response: {r}', ['r' => $response]);
|
185 | 147 |
|
186 | 148 | if ($this->deserializer->is_exception($response->data)) {
|
@@ -226,7 +188,6 @@ public function delete(string $url, ?array $params = []): DaprResponse
|
226 | 188 | $response->data = json_decode(curl_exec($curl), true);
|
227 | 189 | $response->code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
|
228 | 190 | $response->headers = explode("\r\n", curl_getinfo($curl, CURLINFO_HEADER_OUT));
|
229 |
| - self::detect_trace_from_response($response); |
230 | 191 |
|
231 | 192 | $this->logger->debug('Got response: {r}', ['r' => $response]);
|
232 | 193 |
|
|
0 commit comments