Add deployment environment to identities

This commit is contained in:
Rory Powell 2022-06-15 11:46:03 +01:00
parent 2d83d5c79a
commit 6cc2bbadd7
3 changed files with 24 additions and 3 deletions

View File

@ -35,6 +35,7 @@ const pkg = require("../../package.json")
*/ */
export const getCurrentIdentity = async (): Promise<Identity> => { export const getCurrentIdentity = async (): Promise<Identity> => {
let identityContext = identityCtx.getIdentity() let identityContext = identityCtx.getIdentity()
const environment = getDeploymentEnvironment()
let identityType let identityType
@ -52,6 +53,7 @@ export const getCurrentIdentity = async (): Promise<Identity> => {
hosting, hosting,
type: identityType, type: identityType,
installationId, installationId,
environment,
} }
} else if (identityType === IdentityType.TENANT) { } else if (identityType === IdentityType.TENANT) {
const installationId = await getInstallationId() const installationId = await getInstallationId()
@ -64,6 +66,7 @@ export const getCurrentIdentity = async (): Promise<Identity> => {
hosting, hosting,
installationId, installationId,
tenantId, tenantId,
environment,
} }
} else if (identityType === IdentityType.USER) { } else if (identityType === IdentityType.USER) {
const userContext = identityContext as UserContext const userContext = identityContext as UserContext
@ -84,6 +87,7 @@ export const getCurrentIdentity = async (): Promise<Identity> => {
hosting, hosting,
installationId, installationId,
tenantId, tenantId,
environment,
} }
} else { } else {
throw new Error("Unknown identity type") throw new Error("Unknown identity type")
@ -98,12 +102,14 @@ export const identifyInstallationGroup = async (
const type = IdentityType.INSTALLATION const type = IdentityType.INSTALLATION
const hosting = getHostingFromEnv() const hosting = getHostingFromEnv()
const version = pkg.version const version = pkg.version
const environment = getDeploymentEnvironment()
const group: InstallationGroup = { const group: InstallationGroup = {
id, id,
type, type,
hosting, hosting,
version, version,
environment,
} }
await identifyGroup(group, timestamp) await identifyGroup(group, timestamp)
@ -120,6 +126,7 @@ export const identifyTenantGroup = async (
const id = await getEventTenantId(tenantId) const id = await getEventTenantId(tenantId)
const type = IdentityType.TENANT const type = IdentityType.TENANT
const installationId = await getInstallationId() const installationId = await getInstallationId()
const environment = getDeploymentEnvironment()
let hosting: Hosting let hosting: Hosting
let profession: string | undefined let profession: string | undefined
@ -137,6 +144,7 @@ export const identifyTenantGroup = async (
id, id,
type, type,
hosting, hosting,
environment,
installationId, installationId,
profession, profession,
companySize, companySize,
@ -164,6 +172,7 @@ export const identifyUser = async (
account && account?.budibaseUserId === user._id ? account.verified : false account && account?.budibaseUserId === user._id ? account.verified : false
const installationId = await getInstallationId() const installationId = await getInstallationId()
const hosting = account ? account.hosting : getHostingFromEnv() const hosting = account ? account.hosting : getHostingFromEnv()
const environment = getDeploymentEnvironment()
const identity: UserIdentity = { const identity: UserIdentity = {
id, id,
@ -176,6 +185,7 @@ export const identifyUser = async (
providerType, providerType,
builder, builder,
admin, admin,
environment,
} }
await identify(identity, timestamp) await identify(identity, timestamp)
@ -190,6 +200,7 @@ export const identifyAccount = async (account: Account) => {
const accountHolder = true const accountHolder = true
const hosting = account.hosting const hosting = account.hosting
const installationId = await getInstallationId() const installationId = await getInstallationId()
const environment = getDeploymentEnvironment()
if (isCloudAccount(account)) { if (isCloudAccount(account)) {
if (account.budibaseUserId) { if (account.budibaseUserId) {
@ -207,6 +218,7 @@ export const identifyAccount = async (account: Account) => {
providerType, providerType,
verified, verified,
accountHolder, accountHolder,
environment,
} }
await identify(identity) await identify(identity)
@ -226,6 +238,14 @@ export const identifyGroup = async (
await processors.identifyGroup(group, timestamp) await processors.identifyGroup(group, timestamp)
} }
const getDeploymentEnvironment = () => {
if (env.isDev()) {
return "development"
} else {
return env.DEPLOYMENT_ENVIRONMENT
}
}
const getHostingFromEnv = () => { const getHostingFromEnv = () => {
return env.SELF_HOSTED ? Hosting.SELF : Hosting.CLOUD return env.SELF_HOSTED ? Hosting.SELF : Hosting.CLOUD
} }

View File

@ -23,7 +23,7 @@ export default class PosthogProcessor implements EventProcessor {
): Promise<void> { ): Promise<void> {
properties.version = pkg.version properties.version = pkg.version
properties.service = env.SERVICE properties.service = env.SERVICE
properties.environment = env.DEPLOYMENT_ENVIRONMENT properties.environment = identity.environment
properties.hosting = identity.hosting properties.hosting = identity.hosting
const appId = context.getAppId() const appId = context.getAppId()

View File

@ -10,6 +10,8 @@ export enum GroupType {
export interface Group { export interface Group {
id: string id: string
type: IdentityType type: IdentityType
environment: string
hosting: Hosting
} }
export interface TenantGroup extends Group { export interface TenantGroup extends Group {
@ -17,13 +19,11 @@ export interface TenantGroup extends Group {
// as we don't have this at the user level // as we don't have this at the user level
profession?: string // only available in cloud profession?: string // only available in cloud
companySize?: string // only available in cloud companySize?: string // only available in cloud
hosting: Hosting // need hosting at the tenant level for cloud self host accounts
installationId: string installationId: string
} }
export interface InstallationGroup extends Group { export interface InstallationGroup extends Group {
version: string version: string
hosting: Hosting
} }
// IDENTITIES // IDENTITIES
@ -38,6 +38,7 @@ export interface Identity {
id: string id: string
type: IdentityType type: IdentityType
hosting: Hosting hosting: Hosting
environment: string
installationId?: string installationId?: string
tenantId?: string tenantId?: string
} }