com.gemstone.gemfire.cache.query.internal.CqQueryVsdStats Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of gemfire-core Show documentation
Show all versions of gemfire-core Show documentation
SnappyData store based off Pivotal GemFireXD
The 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.cache.query.internal;
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.cache.query.CqEvent;
import com.gemstone.gemfire.internal.StatisticsTypeFactoryImpl;
import com.gemstone.gemfire.internal.cache.tier.MessageType;
/**
* This class tracks GemFire statistics related to a {@link com.gemstone.gemfire.cache.query.CqQuery}.
*
* @author Rao Madduri
* @since 5.5
*/
public class CqQueryVsdStats
{
/** The StatisticsType
of the statistics */
private static final StatisticsType _type;
/** Name of the created CQs statistic */
protected static final String CQ_INITIAL_RESULTS_TIME = "cqInitialResultsTime";
/** Name of the created CQs statistic */
protected static final String CQ_INSERTS = "numInserts";
/** Name of the active CQs statistic */
protected static final String CQ_UPDATES = "numUpdates";
/** Name of the stopped CQs statistic */
protected static final String CQ_DELETES = "numDeletes";
/** Name of the closed CQs statistic */
protected static final String CQ_EVENTS = "numEvents";
/** Name of the number of queued events CQ statistic */
protected static final String NUM_HA_QUEUED_CQ_EVENTS = "numQueuedEvents";
/** Name of the number CqListeners invoked statistic */
protected static final String CQ_LISTENER_INVOCATIONS = "numCqListenerInvocations";
/** Name of the number CqListeners invoked statistic */
protected static final String QUEUED_CQ_LISTENER_EVENTS = "queuedCqListenerEvents";
/** Id of the initial results time statistic */
private static final int _cqInitialResultsTimeId;
/** Id of the num inserts statistic */
private static final int _numInsertsId;
/** Id of the num updates statistic */
private static final int _numUpdatesId;
/** Id of the num deletes statistic */
private static final int _numDeletesId;
/** Id of the num events statistic */
private static final int _numEventsId;
/** Id of the num queued events in the ha queue for the cq statistic */
private static final int _numHAQueuedEventsId;
/** Id of the num cqListener invocation statistic */
private static final int _numCqListenerInvocationsId;
/** Id for the queued CQ events size during execute with initial results */
private static final int _queuedCqListenerEventsId;
/**
* Static initializer to create and initialize the StatisticsType
*/
static {
String statName = "CqQueryStats";
StatisticsTypeFactory f = StatisticsTypeFactoryImpl.singleton();
_type = f.createType(statName, statName, new StatisticDescriptor[] {
f.createLongCounter(CQ_INITIAL_RESULTS_TIME, "The total amount of time, in nanoseconds, it took to do this initial query and send the results to the client.",
"nanoseconds"),
f.createLongCounter(CQ_INSERTS, "Total number of inserts done on this cq.",
"operations"),
f.createLongCounter(CQ_UPDATES,
"Total number of updates done on this cq.", "operations"),
f.createLongCounter(CQ_DELETES,
"Total number of deletes done on this cq.", "operations"),
f.createLongCounter(CQ_EVENTS,
"Total number of inserts, updates, and deletes done on this cq.", "operations"),
f.createLongGauge(NUM_HA_QUEUED_CQ_EVENTS,
"Number of events in this cq.", "events"),
f.createLongCounter(CQ_LISTENER_INVOCATIONS,
"Total number of CqListener invocations.", "operations"),
f.createLongGauge(QUEUED_CQ_LISTENER_EVENTS,
"Number of events queued while CQ registration is in progress. This is not the main cq queue but a temporary internal one used while the cq is starting up.", "events"),
});
// Initialize id fields
_cqInitialResultsTimeId = _type.nameToId(CQ_INITIAL_RESULTS_TIME);
_numInsertsId = _type.nameToId(CQ_INSERTS);
_numUpdatesId = _type.nameToId(CQ_UPDATES);
_numDeletesId = _type.nameToId(CQ_DELETES);
_numEventsId = _type.nameToId(CQ_EVENTS);
_numHAQueuedEventsId = _type.nameToId(NUM_HA_QUEUED_CQ_EVENTS);
_numCqListenerInvocationsId = _type.nameToId(CQ_LISTENER_INVOCATIONS);
_queuedCqListenerEventsId = _type.nameToId(QUEUED_CQ_LISTENER_EVENTS);
}
/** The Statistics
instance to which most behavior is delegated */
private final Statistics _stats;
/**
* Constructor.
*
* @param factory
* The StatisticsFactory
which creates the
* Statistics
instance
* @param name
* The name of the Statistics
*/
public CqQueryVsdStats(StatisticsFactory factory, String name) {
this._stats = factory.createAtomicStatistics(_type, "CqQueryStats-"
+ name);
}
// /////////////////// Instance Methods /////////////////////
/**
* Closes the CqQueryVSDStats
.
*/
public void close()
{
this._stats.close();
}
/**
* Returns the current value of the "cqInitialResultsTime" stat.
*
* @return the current value of the "cqInitialResultsTime" stat
*/
public long getCqInitialResultsTime()
{
return this._stats.getLong(_cqInitialResultsTimeId);
}
/**
* Set the "cqInitialResultsTime" stat.
*/
public void setCqInitialResultsTime(long time)
{
this._stats.setLong(_cqInitialResultsTimeId, time);
}
/**
* Returns the current value of the "numInserts" stat.
*
* @return the current value of the "numInserts" stat
*/
public long getNumInserts()
{
return this._stats.getLong(_numInsertsId);
}
/**
* Increments the "numInserts" stat by 1.
*/
public void incNumInserts()
{
this._stats.incLong(_numInsertsId, 1);
}
/**
* Returns the current value of the "numUpdates" stat.
*
* @return the current value of the "numUpdates" stat
*/
public long getNumUpdates()
{
return this._stats.getLong(_numUpdatesId);
}
/**
* Increments the "numUpdates" stat by 1.
*/
public void incNumUpdates()
{
this._stats.incLong(_numUpdatesId, 1);
}
/**
* Returns the current value of the "numDeletes" stat.
*
* @return the current value of the "numDeletes" stat
*/
public long getNumDeletes()
{
return this._stats.getLong(_numDeletesId);
}
/**
* Increments the "numDeletes" stat by 1.
*/
public void incNumDeletes()
{
this._stats.incLong(_numDeletesId, 1);
}
/**
* Returns the current value of the "numEvents" stat.
*
* @return the current value of the "numEvents" stat
*/
public long getNumEvents()
{
return this._stats.getLong(_numEventsId);
}
/**
* Increments the "numEvents" stat by 1.
*/
public void incNumEvents()
{
this._stats.incLong(_numEventsId, 1);
}
/**
* Returns the current value of the "numQueuedEvents" stat.
*
* @return the current value of the "numQueuedEvents" stat
*/
public long getNumHAQueuedEvents()
{
return this._stats.getLong(_numHAQueuedEventsId);
}
/**
* Increments the "numQueuedEvents" stat by incAmount.
*/
public void incNumHAQueuedEvents(long incAmount)
{
this._stats.incLong(_numHAQueuedEventsId, incAmount);
}
/**
* Returns the current value of the "numCqListenerInvocations" stat.
*
* @return the current value of the "numCqListenerInvocations" stat
*/
public long getNumCqListenerInvocations()
{
return this._stats.getLong(_numCqListenerInvocationsId);
}
public long getQueuedCqListenerEvents()
{
return this._stats.getLong(_queuedCqListenerEventsId);
}
/**
* Increments the "numCqListenerInvocations" stat by 1.
*/
public void incNumCqListenerInvocations()
{
this._stats.incLong(_numCqListenerInvocationsId, 1);
}
public void incQueuedCqListenerEvents()
{
this._stats.incLong(_queuedCqListenerEventsId, 1);
}
public void decQueuedCqListenerEvents()
{
this._stats.incLong(_queuedCqListenerEventsId, -1);
}
/**
* Update stats for a CQ for VSD
* @param cqEvent object containing info on the newly qualified CQ event
*/
public void updateStats(CqEvent cqEvent) {
if (cqEvent.getQueryOperation() == null)
return;
this.incNumEvents();
if (cqEvent.getQueryOperation().isCreate()) {
this.incNumInserts();
}
if (cqEvent.getQueryOperation().isUpdate()) {
this.incNumUpdates();
}
if (cqEvent.getQueryOperation().isDestroy()) {
this.incNumDeletes();
}
}
/**
* Update stats for a CQ for VSD
* @param cqEvent object the type of CQ event
*/
public void updateStats(Integer cqEvent) {
if (cqEvent == null) {
return;
}
this.incNumEvents();
switch (cqEvent.intValue()) {
case MessageType.LOCAL_CREATE:
this.incNumInserts();
return;
case MessageType.LOCAL_UPDATE:
this.incNumUpdates();
return;
case MessageType.LOCAL_DESTROY:
this.incNumDeletes();
return;
default:
return;
}
}
}