/*
* Copyright (c) 2008-2017, Hazelcast, Inc. All Rights Reserved.
*
* 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.hazelcast.internal.management.dto;
import com.eclipsesource.json.JsonArray;
import com.eclipsesource.json.JsonObject;
import com.eclipsesource.json.JsonValue;
import com.hazelcast.config.HotRestartClusterDataRecoveryPolicy;
import com.hazelcast.internal.management.JsonSerializable;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import static com.hazelcast.config.HotRestartClusterDataRecoveryPolicy.FULL_RECOVERY_ONLY;
import static com.hazelcast.util.Preconditions.isNotNull;
/**
* A DTO for Hot Restart status of cluster and all members.
*/
public class ClusterHotRestartStatusDTO implements JsonSerializable {
public enum ClusterHotRestartStatus {
UNKNOWN, IN_PROGRESS, FAILED, SUCCEEDED
}
public enum MemberHotRestartStatus {
PENDING, LOAD_IN_PROGRESS, SUCCESSFUL, FAILED
}
private HotRestartClusterDataRecoveryPolicy dataRecoveryPolicy;
private ClusterHotRestartStatus hotRestartStatus;
private long remainingValidationTimeMillis;
private long remainingDataLoadTimeMillis;
private Map<String, MemberHotRestartStatus> memberHotRestartStatusMap;
public ClusterHotRestartStatusDTO() {
this(FULL_RECOVERY_ONLY, ClusterHotRestartStatus.UNKNOWN, -1, -1,
Collections.<String, MemberHotRestartStatus>emptyMap());
}
public ClusterHotRestartStatusDTO(HotRestartClusterDataRecoveryPolicy dataRecoveryPolicy,
ClusterHotRestartStatus hotRestartStatus,
long remainingValidationTimeMillis,
long remainingDataLoadTimeMillis,
Map<String, MemberHotRestartStatus> memberHotRestartStatusMap) {
isNotNull(dataRecoveryPolicy, "dataRecoveryPolicy");
isNotNull(hotRestartStatus, "hotRestartStatus");
isNotNull(memberHotRestartStatusMap, "memberHotRestartStatusMap");
this.dataRecoveryPolicy = dataRecoveryPolicy;
this.hotRestartStatus = hotRestartStatus;
this.remainingValidationTimeMillis = remainingValidationTimeMillis;
this.remainingDataLoadTimeMillis = remainingDataLoadTimeMillis;
this.memberHotRestartStatusMap = memberHotRestartStatusMap;
}
public HotRestartClusterDataRecoveryPolicy getDataRecoveryPolicy() {
return dataRecoveryPolicy;
}
public ClusterHotRestartStatus getHotRestartStatus() {
return hotRestartStatus;
}
public long getRemainingValidationTimeMillis() {
return remainingValidationTimeMillis;
}
public long getRemainingDataLoadTimeMillis() {
return remainingDataLoadTimeMillis;
}
public Map<String, MemberHotRestartStatus> getMemberHotRestartStatusMap() {
return memberHotRestartStatusMap;
}
@Override
public JsonObject toJson() {
JsonObject root = new JsonObject();
root.add("dataRecoveryPolicy", dataRecoveryPolicy.toString());
root.add("hotRestartStatus", hotRestartStatus.toString());
root.add("remainingValidationTimeMillis", remainingValidationTimeMillis);
root.add("remainingDataLoadTimeMillis", remainingDataLoadTimeMillis);
JsonArray memberStatuses = new JsonArray();
for (Map.Entry<String, MemberHotRestartStatus> entry : memberHotRestartStatusMap.entrySet()) {
String member = entry.getKey();
MemberHotRestartStatus status = entry.getValue();
JsonObject pair = new JsonObject();
pair.add("member", member);
pair.add("status", status.toString());
memberStatuses.add(pair);
}
root.add("memberHotRestartStatuses", memberStatuses);
return root;
}
@Override
public void fromJson(JsonObject root) {
String dataRecoveryPolicyStr = root.getString("dataRecoveryPolicy", FULL_RECOVERY_ONLY.toString());
dataRecoveryPolicy = HotRestartClusterDataRecoveryPolicy.valueOf(dataRecoveryPolicyStr);
String hotRestartStatusStr = root.getString("hotRestartStatus", ClusterHotRestartStatus.UNKNOWN.toString());
hotRestartStatus = ClusterHotRestartStatus.valueOf(hotRestartStatusStr);
remainingValidationTimeMillis = root.getLong("remainingValidationTimeMillis", -1);
remainingDataLoadTimeMillis = root.getLong("remainingDataLoadTimeMillis", -1);
JsonArray memberStatuses = (JsonArray) root.get("memberHotRestartStatuses");
memberHotRestartStatusMap = new HashMap<String, MemberHotRestartStatus>(memberStatuses.size());
for (JsonValue value : memberStatuses) {
JsonObject memberStatus = (JsonObject) value;
String member = memberStatus.getString("member", "<unknown>");
MemberHotRestartStatus status = MemberHotRestartStatus
.valueOf(memberStatus.getString("status", MemberHotRestartStatus.PENDING.toString()));
memberHotRestartStatusMap.put(member, status);
}
}
}