svc/connect.in: Fix latent type errors in info output.
[tripe] / svc / connect.in
index fe8d73b..aaf68de 100644 (file)
@@ -451,7 +451,7 @@ class PingPeer (object):
         me._sabotage = False
       else:
         S.kill(me._peer)
-    except TripeError, e:
+    except T.TripeError, e:
       if e.args[0] == 'unknown-peer': me._pinger.kill(me._peer)
 
   def event(me, code, stuff):
@@ -510,23 +510,26 @@ class PingPeer (object):
 
   def info(me):
     if not me._nping:
-      mean = sd = '-'
+      mean = sd = min = max = '-'
     else:
-      mean = me._sigma_t/me._nping
-      sd = sqrt(me._sigma_t2/me._nping - mean*mean)
+      meanval = me._sigma_t/me._nping
+      mean = '%.1fms' % meanval
+      sd = '%.1fms' % sqrt(me._sigma_t2/me._nping - meanval*meanval)
+      min = '%.1fms' % me._min
+      max = '%.1fms' % me._max
     n = me._nping + me._nlost
     if not n: pclost = '-'
     else: pclost = '%d' % ((100*me._nlost + n//2)//n)
     return { 'last-ping': me._last,
-             'mean-ping': '%.1fms' % mean,
-             'sd-ping': '%.1fms' % sd,
+             'mean-ping': mean,
+             'sd-ping': sd,
              'n-ping': '%d' % me._nping,
              'n-lost': '%d' % me._nlost,
              'percent-lost': pclost,
-             'min-ping': '%.1fms' % me._min,
-             'max-ping': '%.1fms' % me._max,
+             'min-ping': min,
+             'max-ping': max,
              'state': me._timer and 'idle' or 'check',
-             'failures': me._failures }
+             'failures': str(me._failures) }
 
   @T._callback
   def _time(me):
@@ -717,11 +720,12 @@ def disownpeer(peer):
     T.Coroutine(run_ifupdown, name = 'ifdown %s' % peer.name) \
         .switch('ifdown', peer)
 
-def addpeer(peer, addr):
+def addpeer(peer, addr, ephemp):
   """
   Process a connect request from a new peer PEER on address ADDR.
 
-  Any existing peer with this name is disconnected from the server.
+  Any existing peer with this name is disconnected from the server.  EPHEMP
+  is the default ephemeral-ness state for the new peer.
   """
   if peer.name in S.list():
     S.kill(peer.name)
@@ -734,6 +738,8 @@ def addpeer(peer, addr):
           mobile = peer.get('mobile', filter = boolean, default = False),
           knock = peer.get('knock', default = None),
           cork = peer.get('cork', filter = boolean, default = False),
+          ephemeral = peer.get('ephemeral', filter = boolean,
+                               default = ephemp),
           *addr)
   except T.TripeError, exc:
     raise T.TripeJobError(*exc.args)
@@ -778,7 +784,7 @@ def notify(_, code, *rest):
       S.warn(['connect', 'knock-tag-mismatch',
               'peer', pname, 'public-key-tag', ktag])
       return
-    T.spawn(addpeer, p, rest[1:])
+    T.spawn(addpeer, p, rest[1:], True)
 
 ###--------------------------------------------------------------------------
 ### Command implementation.
@@ -813,7 +819,7 @@ def cmd_active(name):
   addr = peer.get('peer')
   if addr == 'PASSIVE':
     raise T.TripeJobError('passive-peer', name)
-  addpeer(peer, M.split(addr, quotep = True)[0])
+  addpeer(peer, M.split(addr, quotep = True)[0], True)
 
 def cmd_listactive():
   """
@@ -839,7 +845,7 @@ def cmd_info(name):
   for i in items:
     try: v = d[i]
     except KeyError: v = peer.get(i)
-    T.svcinfo('%s=%s' % (i, v))
+    T.svcinfo('%s=%s' % (i, v.replace('\n', ' ')))
 
 def cmd_userpeer(user):
   """
@@ -875,7 +881,7 @@ def cmd_passive(*args):
     addr = cr.parent.switch()
     if addr is None:
       raise T.TripeJobError('connect-timeout')
-    addpeer(peer, addr)
+    addpeer(peer, addr, True)
   finally:
     del chalmap[chal]
 
@@ -911,7 +917,7 @@ def setup():
     for name in M.split(autos)[0]:
       try:
         peer = Peer(name, cdb)
-        addpeer(peer, M.split(peer.get('peer'), quotep = True)[0])
+        addpeer(peer, M.split(peer.get('peer'), quotep = True)[0], False)
       except T.TripeJobError, err:
         S.warn('connect', 'auto-add-failed', name, *err.args)