[Title] Added internal protocol command "MONITOR,SYSTEM"
authordonghee yang <donghee.yang@samsung.com>
Tue, 5 Mar 2013 00:10:18 +0000 (09:10 +0900)
committerdonghee yang <donghee.yang@samsung.com>
Tue, 5 Mar 2013 00:10:18 +0000 (09:10 +0900)
src/build_server/BuildServer.rb
src/build_server/SocketJobRequestListener.rb

index 7328abef71c57ab0baf57bbfea502a0c03e9bb7c..1b3cbf4724287146c5944a5fc1204c731d3b4b37 100644 (file)
@@ -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
 
index c3d22b2f1a69d38dba1c1758a4b06159221cb7d3..30bc7b231795fa79f75697ceb182454c073e4159 100644 (file)
@@ -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}"