You are here

function AkamaiCacheControlClient::clear_url in Akamai 7.3

Same name and namespace in other branches
  1. 8 akamai.class.inc \AkamaiCacheControlClient::clear_url()
  2. 8.2 akamai.class.inc \AkamaiCacheControlClient::clear_url()
  3. 6.2 akamai.class.inc \AkamaiCacheControlClient::clear_url()
  4. 7 akamai.class.inc \AkamaiCacheControlClient::clear_url()
  5. 7.2 akamai.class.inc \AkamaiCacheControlClient::clear_url()

Clears the provided URLs from the Akamai Content Cache.

Parameters

$paths: A path (or array of paths) to clear from Akamai.

Return value

array An array with 2 keys:

  • success: TRUE or FALSE indicating cache clearing success.
  • message: Blank if successful, the error message if not successful.

Throws

AkamaiException

Overrides AkamaiCacheControl::clear_url

File

./akamai.class.inc, line 67
akamai.class.inc Akamai is a registered trademark of Akamai Technologies, Inc. This class is an abstraction around the Akamai Cache Control API.

Class

AkamaiCacheControlClient
Default implementation of the AkamaiCacheControl interface

Code

function clear_url($paths) {

  // Grab params.
  extract($this->parameters);

  // Prepend base path to paths to make URIs.
  $uris = array();
  foreach ($paths as $path) {
    $path = rtrim(preg_match("/^\\//", $path) ? $path : "/{$path}");
    array_push($uris, $basepath . $path);
  }
  $data = array(
    "type" => "arl",
    "action" => "{$action}",
    "domain" => "{$domain}",
    "objects" => $uris,
  );
  $data_string = json_encode($data);
  $data_string = str_replace("\\/", '/', $data_string);

  // URL needs to be in the format of scheme://user:pass@url.
  $url_parsed = parse_url($restapi);
  $url = $url_parsed['scheme'] . '://' . $name . ':' . $pwd . '@' . $url_parsed['host'] . $url_parsed['path'];
  $response = drupal_http_request($url, array(
    'method' => 'POST',
    'data' => $data_string,
    'timeout' => $this->defaults['timeout'],
    'headers' => array(
      'Content-Type' => 'application/json',
      'Content-Length' => strlen($data_string),
    ),
  ));

  // We expect Akamai to respond with code 201 if the purge request was
  // successfully created.
  if ($response->code != 201) {
    $message = format_string('Akamai RestAPI failed !action for !uris with code !code and response: !response', array(
      '!uris' => implode(' ', $uris),
      '!action' => $action,
      '!code' => $response->code,
      '!response' => var_export($response, TRUE),
    ));
    throw new AkamaiException($message);
  }
  if (empty($response->data)) {
    $message = format_string('Received no response data. Akamai RestAPI !action for !uris: Response: !response', array(
      '!uris' => implode(' ', $uris),
      '!action' => $action,
      '!response' => var_export($response, TRUE),
    ));
    throw new AkamaiException($message);
  }
  $response_data = json_decode($response->data);
  if ($response_data === null && json_last_error() !== JSON_ERROR_NONE) {
    $message = format_string('Failed to decode JSON data. Akamai RestAPI !action for !uris: Response: !response', array(
      '!uris' => implode(' ', $uris),
      '!action' => $action,
      '!response' => var_export($response, TRUE),
    ));
    throw new AkamaiException($message);
  }
  watchdog('Akamai', "Akamai RestAPI %action for %uris on %domain: Response: %response", array(
    '%uris' => implode(' ', $uris),
    '%action' => $action,
    '%domain' => $domain,
    '%response' => print_r($response_data, TRUE),
  ), WATCHDOG_NOTICE);
  return $response;
}