All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.infinispan.manager.CacheManagerInfo Maven / Gradle / Ivy

There is a newer version: 15.1.0.Dev04
Show newest version
package org.infinispan.manager;

import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.TreeSet;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import org.infinispan.commons.dataconversion.internal.Json;
import org.infinispan.commons.dataconversion.internal.JsonSerialization;
import org.infinispan.commons.util.Immutables;
import org.infinispan.commons.util.Version;
import org.infinispan.configuration.ConfigurationManager;
import org.infinispan.registry.InternalCacheRegistry;
import org.infinispan.remoting.transport.Address;
import org.infinispan.remoting.transport.Transport;
import org.infinispan.security.actions.SecurityActions;
import org.infinispan.topology.LocalTopologyManager;

/**
 * @since 10.0
 */
public class CacheManagerInfo implements JsonSerialization {

   public static final List LOCAL_NODE = Collections.singletonList("local");
   private final DefaultCacheManager cacheManager;
   private final ConfigurationManager configurationManager;
   private final InternalCacheRegistry internalCacheRegistry;
   private final LocalTopologyManager localTopologyManager;

   public CacheManagerInfo(DefaultCacheManager cacheManager,
                           ConfigurationManager configurationManager,
                           InternalCacheRegistry internalCacheRegistry,
                           LocalTopologyManager localTopologyManager) {
      this.cacheManager = cacheManager;
      this.configurationManager = configurationManager;
      this.internalCacheRegistry = internalCacheRegistry;
      this.localTopologyManager = localTopologyManager;
   }

   public String getCoordinatorAddress() {
      Transport transport = getTransport();
      return transport == null ? "N/A" : transport.getCoordinator().toString();
   }

   public boolean isCoordinator() {
      Transport transport = getTransport();
      return transport != null && transport.isCoordinator();
   }

   private Transport getTransport() {
      return SecurityActions.getGlobalComponentRegistry(cacheManager).getComponent(Transport.class);
   }

   public String getCacheManagerStatus() {
      return cacheManager.getStatus().toString();
   }

   public Set getDefinedCaches() {
      return cacheManager.getCacheNames().stream().map(c -> {
         boolean started = cacheManager.getCaches().containsKey(c);
         return new BasicCacheInfo(c, started);
      }).collect(Collectors.toSet());
   }

   public Set getCacheConfigurationNames() {
      Set names = new TreeSet<>(configurationManager.getDefinedConfigurations());
      internalCacheRegistry.filterPrivateCaches(names);
      if (names.isEmpty())
         return Collections.emptySet();
      else
         return Immutables.immutableSetWrap(names);
   }

   public long getCreatedCacheCount() {
      return getCacheNames().count();
   }

   public Stream getCacheNames() {
      return cacheManager.getCaches().keySet().stream().filter(c -> !internalCacheRegistry.isInternalCache(c));
   }

   public long getRunningCacheCount() {
      return cacheManager.getCaches().keySet().stream().filter(c -> cacheManager.isRunning(c) && !internalCacheRegistry.isInternalCache(c)).count();
   }

   public String getVersion() {
      return Version.getVersion();
   }

   public String getName() {
      return configurationManager.getGlobalConfiguration().cacheManagerName();
   }

   public String getNodeName() {
      Transport transport = getTransport();
      if (transport == null) return getNodeAddress();
      return transport.localNodeName();
   }

   public String getNodeAddress() {
      return cacheManager.getLogicalAddressString();
   }

   public String getPhysicalAddresses() {
      Transport transport = getTransport();
      if (transport == null) return "local";
      List
address = transport.getPhysicalAddresses(); return address == null ? "local" : address.toString(); } public List getPhysicalAddressesRaw() { Transport transport = getTransport(); if (transport == null) return LOCAL_NODE; List
address = transport.getPhysicalAddresses(); return address == null ? LOCAL_NODE : address.stream().map(Object::toString).collect(Collectors.toList()); } public List getClusterMembers() { Transport transport = getTransport(); if (transport == null) return LOCAL_NODE; return transport.getMembers().stream().map(Objects::toString).collect(Collectors.toList()); } public List getClusterMembersPhysicalAddresses() { Transport transport = getTransport(); if (transport == null) return LOCAL_NODE; List
addressList = transport.getMembersPhysicalAddresses(); return addressList.stream().map(Objects::toString).collect(Collectors.toList()); } public int getClusterSize() { Transport transport = getTransport(); if (transport == null) return 1; return transport.getMembers().size(); } public String getClusterName() { return configurationManager.getGlobalConfiguration().transport().clusterName(); } public String getLocalSite() { Transport transport = getTransport(); if (transport == null) return "local"; return transport.localSiteName(); } public Collection getSites() { Transport transport = getTransport(); return Optional.ofNullable(transport) .map(Transport::getSitesView) .orElseGet(Collections::emptySet); } public boolean isRelayNode() { Transport transport = getTransport(); return transport != null && transport.isSiteCoordinator(); } public Boolean isRebalancingEnabled() { try { return localTopologyManager.isRebalancingEnabled(); } catch (Exception e) { // Ignore the error return null; } } public Collection getRelayNodesAddress() { Transport transport = getTransport(); if (transport == null) { return LOCAL_NODE; } return transport.getRelayNodesAddress().stream().map(Objects::toString).collect(Collectors.toList()); } public boolean isTracingEnabled() { return cacheManager.getConfigurationManager() .getGlobalConfiguration().tracing().enabled(); } @Override public Json toJson() { Json result = Json.object() .set("version", getVersion()) .set("name", getName()) .set("coordinator", isCoordinator()) .set("cache_configuration_names", Json.make(getCacheConfigurationNames())) .set("cluster_name", getClusterName()) .set("physical_addresses", getPhysicalAddresses()) .set("coordinator_address", getCoordinatorAddress()) .set("cache_manager_status", getCacheManagerStatus()) .set("created_cache_count", getCreatedCacheCount()) .set("running_cache_count", getRunningCacheCount()) .set("node_address", getNodeAddress()) .set("cluster_members", Json.make(getClusterMembers())) .set("cluster_members_physical_addresses", Json.make(getClusterMembersPhysicalAddresses())) .set("cluster_size", getClusterSize()) .set("defined_caches", Json.make(getDefinedCaches())) .set("local_site", getLocalSite()) .set("relay_node", isRelayNode()) .set("relay_nodes_address", Json.make(getRelayNodesAddress())) .set("sites_view", Json.make(getSites())) .set("tracing_enabled", isTracingEnabled()); Boolean rebalancingEnabled = isRebalancingEnabled(); if (rebalancingEnabled != null) { result.set("rebalancing_enabled", rebalancingEnabled); } return result; } static class BasicCacheInfo implements JsonSerialization { String name; boolean started; BasicCacheInfo(String name, boolean started) { this.name = name; this.started = started; } public String getName() { return name; } public boolean isStarted() { return started; } @Override public Json toJson() { return Json.object("name", name).set("started", started); } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy