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

com.gemstone.gemfire.internal.admin.CompoundRegionSnapshot Maven / Gradle / Ivy

There is a newer version: 2.0-BETA
Show newest version
/*
 * Copyright (c) 2010-2015 Pivotal Software, Inc. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you
 * may not use this file except in compliance with the License. You
 * may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
 * implied. See the License for the specific language governing
 * permissions and limitations under the License. See accompanying
 * LICENSE file.
 */

package com.gemstone.gemfire.internal.admin;

import java.util.*;
import com.gemstone.gemfire.cache.*;
import com.gemstone.gemfire.internal.i18n.LocalizedStrings;

/**
 * Presents an amalgam snapshot of all the {@linkplain
 * com.gemstone.gemfire.cache.Region regions} in a distributed
 * system. 
 */
public class CompoundRegionSnapshot implements RegionSnapshot {
  private static final long serialVersionUID = 6295026394298398004L;
  /** The name of the Region */
  private String name;
//   private String constraintClass;
  
  private long lastModifiedTime = 0L; //the lates modified time
  private long lastAccessTime   = 0L; //the latest access time
  private long numHits          = 0L; //sum of all hits
  private long numMisses        = 0L; //sum of all misses
  private float hitRatio        = 0f; //calculated from all
  private long hitResponders    = 0;
  private double hitRatioSum    = 0.0;
//  private int entryCount        = 0; //largest entryCount
//  private int subregionCount    = 0; //largest subregionCount

  //private Map individuals          = new HashMap();
  private Set allCapControllers    = new HashSet();
  private Set allListeners         = new HashSet();
  private Set allDataPolicies           = new HashSet();
  private Set allRegionTtl         = new HashSet();
  private Set allEntryTtl          = new HashSet();
  private HashSet allCustomTtl     = new HashSet();
  private Set allRegionIdleTimeout = new HashSet();
  private Set allEntryIdleTimeout  = new HashSet();
  private HashSet allCustomIdle    = new HashSet();
  private Set allScopes            = new HashSet();
  private Set allUserAttributes    = new HashSet();
  private Set allCacheLoaders      = new HashSet();
  private Set allCacheWriters      = new HashSet();
  private Set allLoadFactors       = new HashSet();
  private Set allInitialCaps       = new HashSet();
  private Set allConcLevels        = new HashSet();
  private Set allStatsEnabled      = new HashSet();
  private Set allKeyConstraints    = new HashSet();
  private Set allValueConstraints    = new HashSet();

  /**
   * Creates a new CompoundRegionSnapshot for the region
   * with the given name.
   */
  public CompoundRegionSnapshot(String regionName) {
    this.name = regionName;
  }

  /**
   * Amalgamates a RegionSnapshot into this
   * CompoundRegionSnapshot. 
   *
   * @param systemEntity
   *        The member of the distributed system that sent the
   *        snapshot
   * @param snap
   *        The snapshot to be amalgamated
   *
   * @throws IllegalArgumentException
   *         If snap is for a Region other
   *         than the one amalgamated by this snapshot.
   */
  public void addCache(GemFireVM systemEntity, RegionSnapshot snap) {
    if (!snap.getName().equals(this.name)) {
      throw new IllegalArgumentException(LocalizedStrings.CompoundRegionSnapshot_ALL_SNAPSHOTS_IN_A_COMPOUND_SNAPSHOT_MUST_HAVE_THE_SAME_NAME.toLocalizedString());
    }
    //individuals.put(systemEntity, snap);

    RegionAttributes ra = snap.getAttributes();
    if (ra != null) {
      CacheListener listener = ra.getCacheListener();
      if (listener != null) {
        allListeners.add(listener.toString());
      }

      CacheWriter writer = ra.getCacheWriter();
      if (writer != null) {
        allCacheWriters.add(writer.toString());
      }

      CacheLoader loader = ra.getCacheLoader();
      if (loader != null) {
        allCacheLoaders.add(loader);
      }

      allDataPolicies.add(ra.getDataPolicy());
      allRegionTtl.add(ra.getRegionTimeToLive());
      allEntryTtl.add(ra.getEntryTimeToLive());
      allCustomTtl.add(ra.getCustomEntryTimeToLive().toString());
      allRegionIdleTimeout.add(ra.getRegionIdleTimeout());
      allEntryIdleTimeout.add(ra.getEntryIdleTimeout());
      allCustomIdle.add(ra.getCustomEntryIdleTimeout().toString());
      allScopes.add(ra.getScope());    
      allLoadFactors.add(new Float(ra.getLoadFactor()));
      allInitialCaps.add(Integer.valueOf(ra.getInitialCapacity()));
      allConcLevels.add(Integer.valueOf(ra.getConcurrencyLevel()));
      allStatsEnabled.add(Boolean.valueOf(ra.getStatisticsEnabled()));
      allUserAttributes.add(snap.getUserAttribute());
      allKeyConstraints.add(ra.getKeyConstraint());
      allValueConstraints.add(ra.getValueConstraint());

//       if (constraintClass == null) {
//         Class clazz = ra.getKeyConstraint();
//         if (clazz != null) {
//           constraintClass = clazz.getName();
//         }
//       }
    }

    long modified = snap.getLastModifiedTime();
    if (modified > 0 && modified > this.lastModifiedTime) {
      this.lastModifiedTime = modified;
    }

    long access = snap.getLastAccessTime();
    if (access > 0 && access > this.lastAccessTime) {
      this.lastAccessTime = access;
    }

    long hitCount = snap.getNumberOfHits();
    if (hitCount > 0) {
      this.numHits += hitCount;
    }

    long missCount = snap.getNumberOfMisses();
    if (missCount > 0) {
      this.numMisses += missCount;
    }

    float hitRatio = snap.getHitRatio();
    if (hitRatio >= 0.00) {
      hitResponders++;
      hitRatioSum += hitRatio;
      this.hitRatio = (float)(hitRatioSum/hitResponders);      
    }
  }  

