/status: add more information to /status page.

Add the following:

* Container name, machine name, worker id.
* Container uptime, puma uptime, worker uptime.
* Number of requests processed by current worker.
* ExifTool version.

Also change /status page to show information in tables instead of lists.
This commit is contained in:
evazion
2021-09-26 22:52:28 -05:00
parent 52bf4a3a6b
commit f8d52e6758
4 changed files with 95 additions and 19 deletions

View File

@@ -0,0 +1,6 @@
module Danbooru
module Helpers
module_function
extend ActionView::Helpers::DateHelper
end
end

View File

@@ -18,20 +18,30 @@ class ServerStatus
{
ip: request.remote_ip,
headers: http_headers,
status: {
hostname: hostname,
uptime: uptime,
loadavg: loadavg,
instance: {
container_name: container_name,
instance_name: instance_name,
worker_name: worker_name,
container_uptime: container_uptime,
instance_uptime: instance_uptime,
worker_uptime: worker_uptime,
requests_processed: requests_processed,
danbooru_version: danbooru_version,
ruby_version: RUBY_VERSION,
distro_version: distro_version,
kernel_version: kernel_version,
libvips_version: libvips_version,
ffmpeg_version: ffmpeg_version,
mkvmerge_version: mkvmerge_version,
exiftool_version: exiftool_version,
redis_version: redis_version,
postgres_version: postgres_version,
},
server: {
node_name: node_name,
node_uptime: node_uptime,
loadavg: loadavg,
kernel_version: kernel_version,
},
postgres: {
connection_stats: postgres_connection_stats,
},
@@ -54,9 +64,53 @@ class ServerStatus
Socket.gethostname
end
def uptime
seconds = File.read("/proc/uptime").split[0].to_f
"#{seconds.seconds.in_days.round} days"
def instance_name
if container_name.present?
"#{container_name}/#{node_name}"
else
node_name
end
end
def container_name
ENV["K8S_POD_NAME"]
end
def node_name
ENV["K8S_NODE_NAME"] || hostname
end
def worker_name
Thread.current.object_id
end
def node_uptime
uptime = File.read("/proc/uptime").split[0].to_f.seconds
Danbooru::Helpers.distance_of_time_in_words(uptime)
end
def container_uptime
started_at = File.stat("/proc/1").mtime
uptime = Time.zone.now - started_at
Danbooru::Helpers.distance_of_time_in_words(uptime)
end
def instance_uptime
started_at = File.stat("/proc/#{Process.ppid}").mtime
uptime = Time.zone.now - started_at
Danbooru::Helpers.distance_of_time_in_words(uptime)
end
def worker_uptime
started_at = File.stat("/proc/#{Process.pid}").mtime
uptime = Time.zone.now - started_at
Danbooru::Helpers.distance_of_time_in_words(uptime)
end
def requests_processed
if Puma::Server.current.present?
Puma::Server.current.requests_count
end
end
def loadavg
@@ -87,6 +141,10 @@ class ServerStatus
def mkvmerge_version
`mkvmerge --version`.chomp
end
def exiftool_version
`exiftool -ver`.chomp
end
end
concerning :RedisMethods do