Skip to content

Commit 394b9c6

Browse files
committed
displaying issue tree
1 parent e723487 commit 394b9c6

File tree

2 files changed

+90
-2
lines changed

2 files changed

+90
-2
lines changed

src/Issue.php

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
<?php
2+
3+
namespace YandexCloud\Ydb;
4+
5+
use Ydb\Issue\IssueMessage;
6+
7+
class Issue
8+
{
9+
/**
10+
* @var \Ydb\Issue\IssueMessage
11+
*/
12+
protected $issue;
13+
14+
public function __construct(IssueMessage $issue)
15+
{
16+
$this->issue = $issue;
17+
}
18+
19+
/**
20+
* @return string
21+
*/
22+
public function toString()
23+
{
24+
$msgs = [];
25+
$msg = trim($this->issue->getMessage());
26+
if (count($this->issue->getIssues()))
27+
{
28+
$msgs = [$msg . ':'];
29+
foreach ($this->issue->getIssues() as $issue)
30+
{
31+
$issues = static::getSubIssues($issue);
32+
if ($issues)
33+
{
34+
array_push($msgs, ...$issues);
35+
}
36+
}
37+
}
38+
else
39+
{
40+
$msgs = [$msg];
41+
}
42+
return implode("\n", $msgs);
43+
}
44+
45+
/**
46+
* @param \Ydb\Issue\IssueMessage $issue
47+
* @param int $level
48+
* @return array
49+
*/
50+
protected static function getSubIssues(IssueMessage $issue, $level = 0)
51+
{
52+
$msgs = [];
53+
foreach ($issue->getIssues() as $sub_issue)
54+
{
55+
$msg = str_repeat(' ', $level) . '- ' . trim($sub_issue->getMessage());
56+
if (count($sub_issue->getIssues()))
57+
{
58+
$msgs[] = $msg;
59+
$issues = static::getSubIssues($sub_issue, $level + 1);
60+
if ($issues)
61+
{
62+
array_push($msgs, ...$issues);
63+
}
64+
}
65+
else
66+
{
67+
$msgs[] = $msg;
68+
}
69+
}
70+
return $msgs;
71+
}
72+
}

src/Traits/RequestTrait.php

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
namespace YandexCloud\Ydb\Traits;
44

55
use Ydb\StatusIds\StatusCode;
6+
7+
use YandexCloud\Ydb\Issue;
68
use YandexCloud\Ydb\Exception;
79
use YandexCloud\Ydb\QueryResult;
810

@@ -252,7 +254,14 @@ protected function processResponse($service, $method, $response, $resultClass)
252254
// case StatusCode::TRANSPORT_UNAVAILABLE:
253255
case StatusCode::TIMEOUT: // ?
254256
$statusName = StatusCode::name($statusCode);
255-
$message = $response->getIssues()->getIterator()->current()->getMessage();
257+
258+
$issues = [];
259+
foreach ($response->getIssues() as $issue)
260+
{
261+
$issues[] = (new Issue($issue))->toString();
262+
}
263+
264+
$message = implode("\n", $issues);
256265

257266
$this->logger()->warning('YDB: Service [' . $service . '] method [' . $method . '] Failed to receive a valid response.', [
258267
'status' => $statusCode . ' (' . $statusName . ')',
@@ -270,7 +279,14 @@ protected function processResponse($service, $method, $response, $resultClass)
270279

271280
default:
272281
$statusName = StatusCode::name($statusCode);
273-
$message = $response->getIssues()->getIterator()->current()->getMessage();
282+
283+
$issues = [];
284+
foreach ($response->getIssues() as $issue)
285+
{
286+
$issues[] = (new Issue($issue))->toString();
287+
}
288+
289+
$message = implode("\n", $issues);
274290

275291
$this->logger()->error(
276292
'YDB: Service [' . $service . '] method [' . $method . '] Failed to receive a valid response.',

0 commit comments

Comments
 (0)