require 'faye/websocket' require 'eventmachine' module Rancher module Api class Instance # Few possible actions are: # - execute shell command # - render logs # - restart # class Action include Her::Model attributes :token, :url, :response def run! uri = URI.parse(url) uri.userinfo = "#{Rancher::Api.configuration.access_key}:#{Rancher::Api.configuration.secret_key}" uri.query = "token=#{token}" self.response = [] EM.run do # 15 seconds timeout in case of slow operation # EM.add_timer(15) do EM.stop end ws = Faye::WebSocket::Client.new(uri.to_s) ws.on :message do |event| response << Base64.decode64(event.data) end ws.on :close do |_event| ws = nil EM.stop end end self.response = response.join self end end end end end