summaryrefslogtreecommitdiff
path: root/vendor/ruflin/elastica/lib/Elastica/Snapshot.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/ruflin/elastica/lib/Elastica/Snapshot.php')
-rw-r--r--vendor/ruflin/elastica/lib/Elastica/Snapshot.php176
1 files changed, 176 insertions, 0 deletions
diff --git a/vendor/ruflin/elastica/lib/Elastica/Snapshot.php b/vendor/ruflin/elastica/lib/Elastica/Snapshot.php
new file mode 100644
index 00000000..80924b79
--- /dev/null
+++ b/vendor/ruflin/elastica/lib/Elastica/Snapshot.php
@@ -0,0 +1,176 @@
+<?php
+namespace Elastica;
+
+use Elastica\Exception\NotFoundException;
+use Elastica\Exception\ResponseException;
+
+/**
+ * Class Snapshot.
+ *
+ * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-snapshots.html
+ */
+class Snapshot
+{
+ /**
+ * @var Client
+ */
+ protected $_client;
+
+ /**
+ * @param Client $client
+ */
+ public function __construct(Client $client)
+ {
+ $this->_client = $client;
+ }
+
+ /**
+ * Register a snapshot repository.
+ *
+ * @param string $name the name of the repository
+ * @param string $type the repository type ("fs" for file system)
+ * @param array $settings Additional repository settings. If type "fs" is used, the "location" setting must be provided.
+ *
+ * @return Response
+ */
+ public function registerRepository($name, $type, $settings = array())
+ {
+ $data = array(
+ 'type' => $type,
+ 'settings' => $settings,
+ );
+
+ return $this->request($name, Request::PUT, $data);
+ }
+
+ /**
+ * Retrieve a repository record by name.
+ *
+ * @param string $name the name of the desired repository
+ *
+ * @throws Exception\ResponseException
+ * @throws Exception\NotFoundException
+ *
+ * @return array
+ */
+ public function getRepository($name)
+ {
+ try {
+ $response = $this->request($name);
+ } catch (ResponseException $e) {
+ if ($e->getResponse()->getStatus() == 404) {
+ throw new NotFoundException("Repository '".$name."' does not exist.");
+ }
+ throw $e;
+ }
+ $data = $response->getData();
+
+ return $data[$name];
+ }
+
+ /**
+ * Retrieve all repository records.
+ *
+ * @return array
+ */
+ public function getAllRepositories()
+ {
+ return $this->request('_all')->getData();
+ }
+
+ /**
+ * Create a new snapshot.
+ *
+ * @param string $repository the name of the repository in which this snapshot should be stored
+ * @param string $name the name of this snapshot
+ * @param array $options optional settings for this snapshot
+ * @param bool $waitForCompletion if true, the request will not return until the snapshot operation is complete
+ *
+ * @return Response
+ */
+ public function createSnapshot($repository, $name, $options = array(), $waitForCompletion = false)
+ {
+ return $this->request($repository.'/'.$name, Request::PUT, $options, array('wait_for_completion' => $waitForCompletion));
+ }
+
+ /**
+ * Retrieve data regarding a specific snapshot.
+ *
+ * @param string $repository the name of the repository from which to retrieve the snapshot
+ * @param string $name the name of the desired snapshot
+ *
+ * @throws Exception\ResponseException
+ * @throws Exception\NotFoundException
+ *
+ * @return array
+ */
+ public function getSnapshot($repository, $name)
+ {
+ try {
+ $response = $this->request($repository.'/'.$name);
+ } catch (ResponseException $e) {
+ if ($e->getResponse()->getStatus() == 404) {
+ throw new NotFoundException("Snapshot '".$name."' does not exist in repository '".$repository."'.");
+ }
+ throw $e;
+ }
+ $data = $response->getData();
+
+ return $data['snapshots'][0];
+ }
+
+ /**
+ * Retrieve data regarding all snapshots in the given repository.
+ *
+ * @param string $repository the repository name
+ *
+ * @return array
+ */
+ public function getAllSnapshots($repository)
+ {
+ return $this->request($repository.'/_all')->getData();
+ }
+
+ /**
+ * Delete a snapshot.
+ *
+ * @param string $repository the repository in which the snapshot resides
+ * @param string $name the name of the snapshot to be deleted
+ *
+ * @return Response
+ */
+ public function deleteSnapshot($repository, $name)
+ {
+ return $this->request($repository.'/'.$name, Request::DELETE);
+ }
+
+ /**
+ * Restore a snapshot.
+ *
+ * @param string $repository the name of the repository
+ * @param string $name the name of the snapshot
+ * @param array $options options for the restore operation
+ * @param bool $waitForCompletion if true, the request will not return until the restore operation is complete
+ *
+ * @return Response
+ */
+ public function restoreSnapshot($repository, $name, $options = array(), $waitForCompletion = false)
+ {
+ return $this->request($repository.'/'.$name.'/_restore', Request::POST, $options, array('wait_for_completion' => $waitForCompletion));
+ }
+
+ /**
+ * Perform a snapshot request.
+ *
+ * @param string $path the URL
+ * @param string $method the HTTP method
+ * @param array $data request body data
+ * @param array $query query string parameters
+ *
+ * @return Response
+ */
+ public function request($path, $method = Request::GET, $data = array(), array $query = array())
+ {
+ return $this->_client->request('/_snapshot/'.$path, $method, $data, $query);
+ }
+}