Query Cache

* added to api cache response get published
  event and event feedback response.
* updated cache middleware to allow cache lifetime to
  be configurable.

Change-Id: I9dccb7b27e83cffed6f5ae2fb60623ab9bad9f24
This commit is contained in:
Sebastian Marcet 2016-11-16 11:46:07 -03:00
parent bb20ca1388
commit 362e897511
5 changed files with 37 additions and 22 deletions

View File

@ -43,14 +43,15 @@ final class CacheMiddleware
/**
* Handle an incoming request.
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
* @param $request
* @param Closure $next
* @param $cache_lifetime
* @return JsonResponse
*/
public function handle($request, Closure $next)
public function handle($request, Closure $next, $cache_lifetime)
{
Log::debug('cache middleware invoked ...');
$cache_lifetime = intval($cache_lifetime);
if ($request->getMethod() !== 'GET')
{
// short circuit
@ -72,8 +73,6 @@ final class CacheMiddleware
}
}
$cache_lifetime = intval(Config::get('server.response_cache_lifetime', 300));
if (str_contains($request->getPathInfo(), '/me'))
{
$key .= ':' . $this->context->getCurrentUserExternalId();

View File

@ -11,6 +11,8 @@
|
*/
use Illuminate\Support\Facades\Config;
//OAuth2 Protected API
Route::group(array(
'namespace' => 'App\Http\Controllers',
@ -49,7 +51,7 @@ Route::group(array(
Route::group(array('prefix' => '{id}'), function () {
Route::get('', [ 'middleware' => 'cache', 'uses' => 'OAuth2SummitApiController@getSummit'])->where('id', 'current|[0-9]+');
Route::get('', [ 'middleware' => 'cache:'.Config::get('cache_api_response.get_summit_response_lifetime', 300), 'uses' => 'OAuth2SummitApiController@getSummit'])->where('id', 'current|[0-9]+');
Route::get('entity-events', 'OAuth2SummitApiController@getSummitEntityEvents');
@ -99,13 +101,13 @@ Route::group(array(
Route::group(array('prefix' => '{event_id}'), function () {
Route::get('', 'OAuth2SummitEventsApiController@getEvent');
Route::get('/published', 'OAuth2SummitEventsApiController@getScheduledEvent');
Route::get('/published', [ 'middleware' => 'cache:'.Config::get('cache_api_response.get_published_event_response_lifetime', 300), 'uses' => 'OAuth2SummitEventsApiController@getScheduledEvent']);
Route::put('', [ 'middleware' => 'auth.user:administrators', 'uses' => 'OAuth2SummitEventsApiController@updateEvent' ]);
Route::delete('', [ 'middleware' => 'auth.user:administrators', 'uses' => 'OAuth2SummitEventsApiController@deleteEvent' ]);
Route::put('/publish', [ 'middleware' => 'auth.user:administrators', 'uses' => 'OAuth2SummitEventsApiController@publishEvent']);
Route::delete('/publish', [ 'middleware' => 'auth.user:administrators', 'uses' => 'OAuth2SummitEventsApiController@unPublishEvent']);
Route::post('/feedback', 'OAuth2SummitEventsApiController@addEventFeedback');
Route::get('/feedback/{attendee_id?}', 'OAuth2SummitEventsApiController@getEventFeedback')->where('attendee_id', 'me|[0-9]+');
Route::get('/feedback/{attendee_id?}', ['middleware' => 'cache:'.Config::get('cache_api_response.get_event_feedback_response_lifetime', 300), 'uses' => 'OAuth2SummitEventsApiController@getEventFeedback'] )->where('attendee_id', 'me|[0-9]+');
});
});

View File

@ -375,7 +375,7 @@ class Summit extends SilverstripeBaseModel
}
/**
* @ORM\ManyToOne(targetEntity="models\main\File", fetch="EAGER")
* @ORM\ManyToOne(targetEntity="models\main\File")
* @ORM\JoinColumn(name="LogoID", referencedColumnName="ID")
* @var File
*/

View File

@ -1,4 +1,5 @@
<?php namespace repositories\summit;
/**
* Copyright 2016 OpenStack Foundation
* Licensed under the Apache License, Version 2.0 (the "License");
@ -12,15 +13,9 @@
* limitations under the License.
**/
use Doctrine\ORM\Tools\Pagination\Paginator;
use Doctrine\ORM\Query\Expr\Join;
use models\summit\ISummitRepository;
use models\summit\Summit;
use repositories\SilverStripeDoctrineRepository;
use utils\DoctrineJoinFilterMapping;
use utils\Filter;
use utils\PagingInfo;
use utils\PagingResponse;
/**
* Class DoctrineSummitRepository
@ -35,16 +30,16 @@ final class DoctrineSummitRepository extends SilverStripeDoctrineRepository impl
*/
public function getCurrent()
{
$res = $this->getEntityManager()->createQueryBuilder()
$res = $this->getEntityManager()->createQueryBuilder()
->select("s")
->from(\models\summit\Summit::class, "s")
->where('s.active = 1')
->orderBy('s.begin_date','DESC')
->setCacheable(true)
->setCacheRegion('current_summit_region')
->orderBy('s.begin_date', 'DESC')
->getQuery()
->setCacheable(true)
->setCacheRegion("summit_region")
->getResult();
if(count($res) == 0) return null;
if (count($res) == 0) return null;
return $res[0];
}
}

View File

@ -0,0 +1,19 @@
<?php
/**
* Copyright 2016 OpenStack Foundation
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**/
return [
'get_summit_response_lifetime' => env('CACHE_API_RESPONSE_GET_SUMMIT_LIFETIME', 300),
'get_event_feedback_response_lifetime' => env('CACHE_API_RESPONSE_GET_EVENT_FEEDBACK_LIFETIME', 300),
'get_published_event_response_lifetime' => env('CACHE_API_RESPONSE_GET_PUBLISHED_EVENT_LIFETIME', 300),
];