diff --git a/packages/_infra/src/analytics/edge.analytics.ts b/packages/_infra/src/analytics/edge.analytics.ts index e5e338c94..977ba7182 100644 --- a/packages/_infra/src/analytics/edge.analytics.ts +++ b/packages/_infra/src/analytics/edge.analytics.ts @@ -7,6 +7,8 @@ import { RetentionDays } from 'aws-cdk-lib/aws-logs'; import { BlockPublicAccess, Bucket } from 'aws-cdk-lib/aws-s3'; import { Construct } from 'constructs'; +import { getConfig } from '../config.js'; + const CodePath = '../lambda-analytics/dist'; const CodePathV2 = '../lambda-analytics-cloudfront/dist'; @@ -68,6 +70,7 @@ export class EdgeAnalytics extends Stack { [Env.Analytics.MaxRecords]: String(24 * 7 * 4), [Env.Analytics.ElasticId]: Env.get(Env.Analytics.ElasticId) ?? '', [Env.Analytics.ElasticApiKey]: Env.get(Env.Analytics.ElasticApiKey) ?? '', + [Env.Analytics.ElasticIndexName]: getConfig().ElasticHistoryIndexName, AWS_NODEJS_CONNECTION_REUSE_ENABLED: '1', }, logRetention: RetentionDays.ONE_MONTH, diff --git a/packages/_infra/src/config.ts b/packages/_infra/src/config.ts index c82ab41a6..91662fb55 100644 --- a/packages/_infra/src/config.ts +++ b/packages/_infra/src/config.ts @@ -12,6 +12,9 @@ export interface BaseMapsConfig { /** AWS role config bucket */ AwsRoleConfigBucket: string; + + /** Elastic Index to use for basemaps history data */ + ElasticHistoryIndexName: string; } export const BaseMapsProdConfig: BaseMapsConfig = { @@ -26,6 +29,7 @@ export const BaseMapsProdConfig: BaseMapsConfig = { CloudFrontDns: ['basemaps.linz.govt.nz', 'tiles.basemaps.linz.govt.nz'], PublicUrlBase: 'https://basemaps.linz.govt.nz', AwsRoleConfigBucket: 'linz-bucket-config', + ElasticHistoryIndexName: 'basemaps-history', }; export const BaseMapsDevConfig: BaseMapsConfig = { @@ -33,6 +37,7 @@ export const BaseMapsDevConfig: BaseMapsConfig = { CloudFrontDns: ['dev.basemaps.linz.govt.nz', 'tiles.dev.basemaps.linz.govt.nz'], PublicUrlBase: 'https://dev.basemaps.linz.govt.nz', AwsRoleConfigBucket: 'linz-bucket-config', + ElasticHistoryIndexName: 'nonprod-basemaps-history', }; /** Is this deployment intended for production */ export const IsProduction = process.env['NODE_ENV'] === 'production'; diff --git a/packages/lambda-analytic-cloudfront/src/elastic.ts b/packages/lambda-analytic-cloudfront/src/elastic.ts index 5da2877e4..5f877519d 100644 --- a/packages/lambda-analytic-cloudfront/src/elastic.ts +++ b/packages/lambda-analytic-cloudfront/src/elastic.ts @@ -17,6 +17,12 @@ export class ElasticClient { */ minRequestCount: number = 1; + get indexName(): string { + const indexName = Env.get(Env.Analytics.ElasticIndexName); + if (indexName == null) throw new Error(`$${Env.Analytics.ElasticIndexName} is unset`); + return indexName; + } + get client(): Client { if (this._client != null) return this._client; @@ -46,6 +52,7 @@ export class ElasticClient { const errors = this.errors; const indexDelay = this.indexDelay; + const indexName = this.indexName; async function doInsert(): Promise { inserts += operations.length / 2; @@ -67,7 +74,7 @@ export class ElasticClient { skipHits++; continue; } - operations.push({ index: { _index: 'basemaps-history-' + rec['@timestamp'].slice(0, 4), _id: rec.id } }, rec); + operations.push({ index: { _index: indexName + '-' + rec['@timestamp'].slice(0, 4), _id: rec.id } }, rec); if (operations.length > 50_000) await doInsert(); } diff --git a/packages/shared/src/const.ts b/packages/shared/src/const.ts index 0ad4d4942..1f3f35a9d 100644 --- a/packages/shared/src/const.ts +++ b/packages/shared/src/const.ts @@ -64,6 +64,8 @@ export const Env = { ElasticId: 'ELASTIC_ID', /** ElasticSearch's API key */ ElasticApiKey: 'ELASTIC_API_KEY', + /** Index to use for storing analytic data */ + ElasticIndexName: 'ELASTIC_INDEX_NAME', } as const, /** Load a environment var defaulting to defaultOutput if it does not exist */