mirror of
https://github.com/Unleash/unleash.git
synced 2025-02-23 00:22:19 +01:00
feat: rework application overview db query (#8518)
Previously we were returning all instance names from database, but now we count them in database.
This commit is contained in:
parent
f2ee02ed9e
commit
9839b77008
@ -313,28 +313,38 @@ export default class ClientApplicationsStore
|
|||||||
),
|
),
|
||||||
])
|
])
|
||||||
.from('client_metrics_env as cme')
|
.from('client_metrics_env as cme')
|
||||||
|
.where('cme.app_name', appName)
|
||||||
.leftJoin('features as f', 'f.name', 'cme.feature_name')
|
.leftJoin('features as f', 'f.name', 'cme.feature_name')
|
||||||
.groupBy('cme.app_name', 'cme.environment', 'f.project');
|
.groupBy('cme.app_name', 'cme.environment', 'f.project');
|
||||||
})
|
})
|
||||||
|
.with('instances', (qb) => {
|
||||||
|
qb.select([
|
||||||
|
'ci.app_name',
|
||||||
|
'ci.environment',
|
||||||
|
this.db.raw(
|
||||||
|
'COUNT(DISTINCT ci.instance_id) as unique_instance_count',
|
||||||
|
),
|
||||||
|
this.db.raw(
|
||||||
|
'ARRAY_AGG(DISTINCT ci.sdk_version) as sdk_versions',
|
||||||
|
),
|
||||||
|
this.db.raw('MAX(ci.last_seen) as latest_last_seen'),
|
||||||
|
])
|
||||||
|
.from('client_instances as ci')
|
||||||
|
.where('ci.app_name', appName)
|
||||||
|
.groupBy('ci.app_name', 'ci.environment');
|
||||||
|
})
|
||||||
.select([
|
.select([
|
||||||
'm.project',
|
'm.project',
|
||||||
'm.environment',
|
'm.environment',
|
||||||
'm.features',
|
'm.features',
|
||||||
'ci.instance_id',
|
'i.unique_instance_count',
|
||||||
'ci.sdk_version',
|
'i.sdk_versions',
|
||||||
'ci.last_seen',
|
'i.latest_last_seen',
|
||||||
'a.strategies',
|
'ca.strategies',
|
||||||
])
|
])
|
||||||
.from({ a: 'client_applications' })
|
.from('client_applications as ca')
|
||||||
.leftJoin('metrics as m', 'm.app_name', 'a.app_name')
|
.leftJoin('metrics as m', 'm.app_name', 'ca.app_name')
|
||||||
.leftJoin('client_instances as ci', function () {
|
.leftJoin('instances as i', 'i.environment', 'm.environment')
|
||||||
this.on('ci.app_name', '=', 'm.app_name').andOn(
|
|
||||||
'ci.environment',
|
|
||||||
'=',
|
|
||||||
'm.environment',
|
|
||||||
);
|
|
||||||
})
|
|
||||||
.where('a.app_name', appName)
|
|
||||||
.orderBy('m.environment', 'asc');
|
.orderBy('m.environment', 'asc');
|
||||||
const rows = await query;
|
const rows = await query;
|
||||||
stopTimer();
|
stopTimer();
|
||||||
@ -358,9 +368,9 @@ export default class ClientApplicationsStore
|
|||||||
const environments = rows.reduce((acc, row) => {
|
const environments = rows.reduce((acc, row) => {
|
||||||
const {
|
const {
|
||||||
environment,
|
environment,
|
||||||
instance_id,
|
unique_instance_count,
|
||||||
sdk_version,
|
sdk_versions,
|
||||||
last_seen,
|
latest_last_seen,
|
||||||
project,
|
project,
|
||||||
features,
|
features,
|
||||||
strategies,
|
strategies,
|
||||||
@ -383,12 +393,9 @@ export default class ClientApplicationsStore
|
|||||||
if (!env) {
|
if (!env) {
|
||||||
env = {
|
env = {
|
||||||
name: environment,
|
name: environment,
|
||||||
instanceCount: instance_id ? 1 : 0,
|
instanceCount: Number(unique_instance_count),
|
||||||
sdks: sdk_version ? [sdk_version] : [],
|
sdks: sdk_versions,
|
||||||
lastSeen: last_seen,
|
lastSeen: latest_last_seen,
|
||||||
uniqueInstanceIds: new Set(
|
|
||||||
instance_id ? [instance_id] : [],
|
|
||||||
),
|
|
||||||
issues: {
|
issues: {
|
||||||
missingFeatures: featuresNotMappedToProject
|
missingFeatures: featuresNotMappedToProject
|
||||||
? features
|
? features
|
||||||
@ -397,25 +404,14 @@ export default class ClientApplicationsStore
|
|||||||
};
|
};
|
||||||
acc.push(env);
|
acc.push(env);
|
||||||
} else {
|
} else {
|
||||||
if (instance_id) {
|
|
||||||
env.uniqueInstanceIds.add(instance_id);
|
|
||||||
env.instanceCount = env.uniqueInstanceIds.size;
|
|
||||||
}
|
|
||||||
if (featuresNotMappedToProject) {
|
if (featuresNotMappedToProject) {
|
||||||
env.issues.missingFeatures = features;
|
env.issues.missingFeatures = features;
|
||||||
}
|
}
|
||||||
if (sdk_version && !env.sdks.includes(sdk_version)) {
|
|
||||||
env.sdks.push(sdk_version);
|
|
||||||
}
|
|
||||||
if (new Date(last_seen) > new Date(env.lastSeen)) {
|
|
||||||
env.lastSeen = last_seen;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return acc;
|
return acc;
|
||||||
}, []);
|
}, []);
|
||||||
environments.forEach((env) => {
|
environments.forEach((env) => {
|
||||||
delete env.uniqueInstanceIds;
|
|
||||||
env.sdks.sort();
|
env.sdks.sort();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user