/*
* Zed Attack Proxy (ZAP) and its related class files.
*
* ZAP is an HTTP/HTTPS proxy for assessing web application security.
*
* Copyright 2016 ZAP development team
*
* 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 org.zaproxy.zap.extension.stats;
import java.io.IOException;
import java.net.UnknownHostException;
import org.zaproxy.zap.utils.StatsListener;
public class Statsd implements StatsListener {
private static final String GLOBAL_KEY = "global";
private StatsdClient statsd2;
private String host;
private int port;
private String prefix;
private String separator = ".";
public Statsd (String host, int port, String prefix) throws UnknownHostException, IOException {
this.host = host;
this.port = port;
this.prefix = prefix;
statsd2 = new StatsdClient(host, port);
}
public String getHost() {
return host;
}
public int getPort() {
return port;
}
public String getPrefix() {
return prefix;
}
public void setPrefix(String prefix) {
this.prefix = prefix;
}
public String getSeparator() {
return separator;
}
public void setSeparator(String separator) {
this.separator = separator;
}
private String getFullKey(String key) {
return this.getFullKey(null, key);
}
private String getFullKey(String site, String key) {
StringBuilder sb = new StringBuilder();
if (prefix != null) {
sb.append(prefix);
sb.append(separator);
}
if (site != null) {
// Remove http(s)://
sb.append(site.substring(site.indexOf(':')+3));
} else {
sb.append(GLOBAL_KEY);
}
sb.append(separator);
sb.append(key);
// Colon is a statsd separator
return sb.toString().replace(":", "-");
}
@Override
public void counterInc(String key) {
statsd2.increment(getFullKey(key));
}
@Override
public void counterInc(String site, String key) {
statsd2.increment(getFullKey(site, key));
}
@Override
public void counterInc(String key, long inc) {
statsd2.increment(getFullKey(key), (int)inc);
}
@Override
public void counterInc(String site, String key, long inc) {
statsd2.increment(getFullKey(site, key), (int)inc);
}
@Override
public void counterDec(String key) {
statsd2.decrement(getFullKey(key));
}
@Override
public void counterDec(String site, String key) {
statsd2.decrement(getFullKey(site, key));
}
@Override
public void counterDec(String key, long dec) {
statsd2.decrement(getFullKey(key), (int)dec);
}
@Override
public void counterDec(String site, String key, long dec) {
statsd2.decrement(getFullKey(site, key), (int)dec);
}
@Override
public void highwaterMarkSet(String key, long value) {
statsd2.gauge(getFullKey(key), value);
}
@Override
public void highwaterMarkSet(String site, String key, long value) {
statsd2.gauge(getFullKey(site, key), value);
}
@Override
public void lowwaterMarkSet(String key, long value) {
statsd2.gauge(getFullKey(key), value);
}
@Override
public void lowwaterMarkSet(String site, String key, long value) {
statsd2.gauge(getFullKey(site, key), value);
}
@Override
public void allCleared() {
// No supported
}
@Override
public void allCleared(String site) {
// No supported
}
@Override
public void cleared(String keyPrefix) {
// No supported
}
@Override
public void cleared(String site, String keyPrefix) {
// No supported
}
}