Exemple #1
0
    def render_GET(self, request):

        output = "<li><a href='/prices'>precios</a></li>"
        output += "<li><a href='/docs'>documentacion</a></li>"

        user = session.get_user(request)
        main_page = print_template('portada', {})
        if user:
            user_ext = user.voip_id
            output_user = "******" + user.voip_id + "'>datos usuario</a></li>"
            output_user += "<li><a href='/voip'>listin telefonico</a></li>"
            output_user += "<li><a href='/stats'>estadisticas</a></li>"
            if user.admin == 1:
                output_user += "<li><a href='/admin'>admin</a></li>"
                user_ext += " eres admin"
            output_user += "<li><a href='/logout'>logout</a></li>"

            return print_template(
                'logged-pbx-lorea', {
                    'LINKS': output,
                    'LOGGED_LINKS': output_user,
                    'user': user_ext,
                    'content': main_page
                })
        else:
            output += "<li><a href='/register'>registrarse</a></li>"
            return print_template('home-pbx-lorea', {
                'LINKS': output,
                'content': main_page
            })
Exemple #2
0
    def render_GET(self, request):
	res = None
	logged = session.get_user(request)
	if not logged:
		return redirectTo('/', request)
	parts = request.path.split("/")
	if len(parts) > 2 and logged.admin:
		user_ext = parts[2]
	else:
		user_ext = logged.voip_id
	args = {'ext': user_ext, 'lowquality': '', 'tls': '', 'srtp': '', 'voicemail': ''}
	options = get_options(user_ext)
	if 'codecs' in options and 'gsm' in options['codecs']:
		args['lowquality'] = ' checked '
	if options['tls']:
		args['tls'] = ' checked '
	if options['srtp']:
		args['srtp'] = ' checked '
	if options['voicemail']:
		args['voicemail'] = ' checked '
        model = Model()
        user = model.query(User).filter_by(voip_id=user_ext).first()
        if user and (logged.admin or user.id == logged.id):
            args['bitcoin'] = self.render_btc(logged, user, wallet)
        else:
            return redirectTo('/', request)
	content = print_template('options', args)
	return print_template('content-pbx-lorea', {'content': content})
Exemple #3
0
    def render_GET(self, request):
	user = session.get_user(request)
	if user and user.admin:
	        content = print_template('admin', {})
	        return print_template('content-pbx-lorea', {'content': content})
	else:
		return redirectTo("/", request)
Exemple #4
0
 def render_GET(self, request):
     res = None
     logged = session.get_user(request)
     if not logged:
         return redirectTo('/', request)
     parts = request.path.split("/")
     if len(parts) > 2 and logged.admin:
         user_ext = parts[2]
     else:
         user_ext = logged.voip_id
     args = {
         'ext': user_ext,
         'lowquality': '',
         'tls': '',
         'srtp': '',
         'voicemail': ''
     }
     options = get_options(user_ext)
     if 'codecs' in options and 'gsm' in options['codecs']:
         args['lowquality'] = ' checked '
     if options['tls']:
         args['tls'] = ' checked '
     if options['srtp']:
         args['srtp'] = ' checked '
     if options['voicemail']:
         args['voicemail'] = ' checked '
     model = Model()
     user = model.query(User).filter_by(voip_id=user_ext).first()
     if user and (logged.admin or user.id == logged.id):
         args['bitcoin'] = self.render_btc(logged, user, wallet)
     else:
         return redirectTo('/', request)
     content = print_template('options', args)
     return print_template('content-pbx-lorea', {'content': content})
Exemple #5
0
    def render_GET(self, request):
	parts = request.path.split("/")
	if len(parts) == 2:
		parts.append('contents')
	if len(parts) > 2:
		section = parts[2]
		try:
			content = print_template('docs/' + section, {})
		except:
			content = "la seccion no existe"
		return print_template("content-pbx-lorea", {'content': content})
