1
0
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:
andreas-unleash 2023-09-28 11:12:52 +03:00
parent da61707caa
commit 2a0976d088
No known key found for this signature in database
GPG Key ID: DB82A1577B38F66B

View File

@ -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);
} }