/**
* Copyright 2017 Netflix, Inc.
* <p>
* 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
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* 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.netflix.raigad.discovery.utils;
import com.netflix.raigad.discovery.RaigadInstance;
import org.apache.logging.log4j.Logger;
import org.elasticsearch.common.xcontent.NamedXContentRegistry;
import org.elasticsearch.common.xcontent.XContentParser;
import org.elasticsearch.common.xcontent.json.JsonXContent;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class ElasticsearchUtil {
private static final String TOP_LEVEL_ELEMENT = "instances";
private static final String HOST_NAME = "host_name";
private static final String ID = "id";
private static final String APP_NAME = "app_name";
private static final String INSTANCE_ID = "instance_id";
private static final String AVAILABILITY_ZONE = "availability_zone";
private static final String PUBLIC_IP = "public_ip";
private static final String DC = "dc";
private static final String UPDATE_TIME = "update_time";
@SuppressWarnings("unchecked")
public static List<RaigadInstance> getRaigadInstancesFromJsonString(String jsonInstances, Logger logger) {
List<RaigadInstance> raigadInstances = new ArrayList<RaigadInstance>();
try {
Map<String, Object> topLevelInstanceMap = (Map<String, Object>) jsonToMap(jsonInstances).get(TOP_LEVEL_ELEMENT);
for (String instanceKey : topLevelInstanceMap.keySet()) {
Map<String, Object> instParamMap = (Map<String, Object>) topLevelInstanceMap.get(instanceKey);
RaigadInstance raigadInstance = new RaigadInstance();
raigadInstance.setApp((String) instParamMap.get(APP_NAME));
raigadInstance.setAvailabilityZone((String) instParamMap.get(AVAILABILITY_ZONE));
raigadInstance.setDC((String) instParamMap.get(DC));
raigadInstance.setHostIP((String) instParamMap.get(PUBLIC_IP));
raigadInstance.setHostName((String) instParamMap.get(HOST_NAME));
raigadInstance.setId((String) instParamMap.get(ID));
raigadInstance.setInstanceId((String) instParamMap.get(INSTANCE_ID));
raigadInstance.setUpdatetime((Long) instParamMap.get(UPDATE_TIME));
logger.info("Raigad instance: {}", raigadInstance.toString());
//Add to the list
raigadInstances.add(raigadInstance);
}
} catch (IOException e) {
logger.error("Error caught while parsing JSON", e);
}
return raigadInstances;
}
private static Map<String, Object> jsonToMap(String jsonString) throws IOException {
try (XContentParser parser = JsonXContent.jsonXContent.createParser(NamedXContentRegistry.EMPTY, jsonString)) {
return parser.mapOrdered();
}
}
}