Files
faaso/src/commands/scale.cr
Roberto Alsina 2d333c3df1 * More robust stderr/stdout mixing when
running commandsserver side
* More robust streaming responses client side
2024-07-09 13:01:37 -03:00

61 lines
1.7 KiB
Crystal

module Faaso
module Commands
# Controls a funko's scale
#
# Scale is how many instances are running.
#
# If it's increased, more instances are created.
# It it's decreased, instances are destroyed.
#
# In both cases stopped instances after the required
# scale is reached are deleted.
struct Scale
def local(options, name : String, scale : Int | Nil) : Int32
funko = Funko::Funko.from_names([name])[0]
# Asked about scale
if funko.image_history.empty?
Log.error { "Unknown funko #{funko.name}" }
return 1
end
if scale.nil?
Log.info { "Funko #{name} has a scale of #{funko.scale}" }
return 0
end
# Asked to set scale
funko.scale(scale)
0
end
def remote(options, name : String, scale : Int | Nil) : Int32
user, password = Config.auth
Faaso.check_version
if scale.nil?
Crest.get(
"#{Config.server}funkos/#{name}/scale/", \
user: user, password: password) do |response|
IO.copy(response.body_io, STDOUT)
end
return 0
end
Crest.post(
"#{Config.server}funkos/#{name}/scale/",
{"scale" => scale}, user: user, password: password) do |response|
IO.copy(response.body_io, STDOUT)
end
0
rescue ex : Crest::InternalServerError
Log.error(exception: ex) { "Error scaling funko #{name}" }
1
end
def run(options, name : String, scale) : Int32
scale = scale.try &.to_s.to_i
if options["--local"]
return local(options, name, scale)
end
remote(options, name, scale)
end
end
end
end