From e250d4ee128cbe24b75f1787fc1cf2b396c3ce5c Mon Sep 17 00:00:00 2001 From: donghee yang Date: Tue, 5 Mar 2013 09:10:18 +0900 Subject: [PATCH] [Title] Added internal protocol command "MONITOR,SYSTEM" --- src/build_server/BuildServer.rb | 20 +++++++++++ src/build_server/SocketJobRequestListener.rb | 35 ++++++++++++++++++++ 2 files changed, 55 insertions(+) diff --git a/src/build_server/BuildServer.rb b/src/build_server/BuildServer.rb index 7328abe..1b3cbf4 100644 --- a/src/build_server/BuildServer.rb +++ b/src/build_server/BuildServer.rb @@ -762,5 +762,25 @@ class BuildServer def qualify_admin_to_access(prj_id) # nothing to do, admin can change everything on web admin tool end + + + def accept_system_monitor(conn) + sock_domain, remote_port, remote_hostname, remote_ip = conn.peeraddr + @log.info "Connected to system monitor from #{remote_ip}" + Thread.new do + begin + while true + BuildCommServer.send(conn, + "=STATUS,OK,#{host_os},#{@jobmgr.max_working_jobs}") + sleep 5 + end + rescue => e + @log.error e.message + ensure + BuildCommServer.disconnect(conn) + @log.info "Disconnected from system monitor on #{remote_ip}" + end + end + end end diff --git a/src/build_server/SocketJobRequestListener.rb b/src/build_server/SocketJobRequestListener.rb index c3d22b2..30bc7b2 100644 --- a/src/build_server/SocketJobRequestListener.rb +++ b/src/build_server/SocketJobRequestListener.rb @@ -140,6 +140,8 @@ class SocketJobRequestListener handle_cmd_fullbuild( req_line, req ) when "REGISTER" handle_cmd_register( req_line, req ) + when "MONITOR" + handle_cmd_monitor( req_line, req ) when "DOWNLOAD" Thread.new do begin @@ -872,6 +874,39 @@ class SocketJobRequestListener end + # "MONITOR" + def handle_cmd_monitor( line, req ) + @log.info "Received REQ: #{line}" + + begin + handle_cmd_monitor_internal( line, req ) + rescue BuildServerException => e + @log.error(e.message) + BuildCommServer.send(req, e.err_message()) + BuildCommServer.send_end(req) + BuildCommServer.disconnect(req) + end + + @log.info "Handled REQ: #{line}" + end + + + def handle_cmd_monitor_internal( line, req ) + tok = line.split("|").map { |x| x.strip } + if tok.count < 2 then + raise BuildServerException.new("ERR001"), line + end + + case tok[1] + # MONITOR,SYSTEM + when "SYSTEM" + @parent_server.accept_system_monitor(req) + else + raise BuildServerException.new("ERR001"), line + end + end + + # "UPLOAD" def handle_cmd_upload( line, req ) @log.info "Received File transfer REQ : #{line}" -- 2.34.1