mirror of
https://github.com/Unleash/unleash.git
synced 2025-09-10 17:53:36 +02:00
Improve the setLastSeen function by using better sql operation
Signed-off-by: andreas-unleash <andreas@getunleash.ai>
This commit is contained in:
parent
da61707caa
commit
2a0976d088
@ -178,17 +178,35 @@ export default class FeatureToggleStore implements IFeatureToggleStore {
|
|||||||
last_seen_at: now,
|
last_seen_at: now,
|
||||||
environment: value.environment,
|
environment: value.environment,
|
||||||
}));
|
}));
|
||||||
const dataToPersist: typeof enhancedData = [];
|
|
||||||
for (const input of enhancedData) {
|
|
||||||
if (await this.exists(input.feature_name)) {
|
|
||||||
dataToPersist.push(input);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
try {
|
try {
|
||||||
await this.db(FEATURE_ENVIRONMENTS_METRICS_TABLE)
|
await this.db.transaction(async (trx) => {
|
||||||
.insert(dataToPersist)
|
// Create a CTE with the data to be inserted
|
||||||
.onConflict(['feature_name', 'environment'])
|
const cte = trx('features')
|
||||||
.merge(['last_seen_at']);
|
.select('name')
|
||||||
|
.whereIn(
|
||||||
|
'name',
|
||||||
|
enhancedData.map((entry) => entry.feature_name),
|
||||||
|
);
|
||||||
|
|
||||||
|
// Insert only the rows that exist in the CTE (subquery)
|
||||||
|
await trx.raw(
|
||||||
|
`
|
||||||
|
INSERT INTO ${FEATURE_ENVIRONMENTS_METRICS_TABLE} (feature_name, last_seen_at, environment)
|
||||||
|
SELECT ed.feature_name, ?, ed.environment
|
||||||
|
FROM (SELECT ? AS feature_name, ? AS environment) AS ed
|
||||||
|
WHERE EXISTS (SELECT 1 FROM ? AS cte WHERE cte.name = ed.feature_name)
|
||||||
|
ON CONFLICT (feature_name, environment)
|
||||||
|
DO UPDATE SET last_seen_at = EXCLUDED.last_seen_at
|
||||||
|
`,
|
||||||
|
[
|
||||||
|
now,
|
||||||
|
enhancedData[0].feature_name,
|
||||||
|
enhancedData[0].environment,
|
||||||
|
cte,
|
||||||
|
],
|
||||||
|
);
|
||||||
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
this.logger.error('Could not update lastSeen, error: ', err);
|
this.logger.error('Could not update lastSeen, error: ', err);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user