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;
    }
}