| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- import { PricingMetric } from '@/data/analytics/org-daily-stats-query'
- const pricingMetricBytes = [
- PricingMetric.DATABASE_SIZE,
- PricingMetric.EGRESS,
- PricingMetric.CACHED_EGRESS,
- PricingMetric.STORAGE_SIZE,
- ]
- const pricingMetricNotHrs = [
- PricingMetric.FUNCTION_INVOCATIONS,
- PricingMetric.LOG_DRAIN_EVENTS,
- PricingMetric.MONTHLY_ACTIVE_USERS,
- PricingMetric.MONTHLY_ACTIVE_SSO_USERS,
- PricingMetric.MONTHLY_ACTIVE_THIRD_PARTY_USERS,
- PricingMetric.REALTIME_MESSAGE_COUNT,
- PricingMetric.REALTIME_PEAK_CONNECTIONS,
- PricingMetric.STORAGE_IMAGES_TRANSFORMED,
- ]
- export const formatUsage = (
- pricingMetric: PricingMetric,
- allocation: { usage: number; hours?: number }
- ) => {
- if (pricingMetricBytes.includes(pricingMetric)) {
- const formattedUsage = +(allocation.usage / 1e9).toFixed(2).toLocaleString()
- // To avoid very low usage displaying as "0", we will show "<0.01" instead
- if (allocation.usage > 0 && formattedUsage === 0) {
- return '<0.01'
- } else {
- return formattedUsage
- }
- }
- if (allocation.hours && !pricingMetricNotHrs.includes(pricingMetric)) {
- return (
- allocation.usage.toLocaleString() +
- ' (' +
- Math.round(allocation.usage / allocation.hours).toLocaleString() +
- 'x' +
- allocation.hours.toLocaleString() +
- ' hours)'
- )
- } else {
- return allocation.usage.toLocaleString()
- }
- }
- export const billingMetricUnit = (pricingMetric: PricingMetric) => {
- if (pricingMetricBytes.includes(pricingMetric)) {
- return 'GB'
- } else if (
- pricingMetric.startsWith('COMPUTE_HOURS') ||
- [
- PricingMetric.CUSTOM_DOMAIN,
- PricingMetric.IPV4,
- PricingMetric.PITR_7,
- PricingMetric.PITR_14,
- PricingMetric.PITR_28,
- PricingMetric.LOG_DRAIN,
- PricingMetric.AUTH_MFA_PHONE,
- PricingMetric.AUTH_MFA_WEB_AUTHN,
- ].includes(pricingMetric)
- ) {
- return 'Hours'
- } else {
- return null
- }
- }
- export const generateUpgradeReasons = (originalPlan?: string | null, upgradedPlan?: string) => {
- const reasons = [
- 'Current plan limits are not enough for me',
- 'I want better customer support from Briven',
- 'I am migrating from a previous project',
- ]
- if (originalPlan === undefined || upgradedPlan === undefined) {
- reasons.push('None of the above')
- return reasons
- }
- if (originalPlan === 'free' && upgradedPlan === 'pro') {
- reasons.push('Need more compute')
- reasons.push(
- 'I want access to additional features like branching, daily backups, custom domain and PITR'
- )
- } else if (upgradedPlan === 'team') {
- reasons.push('I want access to SOC2 and HIPAA compliance')
- }
- reasons.push('None of the above')
- return reasons
- }
|