diff --git a/awx/main/management/commands/run_socketio_service.py b/awx/main/management/commands/run_socketio_service.py index 61112ea1a7..c6a82b7108 100644 --- a/awx/main/management/commands/run_socketio_service.py +++ b/awx/main/management/commands/run_socketio_service.py @@ -9,7 +9,7 @@ import json import signal import time from optparse import make_option -from multiprocessing import Process +from threading import Thread # Django from django.conf import settings @@ -27,6 +27,7 @@ from awx.main.models import * import zmq # gevent & socketio +import gevent from socketio import socketio_manage from socketio.server import SocketIOServer from socketio.namespace import BaseNamespace @@ -35,19 +36,17 @@ class TestNamespace(BaseNamespace): def recv_connect(self): print("Received client connect for test namespace from %s" % str(self.environ['REMOTE_ADDR'])) - self.emit('connect', True) + self.emit('test', "If you see this then you are connected to the test socket endpoint") class JobNamespace(BaseNamespace): def recv_connect(self): print("Received client connect for job namespace from %s" % str(self.environ['REMOTE_ADDR'])) - self.emit('connect', True) class JobEventNamespace(BaseNamespace): def recv_connect(self): print("Received client connect for job event namespace from %s" % str(self.environ['REMOTE_ADDR'])) - self.emit('connect', True) class TowerSocket(object): @@ -55,9 +54,9 @@ class TowerSocket(object): path = environ['PATH_INFO'].strip('/') or 'index.html' print path if path.startswith('socket.io'): - socketio_manage(environ, {'/socket.io/test': TestNamespace}) - socketio_manage(environ, {'/socket.io/jobs': JobNamespace}) - socketio_manage(environ, {'/socket.io/job_events': JobEventNamespace}) + socketio_manage(environ, {'/socket.io/test': TestNamespace, + '/socket.io/jobs': JobNamespace, + '/socket.io/job_events': JobEventNamespace}) else: start_response('404 Not Found', []) return ['

Not Found

'] @@ -111,7 +110,12 @@ class Command(NoArgsCommand): else: print 'Listening on port http://0.0.0.0:' + str(socketio_listen_port) server = SocketIOServer(('0.0.0.0', socketio_listen_port), TowerSocket(), resource='socket.io') - gevent.spawn(notification_handler, socketio_notification_port, server) + + #gevent.spawn(notification_handler, socketio_notification_port, server) + handler_thread = Thread(target=notification_handler, args = (socketio_notification_port, server,)) + handler_thread.daemon = True + handler_thread.start() + server.serve_forever() except KeyboardInterrupt: pass diff --git a/awx/ui/static/js/controllers/Sockets.js b/awx/ui/static/js/controllers/Sockets.js index ab63de1dca..ea25524881 100644 --- a/awx/ui/static/js/controllers/Sockets.js +++ b/awx/ui/static/js/controllers/Sockets.js @@ -8,19 +8,34 @@ 'use strict'; -function SocketsController ($scope, ClearScope, Socket) { +function SocketsController ($scope, $compile, ClearScope, Socket) { ClearScope(); - var socket = Socket({ scope: $scope }); - socket.init(); //make the connection + var test_scope = $scope.$new(), + jobs_scope = $scope.$new(), + job_events_scope = $scope.$new(); - $scope.messages = ['Stuff happened', 'message received', 'blah blah bob blah']; + var test_socket = Socket({ scope: test_scope, endpoint: "test" }), + jobs_socket = Socket({ scope: jobs_scope, endpoint: "jobs" }), + job_events_socket = Socket({ scope: job_events_scope, endpoint: "job_events" }); - socket.on('anything', function(data) { - $scope.messages.push(data); + var test_element = angular.element(document.getElementById('test_url')); + $compile(test_element)(test_scope); + var jobs_element = angular.element(document.getElementById("jobs_url")); + $compile(jobs_element)(jobs_scope); + var job_events_element = angular.element(document.getElementById("job_events_url")); + $compile(job_events_element)(job_events_scope); + + test_socket.init(); + jobs_socket.init(); + job_events_socket.init(); + + test_scope.messages = ['Message Displayed Before Connection']; + + test_socket.on('test', function(data) { + test_scope.messages.push(data); }); - } -SocketsController.$inject = [ '$scope', 'ClearScope', 'Socket']; +SocketsController.$inject = [ '$scope', '$compile', 'ClearScope', 'Socket']; diff --git a/awx/ui/static/lib/ansible/Socket.js b/awx/ui/static/lib/ansible/Socket.js index d7f18bd688..2fad2709d6 100644 --- a/awx/ui/static/lib/ansible/Socket.js +++ b/awx/ui/static/lib/ansible/Socket.js @@ -16,8 +16,9 @@ angular.module('SocketIO', ['AuthService', 'Utilities']) return function(params) { var scope = params.scope, host = $location.host(), + endpoint = params.endpoint, protocol = $location.protocol(), - url = protocol + '://' + host + ':8080'; + url = protocol + '://' + host + ':8080/socket.io/' + endpoint; if (scope.removeSocketErrorEncountered) { scope.removeSocketErrorEncountered(); diff --git a/awx/ui/static/partials/sockets.html b/awx/ui/static/partials/sockets.html index 8c5bf54d13..edc80f9c40 100644 --- a/awx/ui/static/partials/sockets.html +++ b/awx/ui/static/partials/sockets.html @@ -1,11 +1,34 @@
-
Socket url: {{ socket_url }}  Status: {{ socket_status }} {{ socket_reason }}
-
-
Received Messages:
-
    -
  • {{ message }}
  • -
+
+
Socket url: {{ socket_url }}  Status: {{ socket_status }} {{ socket_reason }}
+
+
Received Test Messages:
+
    +
  • {{messages}}
  • +
  • {{ message }}
  • +
+
+
+ +
+
Socket url: {{ socket_url }}  Status: {{ socket_status }} {{ socket_reason }}
+
+
Received Jobs Messages:
+
    +
  • {{ message }}
  • +
+
+
+ +
+
Socket url: {{ socket_url }}  Status: {{ socket_status }} {{ socket_reason }}
+
+
Received Job Event Messages:
+
    +
  • {{ message }}
  • +
+