MapStatsCallable.java
package com.tradecloud.hazelcast;
import com.hazelcast.cluster.Member;
import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.map.IMap;
import com.hazelcast.map.LocalMapStats;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MapStatsCallable implements java.util.concurrent.Callable<Map<String, Object>>, Serializable {
private static final long serialVersionUID = 1L;
@Override
public Map<String, Object> call() {
HazelcastInstance hz = Hazelcast.getHazelcastInstanceByName("tradecloud-hz-instance");
Member localMember = hz.getCluster().getLocalMember();
Map<String, Object> info = new HashMap<>();
info.put("instance", hz.getName());
info.put("cluster", hz.getConfig().getClusterName());
info.put("memberAddress", localMember.getAddress().toString());
info.put("memberUuid", localMember.getUuid().toString());
List<Map<String, Object>> stats = new ArrayList<>();
for (String mapName : hz.getDistributedObjects()
.stream()
.filter(o -> o instanceof IMap)
.map(o -> o.getName())
.toList()) {
IMap<?, ?> map = hz.getMap(mapName);
LocalMapStats mapStats = map.getLocalMapStats();
Map<String, Object> stat = new HashMap<>();
stat.put("map", mapName);
stat.put("ownedEntryCount", mapStats.getOwnedEntryCount());
stat.put("hits", mapStats.getHits());
stat.put("gets", mapStats.getGetOperationCount());
stat.put("evictions", mapStats.getEvictionCount());
stat.put("lastAccessTime", mapStats.getLastAccessTime());
stat.put("memoryCostBytes", mapStats.getOwnedEntryMemoryCost());
stats.add(stat);
}
info.put("mapStats", stats);
// Optional: add more info if needed
return info;
}
}