mirror of
https://github.com/Unleash/unleash.git
synced 2025-03-18 00:19:49 +01:00
feat: expose postgres version (#7041)
Adds a postgres_version gauge to allow us to see postgres_version in prometheus and to post it upstream when version checking. Depends on https://github.com/bricks-software/version-function/pull/20 to be merged first to ensure our version-function doesn't crash when given the postgres-version data.
This commit is contained in:
parent
dfc065500d
commit
8aa0616698
@ -14,6 +14,16 @@ export default class SettingStore implements ISettingStore {
|
||||
this.logger = getLogger('settings-store.ts');
|
||||
}
|
||||
|
||||
async postgresVersion(): Promise<string> {
|
||||
try {
|
||||
const showResult = await this.db.raw('SHOW server_version');
|
||||
return showResult?.rows[0]?.server_version || '';
|
||||
} catch (e) {
|
||||
this.logger.warn('Failed to fetch postgres version', e);
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
async updateRow(name: string, content: any): Promise<void> {
|
||||
return this.db(TABLE)
|
||||
.where('name', name)
|
||||
|
@ -21,7 +21,7 @@ import {
|
||||
PROJECT_ENVIRONMENT_REMOVED,
|
||||
} from './types/events';
|
||||
import type { IUnleashConfig } from './types/option';
|
||||
import type { IUnleashStores } from './types/stores';
|
||||
import type { ISettingStore, IUnleashStores } from './types/stores';
|
||||
import { hoursToMilliseconds, minutesToMilliseconds } from 'date-fns';
|
||||
import type { InstanceStatsService } from './features/instance-stats/instance-stats-service';
|
||||
import type { ValidatedClientMetrics } from './features/metrics/shared/schema';
|
||||
@ -651,7 +651,12 @@ export default class MetricsMonitor {
|
||||
projectEnvironmentsDisabled.increment({ project_id: project });
|
||||
});
|
||||
|
||||
await this.configureDbMetrics(db, eventBus, schedulerService);
|
||||
await this.configureDbMetrics(
|
||||
db,
|
||||
eventBus,
|
||||
schedulerService,
|
||||
stores.settingStore,
|
||||
);
|
||||
|
||||
return Promise.resolve();
|
||||
}
|
||||
@ -660,6 +665,7 @@ export default class MetricsMonitor {
|
||||
db: Knex,
|
||||
eventBus: EventEmitter,
|
||||
schedulerService: SchedulerService,
|
||||
settingStore: ISettingStore,
|
||||
): Promise<void> {
|
||||
if (db?.client) {
|
||||
const dbPoolMin = createGauge({
|
||||
@ -707,6 +713,13 @@ export default class MetricsMonitor {
|
||||
'registerPoolMetrics',
|
||||
0, // no jitter
|
||||
);
|
||||
const postgresVersion = await settingStore.postgresVersion();
|
||||
const database_version = createGauge({
|
||||
name: 'postgres_version',
|
||||
help: 'Which version of postgres is running (SHOW server_version)',
|
||||
labelNames: ['version'],
|
||||
});
|
||||
database_version.labels({ version: postgresVersion }).set(1);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -65,6 +65,7 @@ export interface IFeatureUsageInfo {
|
||||
productionChanges30: number;
|
||||
productionChanges60: number;
|
||||
productionChanges90: number;
|
||||
postgresVersion: string;
|
||||
}
|
||||
|
||||
export default class VersionService {
|
||||
@ -260,6 +261,7 @@ export default class VersionService {
|
||||
featureImports,
|
||||
userActive,
|
||||
productionChanges,
|
||||
postgresVersion,
|
||||
] = await Promise.all([
|
||||
this.featureToggleStore.count({
|
||||
archived: false,
|
||||
@ -282,6 +284,7 @@ export default class VersionService {
|
||||
this.eventStore.filteredCount({ type: FEATURES_IMPORTED }),
|
||||
this.userStats(),
|
||||
this.productionChanges(),
|
||||
this.postgresVersion(),
|
||||
]);
|
||||
const versionInfo = await this.getVersionInfo();
|
||||
const customStrategies =
|
||||
@ -315,6 +318,7 @@ export default class VersionService {
|
||||
productionChanges30: productionChanges.last30,
|
||||
productionChanges60: productionChanges.last60,
|
||||
productionChanges90: productionChanges.last90,
|
||||
postgresVersion,
|
||||
};
|
||||
return featureInfo;
|
||||
}
|
||||
@ -336,6 +340,10 @@ export default class VersionService {
|
||||
return this.getProductionChanges();
|
||||
}
|
||||
|
||||
async postgresVersion(): Promise<string> {
|
||||
return this.settingStore.postgresVersion();
|
||||
}
|
||||
|
||||
async hasOIDC(): Promise<boolean> {
|
||||
const settings = await this.settingStore.get<{ enabled: boolean }>(
|
||||
'unleash.enterprise.auth.oidc',
|
||||
|
@ -8,5 +8,6 @@ export interface ISettingInsert {
|
||||
export interface ISettingStore extends Store<any, string> {
|
||||
insert<T>(name: string, content: T): Promise<void>;
|
||||
updateRow(name: string, content: any): Promise<void>;
|
||||
postgresVersion(): Promise<string>;
|
||||
get<T>(name: string): Promise<T | undefined>;
|
||||
}
|
||||
|
4
src/test/fixtures/fake-setting-store.ts
vendored
4
src/test/fixtures/fake-setting-store.ts
vendored
@ -38,4 +38,8 @@ export default class FakeSettingStore implements ISettingStore {
|
||||
async updateRow(name: string, content: any): Promise<void> {
|
||||
this.settings.set(name, content);
|
||||
}
|
||||
|
||||
async postgresVersion(): Promise<string> {
|
||||
return Promise.resolve('fake-postgres-version');
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user