-
Notifications
You must be signed in to change notification settings - Fork 67
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
2 changed files
with
109 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,107 @@ | ||
import { db, privateDB } from "../databases/databases"; | ||
import { Request, Response } from "express"; | ||
import os from "os"; | ||
import redis from "../utils/redis"; | ||
import { Postgres } from "../databases/Postgres"; | ||
import { Server } from "http"; | ||
|
||
export async function getMetrics(req: Request, res: Response, server: Server): Promise<Response> { | ||
return res.type("text").send([ | ||
`# HELP sb_uptime Uptime of this instance`, | ||
`# TYPE sb_uptime counter`, | ||
`sb_uptime ${process.uptime()}`, | ||
`# HELP sb_commit The commit hash of the running version`, | ||
`# TYPE sb_commit gauge`, | ||
`sb_commit ${(global as any).HEADCOMMIT ?? "unknown"}`, | ||
`# HELP sb_db_version The version of the database`, | ||
`# TYPE sb_db_version counter`, | ||
`sb_db_version ${await db.prepare("get", "SELECT key, value FROM config where key = ?", ["version"]).then(e => e.value).catch(() => -1)}`, | ||
`# HELP sb_start_time The time this instance was started`, | ||
`# TYPE sb_start_time gauge`, | ||
`sb_start_time ${Date.now()}`, | ||
`# HELP sb_loadavg_5 The 5 minute load average of the system`, | ||
`# TYPE sb_loadavg_5 gauge`, | ||
`sb_loadavg_5 ${os.loadavg()[0]}`, | ||
`# HELP sb_loadavg_15 The 15 minute load average of the system`, | ||
`# TYPE sb_loadavg_15 gauge`, | ||
`sb_loadavg_15 ${os.loadavg()[1]}`, | ||
`# HELP sb_connections The number of connections to this instance`, | ||
`# TYPE sb_connections gauge`, | ||
`sb_connections ${await new Promise((resolve) => server.getConnections((_, count) => resolve(count)) as any)}`, | ||
`# HELP sb_status_requests The number of status requests made to this instance`, | ||
`# TYPE sb_status_requests gauge`, | ||
`sb_status_requests ${await redis.increment("statusRequest").then(e => e[0]).catch(() => -1)}`, | ||
`# HELP sb_postgres_active_requests The number of active requests to the postgres database`, | ||
`# TYPE sb_postgres_active_requests gauge`, | ||
`sb_postgres_active_requests ${(db as Postgres)?.getStats?.()?.activeRequests ?? -1}`, | ||
`# HELP sb_postgres_avg_read_time The average read time of the postgres database`, | ||
`# TYPE sb_postgres_avg_read_time gauge`, | ||
`sb_postgres_avg_read_time ${(db as Postgres)?.getStats?.()?.avgReadTime ?? -1}`, | ||
`# HELP sb_postgres_avg_write_time The average write time of the postgres database`, | ||
`# TYPE sb_postgres_avg_write_time gauge`, | ||
`sb_postgres_avg_write_time ${(db as Postgres)?.getStats?.()?.avgWriteTime ?? -1}`, | ||
`# HELP sb_postgres_avg_failed_time The average failed time of the postgres database`, | ||
`# TYPE sb_postgres_avg_failed_time gauge`, | ||
`sb_postgres_avg_failed_time ${(db as Postgres)?.getStats?.()?.avgFailedTime ?? -1}`, | ||
`# HELP sb_postgres_pool_total The total number of connections in the postgres pool`, | ||
`# TYPE sb_postgres_pool_total gauge`, | ||
`sb_postgres_pool_total ${(db as Postgres)?.getStats?.()?.pool?.total ?? -1}`, | ||
`# HELP sb_postgres_pool_idle The number of idle connections in the postgres pool`, | ||
`# TYPE sb_postgres_pool_idle gauge`, | ||
`sb_postgres_pool_idle ${(db as Postgres)?.getStats?.()?.pool?.idle ?? -1}`, | ||
`# HELP sb_postgres_pool_waiting The number of connections waiting in the postgres pool`, | ||
`# TYPE sb_postgres_pool_waiting gauge`, | ||
`sb_postgres_pool_waiting ${(db as Postgres)?.getStats?.()?.pool?.waiting ?? -1}`, | ||
`# HELP sb_postgres_private_active_requests The number of active requests to the private postgres database`, | ||
`# TYPE sb_postgres_private_active_requests gauge`, | ||
`sb_postgres_private_active_requests ${(privateDB as Postgres)?.getStats?.()?.activeRequests ?? -1}`, | ||
`# HELP sb_postgres_private_avg_read_time The average read time of the private postgres database`, | ||
`# TYPE sb_postgres_private_avg_read_time gauge`, | ||
`sb_postgres_private_avg_read_time ${(privateDB as Postgres)?.getStats?.()?.avgReadTime ?? -1}`, | ||
`# HELP sb_postgres_private_avg_write_time The average write time of the private postgres database`, | ||
`# TYPE sb_postgres_private_avg_write_time gauge`, | ||
`sb_postgres_private_avg_write_time ${(privateDB as Postgres)?.getStats?.()?.avgWriteTime ?? -1}`, | ||
`# HELP sb_postgres_private_avg_failed_time The average failed time of the private postgres database`, | ||
`# TYPE sb_postgres_private_avg_failed_time gauge`, | ||
`sb_postgres_private_avg_failed_time ${(privateDB as Postgres)?.getStats?.()?.avgFailedTime ?? -1}`, | ||
`# HELP sb_postgres_private_pool_total The total number of connections in the private postgres pool`, | ||
`# TYPE sb_postgres_private_pool_total gauge`, | ||
`sb_postgres_private_pool_total ${(privateDB as Postgres)?.getStats?.()?.pool?.total ?? -1}`, | ||
`# HELP sb_postgres_private_pool_idle The number of idle connections in the private postgres pool`, | ||
`# TYPE sb_postgres_private_pool_idle gauge`, | ||
`sb_postgres_private_pool_idle ${(privateDB as Postgres)?.getStats?.()?.pool?.idle ?? -1}`, | ||
`# HELP sb_postgres_private_pool_waiting The number of connections waiting in the private postgres pool`, | ||
`# TYPE sb_postgres_private_pool_waiting gauge`, | ||
`sb_postgres_private_pool_waiting ${(privateDB as Postgres)?.getStats?.()?.pool?.waiting ?? -1}`, | ||
`# HELP sb_redis_active_requests The number of active requests to redis`, | ||
`# TYPE sb_redis_active_requests gauge`, | ||
`sb_redis_active_requests ${(redis as any)?.getStats?.()?.activeRequests ?? -1}`, | ||
`# HELP sb_redis_write_requests The number of write requests to redis`, | ||
`# TYPE sb_redis_write_requests gauge`, | ||
`sb_redis_write_requests ${(redis as any)?.getStats?.()?.writeRequests ?? -1}`, | ||
`# HELP sb_redis_avg_read_time The average read time of redis`, | ||
`# TYPE sb_redis_avg_read_time gauge`, | ||
`sb_redis_avg_read_time ${(redis as any)?.getStats?.()?.avgReadTime ?? -1}`, | ||
`# HELP sb_redis_avg_write_time The average write time of redis`, | ||
`# TYPE sb_redis_avg_write_time gauge`, | ||
`sb_redis_avg_write_time ${(redis as any)?.getStats?.()?.avgWriteTime ?? -1}`, | ||
`# HELP sb_redis_memory_cache_hits The cache hit ratio in redis`, | ||
`# TYPE sb_redis_memory_cache_hits gauge`, | ||
`sb_redis_memory_cache_hits ${(redis as any)?.getStats?.()?.memoryCacheHits ?? -1}`, | ||
`# HELP sb_redis_memory_cache_total_hits The cache hit ratio in redis including uncached items`, | ||
`# TYPE sb_redis_memory_cache_total_hits gauge`, | ||
`sb_redis_memory_cache_total_hits ${(redis as any)?.getStats?.()?.memoryCacheTotalHits ?? -1}`, | ||
`# HELP sb_redis_memory_cache_length The length of the memory cache in redis`, | ||
`# TYPE sb_redis_memory_cache_length gauge`, | ||
`sb_redis_memory_cache_length ${(redis as any)?.getStats?.()?.memoryCacheLength ?? -1}`, | ||
`# HELP sb_redis_memory_cache_size The size of the memory cache in redis`, | ||
`# TYPE sb_redis_memory_cache_size gauge`, | ||
`sb_redis_memory_cache_size ${(redis as any)?.getStats?.()?.memoryCacheSize ?? -1}`, | ||
`# HELP sb_redis_last_invalidation The time of the last successful invalidation in redis`, | ||
`# TYPE sb_redis_last_invalidation gauge`, | ||
`sb_redis_last_invalidation ${(redis as any)?.getStats?.()?.lastInvalidation ?? -1}`, | ||
`# HELP sb_redis_last_invalidation_message The time of the last invalidation message in redis`, | ||
`# TYPE sb_redis_last_invalidation_message gauge`, | ||
`sb_redis_last_invalidation_message ${(redis as any)?.getStats?.()?.lastInvalidationMessage ?? -1}`, | ||
].join("\n")); | ||
} |