Exemple #6
0
    def render_GET(self, request):
	logged = session.get_user(request)
	parts = request.path.split("/")
	if len(parts) > 2 and logged and logged.admin:
		section = parts[2]
		if section == 'check':
			output = check_prices()
			return print_template('content-pbx-lorea', {'content': "<pre>"+output+"</pre>"})
	res = list_prices_json()
	check_link = ""
	if logged and logged.admin:
		check_link = "<p><a href='/prices/check'>Chequear precios</a></p>"
	return print_template('prices-pbx-lorea', {'links': check_link, 'prices': res, 'map': print_template('prices-map-pbx-lorea', {})})
Exemple #7
0
    def render_GET(self, request):
        res = None
        logged = session.get_user(request)
        if not logged:
            return redirectTo('/', request)

        parts = request.path.split("/")
        if len(parts) > 2 and logged.admin:
            user_ext = parts[2]
        else:
            user_ext = logged.voip_id

        content = print_template('password', {'ext': user_ext})
        return print_template('content-pbx-lorea', {'content': content})
Exemple #8
0
    def render_GET(self, request):
	res = None
	logged = session.get_user(request)
	if not logged:
		return redirectTo('/', request)

	parts = request.path.split("/")
	if len(parts) > 2 and logged.admin:
		user_ext = parts[2]
	else:
		user_ext = logged.voip_id
	
	content = print_template('password', {'ext': user_ext})
	return print_template('content-pbx-lorea', {'content': content})
Exemple #9
0
    def render_GET(self, request):
	logged = session.get_user(request)
        args = {}
        for a in request.args:
            args[a] = request.args[a][0]

	if 'account' in args:
		res = args['account']
	else:
		parts = request.path.split("/")
		if len(parts) > 5 and logged and (logged.voip_id == parts[3] or logged.admin == 1):
			section = parts[2]
			user = parts[3]
			offset = parts[4]
			limit = parts[5]
			if section == 'json':
				return self.render_user_accounting(logged, user, request, offset, limit)
		elif len(parts) > 2:
			user = parts[2]
			if user == 'accounts':
				res = self.render_accounts(request)
			elif logged and (logged.voip_id == user or logged.admin == 1):
				res = self.render_user(user, request)
				return res
			else:
				return redirectTo("/", request)
	if isinstance(res, str):
		return print_template('content-pbx-lorea', {'content': res})
	else:
		return res
Exemple #10
0
    def render_user(self, user_ext, request):
	model = Model()
	peer = model.query(SipPeer).filter_by(regexten=user_ext).first()
	creditlink = ''
	if peer:
		username = peer.name
	else:
		username = user_ext
	user = model.get_user_fromext(user_ext)
	logged = session.get_user(request)
	if user:
		credit = "%.3f" % (user.credit,)
		user_charges = charges.get_charges(user_ext)
		n_calls = len(user.calls)
		pager = self.render_pager(user_ext, n_calls)
		user_calls = calls.get_calls(user_ext, logged, 10) + "<p>%s</p>" % (pager,)

		creditlink = ""
		if user.credit > 0:
			if user.voip_id == logged.voip_id:
				creditlink += '<a href="/credit/transfer">Transferir</a>'
			else:
				creditlink += '<a href="/credit/transfer/%s">Transferir</a>' % (user.voip_id)
		if logged.admin:
			creditlink += ' <a href="/credit/add/%s">Crear</a>' % (user.voip_id)
	else:
		credit = 0.0
		user_charges = ""
		user_calls = ""
	all_calls = self.render_user_calls(user_ext, request)
	args = {'ext': user_ext, 'username': username, 'credit': credit, 'credit_link':creditlink ,'calls': user_calls, 'charges': user_charges, 'all_calls': all_calls}
	return print_template('user-pbx-lorea', args)
Exemple #11
0
    def render_GET(self, request):
        args = {}
        for a in request.args:
            args[a] = request.args[a][0]

        logged = session.get_user(request)
        if 'account' in args:
            res = args['account']
        else:
            parts = request.path.split("/")
            if len(parts) > 5 and logged and (logged.voip_id == parts[3]
                                              or logged.admin == 1):
                section = parts[2]
                user = parts[3]
                offset = parts[4]
                limit = parts[5]
                if section == 'json':
                    return self.render_user_accounting(logged, user, request,
                                                       offset, limit)
            elif len(parts) > 2:
                user = parts[2]
                if user == 'accounts':
                    res = self.render_accounts(request)
                elif logged and (logged.voip_id == user or logged.admin == 1):
                    res = self.render_user(user, request)
                    return res
                else:
                    return redirectTo("/", request)
        if isinstance(res, str):
            return print_template('content-pbx-lorea', {'content': res})
        else:
            return res
