_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); } }