package com.sohu.cache.app;
import java.net.*;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.ResourceBundle;
/**
* Created by zhangyijun on 15/11/2.
*/
public class JvmConfiger {
public final static ResourceBundle RESOURCE = ResourceBundle.getBundle("application");
public static String getJvmConfig() {
StringBuilder buffer = new StringBuilder();
append(buffer, RESOURCE, "jvm.mem");
append(buffer, RESOURCE, "jvm.log");
append(buffer, RESOURCE, "jvm.gc");
append(buffer, RESOURCE, "jvm.others");
append(buffer, RESOURCE, "jvm.args");
return buffer.toString();
}
public static String getRun() {
StringBuilder buffer = new StringBuilder();
buffer.append("nohup java ");
buffer.append(String.format("`java -jar %s -jvm`",getPackageName()));
buffer.append(" -jar ");
buffer.append(getPackageName());
buffer.append(" > ");
buffer.append("./console.log");
buffer.append(" 2>&1 &");
return buffer.toString();
}
private static String getPackageName(){
return getAppConfig("project.name") + "." + getAppConfig("project.package");
}
private static StringBuilder append(StringBuilder buffer, ResourceBundle resource, String key) {
if (resource.containsKey(key)) {
String value = resource.getString(key);
if (value.contains("hostname=%s")) {
value = String.format(value, getLocalAddress());
}
return buffer.append(" " + value);
}
return buffer;
}
public static String getAppConfig(String key) {
if (RESOURCE.containsKey(key)) {
return RESOURCE.getString(key);
}
return null;
}
public static String getLocalAddress() {
try {
// Traversal Network interface to get the first non-loopback and non-private address
Enumeration<NetworkInterface> enumeration = NetworkInterface.getNetworkInterfaces();
ArrayList<String> ipv4Result = new ArrayList<String>();
ArrayList<String> ipv6Result = new ArrayList<String>();
while (enumeration.hasMoreElements()) {
final NetworkInterface networkInterface = enumeration.nextElement();
final Enumeration<InetAddress> en = networkInterface.getInetAddresses();
while (en.hasMoreElements()) {
final InetAddress address = en.nextElement();
if (!address.isLoopbackAddress()) {
if (address instanceof Inet6Address) {
ipv6Result.add(normalizeHostAddress(address));
} else {
ipv4Result.add(normalizeHostAddress(address));
}
}
}
}
// prefer ipv4
if (!ipv4Result.isEmpty()) {
for (String ip : ipv4Result) {
if (ip.startsWith("127.0") || ip.startsWith("192.168")) {
continue;
}
return ip;
}
return ipv4Result.get(ipv4Result.size() - 1);
} else if (!ipv6Result.isEmpty()) {
return ipv6Result.get(0);
}
//If failed to find,fall back to localhost
final InetAddress localHost = InetAddress.getLocalHost();
return normalizeHostAddress(localHost);
} catch (SocketException e) {
e.printStackTrace();
} catch (UnknownHostException e) {
e.printStackTrace();
}
return null;
}
public static String normalizeHostAddress(final InetAddress localHost) {
if (localHost instanceof Inet6Address) {
return "[" + localHost.getHostAddress() + "]";
} else {
return localHost.getHostAddress();
}
}
}