Exemple #12
0
    def render_GET(self, request):
	logged = session.get_user(request)
	if logged and logged.admin:
		content = self.render_stats(request)
		content = "<pre>%s</pre>" % (content,)
		return templates.print_template('content-pbx-lorea', {'content': content})
	return redirectTo("/", request)
Exemple #13
0
    def render_GET(self, request):
        pln_request = self.is_pln_request(request)

        parts = request.path.split('/')
        if pln_request and len(parts) > 2 and parts[2] == 'node.json':
            return self.render_node_json()

        return print_template('pln', {})
Exemple #14
0
    def render_GET(self, request):
	pln_request = self.is_pln_request(request)

	parts = request.path.split('/')
	if pln_request and len(parts) > 2 and parts[2] == 'node.json':
		return self.render_node_json()

	return print_template('pln', {})
Exemple #15
0
 def render_GET(self, request):
     logged = session.get_user(request)
     if logged and logged.admin:
         content = self.render_stats(request)
         content = "<pre>%s</pre>" % (content, )
         return templates.print_template('content-pbx-lorea',
                                         {'content': content})
     return redirectTo("/", request)
Exemple #16
0
    def credit_form(self, logged, section, user_ext):
	if section == 'transfer':
		res = "<h1>Tranferir credito</h1>"
		res += "<h1>Tu saldo es %.3f" % (float(logged.credit),)
	else:
		res = "<h1>Recargar credito</h1>"
	res += print_template('credit', {'section': section, 'ext': user_ext})
	return res
Exemple #17
0
 def render_GET(self, request):
     logged = session.get_user(request)
     parts = request.path.split("/")
     if len(parts) > 2 and logged and logged.admin:
         section = parts[2]
         if section == 'check':
             output = check_prices()
             return print_template('content-pbx-lorea',
                                   {'content': "<pre>" + output + "</pre>"})
     res = list_prices_json()
     check_link = ""
     if logged and logged.admin:
         check_link = "<p><a href='/prices/check'>Chequear precios</a></p>"
     return print_template(
         'prices-pbx-lorea', {
             'links': check_link,
             'prices': res,
             'map': print_template('prices-map-pbx-lorea', {})
         })
Exemple #18
0
    def render_tinc_thread(self, request):
	t = Tinc()
	output = '<h2>Tinc</h2>\n'
	output += '<h3>Server</h3>\n'
	output += '<p>name: %s ip: %s address: %s</p>\n' % (t.name, t.subnet, t.address)
	output += '<h3>Peers</h3>\n'
	output += self.render_tincpeers(request, t)
        result = print_template('content-pbx-lorea', {'content': output})

        reactor.callFromThread(self.render_tinc_finish, request, result)
Exemple #19
0
 def render_GET(self, request):
     parts = request.path.split("/")
     if len(parts) > 2 and parts[2] == "pubkey":
         return self.tinc.get_public_key()
     user = session.get_user(request)
     if user and user.admin:
         content = self.render_tinc(request)
         # content = print_template('admin', {})
         return print_template("content-pbx-lorea", {"content": content})
     else:
         return redirectTo("/", request)
Exemple #20
0
    def render_GET(self, request):
	parts = request.path.split('/')
	if len(parts) > 2 and parts[2] == 'pubkey':
		return self.dundi.get_public_key()
	user = session.get_user(request)
	if user and user.admin:
		content = self.render_dundi(request)
	        #content = print_template('admin', {})
	        return print_template('content-pbx-lorea', {'content': content})
	else:
		return redirectTo("/", request)
