|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* @link http://www.yiiframework.com/
|
|
|
|
* @copyright Copyright (c) 2008 Yii Software LLC
|
|
|
|
* @license http://www.yiiframework.com/license/
|
|
|
|
*/
|
|
|
|
|
|
|
|
namespace yii\elasticsearch;
|
|
|
|
|
|
|
|
use Guzzle\Http\Exception\ClientErrorResponseException;
|
|
|
|
use yii\base\Exception;
|
|
|
|
use yii\helpers\Json;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Class GuzzleConnection
|
|
|
|
*
|
|
|
|
* @author Carsten Brandt <mail@cebe.cc>
|
|
|
|
* @since 2.0
|
|
|
|
*/
|
|
|
|
class GuzzleConnection extends Connection
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* @var \Guzzle\Http\Client
|
|
|
|
*/
|
|
|
|
private $_http;
|
|
|
|
|
|
|
|
protected function httpRequest($type, $url, $body = null)
|
|
|
|
{
|
|
|
|
if ($this->_http === null) {
|
|
|
|
$this->_http = new \Guzzle\Http\Client('http://localhost:9200/');// TODO use active node
|
|
|
|
//$guzzle->setDefaultOption()
|
|
|
|
}
|
|
|
|
$requestOptions = [];
|
|
|
|
if ($type == 'head') {
|
|
|
|
$requestOptions['exceptions'] = false;
|
|
|
|
}
|
|
|
|
if ($type == 'get' && $body !== null) {
|
|
|
|
$type = 'post';
|
|
|
|
}
|
|
|
|
try{
|
|
|
|
$response = $this->_http->createRequest(
|
|
|
|
strtoupper($type)
|
|
|
|
, $url,
|
|
|
|
null,
|
|
|
|
$body,
|
|
|
|
$requestOptions
|
|
|
|
)->send();
|
|
|
|
} catch(ClientErrorResponseException $e) {
|
|
|
|
if ($e->getResponse()->getStatusCode() == 404) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
throw new Exception("elasticsearch error:\n\n"
|
|
|
|
. $body . "\n\n" . $e->getMessage()
|
|
|
|
. print_r(Json::decode($e->getResponse()->getBody(true)), true), 0, $e);
|
|
|
|
}
|
|
|
|
if ($type == 'head') {
|
|
|
|
return $response->getStatusCode() == 200;
|
|
|
|
}
|
|
|
|
return Json::decode($response->getBody(true));
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|