Skip to content

Instantly share code, notes, and snippets.

@donpdonp
Last active October 4, 2018 20:06
Show Gist options
  • Save donpdonp/07bcb50f4f61680962d3 to your computer and use it in GitHub Desktop.
Save donpdonp/07bcb50f4f61680962d3 to your computer and use it in GitHub Desktop.
oldgluon vm admin
module Gluon
class VM
def dispatch(msg)
method = msg['method']
params = msg['params']
if method == 'irc.privmsg' && params.has_key?('nick')
if /^vm$/.match(params['message'])
response = "usage: vm list|add <name> <url>|reload <name>|del <name>"
Neur0n.send({method: "irc.privmsg", params: {irc_session_id: params['irc_session_id'],
channel: params['channel'],
message: response}})
end
cmd_match = /^vm\s+(\w+)(\s+(.*))?/.match(params['message'])
if cmd_match
cmd = cmd_match[1]
cparams = cmd_match[3] ? cmd_match[3].split() : []
case cmd
when 'list'
do_list(params, cparams)
when 'reload'
do_reload(params, cparams)
when 'add'
do_add(params, cparams)
when 'del'
do_del(params, cparams)
end
end
end
end
def do_list(params, cparams)
Neur0n.send({id: Neur0n.newId, method: "vm.list"}, params)
Neur0n.send({method: "irc.privmsg", params: {irc_session_id: params['irc_session_id'],
channel: params['channel'],
message: "working on vm list."}})
return
end
def resp_list(msg, context)
vms = msg['result'].values.map{|v| "#{v['name']}"}.join(', ')
Neur0n.send({method: "irc.privmsg", params: {irc_session_id: context['irc_session_id'],
channel: context['channel'],
message: "vm list: #{vms}"}})
return
end
def do_add(params, cparams)
add_params = {name: cparams[0],
url: cparams[1]}
puts "raw dbg #{add_params}"
Neur0n.send({id: Neur0n.newId,
method: "vm.add",
params: add_params},
params)
response = "working on vm add. #{params} #{cparams}"
Neur0n.send({method: "irc.privmsg", params: {irc_session_id: params['irc_session_id'],
channel: params['channel'],
message: response}})
return
end
def do_del(params, cparams)
Neur0n.send({id: Neur0n.newId, method: "vm.del"}, params)
Neur0n.send({method: "irc.privmsg", params: {irc_session_id: params['irc_session_id'],
channel: params['channel'],
message: "working on vm del. #{params} #{cparams}"}})
return
end
def do_reload(params, cparams)
Neur0n.send({id: Neur0n.newId, method: "vm.reload",
params: {name: cparams[0]}},
params)
Neur0n.send({method: "irc.privmsg", params: {irc_session_id: params['irc_session_id'],
channel: params['channel'],
message: "working on vm reload. #{params} #{cparams}"}})
return
end
end
end
module Neur0n
@@mqueue = {}
@@client = Gluon::VM.new
def self.dispatch(msg)
id = msg['id']
if id && msg['result']
q = @@mqueue[id]
if q
@@mqueue.delete(q)
@@client.resp_list(msg, q[:context])
end
else
@@client.dispatch(msg)
end
end
def self.send(msg, context = nil)
if msg[:id]
@@mqueue[msg[:id]] = {msg: msg, context: context}
end
puts "vm to_s #{msg.to_s}"
puts "vm stringify #{JSON.generate(msg)}"
emit(msg)
end
def self.newId
(Math.rand*(36**3)).to_i.to_s(36)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment