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

com.gemstone.gemfire.internal.cache.tier.sockets.CacheClientProxyStats Maven / Gradle / Ivy

/*
 * 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.cache.tier.sockets;

import com.gemstone.gemfire.StatisticDescriptor;
import com.gemstone.gemfire.Statistics;
import com.gemstone.gemfire.StatisticsFactory;
import com.gemstone.gemfire.StatisticsType;
import com.gemstone.gemfire.StatisticsTypeFactory;
import com.gemstone.gemfire.internal.StatisticsTypeFactoryImpl;
import com.gemstone.gemfire.distributed.internal.DistributionStats;

/**
 * Class CacheClientProxyStats tracks GemFire statistics related
 * to a {@link CacheClientProxy}. These statistics are related to cache server
 * client notifications for each client.
 *
 * @author Barry Oglesby
 *
 * @since 4.2
 */
public class CacheClientProxyStats implements MessageStats {

  /** The StatisticsType of the statistics */
  private static final StatisticsType _type;

  /** Name of the messages received statistic */
  private static final String MESSAGES_RECEIVED = "messagesReceived";
  /** Name of the messages queued statistic */
  private static final String MESSAGES_QUEUED = "messagesQueued";
  /** Name of the messages not queued because originator statistic */
  private static final String MESSAGES_NOT_QUEUED_ORIGINATOR = "messagesNotQueuedOriginator";
  /** Name of the messages not queued because not interested statistic */
  private static final String MESSAGES_NOT_QUEUED_NOT_INTERESTED = "messagesNotQueuedNotInterested";
  /** Name of the messages not queued because conflated statistic */
  private static final String MESSAGES_NOT_QUEUED_CONFLATED = "messagesNotQueuedConflated";
  /** Name of the messages failed to be queued statistic */
  private static final String MESSAGES_FAILED_QUEUED = "messagesFailedQueued";
  /** Name of the message queue size statistic */
  private static final String MESSAGE_QUEUE_SIZE = "messageQueueSize";
  /** Name of the messages removed statistic */
  private static final String MESSAGES_PROCESSED = "messagesProcessed";
  /** Name of the message processing time statistic */
  private static final String MESSAGE_PROCESSING_TIME = "messageProcessingTime";
  /** Name of the delta messages sent statistic */
  private static final String DELTA_MESSAGES_SENT = "deltaMessagesSent";
  /** Name of the delta full messages sent statistic */
  private static final String DELTA_FULL_MESSAGES_SENT = "deltaFullMessagesSent";
  /** Name of the CQ count statistic */
  private static final String CQ_COUNT = "cqCount";

  /** Id of the messages received statistic */
  private static final int _messagesReceivedId;
  /** Id of the messages queued statistic */
  private static final int _messagesQueuedId;
  /** Id of the messages not queued because originator statistic */
  private static final int _messagesNotQueuedOriginatorId;
  /** Id of the messages not queued because not interested statistic */
  private static final int _messagesNotQueuedNotInterestedId;
  /** Id of the messages not queued because conflated statistic */
  private static final int _messagesNotQueuedConflatedId;
  /** Id of the messages failed to be queued statistic */
  private static final int _messagesFailedQueuedId;
  /** Id of the message queue size statistic */
  private static final int _messageQueueSizeId;
  /** Id of the messages removed statistic */
  private static final int _messagesProcessedId;
  /** Id of the message processing time statistic */
  private static final int _messageProcessingTimeId;
  /** Id of the prepared delta messages statistic */
  private static final int _deltaMessagesSentId;
  /** Id of the prepared delta messages statistic */
  private static final int _deltaFullMessagesSentId;
  /** Id of the CQ count statistic */
  private static final int _cqCountId;
  private final static int _sentBytesId;

