Skip to content

Commit

Permalink
add logging on fetch & cache; add mechanism to bypass cache
Browse files Browse the repository at this point in the history
  • Loading branch information
jblz committed Aug 21, 2024
1 parent 40617e4 commit addcd13
Showing 1 changed file with 45 additions and 7 deletions.
52 changes: 45 additions & 7 deletions inc/http-client/class-cache-strategy.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,56 @@

namespace RemoteDataBlocks\HttpClient;

use Kevinrob\GuzzleCache\KeyValueHttpHeader;
use Kevinrob\GuzzleCache\Storage\CacheStorageInterface;
use Kevinrob\GuzzleCache\Strategy\GreedyCacheStrategy;
use Psr\Http\Message\RequestInterface;
use RemoteDataBlocks\Logging\LoggerManager;

class CacheStrategy extends GreedyCacheStrategy {
const HEADER_TTL = 'X-RemoteDataBlocks-TTL';
const HEADER_TTL = 'X-RemoteDataBlocks-TTL';
const HEADER_BYPASS_CACHE = 'X-RemoteDataBlocks-Bypass-Cache';

protected $logger;
private static function getRequestString( RequestInterface $request ) {
$uri = $request->getUri();
$uri_string = $uri->getScheme() . '://' . $uri->getHost() . $uri->getPath();
$method = $request->getMethod();
$body = $request->getBody()->getContents();
return $method . ' ' . $uri_string . ' ' . $body;
}

protected function should_bypass_cache( RequestInterface $request ) {
$bypass = $request->getHeader( self::HEADER_BYPASS_CACHE );
if ( ! empty( $bypass ) ) {
return true;
}

return false;
}

public function fetch( RequestInterface $request ) {
$logger = LoggerManager::instance();

if ( $this->should_bypass_cache( $request ) ) {
$logger->debug( 'Bypassing cache: ' . self::getRequestString( $request ) );
return null;
}

$result = parent::fetch( $request );

if ( null === $result ) {
$logger->debug( 'Cache Miss: ' . self::getRequestString( $request ) );
return null;
}
$logger->debug( 'Cache Hit: ' . self::getRequestString( $request ) );
return $result;
}

public function __construct( CacheStorageInterface $cache = null, $default_ttl, KeyValueHttpHeader $vary_headers = null ) {
$this->logger = LoggerManager::instance();
parent::__construct( $cache, $default_ttl, $vary_headers );
public function cache( RequestInterface $request, $response ) {
$result = parent::cache( $request, $response );
$logger = LoggerManager::instance();
if ( false === $result ) {
$logger->debug( 'Did not cache: ' . self::getRequestString( $request ) );
return false;
}
$logger->debug( 'Cached: ' . self::getRequestString( $request ) );
}
}

0 comments on commit addcd13

Please sign in to comment.