lib/mkit/app/controllers/pods_controller.rb in mkit-0.7.2 vs lib/mkit/app/controllers/pods_controller.rb in mkit-0.8.0
- old
+ new
@@ -1,17 +1,43 @@
# frozen_string_literal: true
+require 'mkit/app/model/pod'
+require 'mkit/app/helpers/pods_helper'
+require 'mkit/app/helpers/params_helper'
+require 'mkit/pods/docker_exec_command'
+require 'mkit/exceptions'
+
class PodsController < MKIt::Server
- get '/services/:service_id/pods' do
- "Not implemented\n"
- end
+ helpers MKIt::PodsHelper
+ helpers MKIt::ParamsHelper
- get '/services/:service_id/pods/:pod_id' do
- "Not implemented\n"
- end
-
- put '/services/:service_id/pods/:pod_id' do
- "Not implemented\n"
+ get '/pods/:id/exec' do
+ pod = find_by_id_or_name
+ if request.websocket?
+ options_parameter = build_options_hash(params: params, options: [:varargs])
+ raise MKIt::BaseException.new(400, "Missing parameters") unless options_parameter[:varargs]
+ options_parameter[:varargs] = JSON.parse(params['varargs'])
+ request.websocket do |ws|
+ listener = nil
+ ws.onopen do
+ settings.sockets << ws
+ listener = MKIt::DockerExecCommand.new(pod, ws, options: options_parameter)
+ settings.listeners << listener
+ listener.register
+ end
+ ws.onclose do
+ MKItLogger.info("websocket closed [#{listener}]")
+ settings.sockets.delete(ws)
+ if listener
+ MKItLogger.info("unregister [#{listener}]")
+ settings.listeners.delete(listener)
+ listener.unregister
+ end
+ end
+ end
+ else
+ raise MKIt::BaseException.new(400, "Bad request")
+ end
end
delete '/services/:service_id/pods/:pod_id' do
"Not implemented\n"
end