assistant: Sanitize XMPP presence information logged for debugging.

This commit is contained in:
Joey Hess 2013-04-24 21:13:10 -04:00
parent affb89a699
commit 46529c0129
3 changed files with 43 additions and 16 deletions

View file

@ -84,7 +84,7 @@ xmppClient urlrenderer d creds =
inAssistant $ do inAssistant $ do
modifyDaemonStatus_ $ \s -> s modifyDaemonStatus_ $ \s -> s
{ xmppClientID = Just $ xmppJID creds } { xmppClientID = Just $ xmppJID creds }
debug ["connected", show selfjid] debug ["connected", logJid selfjid]
xmppThread $ receivenotifications selfjid xmppThread $ receivenotifications selfjid
forever $ do forever $ do
@ -94,7 +94,7 @@ xmppClient urlrenderer d creds =
receivenotifications selfjid = forever $ do receivenotifications selfjid = forever $ do
l <- decodeStanza selfjid <$> getStanza l <- decodeStanza selfjid <$> getStanza
inAssistant $ debug inAssistant $ debug
["received:", show $ map sanitizeXMPPEvent l] ["received:", show $ map logXMPPEvent l]
mapM_ (handle selfjid) l mapM_ (handle selfjid) l
handle selfjid (PresenceMessage p) = do handle selfjid (PresenceMessage p) = do
@ -123,8 +123,8 @@ xmppClient urlrenderer d creds =
let msg' = readdressNetMessage msg c let msg' = readdressNetMessage msg c
inAssistant $ debug inAssistant $ debug
[ "sending to new client:" [ "sending to new client:"
, show c , logJid jid
, show $ sanitizeNetMessage msg' , show $ logNetMessage msg'
] ]
a <- inAssistant $ convertNetMsg msg' selfjid a <- inAssistant $ convertNetMsg msg' selfjid
a a
@ -139,9 +139,28 @@ data XMPPEvent
| ProtocolError ReceivedStanza | ProtocolError ReceivedStanza
deriving Show deriving Show
sanitizeXMPPEvent :: XMPPEvent -> XMPPEvent logXMPPEvent :: XMPPEvent -> String
sanitizeXMPPEvent (GotNetMessage m) = GotNetMessage $ sanitizeNetMessage m logXMPPEvent (GotNetMessage m) = logNetMessage m
sanitizeXMPPEvent v = v logXMPPEvent (PresenceMessage p) = logPresence p
logXMPPEvent (Ignorable (ReceivedPresence p)) = "Ignorable " ++ logPresence p
logXMPPEvent v = show v
logPresence :: Presence -> String
logPresence (p@Presence { presenceFrom = Just jid }) = unwords
[ "Presence from"
, logJid jid
, show $ extractGitAnnexTag p
]
logPresence _ = "Presence from unknown"
logJid :: JID -> String
logJid jid =
let name = T.unpack (buddyName jid)
resource = maybe "" (T.unpack . strResource) (jidResource jid)
in take 1 name ++ show (length name) ++ "/" ++ resource
logClient :: Client -> String
logClient (Client jid) = logJid jid
{- Decodes an XMPP stanza into one or more events. -} {- Decodes an XMPP stanza into one or more events. -}
decodeStanza :: JID -> ReceivedStanza -> [XMPPEvent] decodeStanza :: JID -> ReceivedStanza -> [XMPPEvent]
@ -180,7 +199,7 @@ decodeStanza _ s = [Unknown s]
relayNetMessage :: JID -> Assistant (XMPP ()) relayNetMessage :: JID -> Assistant (XMPP ())
relayNetMessage selfjid = do relayNetMessage selfjid = do
msg <- waitNetMessage msg <- waitNetMessage
debug ["sending:", show $ sanitizeNetMessage msg] debug ["sending:", logNetMessage msg]
a1 <- handleImportant msg a1 <- handleImportant msg
a2 <- convert msg a2 <- convert msg
return (a1 >> a2) return (a1 >> a2)
@ -197,7 +216,7 @@ relayNetMessage selfjid = do
then do then do
clients <- maybe [] (S.toList . buddyAssistants) clients <- maybe [] (S.toList . buddyAssistants)
<$> getBuddy (genBuddyKey tojid) <<~ buddyList <$> getBuddy (genBuddyKey tojid) <<~ buddyList
debug ["exploded undirected message to clients", show clients] debug ["exploded undirected message to clients", unwords $ map logClient clients]
return $ forM_ (clients) $ \(Client jid) -> return $ forM_ (clients) $ \(Client jid) ->
putStanza $ pushMessage pushstage jid selfjid putStanza $ pushMessage pushstage jid selfjid
else return $ putStanza $ pushMessage pushstage tojid selfjid else return $ putStanza $ pushMessage pushstage tojid selfjid

View file

@ -10,11 +10,12 @@ module Assistant.Types.NetMessager where
import Common.Annex import Common.Annex
import Assistant.Pairing import Assistant.Pairing
import Data.Text (Text)
import Control.Concurrent.STM import Control.Concurrent.STM
import Control.Concurrent.MSampleVar import Control.Concurrent.MSampleVar
import Data.ByteString (ByteString) import Data.ByteString (ByteString)
import qualified Data.ByteString.Char8 as B8 import qualified Data.ByteString.Char8 as B8
import Data.Text (Text)
import qualified Data.Text as T
import qualified Data.Set as S import qualified Data.Set as S
import qualified Data.Map as M import qualified Data.Map as M
@ -67,14 +68,20 @@ readdressNetMessage (Pushing _ stage) c = Pushing c stage
readdressNetMessage m _ = m readdressNetMessage m _ = m
{- Convert a NetMessage to something that can be logged. -} {- Convert a NetMessage to something that can be logged. -}
sanitizeNetMessage :: NetMessage -> NetMessage logNetMessage :: NetMessage -> String
sanitizeNetMessage (Pushing c stage) = Pushing c $ case stage of logNetMessage (Pushing c stage) = show $ Pushing (logClientID c) $
ReceivePackOutput n _ -> ReceivePackOutput n elided case stage of
SendPackOutput n _ -> SendPackOutput n elided ReceivePackOutput n _ -> ReceivePackOutput n elided
s -> s SendPackOutput n _ -> SendPackOutput n elided
s -> s
where where
elided = B8.pack "<elided>" elided = B8.pack "<elided>"
sanitizeNetMessage m = m logNetMessage (PairingNotification stage c uuid) =
show $ PairingNotification stage (logClientID c) uuid
logNetMessage m = show m
logClientID :: ClientID -> ClientID
logClientID c = T.concat [T.take 1 c, T.pack $ show $ T.length c]
{- Things that initiate either side of a push, but do not actually send data. -} {- Things that initiate either side of a push, but do not actually send data. -}
isPushInitiation :: PushStage -> Bool isPushInitiation :: PushStage -> Bool

1
debian/changelog vendored
View file

@ -28,6 +28,7 @@ git-annex (4.20130418) UNRELEASED; urgency=low
* assistant: Several improvements to performance and behavior when * assistant: Several improvements to performance and behavior when
performing bulk adds of a large number of files (tens to hundreds performing bulk adds of a large number of files (tens to hundreds
of thousands). of thousands).
* assistant: Sanitize XMPP presence information logged for debugging.
-- Joey Hess <joeyh@debian.org> Thu, 18 Apr 2013 16:22:48 -0400 -- Joey Hess <joeyh@debian.org> Thu, 18 Apr 2013 16:22:48 -0400