  /**
   * Static initializer to create and initialize the StatisticsType
   */
  static {
    String statName = "CacheClientProxyStatistics";

    StatisticsTypeFactory f = StatisticsTypeFactoryImpl.singleton();

    _type = f.createType(statName, statName,
       new StatisticDescriptor[] {
            f.createIntCounter
             (MESSAGES_RECEIVED,
              "Number of client messages received.",
              "operations"),

            f.createIntCounter
             (MESSAGES_QUEUED,
              "Number of client messages added to the message queue.",
              "operations"),

            f.createIntCounter
             (MESSAGES_FAILED_QUEUED,
              "Number of client messages attempted but failed to be added to the message queue.",
              "operations"),

            f.createIntCounter
             (MESSAGES_NOT_QUEUED_ORIGINATOR,
              "Number of client messages received but not added to the message queue because the receiving proxy represents the client originating the message.",
              "operations"),

            f.createIntCounter
             (MESSAGES_NOT_QUEUED_NOT_INTERESTED,
              "Number of client messages received but not added to the message queue because the client represented by the receiving proxy was not interested in the message's key.",
              "operations"),

            f.createIntCounter
             (MESSAGES_NOT_QUEUED_CONFLATED,
              "Number of client messages received but not added to the message queue because the queue already contains a message with the message's key.",
              "operations"),

            f.createIntGauge
             (MESSAGE_QUEUE_SIZE,
              "Size of the message queue.",
              "operations"),

            f.createIntCounter
             (MESSAGES_PROCESSED,
              "Number of client messages removed from the message queue and sent.",
              "operations"),

            f.createLongCounter
             (MESSAGE_PROCESSING_TIME,
              "Total time spent sending messages to clients.",
              "nanoseconds"),
              
            f.createIntCounter
             (DELTA_MESSAGES_SENT,
              "Number of client messages containing only delta bytes dispatched to the client.",
              "operations"),

              f.createIntCounter
              (DELTA_FULL_MESSAGES_SENT,
               "Number of client messages dispatched in reponse to failed delta at client.",
               "operations"),

            f.createLongCounter
              (CQ_COUNT,
               "Number of CQs on the client.",
               "operations"),
            f.createLongCounter("sentBytes",
                                "Total number of bytes sent to client.",
                                "bytes"),
       });

    // Initialize id fields
    _messagesReceivedId = _type.nameToId(MESSAGES_RECEIVED);
    _messagesQueuedId = _type.nameToId(MESSAGES_QUEUED);
    _messagesNotQueuedOriginatorId = _type.nameToId(MESSAGES_NOT_QUEUED_ORIGINATOR);
    _messagesNotQueuedNotInterestedId = _type.nameToId(MESSAGES_NOT_QUEUED_NOT_INTERESTED);
    _messagesNotQueuedConflatedId = _type.nameToId(MESSAGES_NOT_QUEUED_CONFLATED);
    _messagesFailedQueuedId = _type.nameToId(MESSAGES_FAILED_QUEUED);
    _messageQueueSizeId = _type.nameToId(MESSAGE_QUEUE_SIZE);
    _messagesProcessedId = _type.nameToId(MESSAGES_PROCESSED);
    _messageProcessingTimeId = _type.nameToId(MESSAGE_PROCESSING_TIME);
    _deltaMessagesSentId = _type.nameToId(DELTA_MESSAGES_SENT);
    _deltaFullMessagesSentId = _type.nameToId(DELTA_FULL_MESSAGES_SENT);
    _cqCountId = _type.nameToId(CQ_COUNT);
    _sentBytesId = _type.nameToId("sentBytes");
  }

  //////////////////////  Instance Fields  //////////////////////

  /** The Statistics instance to which most behavior is delegated */
  private final Statistics _stats;

  ///////////////////////  Constructors  ///////////////////////

  /**
   * Constructor.
   *
   * @param factory The StatisticsFactory which creates the
   * Statistics instance
   * @param name The name of the Statistics
   */
  public CacheClientProxyStats(StatisticsFactory factory, String name) {
    this._stats = factory.createAtomicStatistics(_type, "cacheClientProxyStats-"+name);
  }

  /////////////////////  Instance Methods  /////////////////////

  /**
   * Closes the CacheClientProxyStats.
   */
  public void close() {
    this._stats.close();
  }

  /**
   * Returns the current value of the "messagesReceived" stat.
   * @return the current value of the "messagesReceived" stat
   */
  public int getMessagesReceived() {
    return this._stats.getInt(_messagesReceivedId);
  }

  /**
   * Returns the current value of the "messagesQueued" stat.
   * @return the current value of the "messagesQueued" stat
   */
  public int getMessagesQueued() {
    return this._stats.getInt(_messagesQueuedId);
  }

  /**
   * Returns the current value of the "messagesNotQueuedOriginator" stat.
   * @return the current value of the "messagesNotQueuedOriginator" stat
   */
  public int getMessagesNotQueuedOriginator() {
    return this._stats.getInt(_messagesNotQueuedOriginatorId);
  }

  /**
   * Returns the current value of the "messagesNotQueuedNotInterested" stat.
   * @return the current value of the "messagesNotQueuedNotInterested" stat
   */
  public int getMessagesNotQueuedNotInterested() {
    return this._stats.getInt(_messagesNotQueuedNotInterestedId);
  }

  /**
   * Returns the current value of the "messagesNotQueuedConflated" stat.
   * @return the current value of the "messagesNotQueuedConflated" stat
   */
  public int getMessagesNotQueuedConflated() {
    return this._stats.getInt(_messagesNotQueuedConflatedId);
  }

