package org.apache.hadoop.mapred;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.mortbay.util.ajax.JSON;
public class ClusterStatusJSONParser {
private static Object getJSONObject(URL jsonURL)
throws IOException {
URLConnection conn = jsonURL.openConnection();
BufferedReader reader = new BufferedReader(new InputStreamReader(
conn.getInputStream()));
StringBuffer buffer = new StringBuffer();
char[] buff = new char[4096];
int read = 0;
while((read = reader.read(buff)) > 0) {
buffer.append(buff, 0, read);
}
DynamicCloudsDaemon.LOG.info("Read " + buffer.length() + " bytes");
Object res = JSON.parse(buffer.toString());
return res;
}
public static Map<String, String> getClusterConf(String clusterAddress)
throws IOException {
URL jobTrackerStatusJsp = new URL(clusterAddress +
"/jobtrackersdetailsjson.jsp?jobTrackerConf=1");
Map<String, String> confFilesLocation =
(Map<String, String>) getJSONObject(jobTrackerStatusJsp);
return confFilesLocation;
}
public static List<TaskTrackerLoadInfo> getJobTrackerStatus(
String jobTrackerUrl) throws IOException {
List<TaskTrackerLoadInfo> result = new ArrayList<TaskTrackerLoadInfo>();
URL jobTrackerStatusJsp = new URL(jobTrackerUrl +
"/jobtrackersdetailsjson.jsp?status=1");
Map<String, Object> trackersStatus =
(Map<String, Object>) getJSONObject(jobTrackerStatusJsp);
for (String taskTrackerName : trackersStatus.keySet()) {
Map<String, Object> trackerInfo =
(Map<String, Object>) trackersStatus.get(taskTrackerName);
TaskTrackerLoadInfo status = new TaskTrackerLoadInfo(taskTrackerName);
status.parseMap(trackerInfo);
result.add(status);
}
return result;
}
}