org.apache.curator.drivers.OperationTrace Maven / Gradle / Ivy
/**
* 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.curator.drivers;
import org.apache.curator.drivers.TracerDriver;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.data.Stat;
import java.io.UnsupportedEncodingException;
import java.util.concurrent.TimeUnit;
/**
* Used to trace the metrics of a certain Zookeeper operation.
*/
public class OperationTrace
{
private final String name;
private final TracerDriver driver;
private int returnCode = KeeperException.Code.OK.intValue();
private long latencyMs;
private long requestBytesLength;
private long responseBytesLength;
private String path;
private boolean withWatcher;
private long sessionId;
private Stat stat;
private final long startTimeNanos = System.nanoTime();
public OperationTrace(String name, TracerDriver driver) {
this(name, driver, -1);
}
public OperationTrace(String name, TracerDriver driver, long sessionId) {
this.name = name;
this.driver = driver;
this.sessionId = sessionId;
}
public OperationTrace setReturnCode(int returnCode) {
this.returnCode = returnCode;
return this;
}
public OperationTrace setRequestBytesLength(long length) {
this.requestBytesLength = length;
return this;
}
public OperationTrace setRequestBytesLength(String data) {
if (data == null) {
return this;
}
try {
this.setRequestBytesLength(data.getBytes("UTF-8").length);
} catch (UnsupportedEncodingException e) {
// Ignore the exception.
}
return this;
}
public OperationTrace setRequestBytesLength(byte[] data) {
if (data == null) {
return this;
}
return this.setRequestBytesLength(data.length);
}
public OperationTrace setResponseBytesLength(long length) {
this.responseBytesLength = length;
return this;
}
public OperationTrace setResponseBytesLength(byte[] data) {
if (data == null) {
return this;
}
return this.setResponseBytesLength(data.length);
}
public OperationTrace setPath(String path) {
this.path = path;
return this;
}
public OperationTrace setWithWatcher(boolean withWatcher) {
this.withWatcher = withWatcher;
return this;
}
public OperationTrace setStat(Stat stat) {
this.stat = stat;
return this;
}
public String getName() {
return this.name;
}
public int getReturnCode() {
return this.returnCode;
}
public long getLatencyMs() {
return this.latencyMs;
}
public long getRequestBytesLength() {
return this.requestBytesLength;
}
public long getResponseBytesLength() {
return this.responseBytesLength;
}
public long getSessionId() {
return this.sessionId;
}
public String getPath() {
return this.path;
}
public boolean isWithWatcher() {
return this.withWatcher;
}
public Stat getStat() {
return this.stat;
}
public void commit() {
long elapsed = System.nanoTime() - startTimeNanos;
this.latencyMs = TimeUnit.MILLISECONDS.convert(elapsed, TimeUnit.NANOSECONDS);
if (this.driver instanceof AdvancedTracerDriver) {
((AdvancedTracerDriver) this.driver).addTrace(this);
} else {
this.driver.addTrace(this.name, elapsed, TimeUnit.NANOSECONDS);
}
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy