3 Commits

Author SHA1 Message Date
8c9f654f57 remove rubocop
All checks were successful
Gitea Actions Demo / lint (push) Successful in 31s
Gitea Actions Demo / test (push) Successful in 2m42s
Gitea Actions Demo / release-image (push) Has been skipped
2025-03-24 11:19:42 -05:00
469931faca add devcontainer 2025-03-24 11:17:05 -05:00
7883107bdf create a new method for inferring the PPID
Some checks failed
Gitea Actions Demo / release-image (push) Blocked by required conditions
Gitea Actions Demo / lint (push) Successful in 2m34s
Gitea Actions Demo / test (push) Has been cancelled
2025-03-24 11:16:03 -05:00
9 changed files with 74 additions and 93 deletions

5
.devcontainer/Dockerfile Normal file
View File

@ -0,0 +1,5 @@
ARG VARIANT="3.4.2"
FROM ghcr.io/rails/devcontainer/images/ruby:${VARIANT}
RUN mkdir /run/kubernaut && \
chown vscode: /run/kubernaut

4
.devcontainer/boot.sh Executable file
View File

@ -0,0 +1,4 @@
#!/bin/bash
bundle update --bundler
bundler install

11
.devcontainer/compose.yml Normal file
View File

@ -0,0 +1,11 @@
---
services:
kubernaut:
build:
context: .
dockerfile: Dockerfile
volumes:
- ..:/workspace
command: sleep infinity
memcached:
image: memcached:latest

View File

@ -0,0 +1,17 @@
{
"dockerComposeFile": "compose.yml",
"service": "kubernaut",
"workspaceFolder": "/workspace",
"customizations": {
"vscode": {
"extensions": [
"Shopify.ruby-lsp",
"ms-azuretools.vscode-docker"
]
}
},
"postCreateCommand": ".devcontainer/boot.sh",
"forwardPorts": [
4567
]
}

View File

@ -16,8 +16,6 @@ gem "httparty"
group :development do
gem "ruby-lsp"
gem "rubocop"
gem "rbs"
gem "rack-test"
gem "rspec"
gem "standard"

View File

@ -2,7 +2,7 @@ GEM
remote: https://rubygems.org/
specs:
anyflake (0.0.1)
ast (2.4.2)
ast (2.4.3)
base64 (0.2.0)
bigdecimal (3.1.8)
csv (3.3.0)
@ -11,7 +11,7 @@ GEM
csv
mini_mime (>= 1.0.0)
multi_xml (>= 0.5.2)
json (2.10.1)
json (2.10.2)
jwt (2.10.1)
base64
ksuid (1.0.0)
@ -28,7 +28,7 @@ GEM
nanoid (2.0.0)
nio4r (2.7.4)
parallel (1.26.3)
parser (3.3.7.1)
parser (3.3.7.2)
ast (~> 2.4.1)
racc
prism (1.3.0)
@ -65,9 +65,10 @@ GEM
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.13.0)
rspec-support (3.13.2)
rubocop (1.71.2)
rubocop (1.73.2)
json (~> 2.3)
language_server-protocol (>= 3.17.0)
language_server-protocol (~> 3.17.0.2)
lint_roller (~> 1.1.0)
parallel (~> 1.10)
parser (>= 3.3.0.2)
rainbow (>= 2.2.2, < 4.0)
@ -75,11 +76,12 @@ GEM
rubocop-ast (>= 1.38.0, < 2.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 2.4.0, < 4.0)
rubocop-ast (1.38.1)
parser (>= 3.3.1.0)
rubocop-performance (1.23.1)
rubocop (>= 1.48.1, < 2.0)
rubocop-ast (>= 1.31.1, < 2.0)
rubocop-ast (1.41.0)
parser (>= 3.3.7.2)
rubocop-performance (1.24.0)
lint_roller (~> 1.1)
rubocop (>= 1.72.1, < 2.0)
rubocop-ast (>= 1.38.0, < 2.0)
ruby-lsp (0.23.11)
language_server-protocol (~> 3.17.0)
prism (>= 1.2, < 2.0)
@ -101,18 +103,18 @@ GEM
sinatra (= 4.1.1)
tilt (~> 2.0)
sorbet-runtime (0.5.11911)
standard (1.45.0)
standard (1.47.0)
language_server-protocol (~> 3.17.0.2)
lint_roller (~> 1.0)
rubocop (~> 1.71.0)
rubocop (~> 1.73.0)
standard-custom (~> 1.0.0)
standard-performance (~> 1.6)
standard-performance (~> 1.7)
standard-custom (1.0.2)
lint_roller (~> 1.0)
rubocop (~> 1.50)
standard-performance (1.6.0)
standard-performance (1.7.0)
lint_roller (~> 1.1)
rubocop-performance (~> 1.23.0)
rubocop-performance (~> 1.24.0)
tilt (2.6.0)
ulid (1.4.0)
unicode-display_width (3.1.4)
@ -137,9 +139,7 @@ DEPENDENCIES
rack-test
rackup
rake
rbs
rspec
rubocop
ruby-lsp
sinatra
sinatra-contrib

28
app.rb
View File

@ -28,7 +28,6 @@ DEFAULT_FLAKEY = 50
ENV_PREFIX = "KUBERNAUT"
CLK_TCK = 100
PID_FILE_PATH = "/run/app/pid".freeze
PROC_UPTIME_PATH = "/proc/uptime".freeze
SECONDS_PER_YEAR = 31_556_952
@ -109,7 +108,7 @@ end
class TickTock
def initialize
@pid = master_pid
@pid = ppid
@procfs_f = format "/proc/%s/stat", @pid
puts @pid
end
@ -178,9 +177,22 @@ class Sleep
end
end
def master_pid
pid_s = File.read PID_FILE_PATH
Integer pid_s.strip
def ppid
pid = Process.pid
# self
ps = File.open "/proc/#{pid}/stat", &:readline
ps = ps.split(" ")
ppid = Integer(ps[3])
# ppid
ps = File.open "/proc/#{ppid}/stat", &:readline
ps = ps.split(" ")
if ps[1].include? "ruby"
ppid
else
pid
end
end
def system_uptime
@ -350,19 +362,19 @@ get "/snowflake" do
end
post "/quit" do
Process.kill("TERM", master_pid)
Process.kill("TERM", ppid)
nil
end
post "/halt" do
Process.kill("QUIT", master_pid)
Process.kill("QUIT", ppid)
nil
end
get "/pid" do
pretty = params.key? :pretty
jsonify({puma: master_pid, pid: Process.pid}, pretty:)
jsonify({ppid: ppid, pid: Process.pid}, pretty:)
end
get "/token" do

View File

@ -1,3 +0,0 @@
# workers 3
pidfile "/run/app/pid"
preload_app!

View File

@ -1,63 +0,0 @@
module State
def enable: () -> untyped
def disable: () -> (untyped | nil)
def enabled?: () -> bool
def toggle: () -> untyped
end
module UpDown
def up: () -> untyped
def down: () -> untyped
def to_s: () -> ("up" | "down")
def to_json: (*untyped _args) -> (nil | untyped)
end
class Health
@file: untyped
include Singleton
include State
include UpDown
def initialize: () -> void
def healthy?: () -> bool
end
class Ready
@file: untyped
include Singleton
include State
include UpDown
def initialize: () -> void
def ready?: () -> bool
end
class Sleep
@file: untyped
include Singleton
include State
def initialize: () -> void
def asleep?: () -> bool
def wake: () -> untyped
def sleep: () -> untyped
end