This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
Max gerrit-no-reply at lists.osmocom.org
Review at https://gerrit.osmocom.org/2133
twisted_ipa.py: make debug logging more robust
Do not print anything to stdout directly - use proper logger object
instead: either the one supplied by IPAFactory user or default to NO-OP
NullHandler logger. While at it, also move version string to comply with
PEP8.
Change-Id: Ic3417095a6e8848f0acabb46a9e64c0197b736e2
Related: SYS#3028
---
M openbsc/contrib/twisted_ipa.py
1 file changed, 30 insertions(+), 22 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/openbsc refs/changes/33/2133/1
diff --git a/openbsc/contrib/twisted_ipa.py b/openbsc/contrib/twisted_ipa.py
index 8d0ef9f..f688aef 100755
--- a/openbsc/contrib/twisted_ipa.py
+++ b/openbsc/contrib/twisted_ipa.py
@@ -22,11 +22,13 @@
*/
"""
+__version__ = "v0.4" # bump this on every non-trivial change
+
from ipa import Ctrl, IPA
from twisted.internet.protocol import ReconnectingClientFactory
from twisted.internet import reactor
from twisted.protocols import basic
-import argparse
+import argparse, logging, logging.handlers
class IPACommon(basic.Int16StringReceiver):
"""
@@ -37,8 +39,7 @@
"""
Debug print helper
"""
- if self.factory.debug:
- print(line)
+ self.factory.log.debug(line)
def osmo_CTRL(self, data):
"""
@@ -257,7 +258,7 @@
Keep reconnection logic working by calling routine from CCM
Initiate CCM upon connection
"""
- print('IPA server connection made!')
+ self.dbg('IPA server connection made!')
super(IPAServer, self).connectionMade()
self.transport.write(IPA().id_get())
@@ -273,7 +274,7 @@
Send TRAP upon connection
Note: we can't use sendString() because of it's incompatibility with IPA interpretation of length prefix
"""
- print('CTRL server connection made!')
+ self.dbg('CTRL server connection made!')
super(CtrlServer, self).connectionMade()
self.transport.write(Ctrl().trap('LOL', 'what'))
self.transport.write(Ctrl().trap('rulez', 'XXX'))
@@ -285,14 +286,14 @@
"""
CTRL SET command: always succeed
"""
- print('SET [%s] %s' % (op_id, v))
+ self.dbg('SET [%s] %s' % (op_id, v))
self.reply('SET_REPLY %s %s' % (op_id, v))
def ctrl_GET(self, data, op_id, v):
"""
CTRL GET command: always fail
"""
- print('GET [%s] %s' % (op_id, v))
+ self.dbg('GET [%s] %s' % (op_id, v))
self.reply('ERROR %s No variable found' % op_id)
@@ -302,37 +303,39 @@
Note: so far we do not really need separate Factory for acting as a server due to protocol simplicity
"""
protocol = IPACommon
- debug = False
+ log = None
ccm_id = IPA().identity(unit=b'1515/0/1', mac=b'b0:0b:fa:ce:de:ad:be:ef', utype=b'sysmoBTS', name=b'StingRay', location=b'hell', sw=IPA.version.encode('utf-8'))
- def __init__(self, proto=None, debug=False, ccm_id=None):
+ def __init__(self, proto=None, log=None, ccm_id=None):
if proto:
self.protocol = proto
- if debug:
- self.debug = debug
if ccm_id:
self.ccm_id = ccm_id
+ if log:
+ self.log = log
+ else:
+ self.log = logging.getLogger('IPAFactory')
+ log.setLevel(logging.CRITICAL)
+ log.addHandler(logging.NullHandler)
def clientConnectionFailed(self, connector, reason):
"""
Only necessary for as debugging aid - if we can somehow set parent's class noisy attribute then we can omit this method
"""
- if self.debug:
- print('IPAFactory connection failed:', reason.getErrorMessage())
+ self.log.debug('IPAFactory connection failed:', reason.getErrorMessage())
ReconnectingClientFactory.clientConnectionFailed(self, connector, reason)
def clientConnectionLost(self, connector, reason):
"""
Only necessary for as debugging aid - if we can somehow set parent's class noisy attribute then we can omit this method
"""
- if self.debug:
- print('IPAFactory connection lost:', reason.getErrorMessage())
+ self.log.debug('IPAFactory connection lost:', reason.getErrorMessage())
ReconnectingClientFactory.clientConnectionLost(self, connector, reason)
if __name__ == '__main__':
p = argparse.ArgumentParser("Twisted IPA (module v%s) app" % IPA.version)
- p.add_argument('-v', '--version', action='version', version='%(prog)s v0.3')
+ p.add_argument('-v', '--version', action='version', version="%(prog)s " + __version__)
p.add_argument('-p', '--port', type=int, default=4250, help="Port to use for CTRL interface")
p.add_argument('-d', '--host', default='localhost', help="Adress to use for CTRL interface")
cs = p.add_mutually_exclusive_group()
@@ -343,29 +346,34 @@
ic.add_argument("--ctrl", action='store_true', help="use CTRL protocol")
args = p.parse_args()
test = False
+
+ log = logging.getLogger('TwistedIPA')
+ log.setLevel(logging.DEBUG)
+ log.addHandler(logging.StreamHandler(sys.stdout))
+
if args.ctrl:
if args.client:
# Start osmo-bsc to receive TRAP messages when osmo-bts-* connects to it
print('CTRL client, connecting to %s:%d' % (args.host, args.port))
- reactor.connectTCP(args.host, args.port, IPAFactory(CTRL, debug=True))
+ reactor.connectTCP(args.host, args.port, IPAFactory(CTRL, log))
test = True
if args.server:
# Use bsc_control.py to issue set/get commands
print('CTRL server, listening on port %d' % args.port)
- reactor.listenTCP(args.port, IPAFactory(CtrlServer, debug=True))
+ reactor.listenTCP(args.port, IPAFactory(CtrlServer, log))
test = True
if args.ipa:
if args.client:
# Start osmo-nitb which would initiate A-bis/IP session
print('IPA client, connecting to %s ports %d and %d' % (args.host, IPA.TCP_PORT_OML, IPA.TCP_PORT_RSL))
- reactor.connectTCP(args.host, IPA.TCP_PORT_OML, IPAFactory(CCM, debug=True))
- reactor.connectTCP(args.host, IPA.TCP_PORT_RSL, IPAFactory(CCM, debug=True))
+ reactor.connectTCP(args.host, IPA.TCP_PORT_OML, IPAFactory(CCM, log))
+ reactor.connectTCP(args.host, IPA.TCP_PORT_RSL, IPAFactory(CCM, log))
test = True
if args.server:
# Start osmo-bts-* which would attempt to connect to us
print('IPA server, listening on ports %d and %d' % (IPA.TCP_PORT_OML, IPA.TCP_PORT_RSL))
- reactor.listenTCP(IPA.TCP_PORT_RSL, IPAFactory(IPAServer, debug=True))
- reactor.listenTCP(IPA.TCP_PORT_OML, IPAFactory(IPAServer, debug=True))
+ reactor.listenTCP(IPA.TCP_PORT_RSL, IPAFactory(IPAServer, log))
+ reactor.listenTCP(IPA.TCP_PORT_OML, IPAFactory(IPAServer, log))
test = True
if test:
reactor.run()
--
To view, visit https://gerrit.osmocom.org/2133
To unsubscribe, visit https://gerrit.osmocom.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic3417095a6e8848f0acabb46a9e64c0197b736e2
Gerrit-PatchSet: 1
Gerrit-Project: openbsc
Gerrit-Branch: master
Gerrit-Owner: Max <msuraev at sysmocom.de>