mirror of
https://github.com/Unleash/unleash.git
synced 2025-08-18 13:48:58 +02:00
fix: decouple metrics from ofter-read table
Signed-off-by: andreas-unleash <andreas@getunleash.ai>
This commit is contained in:
parent
12d9297f68
commit
db6dd27d04
@ -507,6 +507,11 @@ class FeatureStrategiesStore implements IFeatureStrategiesStore {
|
|||||||
'feature_environments.feature_name',
|
'feature_environments.feature_name',
|
||||||
'features.name',
|
'features.name',
|
||||||
)
|
)
|
||||||
|
.leftJoin(
|
||||||
|
'feature_environments_metrics',
|
||||||
|
'feature_environments_metrics.feature_name',
|
||||||
|
'features.name',
|
||||||
|
)
|
||||||
.leftJoin(
|
.leftJoin(
|
||||||
'environments',
|
'environments',
|
||||||
'feature_environments.environment',
|
'feature_environments.environment',
|
||||||
@ -525,7 +530,7 @@ class FeatureStrategiesStore implements IFeatureStrategiesStore {
|
|||||||
'feature_environments.enabled as enabled',
|
'feature_environments.enabled as enabled',
|
||||||
'feature_environments.environment as environment',
|
'feature_environments.environment as environment',
|
||||||
'feature_environments.variants as variants',
|
'feature_environments.variants as variants',
|
||||||
'feature_environments.last_seen_at as env_last_seen_at',
|
'feature_environments_metrics.last_seen_at as env_last_seen_at',
|
||||||
'environments.type as environment_type',
|
'environments.type as environment_type',
|
||||||
'environments.sort_order as environment_sort_order',
|
'environments.sort_order as environment_sort_order',
|
||||||
'ft.tag_value as tag_value',
|
'ft.tag_value as tag_value',
|
||||||
|
@ -42,6 +42,7 @@ interface VariantDTO {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const TABLE = 'features';
|
const TABLE = 'features';
|
||||||
|
const FEATURE_ENVIRONMENTS_METRICS_TABLE = 'feature_environments_metrics';
|
||||||
const FEATURE_ENVIRONMENTS_TABLE = 'feature_environments';
|
const FEATURE_ENVIRONMENTS_TABLE = 'feature_environments';
|
||||||
|
|
||||||
export default class FeatureToggleStore implements IFeatureToggleStore {
|
export default class FeatureToggleStore implements IFeatureToggleStore {
|
||||||
@ -175,12 +176,12 @@ export default class FeatureToggleStore implements IFeatureToggleStore {
|
|||||||
try {
|
try {
|
||||||
for (const env of Object.keys(environmentArrays)) {
|
for (const env of Object.keys(environmentArrays)) {
|
||||||
const toggleNames = environmentArrays[env].sort();
|
const toggleNames = environmentArrays[env].sort();
|
||||||
await this.db(FEATURE_ENVIRONMENTS_TABLE)
|
await this.db(FEATURE_ENVIRONMENTS_METRICS_TABLE)
|
||||||
.update({ last_seen_at: now })
|
.update({ last_seen_at: now })
|
||||||
.where('environment', env)
|
.where('environment', env)
|
||||||
.whereIn(
|
.whereIn(
|
||||||
'feature_name',
|
'feature_name',
|
||||||
this.db(FEATURE_ENVIRONMENTS_TABLE)
|
this.db(FEATURE_ENVIRONMENTS_METRICS_TABLE)
|
||||||
.select('feature_name')
|
.select('feature_name')
|
||||||
.whereIn('feature_name', toggleNames)
|
.whereIn('feature_name', toggleNames)
|
||||||
.forUpdate()
|
.forUpdate()
|
||||||
|
@ -0,0 +1,110 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
exports.up = function (db, cb) {
|
||||||
|
db.runSql(
|
||||||
|
`
|
||||||
|
CREATE TABLE IF NOT EXISTS feature_environments_metrics(
|
||||||
|
environment varchar(100) not null
|
||||||
|
references environments(name)
|
||||||
|
on delete cascade,
|
||||||
|
feature_name varchar(255) not null
|
||||||
|
references features(name)
|
||||||
|
on delete cascade,
|
||||||
|
last_seen_at timestamp with time zone,
|
||||||
|
primary key (environment, feature_name)
|
||||||
|
);
|
||||||
|
|
||||||
|
INSERT INTO feature_environments_metrics (environment, feature_name, last_seen_at)
|
||||||
|
SELECT
|
||||||
|
feature_environments.environment,
|
||||||
|
feature_environments.feature_name,
|
||||||
|
feature_environments.last_seen_at
|
||||||
|
FROM feature_environments
|
||||||
|
ON CONFLICT (environment, feature_name)
|
||||||
|
DO NOTHING;
|
||||||
|
|
||||||
|
DROP VIEW features_view;
|
||||||
|
|
||||||
|
CREATE VIEW features_view AS
|
||||||
|
SELECT features.name as name,
|
||||||
|
features.description as description,
|
||||||
|
features.type as type,
|
||||||
|
features.project as project,
|
||||||
|
features.stale as stale,
|
||||||
|
features.impression_data as impression_data,
|
||||||
|
features.created_at as created_at,
|
||||||
|
features.archived_at as archived_at,
|
||||||
|
features.last_seen_at as last_seen_at,
|
||||||
|
feature_environments_metrics.last_seen_at as env_last_seen_at,
|
||||||
|
feature_environments.enabled as enabled,
|
||||||
|
feature_environments.environment as environment,
|
||||||
|
feature_environments.variants as variants,
|
||||||
|
environments.name as environment_name,
|
||||||
|
environments.type as environment_type,
|
||||||
|
environments.sort_order as environment_sort_order,
|
||||||
|
feature_strategies.id as strategy_id,
|
||||||
|
feature_strategies.strategy_name as strategy_name,
|
||||||
|
feature_strategies.parameters as parameters,
|
||||||
|
feature_strategies.constraints as constraints,
|
||||||
|
feature_strategies.sort_order as sort_order,
|
||||||
|
fss.segment_id as segments,
|
||||||
|
feature_strategies.title as strategy_title,
|
||||||
|
feature_strategies.disabled as strategy_disabled,
|
||||||
|
feature_strategies.variants as strategy_variants
|
||||||
|
FROM features
|
||||||
|
LEFT JOIN feature_environments ON feature_environments.feature_name = features.name
|
||||||
|
LEFT JOIN feature_environments_metrics ON feature_environments_metrics.feature_name = features.name
|
||||||
|
LEFT JOIN feature_strategies ON feature_strategies.feature_name = feature_environments.feature_name
|
||||||
|
and feature_strategies.environment = feature_environments.environment
|
||||||
|
LEFT JOIN environments ON feature_environments.environment = environments.name
|
||||||
|
LEFT JOIN feature_strategy_segment as fss ON fss.feature_strategy_id = feature_strategies.id;
|
||||||
|
`,
|
||||||
|
cb(),
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.down = function (db, cb) {
|
||||||
|
db.runSql(
|
||||||
|
`
|
||||||
|
DROP VIEW features_view;
|
||||||
|
|
||||||
|
CREATE VIEW features_view AS
|
||||||
|
SELECT
|
||||||
|
features.name as name,
|
||||||
|
features.description as description,
|
||||||
|
features.type as type,
|
||||||
|
features.project as project,
|
||||||
|
features.stale as stale,
|
||||||
|
features.impression_data as impression_data,
|
||||||
|
features.created_at as created_at,
|
||||||
|
features.archived_at as archived_at,
|
||||||
|
features.last_seen_at as last_seen_at,
|
||||||
|
feature_environments.last_seen_at as env_last_seen_at,
|
||||||
|
feature_environments.enabled as enabled,
|
||||||
|
feature_environments.environment as environment,
|
||||||
|
feature_environments.variants as variants,
|
||||||
|
environments.name as environment_name,
|
||||||
|
environments.type as environment_type,
|
||||||
|
environments.sort_order as environment_sort_order,
|
||||||
|
feature_strategies.id as strategy_id,
|
||||||
|
feature_strategies.strategy_name as strategy_name,
|
||||||
|
feature_strategies.parameters as parameters,
|
||||||
|
feature_strategies.constraints as constraints,
|
||||||
|
feature_strategies.sort_order as sort_order,
|
||||||
|
fss.segment_id as segments,
|
||||||
|
feature_strategies.title as strategy_title,
|
||||||
|
feature_strategies.disabled as strategy_disabled,
|
||||||
|
feature_strategies.variants as strategy_variants
|
||||||
|
FROM
|
||||||
|
features
|
||||||
|
LEFT JOIN feature_environments ON feature_environments.feature_name = features.name
|
||||||
|
LEFT JOIN feature_strategies ON feature_strategies.feature_name = feature_environments.feature_name
|
||||||
|
and feature_strategies.environment = feature_environments.environment
|
||||||
|
LEFT JOIN environments ON feature_environments.environment = environments.name
|
||||||
|
LEFT JOIN feature_strategy_segment as fss ON fss.feature_strategy_id = feature_strategies.id;
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS feature_environments_metrics
|
||||||
|
`,
|
||||||
|
cb,
|
||||||
|
);
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user