Exemple #21
0
    def render_GET(self, request):

	output = "<li><a href='/prices'>precios</a></li>"
	output += "<li><a href='/docs'>documentacion</a></li>"

	user = session.get_user(request)
        main_page = print_template('portada', {})
	if user:
		user_ext = user.voip_id
		output_user = "******"+user.voip_id+"'>datos usuario</a></li>"
		output_user += "<li><a href='/voip'>listin telefonico</a></li>"
		output_user += "<li><a href='/stats'>estadisticas</a></li>"
		if user.admin == 1:
			output_user += "<li><a href='/admin'>admin</a></li>"
			user_ext += " eres admin"
		output_user += "<li><a href='/logout'>logout</a></li>"

	        return print_template('logged-pbx-lorea', {'LINKS':output, 'LOGGED_LINKS':output_user, 'user': user_ext, 'content': main_page})
	else:
		output += "<li><a href='/register'>registrarse</a></li>"
	        return print_template('home-pbx-lorea', {'LINKS':output, 'content': main_page})
Exemple #22
0
    def render_GET(self, request):
	res = None
	logged = session.get_user(request)
	if not logged:
		return redirectTo('/', request)
	parts = request.path.split("/")
	if len(parts) > 2 and logged.admin:
		user_ext = parts[2]
	else:
		user_ext = logged.voip_id
	args = {'ext': user_ext, 'lowquality': '', 'tls': '', 'srtp': '', 'voicemail': ''}
	options = get_options(user_ext)
	if 'codecs' in options and 'gsm' in options['codecs']:
		args['lowquality'] = ' checked '
	if options['tls']:
		args['tls'] = ' checked '
	if options['srtp']:
		args['srtp'] = ' checked '
	if options['voicemail']:
		args['voicemail'] = ' checked '
	content = print_template('options', args)
	return print_template('content-pbx-lorea', {'content': content})
Exemple #23
0
    def render_GET(self, request):
        logged = session.get_user(request)
        parts = request.path.split("/")
        if len(parts) > 3:
            section = parts[2]
            type = parts[3]
            c = ""
            o = Call
            if type == 'minutes':
                c = self.sum_minutes
            elif type == 'credit':
                c = self.sum_credit
            elif type == 'charges':
                c = self.sum_charges
                o = Charge
            else:
                return ""
            if section == 'hourly':
                return self.minutes_stats(request, 60 * 60, 24, c, o)
            if section == 'daily':
                return self.minutes_stats(request, 60 * 60 * 24, 10, c, o)
            elif section == 'weekly':
                return self.minutes_stats(request, 60 * 60 * 24 * 7, 10, c, o)
            elif section == 'monthly':
                return self.minutes_stats(request, 60 * 60 * 24 * 30, 10, c, o)
        else:
            if len(parts) > 2:
                section = parts[2]
                if section == 'host':
                    content = host_info.get_report()
                    return print_template("content-pbx-lorea",
                                          {'content': content})
            general_stats = self.general_stats()
            if logged and logged.admin:
                general_stats += "<p><a href='/stats/host'>host stats</a><br /><a href='/providers'>provider stats</a></p>"
            return print_template("graphs", {'stats': general_stats})

        return request.path
Exemple #24
0
    def render_GET(self, request):
	logged = session.get_user(request)
	parts = request.path.split("/")
	if len(parts) > 3:
		section = parts[2]
		type = parts[3]
		c = ""
		o = Call
		if type == 'minutes':
			c = self.sum_minutes
		elif type == 'credit':
			c = self.sum_credit
		elif type == 'charges':
			c = self.sum_charges
			o = Charge
		else:
			return ""
		if section == 'hourly':
			return self.minutes_stats(request, 60*60, 24, c, o)
		if section == 'daily':
			return self.minutes_stats(request, 60*60*24, 10, c, o)
		elif section == 'weekly':
			return self.minutes_stats(request, 60*60*24*7, 10, c, o)
		elif section == 'monthly':
			return self.minutes_stats(request, 60*60*24*30, 10, c, o)
	else:
		if len(parts) > 2:
			section = parts[2]
			if section == 'host':
				content = host_info.get_report()
				return print_template("content-pbx-lorea", {'content': content})
		general_stats = self.general_stats()
		if logged and logged.admin:
			general_stats += "<p><a href='/stats/host'>host stats</a><br /><a href='/providers'>provider stats</a></p>"
		return print_template("graphs", {'stats': general_stats})

        return request.path
