001package org.xbib.elasticsearch.action.cluster.admin.websocket;
002
003import org.elasticsearch.action.support.nodes.NodesOperationResponse;
004import org.elasticsearch.cluster.ClusterName;
005import org.elasticsearch.common.io.stream.StreamInput;
006import org.elasticsearch.common.io.stream.StreamOutput;
007import org.elasticsearch.common.xcontent.ToXContent;
008import org.elasticsearch.common.xcontent.XContentBuilder;
009import org.elasticsearch.common.xcontent.XContentFactory;
010
011import java.io.IOException;
012import java.util.List;
013
014public class WebsocketInfoResponse extends NodesOperationResponse<WebsocketInfo> implements ToXContent {
015
016    public WebsocketInfoResponse() {
017    }
018
019    public WebsocketInfoResponse(ClusterName clusterName, List<WebsocketInfo> nodes) {
020        super(clusterName, nodes.toArray(new WebsocketInfo[nodes.size()]));
021    }
022
023    @Override
024    public void readFrom(StreamInput in) throws IOException {
025        super.readFrom(in);
026        nodes = new WebsocketInfo[in.readVInt()];
027        for (int i = 0; i < nodes.length; i++) {
028            nodes[i] = WebsocketInfo.readInfo(in);
029        }
030    }
031
032    @Override
033    public void writeTo(StreamOutput out) throws IOException {
034        super.writeTo(out);
035        out.writeVInt(nodes.length);
036        for (WebsocketInfo node : nodes) {
037            node.writeTo(out);
038        }
039    }
040
041    @Override
042    public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
043        builder.field("cluster_name", getClusterName().value(), XContentBuilder.FieldCaseConversion.NONE);
044
045        builder.startObject("nodes");
046        for (WebsocketInfo nodeInfo : this) {
047            builder.startObject(nodeInfo.getNode().id(), XContentBuilder.FieldCaseConversion.NONE);
048            builder.field("name", nodeInfo.getNode().name(), XContentBuilder.FieldCaseConversion.NONE);
049            builder.field("transport_address", nodeInfo.getNode().address().toString());
050            builder.field("host", nodeInfo.getNode().getHostName(), XContentBuilder.FieldCaseConversion.NONE);
051            builder.field("ip", nodeInfo.getNode().getHostAddress(), XContentBuilder.FieldCaseConversion.NONE);
052            builder.field("websocket_address", nodeInfo.getAddress(), XContentBuilder.FieldCaseConversion.NONE);
053            builder.endObject();
054        }
055        builder.endObject();
056        return builder;
057    }
058
059    @Override
060    public String toString() {
061        try {
062            XContentBuilder builder = XContentFactory.jsonBuilder().prettyPrint();
063            builder.startObject();
064            toXContent(builder, EMPTY_PARAMS);
065            builder.endObject();
066            return builder.string();
067        } catch (IOException e) {
068            return "{ \"error\" : \"" + e.getMessage() + "\"}";
069        }
070    }
071}