You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							62 lines
						
					
					
						
							1.4 KiB
						
					
					
				
			
		
		
	
	
							62 lines
						
					
					
						
							1.4 KiB
						
					
					
				| <?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)); | |
| 	} | |
|  | |
| } |