@@ -68,6 +68,9 @@ export type LimitsResult = {
6868 batchProcessingConcurrency : QuotaInfo ;
6969 devQueueSize : QuotaInfo ;
7070 deployedQueueSize : QuotaInfo ;
71+ metricDashboards : QuotaInfo | null ;
72+ metricWidgetsPerDashboard : QuotaInfo | null ;
73+ queryPeriodDays : QuotaInfo | null ;
7174 } ;
7275 features : {
7376 hasStagingEnvironment : FeatureInfo ;
@@ -155,6 +158,11 @@ export class LimitsPresenter extends BasePresenter {
155158 } ,
156159 } ) ;
157160
161+ // Get metric dashboard count for this org
162+ const metricDashboardCount = await this . _replica . metricsDashboard . count ( {
163+ where : { organizationId } ,
164+ } ) ;
165+
158166 // Get current rate limit tokens for this environment's API key
159167 const apiRateLimitTokens = await getRateLimitRemainingTokens (
160168 "api" ,
@@ -174,6 +182,9 @@ export class LimitsPresenter extends BasePresenter {
174182 const branchesLimit = limits ?. branches ?. number ?? null ;
175183 const logRetentionDaysLimit = limits ?. logRetentionDays ?. number ?? null ;
176184 const realtimeConnectionsLimit = limits ?. realtimeConcurrentConnections ?. number ?? null ;
185+ const metricDashboardsLimit = limits ?. metricDashboards ?. number ?? null ;
186+ const metricWidgetsPerDashboardLimit = limits ?. metricWidgetsPerDashboard ?. number ?? null ;
187+ const queryPeriodDaysLimit = limits ?. queryPeriodDays ?. number ?? null ;
177188 const includedUsage = limits ?. includedUsage ?? null ;
178189 const hasStagingEnvironment = limits ?. hasStagingEnvironment ?? false ;
179190 const supportLevel = limits ?. support ?? "community" ;
@@ -296,6 +307,40 @@ export class LimitsPresenter extends BasePresenter {
296307 currentUsage : 0 , // Would need to query Redis for this
297308 source : organization . maximumDeployedQueueSize ? "override" : "default" ,
298309 } ,
310+ metricDashboards :
311+ metricDashboardsLimit !== null
312+ ? {
313+ name : "Metric dashboards" ,
314+ description : "Maximum number of custom metric dashboards per organization" ,
315+ limit : metricDashboardsLimit ,
316+ currentUsage : metricDashboardCount ,
317+ source : "plan" ,
318+ canExceed : limits ?. metricDashboards ?. canExceed ,
319+ isUpgradable : true ,
320+ }
321+ : null ,
322+ metricWidgetsPerDashboard :
323+ metricWidgetsPerDashboardLimit !== null
324+ ? {
325+ name : "Charts per dashboard" ,
326+ description : "Maximum number of charts per metrics dashboard" ,
327+ limit : metricWidgetsPerDashboardLimit ,
328+ currentUsage : 0 , // Varies per dashboard
329+ source : "plan" ,
330+ canExceed : limits ?. metricWidgetsPerDashboard ?. canExceed ,
331+ isUpgradable : true ,
332+ }
333+ : null ,
334+ queryPeriodDays :
335+ queryPeriodDaysLimit !== null
336+ ? {
337+ name : "Query period" ,
338+ description : "Maximum number of days a query can look back" ,
339+ limit : queryPeriodDaysLimit ,
340+ currentUsage : 0 , // Not applicable - this is a duration, not a count
341+ source : "plan" ,
342+ }
343+ : null ,
299344 } ,
300345 features : {
301346 hasStagingEnvironment : {
0 commit comments