Merge pull request #7880 from Budibase/feature/license-analytics

License analytics
This commit is contained in:
Rory Powell 2022-09-21 15:56:45 +01:00 committed by GitHub
commit 0cef5ff3c6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 116 additions and 25 deletions

View File

@ -23,9 +23,11 @@ export default class LoggingProcessor implements EventProcessor {
return return
} }
let timestampString = getTimestampString(timestamp) let timestampString = getTimestampString(timestamp)
console.log( let message = `[audit] [tenant=${identity.tenantId}] [identityType=${identity.type}] [identity=${identity.id}] ${timestampString} ${event} `
`[audit] [tenant=${identity.tenantId}] [identityType=${identity.type}] [identity=${identity.id}] ${timestampString} ${event} ` if (env.isDev()) {
) message = message + `[debug: [properties=${JSON.stringify(properties)}] ]`
}
console.log(message)
} }
async identify(identity: Identity, timestamp?: string | number) { async identify(identity: Identity, timestamp?: string | number) {

View File

@ -1,27 +1,78 @@
import { publishEvent } from "../events" import { publishEvent } from "../events"
import { import {
Event, Event,
License,
LicenseActivatedEvent, LicenseActivatedEvent,
LicenseDowngradedEvent, LicensePlanChangedEvent,
LicenseUpdatedEvent, LicenseTierChangedEvent,
LicenseUpgradedEvent, PlanType,
Account,
LicensePortalOpenedEvent,
LicenseCheckoutSuccessEvent,
LicenseCheckoutOpenedEvent,
LicensePaymentFailedEvent,
LicensePaymentRecoveredEvent,
} from "@budibase/types" } from "@budibase/types"
// TODO export async function tierChanged(account: Account, from: number, to: number) {
export async function updgraded(license: License) { const properties: LicenseTierChangedEvent = {
const properties: LicenseUpgradedEvent = {} accountId: account.accountId,
await publishEvent(Event.LICENSE_UPGRADED, properties) to,
from,
}
await publishEvent(Event.LICENSE_TIER_CHANGED, properties)
} }
// TODO export async function planChanged(
export async function downgraded(license: License) { account: Account,
const properties: LicenseDowngradedEvent = {} from: PlanType,
await publishEvent(Event.LICENSE_DOWNGRADED, properties) to: PlanType
) {
const properties: LicensePlanChangedEvent = {
accountId: account.accountId,
to,
from,
}
await publishEvent(Event.LICENSE_PLAN_CHANGED, properties)
} }
// TODO export async function activated(account: Account) {
export async function activated(license: License) { const properties: LicenseActivatedEvent = {
const properties: LicenseActivatedEvent = {} accountId: account.accountId,
}
await publishEvent(Event.LICENSE_ACTIVATED, properties) await publishEvent(Event.LICENSE_ACTIVATED, properties)
} }
export async function checkoutOpened(account: Account) {
const properties: LicenseCheckoutOpenedEvent = {
accountId: account.accountId,
}
await publishEvent(Event.LICENSE_CHECKOUT_OPENED, properties)
}
export async function checkoutSuccess(account: Account) {
const properties: LicenseCheckoutSuccessEvent = {
accountId: account.accountId,
}
await publishEvent(Event.LICENSE_CHECKOUT_SUCCESS, properties)
}
export async function portalOpened(account: Account) {
const properties: LicensePortalOpenedEvent = {
accountId: account.accountId,
}
await publishEvent(Event.LICENSE_PORTAL_OPENED, properties)
}
export async function paymentFailed(account: Account) {
const properties: LicensePaymentFailedEvent = {
accountId: account.accountId,
}
await publishEvent(Event.LICENSE_PAYMENT_FAILED, properties)
}
export async function paymentRecovered(account: Account) {
const properties: LicensePaymentRecoveredEvent = {
accountId: account.accountId,
}
await publishEvent(Event.LICENSE_PAYMENT_RECOVERED, properties)
}

View File

@ -5,10 +5,12 @@ const { doInAppContext } = require("@budibase/backend-core/context")
const { doInTenant } = require("@budibase/backend-core/tenancy") const { doInTenant } = require("@budibase/backend-core/tenancy")
const { const {
quotas, quotas,
} = require("@budibase/pro")
const {
QuotaUsageType, QuotaUsageType,
StaticQuotaName, StaticQuotaName,
MonthlyQuotaName, MonthlyQuotaName,
} = require("@budibase/pro") } = require("@budibase/types")
describe("/rows", () => { describe("/rows", () => {
let request = setup.getRequest() let request = setup.getRequest()

View File

@ -37,6 +37,7 @@ export interface Account extends CreateAccount {
// licensing // licensing
tier: string // deprecated tier: string // deprecated
planType?: PlanType planType?: PlanType
planTier?: number
stripeCustomerId?: string stripeCustomerId?: string
licenseKey?: string licenseKey?: string
licenseKeyActivatedAt?: number licenseKeyActivatedAt?: number

View File

@ -133,9 +133,14 @@ export enum Event {
AUTOMATION_TRIGGER_UPDATED = "automation:trigger:updated", AUTOMATION_TRIGGER_UPDATED = "automation:trigger:updated",
// LICENSE // LICENSE
LICENSE_UPGRADED = "license:upgraded", LICENSE_PLAN_CHANGED = "license:plan:changed",
LICENSE_DOWNGRADED = "license:downgraded", LICENSE_TIER_CHANGED = "license:tier:changed",
LICENSE_ACTIVATED = "license:activated", LICENSE_ACTIVATED = "license:activated",
LICENSE_PAYMENT_FAILED = "license:payment:failed",
LICENSE_PAYMENT_RECOVERED = "license:payment:recovered",
LICENSE_CHECKOUT_OPENED = "license:checkout:opened",
LICENSE_CHECKOUT_SUCCESS = "license:checkout:success",
LICENSE_PORTAL_OPENED = "license:portal:opened",
// ACCOUNT // ACCOUNT
ACCOUNT_CREATED = "account:created", ACCOUNT_CREATED = "account:created",

View File

@ -1,7 +1,37 @@
export interface LicenseUpgradedEvent {} import { PlanType } from "../licensing"
export interface LicenseDowngradedEvent {} export interface LicenseTierChangedEvent {
accountId: string
from: number
to: number
}
export interface LicenseUpdatedEvent {} export interface LicensePlanChangedEvent {
accountId: string
from: PlanType
to: PlanType
}
export interface LicenseActivatedEvent {} export interface LicenseActivatedEvent {
accountId: string
}
export interface LicenseCheckoutOpenedEvent {
accountId: string
}
export interface LicenseCheckoutSuccessEvent {
accountId: string
}
export interface LicensePortalOpenedEvent {
accountId: string
}
export interface LicensePaymentFailedEvent {
accountId: string
}
export interface LicensePaymentRecoveredEvent {
accountId: string
}