blob: 4138e64199da10d96e731852021a8ee83796ae1b [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.
*/
package org.apache.ignite.internal.managers.discovery;
import java.util.Collection;
import org.apache.ignite.cluster.ClusterMetrics;
import org.apache.ignite.internal.GridKernalContext;
import org.apache.ignite.internal.processors.cache.GridCacheAdapter;
import org.apache.ignite.internal.processors.jobmetrics.GridJobMetrics;
import org.apache.ignite.internal.util.typedef.internal.U;
/**
* Cluster metrics proxy
*/
public class ClusterMetricsImpl implements ClusterMetrics {
/** Job metrics. */
private volatile GridJobMetrics jobMetrics;
/** Job metrics update time. */
private volatile long jobMetricsUpdateTime;
/** Job metrics mutex. */
private final Object jobMetricsMux = new Object();
/** Kernel context. */
private final GridKernalContext ctx;
/** VM Metrics. */
private final GridLocalMetrics vmMetrics;
/** Node start time. */
private final long nodeStartTime;
/**
* @param ctx Kernel context.
* @param vmMetrics VM metrics.
* @param nodeStartTime Node start time;
*/
public ClusterMetricsImpl(GridKernalContext ctx, GridLocalMetrics vmMetrics, long nodeStartTime) {
this.ctx = ctx;
this.vmMetrics = vmMetrics;
this.nodeStartTime = nodeStartTime;
}
/** {@inheritDoc} */
@Override public long getLastUpdateTime() {
return jobMetricsUpdateTime == 0 ? U.currentTimeMillis() : jobMetricsUpdateTime;
}
/** {@inheritDoc} */
@Override public int getMaximumActiveJobs() {
return jobMetrics().getMaximumActiveJobs();
}
/** {@inheritDoc} */
@Override public int getCurrentActiveJobs() {
return jobMetrics().getCurrentActiveJobs();
}
/** {@inheritDoc} */
@Override public float getAverageActiveJobs() {
return jobMetrics().getAverageActiveJobs();
}
/** {@inheritDoc} */
@Override public int getMaximumWaitingJobs() {
return jobMetrics().getMaximumWaitingJobs();
}
/** {@inheritDoc} */
@Override public int getCurrentWaitingJobs() {
return jobMetrics().getCurrentWaitingJobs();
}
/** {@inheritDoc} */
@Override public float getAverageWaitingJobs() {
return jobMetrics().getAverageWaitingJobs();
}
/** {@inheritDoc} */
@Override public int getMaximumRejectedJobs() {
return jobMetrics().getMaximumRejectedJobs();
}
/** {@inheritDoc} */
@Override public int getCurrentRejectedJobs() {
return jobMetrics().getCurrentRejectedJobs();
}
/** {@inheritDoc} */
@Override public float getAverageRejectedJobs() {
return jobMetrics().getAverageRejectedJobs();
}
/** {@inheritDoc} */
@Override public int getTotalRejectedJobs() {
return jobMetrics().getTotalRejectedJobs();
}
/** {@inheritDoc} */
@Override public int getMaximumCancelledJobs() {
return jobMetrics().getMaximumCancelledJobs();
}
/** {@inheritDoc} */
@Override public int getCurrentCancelledJobs() {
return jobMetrics().getCurrentCancelledJobs();
}
/** {@inheritDoc} */
@Override public float getAverageCancelledJobs() {
return jobMetrics().getAverageCancelledJobs();
}
/** {@inheritDoc} */
@Override public int getTotalCancelledJobs() {
return jobMetrics().getTotalCancelledJobs();
}
/** {@inheritDoc} */
@Override public int getTotalExecutedJobs() {
return jobMetrics().getTotalExecutedJobs();
}
/** {@inheritDoc} */
@Override public long getTotalJobsExecutionTime() {
return jobMetrics().getTotalJobsExecutionTime();
}
/** {@inheritDoc} */
@Override public long getMaximumJobWaitTime() {
return jobMetrics().getMaximumJobWaitTime();
}
/** {@inheritDoc} */
@Override public long getCurrentJobWaitTime() {
return jobMetrics().getCurrentJobWaitTime();
}
/** {@inheritDoc} */
@Override public double getAverageJobWaitTime() {
return jobMetrics().getAverageJobWaitTime();
}
/** {@inheritDoc} */
@Override public long getMaximumJobExecuteTime() {
return jobMetrics().getMaximumJobExecuteTime();
}
/** {@inheritDoc} */
@Override public long getCurrentJobExecuteTime() {
return jobMetrics().getCurrentJobExecuteTime();
}
/** {@inheritDoc} */
@Override public double getAverageJobExecuteTime() {
return jobMetrics().getAverageJobExecuteTime();
}
/** {@inheritDoc} */
@Override public int getTotalExecutedTasks() {
return ctx.task().getTotalExecutedTasks();
}
/** {@inheritDoc} */
@Override public long getTotalBusyTime() {
return getUpTime() - getTotalIdleTime();
}
/** {@inheritDoc} */
@Override public long getTotalIdleTime() {
return jobMetrics().getTotalIdleTime();
}
/** {@inheritDoc} */
@Override public long getCurrentIdleTime() {
return jobMetrics().getCurrentIdleTime();
}
/** {@inheritDoc} */
@Override public float getBusyTimePercentage() {
return 1 - getIdleTimePercentage();
}
/** {@inheritDoc} */
@Override public float getIdleTimePercentage() {
return getTotalIdleTime() / (float)getUpTime();
}
/** {@inheritDoc} */
@Override public int getTotalCpus() {
return vmMetrics.getAvailableProcessors();
}
/** {@inheritDoc} */
@Override public double getCurrentCpuLoad() {
return vmMetrics.getCurrentCpuLoad();
}
/** {@inheritDoc} */
@Override public double getAverageCpuLoad() {
return jobMetrics().getAverageCpuLoad();
}
/** {@inheritDoc} */
@Override public double getCurrentGcCpuLoad() {
return vmMetrics.getCurrentGcCpuLoad();
}
/** {@inheritDoc} */
@Override public long getHeapMemoryInitialized() {
return vmMetrics.getHeapMemoryInitialized();
}
/** {@inheritDoc} */
@Override public long getHeapMemoryUsed() {
return vmMetrics.getHeapMemoryUsed();
}
/** {@inheritDoc} */
@Override public long getHeapMemoryCommitted() {
return vmMetrics.getHeapMemoryCommitted();
}
/** {@inheritDoc} */
@Override public long getHeapMemoryMaximum() {
return vmMetrics.getHeapMemoryMaximum();
}
/** {@inheritDoc} */
@Override public long getHeapMemoryTotal() {
return vmMetrics.getHeapMemoryMaximum();
}
/** {@inheritDoc} */
@Override public long getNonHeapMemoryInitialized() {
return vmMetrics.getNonHeapMemoryInitialized();
}
/** {@inheritDoc} */
@Override public long getNonHeapMemoryUsed() {
Collection<GridCacheAdapter<?, ?>> caches = ctx.cache().internalCaches();
long nonHeapUsed = vmMetrics.getNonHeapMemoryUsed();
for (GridCacheAdapter<?, ?> cache : caches)
if (cache.context().statisticsEnabled() && cache.context().started()
&& cache.context().affinity().affinityTopologyVersion().topologyVersion() > 0)
nonHeapUsed += cache.metrics0().getOffHeapAllocatedSize();
return nonHeapUsed;
}
/** {@inheritDoc} */
@Override public long getNonHeapMemoryCommitted() {
return vmMetrics.getNonHeapMemoryCommitted();
}
/** {@inheritDoc} */
@Override public long getNonHeapMemoryMaximum() {
return vmMetrics.getNonHeapMemoryMaximum();
}
/** {@inheritDoc} */
@Override public long getNonHeapMemoryTotal() {
return vmMetrics.getNonHeapMemoryMaximum();
}
/** {@inheritDoc} */
@Override public long getUpTime() {
return vmMetrics.getUptime();
}
/** {@inheritDoc} */
@Override public long getStartTime() {
return vmMetrics.getStartTime();
}
/** {@inheritDoc} */
@Override public long getNodeStartTime() {
return nodeStartTime;
}
/** {@inheritDoc} */
@Override public int getCurrentThreadCount() {
return vmMetrics.getThreadCount();
}
/** {@inheritDoc} */
@Override public int getMaximumThreadCount() {
return vmMetrics.getPeakThreadCount();
}
/** {@inheritDoc} */
@Override public long getTotalStartedThreadCount() {
return vmMetrics.getTotalStartedThreadCount();
}
/** {@inheritDoc} */
@Override public int getCurrentDaemonThreadCount() {
return vmMetrics.getDaemonThreadCount();
}
/** {@inheritDoc} */
@Override public long getLastDataVersion() {
return ctx.cache().lastDataVersion();
}
/** {@inheritDoc} */
@Override public int getSentMessagesCount() {
return ctx.io().getSentMessagesCount();
}
/** {@inheritDoc} */
@Override public long getSentBytesCount() {
return ctx.io().getSentBytesCount();
}
/** {@inheritDoc} */
@Override public int getReceivedMessagesCount() {
return ctx.io().getReceivedMessagesCount();
}
/** {@inheritDoc} */
@Override public long getReceivedBytesCount() {
return ctx.io().getReceivedBytesCount();
}
/** {@inheritDoc} */
@Override public int getOutboundMessagesQueueSize() {
return ctx.io().getOutboundMessagesQueueSize();
}
/** {@inheritDoc} */
@Override public int getTotalNodes() {
return 1;
}
/**
* Job metrics
*/
public GridJobMetrics jobMetrics() {
if (jobMetrics == null)
synchronized (jobMetricsMux) {
if (jobMetrics == null) {
jobMetricsUpdateTime = U.currentTimeMillis();
jobMetrics = ctx.jobMetric().getJobMetrics();
}
}
return jobMetrics;
}
}