/**
  * @param  \Kbrw\RiakBundle\Model\Cluster\Cluster $cluster
  * @param  \Kbrw\RiakBundle\Model\Bucket\Bucket   $bucket
  * @param  \Kbrw\RiakBundle\Model\MapReduce\Query $query
  * @return mixed
  */
 public function mapReduce($cluster, $query)
 {
     try {
         $request = $this->getClient($cluster->getGuzzleClientProviderService(), $this->getConfig($cluster))->post();
         $extra = array("method" => "POST");
         $ts = microtime(true);
         $body = $this->getSerializer()->serialize($query, "json");
         $extra["serialization_time"] = microtime(true) - $ts;
         $request->setBody($body, "application/json");
         $response = $request->send();
         if ($response->getStatusCode() === 200) {
             $fqcn = $query->getResponseFullyQualifiedClassName();
             if (!empty($fqcn)) {
                 $ts = microtime(true);
                 $content = $this->getSerializer()->deserialize($response->getBody(true), $fqcn, "json");
                 $extra["serialization_time"] = microtime(true) - $ts;
                 $this->logResponse($response, $extra);
                 return $content;
             }
             $this->logResponse($response, $extra);
             return $response->getBody(true);
         }
         $this->logResponse($response, $extra);
     } catch (CurlException $e) {
         $this->logger->err("Riak is unavailable" . $e->getMessage());
         throw new RiakUnavailableException();
     } catch (\Exception $e) {
         $this->logger->err("Unable to execute a mapreduce query. Full message is : \n" . $e->getMessage() . "");
     }
     return null;
 }
 /**
  * @param  \Kbrw\RiakBundle\Model\Cluster\Cluster       $cluster
  * @param  \Kbrw\RiakBundle\Model\Bucket\Bucket         $bucket
  * @param  \Kbrw\RiakBundle\Model\Search\Query | string $query
  * @return \Kbrw\RiakBundle\Model\Search\Response
  */
 public function search($cluster, $bucket, $query)
 {
     if (is_string($query)) {
         $query = new Query($query);
     }
     try {
         $request = $this->getClient($cluster->getGuzzleClientProviderService(), $this->getConfig($cluster, $bucket, $query))->get();
         $extra = array("method" => "GET");
         $response = $request->send();
         if ($response->getStatusCode() === 200) {
             $ts = microtime(true);
             $searchResponse = $this->getSerializer()->deserialize($response->getBody(), 'Kbrw\\RiakBundle\\Model\\Search\\Response', $query->getWt());
             $extra["deserialization_time"] = microtime(true) - $ts;
             if (isset($searchResponse)) {
                 $lists = $searchResponse->getLsts();
                 $list = reset($lists);
                 $qtime = $list->getSimpleTypeByName("QTime");
                 $extra["search_time"] = isset($qtime) ? $qtime->getValue() / 1000 : null;
             }
             $this->logResponse($response, $extra);
             return $searchResponse;
         }
         $this->logResponse($response, $extra);
     } catch (CurlException $e) {
         $this->logger->err("Riak is unavailable" . $e->getMessage());
         throw new RiakUnavailableException();
     } catch (\Exception $e) {
         $this->logger->err("Unable to execute a search query. Full message is : \n" . $e->getMessage() . "");
     }
     return new Response();
 }
 /**
  * @param  \Kbrw\RiakBundle\Model\Cluster\Cluster $cluster
  * @return array<string>
  */
 public function buckets($cluster, $ignore = "_rsid_*")
 {
     $bucketNames = array();
     $request = $this->getClient($cluster->getGuzzleClientProviderService(), $this->getConfig($cluster, "true"))->get();
     $this->logger->debug("[GET] '" . $request->getUrl() . "'");
     try {
         $response = $request->send();
         $extra = array("method" => "GET");
         if ($response->getStatusCode() === 200) {
             $ts = microtime(true);
             $content = json_decode($response->getBody(true));
             $extra["deserialization_time"] = microtime(true) - $ts;
             if (isset($content)) {
                 foreach ($content->{"buckets"} as $bucketName) {
                     if (!fnmatch($ignore, $bucketName)) {
                         $bucketNames[] = $bucketName;
                     }
                 }
             }
         }
         $this->logResponse($response, $extra);
     } catch (CurlException $e) {
         $this->logger->err("Riak is unavailable" . $e->getMessage());
         throw new RiakUnavailableException();
     } catch (\Exception $e) {
         $this->logger->err("Error while getting buckets" . $e->getMessage());
     }
     return $bucketNames;
 }
 /**
  * @param  \Kbrw\RiakBundle\Model\Cluster\Cluster $cluster
  * @return array<string,string>
  */
 public function status($cluster)
 {
     $request = $this->getClient($cluster->getGuzzleClientProviderService(), $this->getConfig($cluster, "true"))->get();
     try {
         $response = $request->send();
         $extra = array("method" => "GET");
         if ($response->getStatusCode() === 200) {
             $ts = microtime(true);
             $content = json_decode($response->getBody(true));
             $extra["deserialization_time"] = microtime(true) - $ts;
         }
         $this->logResponse($response, $extra);
     } catch (CurlException $e) {
         $this->logger->err("Riak is unavailable" . $e->getMessage());
         throw new RiakUnavailableException();
     } catch (\Exception $e) {
         $this->logger->err("Error while getting buckets" . $e->getMessage());
     }
     return $content;
 }
 /**
  * @param  \Kbrw\RiakBundle\Model\Cluster\Cluster $cluster
  * @param  \Kbrw\RiakBundle\Model\Bucket\Bucket   $bucket
  * @param  string                                 $key
  * @return string
  */
 public function getUri($cluster, $bucket, $key)
 {
     $client = $this->getClient($cluster->getGuzzleClientProviderService(), $this->getConfig($cluster, $bucket));
     return $client->get($key)->getUrl();
 }
 /**
  * @param  \Kbrw\RiakBundle\Model\Cluster\Cluster $cluster
  * @param  \Kbrw\RiakBundle\Model\Bucket\Bucket   $bucket
  * @return boolean
  */
 public function save($cluster, $bucket)
 {
     $request = $this->getClient($cluster->getGuzzleClientProviderService(), $this->getConfig($cluster, $bucket->getName(), null))->put();
     try {
         $extra = array("method" => "PUT");
         $ts = microtime(true);
         $request->setBody($this->serializer->serialize($bucket, "json"));
         $extra["serialization_time"] = microtime(true);
         -$ts;
         $request->setHeader("Content-Type", "application/json");
         $response = $request->send();
         $this->logResponse($response, $extra);
         return $response->getStatusCode() == "204";
     } catch (CurlException $e) {
         $this->logger->err("Riak is unavailable" . $e->getMessage());
         throw new RiakUnavailableException();
     } catch (\Exception $e) {
         $this->logger->err("Error while setting properties on bucket '" . $bucket->getName() . "'. Full message is : " . $e->getMessage());
     }
     return false;
 }