From 36683459b8b940739b70febe9ba425898490522d Mon Sep 17 00:00:00 2001 From: mike12345567 Date: Mon, 6 Mar 2023 15:55:55 +0000 Subject: [PATCH] Updating metrics endpoint to have examples of expected data format - show OpenMetrics response. --- packages/server/specs/openapi.json | 23 ++- packages/server/specs/openapi.yaml | 159 +++++++++++++++++- .../server/specs/resources/application.ts | 11 ++ packages/server/specs/resources/index.ts | 2 + packages/server/specs/resources/metrics.ts | 81 +++++++++ .../src/api/controllers/public/metrics.ts | 2 +- .../server/src/api/routes/public/metrics.ts | 5 + packages/server/src/definitions/openapi.ts | 15 ++ 8 files changed, 295 insertions(+), 3 deletions(-) create mode 100644 packages/server/specs/resources/metrics.ts diff --git a/packages/server/specs/openapi.json b/packages/server/specs/openapi.json index 121828b21c..275c1af4f1 100644 --- a/packages/server/specs/openapi.json +++ b/packages/server/specs/openapi.json @@ -115,6 +115,15 @@ ] } }, + "deploymentOutput": { + "value": { + "data": { + "_id": "ef12381f934b4f129675cdbb76eff3c2", + "status": "SUCCESS", + "appUrl": "/app-url" + } + } + }, "inputRow": { "value": { "_id": "ro_ta_5b1649e42a5b41dea4ef7742a36a7a70_e6dc7e38cf1343b2b56760265201cda4", @@ -413,6 +422,9 @@ } ] } + }, + "metrics": { + "value": "# HELP budibase_os_uptime Time in seconds that the host operating system has been up.\n# TYPE budibase_os_uptime counter\nbudibase_os_uptime 54958\n# HELP budibase_os_free_mem Bytes of memory free for usage on the host operating system.\n# TYPE budibase_os_free_mem gauge\nbudibase_os_free_mem 804507648\n# HELP budibase_os_total_mem Total bytes of memory on the host operating system.\n# TYPE budibase_os_total_mem gauge\nbudibase_os_total_mem 16742404096\n# HELP budibase_os_used_mem Total bytes of memory in use on the host operating system.\n# TYPE budibase_os_used_mem gauge\nbudibase_os_used_mem 15937896448\n# HELP budibase_os_load1 Host operating system load average.\n# TYPE budibase_os_load1 gauge\nbudibase_os_load1 1.91\n# HELP budibase_os_load5 Host operating system load average.\n# TYPE budibase_os_load5 gauge\nbudibase_os_load5 1.75\n# HELP budibase_os_load15 Host operating system load average.\n# TYPE budibase_os_load15 gauge\nbudibase_os_load15 1.56\n# HELP budibase_tenant_user_count The number of users created.\n# TYPE budibase_tenant_user_count gauge\nbudibase_tenant_user_count 1\n# HELP budibase_tenant_app_count The number of apps created by a user.\n# TYPE budibase_tenant_app_count gauge\nbudibase_tenant_app_count 2\n# HELP budibase_tenant_production_app_count The number of apps a user has published.\n# TYPE budibase_tenant_production_app_count gauge\nbudibase_tenant_production_app_count 1\n# HELP budibase_tenant_dev_app_count The number of apps a user has unpublished in development.\n# TYPE budibase_tenant_dev_app_count gauge\nbudibase_tenant_dev_app_count 1\n# HELP budibase_tenant_db_count The number of couchdb databases including global tables such as _users.\n# TYPE budibase_tenant_db_count gauge\nbudibase_tenant_db_count 3\n# HELP budibase_quota_usage_apps The number of apps created.\n# TYPE budibase_quota_usage_apps gauge\nbudibase_quota_usage_apps 1\n# HELP budibase_quota_limit_apps The limit on the number of apps that can be created.\n# TYPE budibase_quota_limit_apps gauge\nbudibase_quota_limit_apps 9007199254740991\n# HELP budibase_quota_usage_rows The number of database rows used from the quota.\n# TYPE budibase_quota_usage_rows gauge\nbudibase_quota_usage_rows 0\n# HELP budibase_quota_limit_rows The limit on the number of rows that can be created.\n# TYPE budibase_quota_limit_rows gauge\nbudibase_quota_limit_rows 9007199254740991\n# HELP budibase_quota_usage_plugins The number of plugins in use.\n# TYPE budibase_quota_usage_plugins gauge\nbudibase_quota_usage_plugins 0\n# HELP budibase_quota_limit_plugins The limit on the number of plugins that can be created.\n# TYPE budibase_quota_limit_plugins gauge\nbudibase_quota_limit_plugins 9007199254740991\n# HELP budibase_quota_usage_user_groups The number of user groups created.\n# TYPE budibase_quota_usage_user_groups gauge\nbudibase_quota_usage_user_groups 0\n# HELP budibase_quota_limit_user_groups The limit on the number of user groups that can be created.\n# TYPE budibase_quota_limit_user_groups gauge\nbudibase_quota_limit_user_groups 9007199254740991\n# HELP budibase_quota_usage_queries The number of queries used in the current month.\n# TYPE budibase_quota_usage_queries gauge\nbudibase_quota_usage_queries 0\n# HELP budibase_quota_limit_queries The limit on the number of queries for the current month.\n# TYPE budibase_quota_limit_queries gauge\nbudibase_quota_limit_queries 9007199254740991\n# HELP budibase_quota_usage_automations The number of automations used in the current month.\n# TYPE budibase_quota_usage_automations gauge\nbudibase_quota_usage_automations 0\n# HELP budibase_quota_limit_automations The limit on the number of automations that can be created.\n# TYPE budibase_quota_limit_automations gauge\nbudibase_quota_limit_automations 9007199254740991\n" } }, "securitySchemes": { @@ -2066,7 +2078,16 @@ "200": { "description": "Returns tenant metrics.", "content": { - "text/plain": null + "text/plain": { + "schema": { + "type": "string" + }, + "examples": { + "metrics": { + "$ref": "#/components/examples/metrics" + } + } + } } } } diff --git a/packages/server/specs/openapi.yaml b/packages/server/specs/openapi.yaml index 3243959c65..5647872d6b 100644 --- a/packages/server/specs/openapi.yaml +++ b/packages/server/specs/openapi.yaml @@ -85,6 +85,12 @@ components: updatedAt: 2022-02-22T13:00:54.035Z createdAt: 2022-02-11T18:02:26.961Z status: development + deploymentOutput: + value: + data: + _id: ef12381f934b4f129675cdbb76eff3c2 + status: SUCCESS + appUrl: /app-url inputRow: value: _id: ro_ta_5b1649e42a5b41dea4ef7742a36a7a70_e6dc7e38cf1343b2b56760265201cda4 @@ -290,6 +296,152 @@ components: name: Admin permissionId: admin inherits: POWER + metrics: + value: > + # HELP budibase_os_uptime Time in seconds that the host operating system + has been up. + + # TYPE budibase_os_uptime counter + + budibase_os_uptime 54958 + + # HELP budibase_os_free_mem Bytes of memory free for usage on the host operating system. + + # TYPE budibase_os_free_mem gauge + + budibase_os_free_mem 804507648 + + # HELP budibase_os_total_mem Total bytes of memory on the host operating system. + + # TYPE budibase_os_total_mem gauge + + budibase_os_total_mem 16742404096 + + # HELP budibase_os_used_mem Total bytes of memory in use on the host operating system. + + # TYPE budibase_os_used_mem gauge + + budibase_os_used_mem 15937896448 + + # HELP budibase_os_load1 Host operating system load average. + + # TYPE budibase_os_load1 gauge + + budibase_os_load1 1.91 + + # HELP budibase_os_load5 Host operating system load average. + + # TYPE budibase_os_load5 gauge + + budibase_os_load5 1.75 + + # HELP budibase_os_load15 Host operating system load average. + + # TYPE budibase_os_load15 gauge + + budibase_os_load15 1.56 + + # HELP budibase_tenant_user_count The number of users created. + + # TYPE budibase_tenant_user_count gauge + + budibase_tenant_user_count 1 + + # HELP budibase_tenant_app_count The number of apps created by a user. + + # TYPE budibase_tenant_app_count gauge + + budibase_tenant_app_count 2 + + # HELP budibase_tenant_production_app_count The number of apps a user has published. + + # TYPE budibase_tenant_production_app_count gauge + + budibase_tenant_production_app_count 1 + + # HELP budibase_tenant_dev_app_count The number of apps a user has unpublished in development. + + # TYPE budibase_tenant_dev_app_count gauge + + budibase_tenant_dev_app_count 1 + + # HELP budibase_tenant_db_count The number of couchdb databases including global tables such as _users. + + # TYPE budibase_tenant_db_count gauge + + budibase_tenant_db_count 3 + + # HELP budibase_quota_usage_apps The number of apps created. + + # TYPE budibase_quota_usage_apps gauge + + budibase_quota_usage_apps 1 + + # HELP budibase_quota_limit_apps The limit on the number of apps that can be created. + + # TYPE budibase_quota_limit_apps gauge + + budibase_quota_limit_apps 9007199254740991 + + # HELP budibase_quota_usage_rows The number of database rows used from the quota. + + # TYPE budibase_quota_usage_rows gauge + + budibase_quota_usage_rows 0 + + # HELP budibase_quota_limit_rows The limit on the number of rows that can be created. + + # TYPE budibase_quota_limit_rows gauge + + budibase_quota_limit_rows 9007199254740991 + + # HELP budibase_quota_usage_plugins The number of plugins in use. + + # TYPE budibase_quota_usage_plugins gauge + + budibase_quota_usage_plugins 0 + + # HELP budibase_quota_limit_plugins The limit on the number of plugins that can be created. + + # TYPE budibase_quota_limit_plugins gauge + + budibase_quota_limit_plugins 9007199254740991 + + # HELP budibase_quota_usage_user_groups The number of user groups created. + + # TYPE budibase_quota_usage_user_groups gauge + + budibase_quota_usage_user_groups 0 + + # HELP budibase_quota_limit_user_groups The limit on the number of user groups that can be created. + + # TYPE budibase_quota_limit_user_groups gauge + + budibase_quota_limit_user_groups 9007199254740991 + + # HELP budibase_quota_usage_queries The number of queries used in the current month. + + # TYPE budibase_quota_usage_queries gauge + + budibase_quota_usage_queries 0 + + # HELP budibase_quota_limit_queries The limit on the number of queries for the current month. + + # TYPE budibase_quota_limit_queries gauge + + budibase_quota_limit_queries 9007199254740991 + + # HELP budibase_quota_usage_automations The number of automations used in the current month. + + # TYPE budibase_quota_usage_automations gauge + + budibase_quota_usage_automations 0 + + # HELP budibase_quota_limit_automations The limit on the number of automations that can be created. + + # TYPE budibase_quota_limit_automations gauge + + budibase_quota_limit_automations 9007199254740991 securitySchemes: ApiKeyAuth: type: apiKey @@ -1542,7 +1694,12 @@ paths: "200": description: Returns tenant metrics. content: - ? text/plain + text/plain: + schema: + type: string + examples: + metrics: + $ref: "#/components/examples/metrics" "/queries/{queryId}": post: operationId: queryExecute diff --git a/packages/server/specs/resources/application.ts b/packages/server/specs/resources/application.ts index aa037da154..cd7a68c049 100644 --- a/packages/server/specs/resources/application.ts +++ b/packages/server/specs/resources/application.ts @@ -15,6 +15,12 @@ const application = { lockedBy: userResource.getExamples().user.value.user, } +const deployment = { + _id: "ef12381f934b4f129675cdbb76eff3c2", + status: "SUCCESS", + appUrl: "/app-url", +} + const base = { name: { description: "The name of the app.", @@ -108,6 +114,11 @@ export default new Resource() data: [application], }, }, + deploymentOutput: { + value: { + data: deployment, + }, + }, }) .setSchemas({ application: applicationSchema, diff --git a/packages/server/specs/resources/index.ts b/packages/server/specs/resources/index.ts index f1729f4541..6b8a1aa437 100644 --- a/packages/server/specs/resources/index.ts +++ b/packages/server/specs/resources/index.ts @@ -3,6 +3,7 @@ import row from "./row" import table from "./table" import query from "./query" import user from "./user" +import metrics from "./metrics" import misc from "./misc" export const examples = { @@ -12,6 +13,7 @@ export const examples = { ...query.getExamples(), ...user.getExamples(), ...misc.getExamples(), + ...metrics.getExamples(), } export const schemas = { diff --git a/packages/server/specs/resources/metrics.ts b/packages/server/specs/resources/metrics.ts new file mode 100644 index 0000000000..1dfbe101d8 --- /dev/null +++ b/packages/server/specs/resources/metrics.ts @@ -0,0 +1,81 @@ +import Resource from "./utils/Resource" + +const metricsResponse = + "# HELP budibase_os_uptime Time in seconds that the host operating system has been up.\n" + + "# TYPE budibase_os_uptime counter\n" + + "budibase_os_uptime 54958\n" + + "# HELP budibase_os_free_mem Bytes of memory free for usage on the host operating system.\n" + + "# TYPE budibase_os_free_mem gauge\n" + + "budibase_os_free_mem 804507648\n" + + "# HELP budibase_os_total_mem Total bytes of memory on the host operating system.\n" + + "# TYPE budibase_os_total_mem gauge\n" + + "budibase_os_total_mem 16742404096\n" + + "# HELP budibase_os_used_mem Total bytes of memory in use on the host operating system.\n" + + "# TYPE budibase_os_used_mem gauge\n" + + "budibase_os_used_mem 15937896448\n" + + "# HELP budibase_os_load1 Host operating system load average.\n" + + "# TYPE budibase_os_load1 gauge\n" + + "budibase_os_load1 1.91\n" + + "# HELP budibase_os_load5 Host operating system load average.\n" + + "# TYPE budibase_os_load5 gauge\n" + + "budibase_os_load5 1.75\n" + + "# HELP budibase_os_load15 Host operating system load average.\n" + + "# TYPE budibase_os_load15 gauge\n" + + "budibase_os_load15 1.56\n" + + "# HELP budibase_tenant_user_count The number of users created.\n" + + "# TYPE budibase_tenant_user_count gauge\n" + + "budibase_tenant_user_count 1\n" + + "# HELP budibase_tenant_app_count The number of apps created by a user.\n" + + "# TYPE budibase_tenant_app_count gauge\n" + + "budibase_tenant_app_count 2\n" + + "# HELP budibase_tenant_production_app_count The number of apps a user has published.\n" + + "# TYPE budibase_tenant_production_app_count gauge\n" + + "budibase_tenant_production_app_count 1\n" + + "# HELP budibase_tenant_dev_app_count The number of apps a user has unpublished in development.\n" + + "# TYPE budibase_tenant_dev_app_count gauge\n" + + "budibase_tenant_dev_app_count 1\n" + + "# HELP budibase_tenant_db_count The number of couchdb databases including global tables such as _users.\n" + + "# TYPE budibase_tenant_db_count gauge\n" + + "budibase_tenant_db_count 3\n" + + "# HELP budibase_quota_usage_apps The number of apps created.\n" + + "# TYPE budibase_quota_usage_apps gauge\n" + + "budibase_quota_usage_apps 1\n" + + "# HELP budibase_quota_limit_apps The limit on the number of apps that can be created.\n" + + "# TYPE budibase_quota_limit_apps gauge\n" + + "budibase_quota_limit_apps 9007199254740991\n" + + "# HELP budibase_quota_usage_rows The number of database rows used from the quota.\n" + + "# TYPE budibase_quota_usage_rows gauge\n" + + "budibase_quota_usage_rows 0\n" + + "# HELP budibase_quota_limit_rows The limit on the number of rows that can be created.\n" + + "# TYPE budibase_quota_limit_rows gauge\n" + + "budibase_quota_limit_rows 9007199254740991\n" + + "# HELP budibase_quota_usage_plugins The number of plugins in use.\n" + + "# TYPE budibase_quota_usage_plugins gauge\n" + + "budibase_quota_usage_plugins 0\n" + + "# HELP budibase_quota_limit_plugins The limit on the number of plugins that can be created.\n" + + "# TYPE budibase_quota_limit_plugins gauge\n" + + "budibase_quota_limit_plugins 9007199254740991\n" + + "# HELP budibase_quota_usage_user_groups The number of user groups created.\n" + + "# TYPE budibase_quota_usage_user_groups gauge\n" + + "budibase_quota_usage_user_groups 0\n" + + "# HELP budibase_quota_limit_user_groups The limit on the number of user groups that can be created.\n" + + "# TYPE budibase_quota_limit_user_groups gauge\n" + + "budibase_quota_limit_user_groups 9007199254740991\n" + + "# HELP budibase_quota_usage_queries The number of queries used in the current month.\n" + + "# TYPE budibase_quota_usage_queries gauge\n" + + "budibase_quota_usage_queries 0\n" + + "# HELP budibase_quota_limit_queries The limit on the number of queries for the current month.\n" + + "# TYPE budibase_quota_limit_queries gauge\n" + + "budibase_quota_limit_queries 9007199254740991\n" + + "# HELP budibase_quota_usage_automations The number of automations used in the current month.\n" + + "# TYPE budibase_quota_usage_automations gauge\n" + + "budibase_quota_usage_automations 0\n" + + "# HELP budibase_quota_limit_automations The limit on the number of automations that can be created.\n" + + "# TYPE budibase_quota_limit_automations gauge\n" + + "budibase_quota_limit_automations 9007199254740991\n" + +export default new Resource().setExamples({ + metrics: { + value: metricsResponse, + }, +}) diff --git a/packages/server/src/api/controllers/public/metrics.ts b/packages/server/src/api/controllers/public/metrics.ts index be78b86fc4..f702a47831 100644 --- a/packages/server/src/api/controllers/public/metrics.ts +++ b/packages/server/src/api/controllers/public/metrics.ts @@ -232,7 +232,7 @@ export async function fetch(ctx: BBContext) { : automationsQuotaLimit ) ctx.body = outputString - ctx.set('Content-Type', 'text/plain'); + ctx.set("Content-Type", "text/plain") } export function convertToOpenMetrics( diff --git a/packages/server/src/api/routes/public/metrics.ts b/packages/server/src/api/routes/public/metrics.ts index 35745e3b13..ff993d2ec6 100644 --- a/packages/server/src/api/routes/public/metrics.ts +++ b/packages/server/src/api/routes/public/metrics.ts @@ -17,6 +17,11 @@ const read = [] * description: Returns tenant metrics. * content: * text/plain: + * schema: + * type: string + * examples: + * metrics: + * $ref: '#/components/examples/metrics' */ read.push(new Endpoint("get", "/metrics", controller.fetch)) diff --git a/packages/server/src/definitions/openapi.ts b/packages/server/src/definitions/openapi.ts index 8c44131e96..b7b77b42d6 100644 --- a/packages/server/src/definitions/openapi.ts +++ b/packages/server/src/definitions/openapi.ts @@ -22,6 +22,10 @@ export interface paths { /** Based on application properties (currently only name) search for applications. */ post: operations["appSearch"]; }; + "/metrics": { + /** Output metrics in OpenMetrics format compatible with Prometheus */ + get: operations["getById"]; + }; "/queries/{queryId}": { /** Queries which have been created within a Budibase app can be executed using this, */ post: operations["queryExecute"]; @@ -844,6 +848,17 @@ export interface operations { }; }; }; + /** Output metrics in OpenMetrics format compatible with Prometheus */ + getById: { + responses: { + /** Returns tenant metrics. */ + 200: { + content: { + "text/plain": string; + }; + }; + }; + }; /** Queries which have been created within a Budibase app can be executed using this, */ queryExecute: { parameters: {