Exemple #25
0
    def render_GET(self, request):
	res = None
	logged = session.get_user(request)

	parts = request.path.split("/")
	if len(parts) > 2:
		section = parts[2]
		if section in ['add', 'transfer'] and logged:
			res = self.credit_request(section, request, logged)
	if not res:
		return redirectTo("/", request)
	elif isinstance(res, str):
		return print_template('content-pbx-lorea', {'content': res})
	else:
		return res
Exemple #26
0
 def render_btc(self, logged, user, wallet):
     address = wallet.get_address(user.id)
     qr = ' <a href="https://blockchain.info/qr?data=%s&size=300"><img src="/tpl/images/qr.png" /></a>' % (address,)
     bitcoin = '<b>' + address + '</b>' + qr
     if user.wallets and (user.wallets[0].received or user.wallets[0].unconfirmed):
         user_wallet = user.wallets[0]
         pending = float(user_wallet.received - user_wallet.accounted)
         bitcoin += "<br />Saldo: %.4f" % (pending,)
         if user_wallet.unconfirmed:
             bitcoin += " (" + str(user_wallet.unconfirmed) + " sin confirmar)"
         if pending > 0:
             bitcoin += "<br />"
             bitcoin += print_template('bitcoin-trade', {'ticker': str(ticker.price),
                                       'pending': str(pending)})
     else:
         bitcoin += '<p>Puedes enviar fondos a la direccion bitcoin de tu cuenta para recargar credito.</p>'
     return bitcoin
Exemple #27
0
    def render_GET(self, request):
	logged = session.get_user(request)
	if not logged:
		return redirectTo("/", request)

	parts = request.path.split("/")
	if len(parts) > 3 and parts[2] == 'message':
		msg_id = parts[3]
		return self.render_voice_message(request, logged, msg_id)
	if len(parts) > 2 and logged.admin:
		user_ext = parts[2]
	else:
		user_ext = logged.voip_id

	request.setHeader('Cache-Control', 'no-cache, must-revalidate') # http1.1
	request.setHeader('Pragma', 'no-cache') # http1.0
	res = self.render_mailbox(user_ext)
	return print_template('content-pbx-lorea', {'content': res})
Exemple #28
0
    def render_user(self, user_ext, request):
        model = Model()
        peer = model.query(SipPeer).filter_by(regexten=user_ext).first()
        creditlink = ''
        if peer:
            username = peer.name
        else:
            username = user_ext
        user = model.get_user_fromext(user_ext)
        logged = session.get_user(request)
        if user:
            credit = "%.3f" % (user.credit, )
            user_charges = charges.get_charges(user_ext)
            n_calls = len(user.calls)
            pager = self.render_pager(user_ext, n_calls)
            user_calls = calls.get_calls(user_ext, logged,
                                         10) + "<p>%s</p>" % (pager, )

            creditlink = ""
            if user.credit > 0:
                if user.voip_id == logged.voip_id:
                    creditlink += '<a href="/credit/transfer">Transferir</a>'
                else:
                    creditlink += '<a href="/credit/transfer/%s">Transferir</a>' % (
                        user.voip_id)
            if logged.admin:
                creditlink += ' <a href="/credit/add/%s">Crear</a>' % (
                    user.voip_id)
        else:
            credit = 0.0
            user_charges = ""
            user_calls = ""
        all_calls = self.render_user_calls(user_ext, request)
        args = {
            'ext': user_ext,
            'username': username,
            'credit': credit,
            'credit_link': creditlink,
            'calls': user_calls,
            'charges': user_charges,
            'all_calls': all_calls
        }
        return print_template('user-pbx-lorea', args)
Exemple #29
0
    def render_GET(self, request):
	"""
	Get response on this resource

	request -- twisted python request
	"""
	user = session.get_user(request)
	if not user or not user.admin:
		return redirectTo("/", request)
	try:
		parts = request.path.split("/")
	except:
		parts = ['','calls', 'all']
	if len(parts) > 2:
		if parts[2] == 'all':
			return self.render_all()
		else:
			return self.render_all(parts[2])
	else:
		return print_template('timeline', {})
