diff --git a/js/monast.js b/js/monast.js index e5f5e97..22c01a9 100644 --- a/js/monast.js +++ b/js/monast.js @@ -379,6 +379,11 @@ var Monast = { addQueue = true; break; + case 'PJSIP': + m[0].push({text: Language.execute + " 'pjsip show endpoint " + u.peername + "'", onclick: {fn: Monast.requestInfo, obj: "pjsip show endpoint " + u.peername}}); + addQueue = true; + break; + case 'IAX2': m[0].push({text: Language.execute + " 'iax2 show peer " + u.peername + "'", onclick: {fn: Monast.requestInfo, obj: "iax2 show peer " + u.peername}}); addQueue = true; diff --git a/pymon/monast.py b/pymon/monast.py index 3ff31e9..9b16de6 100755 --- a/pymon/monast.py +++ b/pymon/monast.py @@ -648,6 +648,7 @@ def __init__(self, configFile): 'AlarmClear' : self.handlerEventAlarmClear, 'DNDState' : self.handlerEventDNDState, 'PeerEntry' : self.handlerEventPeerEntry, + 'EndpointList' : self.handlerEventEndpointList, 'PeerStatus' : self.handlerEventPeerStatus, 'Newchannel' : self.handlerEventNewchannel, 'DAHDIChannel' : self.handlerEventDAHDIChannel, @@ -1459,6 +1460,7 @@ def __parseMonastConfig(self): self.servers[servername].status.bridges = {} self.servers[servername].status.peers = { 'SIP': {}, + 'PJSIP': {}, 'IAX2': {}, 'DAHDI': {}, 'Khomp': {}, @@ -1687,7 +1689,13 @@ def onIax2ShowPeers(result): server.pushTask(server.ami.sendDeferred, {'action': 'iaxpeers'}) \ .addCallback(server.ami.errorUnlessResponse) \ .addErrback(self._onAmiCommandFailure, servername, "Error Requesting IAX Peers") - + + ## PJSIP + log.debug("Server %s :: Requesting PJSIP Endpoints..." % servername) + server.pushTask(server.ami.sendDeferred, {'action': 'pjsipshowendpoints'}) \ + .addCallback(server.ami.errorUnlessResponse) \ + .addErrback(self._onAmiCommandFailure, servername, "Error Requesting PJSIP Endpoints") + # DAHDI def onDahdiShowChannels(events): log.debug("Server %s :: Processing DAHDI Channels..." % servername) @@ -2366,6 +2374,67 @@ def onShowPeer(response): .addCallbacks(onShowPeer, self._onAmiCommandFailure, \ errbackArgs = (ami.servername, "Error Executting Command '%s'" % command)) + def handlerEventEndpointList(self, ami, event): + log.debug("Server %s :: Processing Event EndpointList..." % ami.servername) + server = self.servers.get(ami.servername) + status = event.get('devicestate') + contacts = event.get('contacts') + channeltype = 'PJSIP' + objectname = event.get('objectname').split('/')[0] + time = -1 + + if status != 'Unavailable' and contacts != '': + status = 'Reachable' + + user = '%s/%s' % (channeltype, objectname) + + if (self.displayUsersDefault and not server.displayUsers.has_key(user)) or (not self.displayUsersDefault and server.displayUsers.has_key(user)): + self._createPeer( + ami.servername, + channeltype = channeltype, + peername = objectname, + status = status, + time = time + ) + else: + user = None + + if user: + type = 'endpoint' + command = '%s show %s %s' % (channeltype.lower(), type, objectname) + + def onShowPeer(response): + log.debug("Server %s :: Processing %s..." % (ami.servername, command)) + result = '\n'.join(response) + callerid = None + context = None + variables = [] + + try: + callerid = re.compile("['\"]").sub("", re.search('callerid[\s]+:[\s](.*)\n', result).group(1)) + if callerid == '': + callerid = '--' + except: + callerid = '--' + + try: + context = re.search('context[\s]+:[\s](.*)\n', result).group(1) + except: + context = server.default_context + + self._updatePeer( + ami.servername, + channeltype = channeltype, + peername = objectname, + callerid = [callerid, objectname][callerid == "--"], + context = context, + variables = variables + ) + + server.pushTask(server.ami.command, command) \ + .addCallbacks(onShowPeer, self._onAmiCommandFailure, \ + errbackArgs = (ami.servername, "Error Executting Command '%s'" % command)) + def handlerEventPeerStatus(self, ami, event): log.debug("Server %s :: Processing Event PeerStatus..." % ami.servername) channel = event.get('peer')