package org.limewire.friend.impl; import java.util.Map; import java.util.HashMap; import com.google.inject.Inject; import org.limewire.listener.EventBean; import org.limewire.listener.EventUtils; import org.limewire.friend.api.FriendConnectionEvent; import org.limewire.friend.api.FriendConnection; import org.limewire.friend.api.Friend; import org.limewire.friend.api.FriendPresence; import org.limewire.friend.api.feature.LimewireFeature; import org.limewire.inspection.InspectableContainer; import org.limewire.inspection.InspectionPoint; import org.limewire.inspection.Inspectable; import org.limewire.inspection.InspectionHistogram; import org.limewire.inject.LazySingleton; /** * Friend feature uasge inspections. */ @LazySingleton public class FriendInspections { // used for inspecting stats of most recent chat connection private EventBean<FriendConnectionEvent> connectionEventBean; @SuppressWarnings("unused") @InspectableContainer private class LazyInspectableContainer { // keeping previous inspection point name for backward compatibility @InspectionPoint("xmpp service") private final Inspectable inspectable = new Inspectable() { @Override public Object inspect() { FriendConnection conn = EventUtils.getSource(connectionEventBean); boolean isLoggedIn = (conn != null) && conn.isLoggedIn(); Map<Object, Object> map = new HashMap<Object, Object>(); map.put("loggedIn", isLoggedIn); collectFriendStatistics(map, conn); return map; } private void collectFriendStatistics(Map<Object, Object> data, FriendConnection connection) { int count = 0; InspectionHistogram<Integer> presencesHistogram = new InspectionHistogram<Integer>(); if (connection != null) { for (Friend user : connection.getFriends()) { Map<String, FriendPresence> presences = user.getPresences(); presencesHistogram.count(presences.size()); for (FriendPresence presence : presences.values()) { if (presence.hasFeatures(LimewireFeature.ID)) { count++; // break from inner presence loop, count each user only once break; } } } } data.put("limewire friends", count); data.put("presences", presencesHistogram.inspect()); } }; } @Inject public FriendInspections(EventBean<FriendConnectionEvent> connectionEventBean) { this.connectionEventBean = connectionEventBean; } }