Skip to content

Commit d579c08

Browse files
authored
Merge pull request #346 from os2display/feature/relations-checksum-feature-flag
Added relations checksum feature flag
2 parents 368c0b2 + f9fa4c0 commit d579c08

7 files changed

Lines changed: 53 additions & 7 deletions

File tree

.env

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ KEY_VAULT_SOURCE=ENVIRONMENT
6868
KEY_VAULT_JSON="{}"
6969
TRACK_SCREEN_INFO=false
7070
TRACK_SCREEN_INFO_UPDATE_INTERVAL_SECONDS=300
71+
RELATIONS_CHECKSUM_ENABLED=true
7172
###< App ###
7273

7374
###> itk-dev/openid-connect-bundle ###

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ All notable changes to this project will be documented in this file.
2727
- Moved list components (search and checkboxes) around.
2828
- Aligned environment variable names.
2929
- Aligned with v. 2.6.0.
30+
- Added relations checksum feature flag.
3031

3132
### NB! Prior to 3.x the project was split into separate repositories
3233

assets/client/app.jsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,9 @@ function App({ preview, previewId }) {
221221

222222
ClientConfigLoader.loadConfig().then((config) => {
223223
setDebug(config.debug ?? false);
224+
225+
const relationChecksumEnabled = config.relationsChecksumEnabled;
226+
logger.info(`Relation checksum enabled: ${relationChecksumEnabled}`);
224227
});
225228

226229
releaseService.checkForNewRelease().finally(() => {

assets/client/data-sync/pull-strategy.js

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import isPublished from "../util/isPublished";
22
import logger from "../logger/logger";
33
import ApiHelper from "./api-helper";
44
import { cloneDeep } from "lodash";
5+
import ClientConfigLoader from "../util/client-config-loader.js";
56

67
/**
78
* PullStrategy.
@@ -195,6 +196,9 @@ class PullStrategy {
195196
return;
196197
}
197198

199+
const config = await ClientConfigLoader.loadConfig();
200+
const relationChecksumEnabled = config.relationsChecksumEnabled;
201+
198202
if (screen === null) {
199203
logger.warn(`Screen (${screenPath}) not loaded`);
200204
return;
@@ -209,14 +213,15 @@ class PullStrategy {
209213
this.lastestScreenData?.relationsChecksum ?? null;
210214

211215
if (
216+
relationChecksumEnabled === false ||
212217
oldScreenChecksums === null ||
213218
oldScreenChecksums?.campaigns !== newScreenChecksums?.campaigns ||
214219
oldScreenChecksums?.inScreenGroups !== newScreenChecksums?.inScreenGroups
215220
) {
216-
logger.info(`Campaigns or screen groups modified.`);
221+
logger.info(`Fetching campaigns.`);
217222
newScreen.campaignsData = await this.getCampaignsData(newScreen);
218223
} else {
219-
logger.info(`Campaigns or screen groups not modified.`);
224+
logger.info(`Campaigns data loaded from cache.`);
220225
newScreen.campaignsData = this.lastestScreenData.campaignsData;
221226
}
222227

@@ -262,29 +267,31 @@ class PullStrategy {
262267

263268
// Get layout: Defines layout and regions.
264269
if (
270+
relationChecksumEnabled === false ||
265271
this.lastestScreenData?.hasActiveCampaign ||
266272
oldScreenChecksums === null ||
267273
oldScreenChecksums?.layout !== newScreenChecksums?.layout
268274
) {
269-
logger.info(`Layout changed since last fetch.`);
275+
logger.info(`Fetching layout.`);
270276
newScreen.layoutData = await this.apiHelper.getPath(newScreen.layout);
271277
} else {
272278
// Get layout: Defines layout and regions.
273-
logger.info(`Layout not changed since last fetch.`);
279+
logger.info(`Layout loaded from cache.`);
274280
newScreen.layoutData = this.lastestScreenData.layoutData;
275281
}
276282

277283
// Fetch regions playlists: Yields playlists of slides for the regions
278284
if (
285+
relationChecksumEnabled === false ||
279286
this.lastestScreenData?.hasActiveCampaign ||
280287
oldScreenChecksums === null ||
281288
oldScreenChecksums?.regions !== newScreenChecksums?.regions
282289
) {
283-
logger.info(`Regions changed since last fetch.`);
290+
logger.info(`Fetching regions and slides for regions.`);
284291
const regions = await this.getRegions(newScreen.regions);
285292
newScreen.regionData = await this.getSlidesForRegions(regions);
286293
} else {
287-
logger.info(`Regions not changed since last fetch.`);
294+
logger.info(`Regions and slides for regions loaded from cache.`);
288295
newScreen.regionData = this.lastestScreenData.regionData;
289296
}
290297
}
@@ -308,7 +315,7 @@ class PullStrategy {
308315

309316
let previousSlide = null;
310317

311-
// Find slide in previous data for comparing relationsChecksum values.
318+
// Find the slide in previous data for comparing relationsChecksum values.
312319
if (
313320
this.lastestScreenData?.regionData[regionKey] &&
314321
this.lastestScreenData.regionData[regionKey][playlistKey] &&
@@ -328,6 +335,7 @@ class PullStrategy {
328335

329336
// Fetch template if it has changed.
330337
if (
338+
relationChecksumEnabled === false ||
331339
oldSlideChecksums === null ||
332340
newSlideChecksums.templateInfo !== oldSlideChecksums.templateInfo
333341
) {
@@ -342,6 +350,7 @@ class PullStrategy {
342350
) {
343351
slide.templateData = fetchedTemplates[templatePath];
344352
} else {
353+
logger.info(`Fetching template data.`);
345354
const templateData = await this.apiHelper.getPath(templatePath);
346355
slide.templateData = templateData;
347356

@@ -350,6 +359,7 @@ class PullStrategy {
350359
}
351360
}
352361
} else {
362+
logger.info(`Template data loaded from cache.`);
353363
slide.templateData = previousSlide.templateData;
354364
}
355365

@@ -363,6 +373,7 @@ class PullStrategy {
363373

364374
// Fetch media if it has changed.
365375
if (
376+
relationChecksumEnabled === false ||
366377
oldSlideChecksums === null ||
367378
newSlideChecksums.media !== oldSlideChecksums.media
368379
) {
@@ -372,6 +383,7 @@ class PullStrategy {
372383
if (Object.prototype.hasOwnProperty.call(fetchedMedia, mediaId)) {
373384
nextMediaData[mediaId] = fetchedMedia[mediaId];
374385
} else {
386+
logger.info(`Fetching media data.`);
375387
const mediaData = await this.apiHelper.getPath(mediaId);
376388
nextMediaData[mediaId] = mediaData;
377389

@@ -383,11 +395,13 @@ class PullStrategy {
383395

384396
slide.mediaData = nextMediaData;
385397
} else {
398+
logger.info(`Media data loaded from cache.`);
386399
slide.mediaData = previousSlide.mediaData;
387400
}
388401

389402
// Fetch feed.
390403
if (slide?.feed?.feedUrl !== undefined) {
404+
logger.info(`Fetching feed data.`);
391405
slide.feedData = await this.apiHelper.getPath(slide.feed.feedUrl);
392406
}
393407

config/services.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,10 @@ services:
5353
Symfony\Component\Security\Http\Authentication\AuthenticationFailureHandlerInterface: '@Lexik\Bundle\JWTAuthenticationBundle\Security\Http\Authentication\AuthenticationFailureHandler'
5454
Symfony\Component\Security\Http\Authentication\AuthenticationSuccessHandlerInterface: '@Lexik\Bundle\JWTAuthenticationBundle\Security\Http\Authentication\AuthenticationSuccessHandler'
5555

56+
App\EventListener\RelationsChecksumListener:
57+
arguments:
58+
$enabled: '%env(bool:RELATIONS_CHECKSUM_ENABLED)%'
59+
5660
App\Controller\Admin\AdminConfigController:
5761
arguments:
5862
$rejseplanenApiKey: '%env(ADMIN_REJSEPLANEN_APIKEY)%'
@@ -70,6 +74,7 @@ services:
7074
$pullStrategyInterval: '%env(int:CLIENT_PULL_STRATEGY_INTERVAL)%'
7175
$colorScheme: '%env(json:CLIENT_COLOR_SCHEME)%'
7276
$debug: '%env(bool:CLIENT_DEBUG)%'
77+
$relationsChecksumEnabled: '%env(bool:RELATIONS_CHECKSUM_ENABLED)%'
7378

7479
App\Feed\EventDatabaseApiV2FeedType:
7580
arguments:

src/Controller/Client/ClientConfigController.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ public function __construct(
2020
private readonly int $pullStrategyInterval,
2121
private readonly array $colorScheme,
2222
private readonly bool $debug,
23+
private readonly bool $relationsChecksumEnabled,
2324
) {}
2425

2526
public function __invoke(): Response
@@ -32,6 +33,7 @@ public function __invoke(): Response
3233
'schedulingInterval' => $this->schedulingInterval,
3334
'colorScheme' => $this->colorScheme,
3435
'debug' => $this->debug,
36+
'relationsChecksumEnabled' => $this->relationsChecksumEnabled,
3537
]);
3638
}
3739
}

src/EventListener/RelationsChecksumListener.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,10 @@ class RelationsChecksumListener
6060
'playlist', 'screen_campaign', 'screen', 'screen_group_campaign', 'screen_group',
6161
'playlist_screen_region', 'screen_layout_regions', 'screen_layout'];
6262

63+
public function __construct(
64+
private readonly bool $enabled = false,
65+
) {}
66+
6367
/**
6468
* PrePersist listener.
6569
*
@@ -73,6 +77,10 @@ class RelationsChecksumListener
7377
*/
7478
final public function prePersist(PrePersistEventArgs $args): void
7579
{
80+
if (!$this->enabled) {
81+
return;
82+
}
83+
7684
$entity = $args->getObject();
7785

7886
switch ($entity::class) {
@@ -162,6 +170,10 @@ final public function prePersist(PrePersistEventArgs $args): void
162170
*/
163171
final public function preUpdate(PreUpdateEventArgs $args): void
164172
{
173+
if (!$this->enabled) {
174+
return;
175+
}
176+
165177
$entity = $args->getObject();
166178

167179
if ($entity instanceof RelationsChecksumInterface) {
@@ -180,6 +192,10 @@ final public function preUpdate(PreUpdateEventArgs $args): void
180192
*/
181193
final public function preRemove(PreRemoveEventArgs $args): void
182194
{
195+
if (!$this->enabled) {
196+
return;
197+
}
198+
183199
$entity = $args->getObject();
184200

185201
switch ($entity::class) {
@@ -227,6 +243,10 @@ final public function preRemove(PreRemoveEventArgs $args): void
227243
*/
228244
final public function postFlush(PostFlushEventArgs $args): void
229245
{
246+
if (!$this->enabled) {
247+
return;
248+
}
249+
230250
$connection = $args->getObjectManager()->getConnection();
231251

232252
$sqlQueries = self::getUpdateRelationsAtQueries(withWhereClause: true);

0 commit comments

Comments
 (0)