  /**
   * Returns the name of the Region whose information is
   * amalgamated in this snapshot.
   */
  public Object getName() {
    return this.name;
  }

  /**
   * Since a compound snapshot does not have
   * RegionAttributes, this method returns
   * null.
   */
  public RegionAttributes getAttributes() {
    return null;
  }

  /**
   * Since a compound snapshot does not have a
   * userAttributes, this method returns
   * null.
   */
  public Object getUserAttribute() {
    return null;
  }

  /**
   * Since a compound snapshot does not really represent a
   * Region, this method returns false.
   */
  public boolean isShared() {
    return false;
  }

  /**
   * Returns an {@link java.util.Iterator} of {@link java.lang.String}
   */
  public Iterator getAllCapacityControllers() {
    return allCapControllers.iterator();
  }

  /**
   * Returns an {@link java.util.Iterator} of {@link java.lang.String}
   */
  public Iterator getAllListeners() {
    return allListeners.iterator();
  }

  /**
   * Returns an Iterator containing the
   * toString of the CacheWriters of each
   * instance of this snapshot's region
   */
  public Iterator getAllCacheWriters() {
    return allCacheWriters.iterator();
  }

  /**
   * Returns an Iterator containing the
   * toString of the CacheLoaders of each
   * instance of this snapshot's region
   */
  public Iterator getAllCacheLoaders() {
    return allCacheLoaders.iterator();
  }

  /**
   * Returns an  {@link java.util.Iterator} of {@link com.gemstone.gemfire.cache.DataPolicy}
   */
  public Iterator getAllDataPolicies() {
    return allDataPolicies.iterator();
  }

  /**
   * Returns an {@link java.util.Iterator} of {@link com.gemstone.gemfire.cache.ExpirationAttributes}
   */
  public Iterator getAllRegionTtl() {
    return allRegionTtl.iterator();
  }
  
  /**
   * Returns an {@link java.util.Iterator} of {@link com.gemstone.gemfire.cache.ExpirationAttributes}
   */
  public Iterator getAllEntryTtl() {
    return allEntryTtl.iterator();
  }
  
  /**
   * Returns an Iterator containing the
   * toString of the custom TTL CustomExpiry's of each
   * instance of this snapshot's region
   */
  public Iterator getAllCustomTtl() {
    return allCustomTtl.iterator();
  }
  
  /**
   * Returns an {@link java.util.Iterator} of {@link com.gemstone.gemfire.cache.ExpirationAttributes}
   */
  public Iterator getAllRegionIdleTimeout() {
    return allRegionIdleTimeout.iterator();
  }

  
  /**
   * Returns an {@link java.util.Iterator} of {@link com.gemstone.gemfire.cache.ExpirationAttributes}
   */
  public Iterator getAllEntryIdleTimeout() {
    return allEntryIdleTimeout.iterator();
  }
  
  /**
   * Returns an Iterator containing the
   * toString of the custom idleTimeout CustomExpiry's of each
   * instance of this snapshot's region
   */
  public Iterator getAllCustomIdleTimeout() {
    return allCustomIdle.iterator();
  }
  /**
   * Returns an {@link java.util.Iterator} of {@link com.gemstone.gemfire.cache.Scope}
   */
  public Iterator getAllScopes() {
    return allScopes.iterator();
  }

  /**
   * Returns an {@link java.util.Iterator} of float
   */
  public Iterator getAllLoadFactors() {
    return allLoadFactors.iterator();
  }

  /**
   * Returns an {@link java.util.Iterator} of int
   */
  public Iterator getAllInitialCapacities() {
    return allInitialCaps.iterator();
  }

  /**
   * Returns an {@link java.util.Iterator} of int
   */
  public Iterator getAllConcurrencyLevels() {
    return allConcLevels.iterator();
  }

  /**
   * Returns an {@link java.util.Iterator} of Boolean -
   * which may be silly
   */
  public Iterator getAllStatsEnabled() {
    return allStatsEnabled.iterator();
  }

  /**
   * Returns an Iterator of the
   * userAttributes (as Objectss) over all
   * instances of this snapshot's Region.
   */
  public Iterator getAllUserAttributes() {
    return allUserAttributes.iterator();
  }

  /**
   * Returns an Iterator of the
   * keyConstraints (as Strings) over all
   * instances of this snapshot's Region.
   */
  public Iterator getAllKeyConstraint() {
    return allKeyConstraints.iterator();
  }

  /**
   * Returns an Iterator of the
   * valueConstraints (as Strings) over all
   * instances of this snapshot's Region.
   */
  public Iterator getAllValueConstraint() {
    return allValueConstraints.iterator();
  }

  /**
   * Returns the most recent lastModifiedTime of any
   * instance of this snapshot's Region across the
   * distributed system.
   */
  public long getLastModifiedTime() {
    return this.lastModifiedTime;
  }

  /**
   * Returns the most recent lastAccessTime of any
   * instance of this snapshot's Region across the
   * distributed system.
   */
  public long getLastAccessTime() {
    return this.lastAccessTime;
  }

  /**
   * Returns the cumulative number of hits across all instances of the
   * snapshot's Region.
   */
  public long getNumberOfHits() {
    return this.numHits;
  }

  /**
   * Returns the cumulative number of misses across all instances of
   * this snapshot's Region.
   */
  public long getNumberOfMisses() {
    return this.numMisses;
  }
  
  /**
   * Returns the aggregate hit ratio across all instances of this
   * snapshot's Region.
   */
  public float getHitRatio() {
    return this.hitRatio;
  }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy