001 package biz.hammurapi.metrics;
002
003 import java.io.ObjectOutputStream;
004 import java.net.Socket;
005 import java.util.List;
006
007 import biz.hammurapi.config.ConfigurationException;
008
009 /**
010 * Sends slices to remote slice consumer server.
011 * @author Pavel Vlasov
012 */
013 public class SocketSliceConsumer extends BatchingSliceConsumer {
014
015 public static final int DEFAULT_PORT = 9814;
016 private static final String LOCALHOST = "localhost";
017
018 private String address = LOCALHOST;
019 private int port = DEFAULT_PORT;
020 private String id = Long.toString(System.currentTimeMillis(), Character.MAX_RADIX);
021
022 /**
023 * Sets server address. Default is "localhost"
024 * @param address
025 */
026 public void setAddress(String address) {
027 this.address = address;
028 }
029
030 /**
031 * Sets server port. Default is 9814
032 * @param port
033 */
034 public void setPort(int port) {
035 this.port = port;
036 }
037
038 /**
039 * Sets client ID to differentiate it from other clients.
040 * Defaults to
041 * @param id
042 */
043 public void setId(String id) {
044 this.id = id;
045 }
046
047 public void start() throws ConfigurationException {
048 super.start();
049 System.out.println("[SocketSliceConsumer] ID="+id);
050 }
051
052 /**
053 * Sends slices to a server socket.
054 */
055 protected boolean processSlices(List slices) {
056 try {
057 Socket socket = new Socket(address, port);
058 ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
059 oos.writeObject(id);
060 oos.writeObject(slices);
061 oos.close();
062 socket.close();
063 return true;
064 } catch (Exception e) {
065 System.err.println("[Socket slice consumer] ERROR: Could not send slices to the server: "+e);
066 return false;
067 }
068 }
069
070 }