/*
* Copyright (C) 2014 Indeed Inc.
*
* 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 com.indeed.imhotep;
import com.indeed.imhotep.protobuf.MetricDumpMessage;
import com.indeed.imhotep.protobuf.SessionDumpMessage;
import com.indeed.imhotep.protobuf.ShardDumpMessage;
import com.indeed.imhotep.protobuf.StatusDumpMessage;
import java.util.ArrayList;
import java.util.List;
/**
* @author jsgroth
*/
public class ImhotepStatusDump {
public final long usedMemory;
public final long totalMemory;
public final List<SessionDump> openSessions;
public final List<ShardDump> shards;
public ImhotepStatusDump(long usedMemory, long totalMemory, List<SessionDump> openSessions, List<ShardDump> shards) {
this.usedMemory = usedMemory;
this.totalMemory = totalMemory;
this.openSessions = openSessions;
this.shards = shards;
}
public long getUsedMemory() {
return usedMemory;
}
public long getTotalMemory() {
return totalMemory;
}
public List<SessionDump> getOpenSessions() {
return openSessions;
}
public List<ShardDump> getShards() {
return shards;
}
public StatusDumpMessage toProto() {
final StatusDumpMessage.Builder builder = StatusDumpMessage.newBuilder()
.setUsedMemory(usedMemory)
.setTotalMemory(totalMemory);
for (final SessionDump sessionDump : openSessions) {
builder.addOpenSession(sessionDump.toProto());
}
for (final ShardDump shardDump : shards) {
builder.addLoadedShard(shardDump.toProto());
}
return builder.build();
}
public static ImhotepStatusDump fromProto(StatusDumpMessage protoDump) {
final long usedMemory = protoDump.getUsedMemory();
final long totalMemory = protoDump.getTotalMemory();
final List<SessionDump> openSessions = new ArrayList<SessionDump>(protoDump.getOpenSessionCount());
for (final SessionDumpMessage protoSessionDump : protoDump.getOpenSessionList()) {
openSessions.add(SessionDump.fromProto(protoSessionDump));
}
final List<ShardDump> shards = new ArrayList<ShardDump>(protoDump.getLoadedShardCount());
for (final ShardDumpMessage shardDump : protoDump.getLoadedShardList()) {
shards.add(ShardDump.fromProto(shardDump));
}
return new ImhotepStatusDump(usedMemory, totalMemory, openSessions, shards);
}
public static class SessionDump {
public final String sessionId;
public final String dataset;
public final String hostname;
public final String username;
public final String ipAddress;
public final int clientVersion;
public final List<ShardDump> openShards;
public SessionDump(String sessionId, String dataset, String hostname, String username, String ipAddress, int clientVersion, List<ShardDump> openShards) {
this.sessionId = sessionId;
this.dataset = dataset;
this.hostname = hostname;
this.username = username;
this.ipAddress = ipAddress;
this.clientVersion = clientVersion;
this.openShards = openShards;
}
public String getSessionId() {
return sessionId;
}
public String getDataset() {
return dataset;
}
@Deprecated
public String getHostname() {
return hostname;
}
public String getUsername() {
return username;
}
public String getIpAddress() {
return ipAddress;
}
public int getClientVersion() {
return clientVersion;
}
public List<ShardDump> getOpenShards() {
return openShards;
}
public SessionDumpMessage toProto() {
final SessionDumpMessage.Builder builder = SessionDumpMessage.newBuilder()
.setSessionId(sessionId)
.setDataset(dataset)
.setHostname(hostname)
.setUsername(username)
.setIpAddress(ipAddress)
.setClientVersion(clientVersion);
for (final ShardDump shardDump : openShards) {
builder.addOpenShard(shardDump.toProto());
}
return builder.build();
}
public static SessionDump fromProto(SessionDumpMessage protoDump) {
final List<ShardDump> openShards = new ArrayList<ShardDump>(protoDump.getOpenShardCount());
for (final ShardDumpMessage shardDump : protoDump.getOpenShardList()) {
openShards.add(ShardDump.fromProto(shardDump));
}
return new SessionDump(protoDump.getSessionId(), protoDump.getDataset(), protoDump.getHostname(),
protoDump.getUsername(), protoDump.getIpAddress(), protoDump.getClientVersion(), openShards);
}
}
public static class MetricDump {
public final String metric;
public final long memoryUsed;
public MetricDump(String metric, long memoryUsed) {
this.metric = metric;
this.memoryUsed = memoryUsed;
}
public String getMetric() {
return metric;
}
public long getMemoryUsed() {
return memoryUsed;
}
public MetricDumpMessage toProto() {
return MetricDumpMessage.newBuilder()
.setMetric(metric)
.setMemoryUsed(memoryUsed)
.setRefCount(1)
.build();
}
public static MetricDump fromProto(MetricDumpMessage protoDump) {
return new MetricDump(protoDump.getMetric(), protoDump.getMemoryUsed());
}
}
public static class ShardDump {
public final String shardId;
public final String dataset;
public final int numDocs;
public final List<MetricDump> loadedMetrics;
public ShardDump(String shardId, String dataset, int numDocs, List<MetricDump> loadedMetrics) {
this.shardId = shardId;
this.dataset = dataset;
this.numDocs = numDocs;
this.loadedMetrics = loadedMetrics;
}
public String getShardId() {
return shardId;
}
public String getDataset() {
return dataset;
}
public int getNumDocs() {
return numDocs;
}
public List<MetricDump> getLoadedMetrics() {
return loadedMetrics;
}
public ShardDumpMessage toProto() {
final ShardDumpMessage.Builder builder = ShardDumpMessage.newBuilder()
.setShardId(shardId)
.setDataset(dataset)
.setNumDocs(numDocs);
for (final MetricDump metricDump : loadedMetrics) {
builder.addLoadedMetric(metricDump.toProto());
}
return builder.build();
}
public static ShardDump fromProto(ShardDumpMessage protoDump) {
final List<MetricDump> loadedMetrics = new ArrayList<MetricDump>(protoDump.getLoadedMetricCount());
for (final MetricDumpMessage protoMetricDump : protoDump.getLoadedMetricList()) {
loadedMetrics.add(MetricDump.fromProto(protoMetricDump));
}
return new ShardDump(protoDump.getShardId(), protoDump.getDataset(), protoDump.getNumDocs(), loadedMetrics);
}
}
}