package org.kairosdb.client; import org.kairosdb.client.builder.*; import java.io.BufferedOutputStream; import java.io.IOException; import java.io.PrintWriter; import java.net.Socket; import java.util.List; import java.util.Map; /** * Communicates with KairosDB using the Telnet protocol. Only pushing of metrics is supported. Querying must be done * using the HTTP client. * * The socket is opened in the constructor and left open until the close() method is called. Note that no response is * returned. This allows data to flow more quickly. If you need to guarantee arrival of metrics then use the HTTP * client. */ public class TelnetClient { private Socket socket; private PrintWriter writer; public TelnetClient(String host, int port) throws IOException { socket = new Socket(host, port); writer = new PrintWriter(new BufferedOutputStream(socket.getOutputStream())); } /** * @deprecated As of KairosDB 1.0, use putMetrics. PutMetrics uses putm rather * than put. * * Sends metrics from the builder to the Kairos server. * * @param builder metrics builder */ @Deprecated public void pushMetrics(MetricBuilder builder) { List<Metric> metrics = builder.getMetrics(); for (Metric metric : metrics) { StringBuilder tags = new StringBuilder(); for (Map.Entry<String, String> tag : metric.getTags().entrySet()) { tags.append(" ").append(tag.getKey()).append("=").append(tag.getValue()); } for (DataPoint dataPoint : metric.getDataPoints()) { StringBuilder sb = new StringBuilder(); sb.append("put ").append(metric.getName()).append(" ") .append(dataPoint.getTimestamp()).append(" ") .append(dataPoint.getValue()) .append(tags.toString()); writer.println(sb.toString()); } } writer.flush(); } public void putMetrics(MetricBuilder builder) { List<Metric> metrics = builder.getMetrics(); for (Metric metric : metrics) { StringBuilder tags = new StringBuilder(); for (Map.Entry<String, String> tag : metric.getTags().entrySet()) { tags.append(" ").append(tag.getKey()).append("=").append(tag.getValue()); } for (DataPoint dataPoint : metric.getDataPoints()) { StringBuilder sb = new StringBuilder(); sb.append("putm ").append(metric.getName()).append(" ") .append(dataPoint.getTimestamp()).append(" ") .append(dataPoint.getValue()) .append(tags.toString()); writer.println(sb.toString()); } } writer.flush(); } /** * Closes the socket. * * @throws IOException if the socket could not be closed. */ public void shutdown() throws IOException { socket.close(); } }