Skip to content

Commit

Permalink
Merge pull request #1407 from ninze/master
Browse files Browse the repository at this point in the history
More detailed ElasticsearchHandler exceptions
  • Loading branch information
Seldaek committed Dec 7, 2019
2 parents 11fb4f9 + 3379412 commit 12e0bd9
Showing 1 changed file with 39 additions and 9 deletions.
48 changes: 39 additions & 9 deletions src/Monolog/Handler/ElasticsearchHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,14 @@

namespace Monolog\Handler;

use Elasticsearch\Client;
use Elasticsearch\Common\Exceptions\RuntimeException as ElasticsearchRuntimeException;
use InvalidArgumentException;
use Monolog\Formatter\ElasticsearchFormatter;
use Monolog\Formatter\FormatterInterface;
use Monolog\Logger;
use RuntimeException;
use Throwable;
use RuntimeException;
use Monolog\Logger;
use Monolog\Formatter\FormatterInterface;
use Monolog\Formatter\ElasticsearchFormatter;
use InvalidArgumentException;
use Elasticsearch\Common\Exceptions\RuntimeException as ElasticsearchRuntimeException;
use Elasticsearch\Client;

/**
* Elasticsearch handler
Expand Down Expand Up @@ -148,12 +148,42 @@ protected function bulkSend(array $records): void
$responses = $this->client->bulk($params);

if ($responses['errors'] === true) {
throw new ElasticsearchRuntimeException('Elasticsearch returned error for one of the records');
throw $this->createExceptionFromResponses($responses);
}
} catch (Throwable $e) {
if (! $this->options['ignore_error']) {
throw new RuntimeException('Error sending messages to Elasticsearch', 0, $e);
}
}
}
}

/**
* Creates elasticsearch exception from responses array
*
* Only the first error is converted into an exception.
*
* @param array $responses returned by $this->client->bulk()
*/
protected function createExceptionFromResponses(array $responses): ElasticsearchRuntimeException
{
foreach ($responses['items'] ?? [] as $item) {
if (isset($item['index']['error'])) {
return $this->createExceptionFromError($item['index']['error']);
}
}

return new ElasticsearchRuntimeException('Elasticsearch failed to index one or more records.');
}

/**
* Creates elasticsearch exception from error array
*
* @param array $error
*/
protected function createExceptionFromError(array $error): ElasticsearchRuntimeException
{
$previous = isset($error['caused_by']) ? $this->createExceptionFromError($error['caused_by']) : null;

return new ElasticsearchRuntimeException($error['type'] . ': ' . $error['reason'], 0, $previous);
}
}

0 comments on commit 12e0bd9

Please sign in to comment.