Exemple #30
0
 def render_btc(self, logged, user, wallet):
     address = wallet.get_address(user.id)
     qr = ' <a href="https://blockchain.info/qr?data=%s&size=300"><img src="/tpl/images/qr.png" /></a>' % (
         address, )
     bitcoin = '<b>' + address + '</b>' + qr
     if user.wallets and (user.wallets[0].received
                          or user.wallets[0].unconfirmed):
         user_wallet = user.wallets[0]
         pending = float(user_wallet.received - user_wallet.accounted)
         bitcoin += "<br />Saldo: %.4f" % (pending, )
         if user_wallet.unconfirmed:
             bitcoin += " (" + str(
                 user_wallet.unconfirmed) + " sin confirmar)"
         if pending > 0:
             bitcoin += "<br />"
             bitcoin += print_template('bitcoin-trade', {
                 'ticker': str(ticker.price),
                 'pending': str(pending)
             })
     else:
         bitcoin += '<p>Puedes enviar fondos a la direccion bitcoin de tu cuenta para recargar credito.</p>'
     return bitcoin
Exemple #31
0
    def render_all_text(self):
	model = Model()
	calls = model.query(Call).order_by(desc(Call.timestamp)).limit(1000)
        origins = set()
        count_country = defaultdict(int)
        result = ""
        call_data = [['Origin', 'Destination', 'Country', 'Duration', 'Date']]
        for call in calls:
            country_data = ext2country(str(call.destination))
            count_country[country_data[0]+"-"+country_data[1]] += 1

            if call.user:
                origin = str(call.user.voip_id)
            	origins.add(str(call.user.voip_id))
            else:
                origin = "unknown"
            	origins.add('unknown')

            destination = str(call.destination)
            country_data = ": ".join(country_data)
            duration = "%.2f min" % (call.duration/60.0,)
            date = str(self.format_date(call.timestamp))

            call_data.append([origin, destination, country_data, duration, date])

        result += html.format_table(call_data)
        # country stats
        country_data = [['Country', 'Count']]
        for key, value in count_country.iteritems():
            country_data.append([key, str(value)])
        result += html.format_table(country_data)
        # number of origins
        origins = list(origins)
        origins.sort()
        result += "<p>Origins (%s): %s</p>" % (len(origins), str(origins))
	return print_template('content-pbx-lorea', {'content': result})
Exemple #32
0
    def render_register(self, args={'user':'', 'password':'', 'email':'', 'error': ''}):
	content = print_template('register', args)
	return print_template('content-pbx-lorea', {'content': content})
Exemple #33
0
    def render_GET(self, request):
        user = session.get_user(request)
        if not user:
            return redirectTo("/", request)
        model = Model()
        output = cli.run_command('sip show peers')
        lines = output.split("\n")
        res = ""
        formatted = {
            "local":
            "<tr><th>Nombre</th><th>Ext</th><th>Estado</th><th>Latencia</th><tr>\n",
            "channels":
            "<tr><th>Nombre</th><th>Estado</th><th>Latencia</th><tr>\n",
            "end":
            "<tr><th>Nombre</th><th>Ext</th><th>Estado</th><th>Latencia</th><tr>\n"
        }
        for line in lines[1:]:
            line = line.replace(" D ", "")
            line = line.replace(" N ", "")
            line = line.replace(" a ", "")
            line = line.replace(" A ", "")
            line = line.replace("Cached RT", "")
            parts = line.split()
            parts = map(lambda s: s.strip("()"), parts)
            if len(parts) > 8 or len(parts) <= 3:
                continue
            peer_name = parts[0].split("/")[0]
            ext = None
            peer = model.query(SipPeer).filter_by(name=peer_name).first()
            if peer:
                ext = peer.regexten

            if ("OK" in line
                    or "LAGGED" in line) and ext:  # and "192.168." in line:
                # line = self.add_ip_href(line)
                dest = 'local'
            elif ext:
                dest = 'end'
            else:
                dest = 'channels'
            if len(parts) > 4:
                # connected
                if dest == 'channels':
                    output = "<tr><td>%s</td><td>%s</td><td>%sms</td><tr>" % (
                        peer_name, parts[3], parts[4])
                else:
                    output = "<tr><td>%s</td><td>%s</td><td>%s</td><td>%sms</td><tr>" % (
                        peer_name, ext, parts[3], parts[4])
            elif len(parts) > 3:
                if dest == 'channels':
                    output = "<tr><td>%s</td><td>%s</td><td></td>" % (
                        peer_name, parts[3])
                else:
                    output = "<tr><td>%s</td><td>%s</td><td>%s</td><td></td>" % (
                        peer_name, ext, parts[3])
            else:
                print "not enough parts", parts
                continue
            formatted[dest] += output + "\n"
        res += "<h2>Local</h2>"
        res += "<table>"
        res += formatted['local']
        res += "</table>"
        if user.admin:
            res += "<h2>Channels</h2><table>"
            res += formatted['channels']
            res += "</table>"
        res += "<h2>Other</h2><table>"
        res += formatted['end']
        res += "</table><pre>"
        res += "<h2>Calls</h2>"
        res += cli.run_command('core show calls')
        res += "</pre><pre>"
        res += cli.run_command('core show uptime')
        res += "</pre>"
        return print_template('content-pbx-lorea', {'content': res})