  /**
   * Returns the current value of the "messagesFailedQueued" stat.
   * @return the current value of the "messagesFailedQueued" stat
   */
  public int getMessagesFailedQueued() {
    return this._stats.getInt(_messagesFailedQueuedId);
  }

  /**
   * Returns the current value of the "messageQueueSize" stat.
   * @return the current value of the "messageQueueSize" stat
   */
  public int getMessageQueueSize() {
    return this._stats.getInt(_messageQueueSizeId);
  }

  /**
   * Returns the current value of the messagesProcessed" stat.
   * @return the current value of the messagesProcessed" stat
   */
  public int getMessagesProcessed() {
    return this._stats.getInt(_messagesProcessedId);
  }

  /**
   * Returns the current value of the "messageProcessingTime" stat.
   * @return the current value of the "messageProcessingTime" stat
   */
  public long getMessageProcessingTime() {
    return this._stats.getLong(_messageProcessingTimeId);
  }

  /**
   * Returns the current value of the "deltaMessagesSent" stat.
   * @return the current value of the "deltaMessagesSent" stat
   */
  public int getDeltaMessagesSent() {
    return this._stats.getInt(_deltaMessagesSentId);
  }

  /**
   * Returns the current value of the "deltaFullMessagesSent" stat.
   * @return the current value of the "deltaFullMessagesSent" stat
   */
  public int getDeltaFullMessagesSent() {
    return this._stats.getInt(_deltaFullMessagesSentId);
  }

  /**
   * Returns the current value of the "cqCount" stat.
   * @return the current value of the "cqCount" stat
   */
  public int getCqCount() {
    return this._stats.getInt(_cqCountId);
  }

  /**
   * Increments the "messagesReceived" stat.
   */
  public void incMessagesReceived()
  {
    this._stats.incInt(_messagesReceivedId, 1);
  }

  /**
   * Increments the "messagesQueued" stat.
   */
  public void incMessagesQueued()
  {
    this._stats.incInt(_messagesQueuedId, 1);
  }

  /**
   * Increments the "messagesNotQueuedOriginator" stat.
   */
  public void incMessagesNotQueuedOriginator()
  {
    this._stats.incInt(_messagesNotQueuedOriginatorId, 1);
  }

  /**
   * Increments the "messagesNotQueuedNotInterested" stat.
   */
  public void incMessagesNotQueuedNotInterested()
  {
    this._stats.incInt(_messagesNotQueuedNotInterestedId, 1);
  }

  /**
   * Increments the "messagesNotQueuedConflated" stat.
   */
  public void incMessagesNotQueuedConflated()
  {
    this._stats.incInt(_messagesNotQueuedConflatedId, 1);
  }

  /**
   * Increments the "messagesFailedQueued" stat.
   */
  public void incMessagesFailedQueued()
  {
    this._stats.incInt(_messagesFailedQueuedId, 1);
  }
  
  /**
   * Increments the "cqCount" stat.
   */
  public void incCqCount()
  {
    this._stats.incInt(_cqCountId, 1);
  }
  
  /**
   * Decrements the "cqCount" stat.
   */
  public void decCqCount()
  {
    this._stats.incInt(_cqCountId, -1);
  }

  /**
   * Sets the "messageQueueSize" stat.
   * @param size The size of the queue
   */
  public void setQueueSize(int size)
  {
    this._stats.setInt(_messageQueueSizeId, size);
  }

  /**
   * Returns the current time (ns).
   * @return the current time (ns)
   */
  public long startTime()
  {
    return DistributionStats.getStatTime();
  }

  /**
   * Increments the "messagesProcessed" and "messageProcessingTime" stats.
   * @param start The start of the message (which is decremented from the current
   * time to determine the message processing time).
   */
  public void endMessage(long start)
  {
    long ts = DistributionStats.getStatTime();

    // Increment number of notifications
    this._stats.incInt(_messagesProcessedId, 1);

    // Increment notification time
    long elapsed = ts-start;
    this._stats.incLong(_messageProcessingTimeId, elapsed);
  }

  /**
   * Increments the "deltaMessagesSent" stats.
   */
  public void incDeltaMessagesSent() {
    this._stats.incInt(_deltaMessagesSentId, 1);
  }

  /**
   * Increments the "deltaFullMessagesSent" stats.
   */
  public void incDeltaFullMessagesSent() {
    this._stats.incInt(_deltaFullMessagesSentId, 1);
  }

  public final void incReceivedBytes(long v) {
    // noop since we never receive
  }
  public final void incSentBytes(long v) {
    this._stats.incLong(_sentBytesId, v);
  }
  public void incMessagesBeingReceived(int bytes) {
    // noop since we never receive
  }
  public void decMessagesBeingReceived(int bytes) {
    // noop since we never receive
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy