/*
* 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.
*/
package com.facebook.presto.execution;
import io.airlift.stats.CounterStat;
import io.airlift.stats.TimeStat;
import io.airlift.units.DataSize;
import io.airlift.units.Duration;
import org.weakref.jmx.Managed;
import org.weakref.jmx.Nested;
import static java.util.concurrent.TimeUnit.MILLISECONDS;
public class SqlTaskManagerStats
{
private final CounterStat scheduledSplits = new CounterStat();
private final CounterStat startedSplits = new CounterStat();
private final CounterStat completedSplits = new CounterStat();
private final CounterStat completedPositions = new CounterStat();
private final CounterStat completedBytes = new CounterStat();
private final CounterStat splitWallTime = new CounterStat();
private final CounterStat splitCpuTime = new CounterStat();
private final TimeStat splitQueuedTime = new TimeStat(MILLISECONDS);
private final TimeStat timeToFirstByte = new TimeStat(MILLISECONDS);
private final TimeStat timeToLastByte = new TimeStat(MILLISECONDS);
@Managed
@Nested
public CounterStat getScheduledSplits()
{
return scheduledSplits;
}
@Managed
@Nested
public CounterStat getStartedSplits()
{
return startedSplits;
}
@Managed
@Nested
public CounterStat getCompletedSplits()
{
return completedSplits;
}
@Managed
@Nested
public CounterStat getCompletedPositions()
{
return completedPositions;
}
@Managed
@Nested
public CounterStat getCompletedBytes()
{
return completedBytes;
}
@Managed
@Nested
public CounterStat getSplitWallTime()
{
return splitWallTime;
}
@Managed
@Nested
public CounterStat getSplitCpuTime()
{
return splitCpuTime;
}
@Managed
@Nested
public TimeStat getTimeToFirstByte()
{
return timeToFirstByte;
}
@Managed
@Nested
public TimeStat getSplitQueuedTime()
{
return splitQueuedTime;
}
@Managed
@Nested
public TimeStat getTimeToLastByte()
{
return timeToLastByte;
}
@Managed
public long getRunningSplits()
{
return Math.max(0, startedSplits.getTotalCount() - completedSplits.getTotalCount());
}
public void addSplits(int count)
{
scheduledSplits.update(count);
}
public void splitStarted()
{
startedSplits.update(1);
}
public void splitCompleted()
{
completedSplits.update(1);
}
public void addSplitCpuTime(Duration duration)
{
splitCpuTime.update(duration.toMillis());
}
public void addSplitWallTime(Duration duration)
{
splitWallTime.update(duration.toMillis());
}
public void addCompletedPositions(long positions)
{
completedPositions.update(positions);
}
public void addCompletedDataSize(DataSize addedDataSize)
{
completedBytes.update(addedDataSize.toBytes());
}
public void addSplitQueuedTime(Duration duration)
{
splitQueuedTime.add(duration);
}
public void addTimeToFirstByte(Duration duration)
{
timeToFirstByte.add(duration);
}
public void addTimeToLastByte(Duration duration)
{
timeToLastByte.add(duration);
}
}