Exemple #34
0
    def render_GET(self, request):
	user = session.get_user(request)
	if not user:
		return redirectTo("/", request)
	model = Model()
	output = cli.run_command('sip show peers')
	lines = output.split("\n")
	res = ""
	formatted = {"local": "<tr><th>Nombre</th><th>Ext</th><th>Estado</th><th>Latencia</th><tr>\n",
		     "channels": "<tr><th>Nombre</th><th>Estado</th><th>Latencia</th><tr>\n",
		     "end": "<tr><th>Nombre</th><th>Ext</th><th>Estado</th><th>Latencia</th><tr>\n"}
	for line in lines[1:]:
		line = line.replace(" D ", "")
		line = line.replace(" N ", "")
		line = line.replace(" a ", "")
		line = line.replace(" A ", "")
		line = line.replace("Cached RT", "")
		parts = line.split()
		parts = map(lambda s: s.strip("()"), parts)
		if len(parts) > 8 or len(parts) <= 3 :
			continue
		peer_name = parts[0].split("/")[0]
		ext = None
		peer = model.query(SipPeer).filter_by(name=peer_name).first()
		if peer:
			ext = peer.regexten

		if (" OK" in line or "LAGGED" in line) and ext: # and "192.168." in line:
			# line = self.add_ip_href(line)
			dest = 'local'
		elif ext:
			dest = 'end'
		else:
			dest = 'channels'
		if len(parts) > 4:
			# connected
			if dest == 'channels':
				output = "<tr><td>%s</td><td>%s</td><td>%sms</td><tr>" % (peer_name, parts[3], parts[4])
			else:
				output = "<tr><td>%s</td><td>%s</td><td>%s</td><td>%sms</td><tr>" % (peer_name, ext, parts[3], parts[4])
		elif len(parts) > 3:
			if dest == 'channels':
				output = "<tr><td>%s</td><td>%s</td><td></td>" % (peer_name, parts[3])
			else:
				output = "<tr><td>%s</td><td>%s</td><td>%s</td><td></td>" % (peer_name, ext, parts[3])
		else:
			print "not enough parts", parts
			continue
		formatted[dest] += output+"\n"
	res += "<h2>Local</h2>"
	res += "<table>"
	res += formatted['local']
	res += "</table>"
	if user.admin:
		res += "<h2>Channels</h2><table>"
		res += formatted['channels']
		res += "</table>"
	res += "<h2>Other</h2><table>"
	res += formatted['end']
	res += "</table><pre>"
	res += "<h2>Calls</h2>"
	res += cli.run_command('core show calls')
	res += "</pre><pre>"
	res += cli.run_command('core show uptime')
	res += "</pre>"
	return print_template('content-pbx-lorea', {'content': res})