1
package com.m;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.management.ManagementFactory;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;
import java.util.Locale;
import java.util.TreeSet;
public class Test {
public static void main(String[] args) {
String fmt = "%{tname}/%{ip}";
StringBuilder bld = new StringBuilder();
StringBuilder varBld = null;
boolean escaping = false;
int varSeen = 0;
int i = 0;
for(int len = fmt.length(); i < len; ++i) {
char c = fmt.charAt(i);
if (c == '\\' && !escaping) {
escaping = true;
} else {
switch(varSeen) {
case 0:
if (c == '%' && !escaping) {
varSeen = 1;
break;
}
escaping = false;
varSeen = 0;
bld.append(c);
break;
case 1:
if (c == '{' && !escaping) {
varSeen = 2;
varBld = new StringBuilder();
break;
}
escaping = false;
varSeen = 0;
bld.append("%").append(c);
break;
default:
if (c == '}' && !escaping) {
String var = varBld.toString();
bld.append(processShellVar(var));
varBld = null;
varSeen = 0;
} else {
escaping = false;
varBld.append(c);
++varSeen;
}
}
}
}
if (varSeen > 0) {
System.out.println("Unterminated process ID substitution variable at the end of format string " + fmt);
}
System.out.println(bld.toString());
}
private static String processShellVar(String var) {
if (var.equals("tname")) {
return "tname1";
} else if (var.equals("pname")) {
return getProcessName();
} else if (var.equals("ip")) {
return getBestIpString();
} else if (var.equals("pid")) {
return Long.valueOf(getOsPid()).toString();
} else {
System.out.println("unknown ProcessID variable " + var);
return "";
}
}
static String getProcessName() {
String cmdLine = System.getProperty("sun.java.command");
if (cmdLine != null && !cmdLine.isEmpty()) {
String fullClassName = cmdLine.split("\\s+")[0];
String[] classParts = fullClassName.split("\\.");
cmdLine = classParts[classParts.length - 1];
}
return cmdLine != null && !cmdLine.isEmpty() ? cmdLine : "Unknown";
}
static String getBestIpString() {
Enumeration ifaces;
try {
ifaces = NetworkInterface.getNetworkInterfaces();
} catch (SocketException var6) {
System.out.println("Error getting network interfaces:" + var6);
return "127.0.0.1";
}
TreeSet<String> siteLocalCandidates = new TreeSet();
TreeSet candidates = new TreeSet();
while(ifaces.hasMoreElements()) {
NetworkInterface iface = (NetworkInterface)ifaces.nextElement();
Enumeration addrs = iface.getInetAddresses();
while(addrs.hasMoreElements()) {
InetAddress addr = (InetAddress)addrs.nextElement();
if (!addr.isLoopbackAddress()) {
if (addr.isSiteLocalAddress()) {
siteLocalCandidates.add(addr.getHostAddress());
} else {
candidates.add(addr.getHostAddress());
}
}
}
}
if (!siteLocalCandidates.isEmpty()) {
return (String)siteLocalCandidates.first();
} else if (!candidates.isEmpty()) {
return (String)candidates.first();
} else {
return "127.0.0.1";
}
}
static long getOsPid() {
return System.getProperty("os.name", "generic").toLowerCase(Locale.ENGLISH).contains("windows") ? getOsPidFromManagementFactory() : getOsPidFromShellPpid();
}
private static long getOsPidFromManagementFactory() {
try {
return Long.parseLong(ManagementFactory.getRuntimeMXBean().getName().split("@")[0]);
} catch (NumberFormatException var1) {
System.out.println("Failed to get the operating system process ID from the name of the managed bean for the JVM." + var1);
return 0L;
}
}
private static long getOsPidFromShellPpid() {
Process p = null;
StringBuilder sb = new StringBuilder();
label106: {
long var5;
try {
p = (new ProcessBuilder(new String[]{"/usr/bin/env", "sh", "-c", "echo $PPID"})).redirectErrorStream(true).start();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = "";
while((line = reader.readLine()) != null) {
sb.append(line.trim());
}
int exitVal = p.waitFor();
if (exitVal != 0) {
throw new IOException("Process exited with error code " + Integer.valueOf(exitVal).toString());
}
break label106;
} catch (InterruptedException var13) {
System.out.println("Interrupted while getting operating system pid from the shell." + var13);
var5 = 0L;
return var5;
} catch (IOException var14) {
System.out.println("Error getting operating system pid from the shell." + var14);
var5 = 0L;
} finally {
if (p != null) {
p.destroy();
}
}
return var5;
}
try {
return Long.parseLong(sb.toString());
} catch (NumberFormatException var12) {
System.out.println("Error parsing operating system pid from the shell." + var12);
return 0L;
}
}
}
2
package com.m;
import org.apache.htrace.core.SpanId;
import java.util.concurrent.ThreadLocalRandom;
public class Test {
public static void main(String[] args) {
new SpanId(SpanId.nonZeroRand64(), SpanId.nonZeroRand64());
}
public final static class SpanId implements Comparable<SpanId>{
private static final int SPAN_ID_STRING_LENGTH = 32;
private final long high;
private final long low;
public static org.apache.htrace.core.SpanId fromString(String str) {
if (str.length() != SPAN_ID_STRING_LENGTH) {
throw new RuntimeException("Invalid SpanID string: length was not " +
SPAN_ID_STRING_LENGTH);
}
long high =
((Long.parseLong(str.substring(0, 8), 16)) << 32) |
(Long.parseLong(str.substring(8, 16), 16));
long low =
((Long.parseLong(str.substring(16, 24), 16)) << 32) |
(Long.parseLong(str.substring(24, 32), 16));
return new org.apache.htrace.core.SpanId(high, low);
}
public SpanId(long high, long low) {
this.high = high;
this.low = low;
}
private static long nonZeroRand64() {
while (true) {
long r = ThreadLocalRandom.current().nextLong();
if (r != 0) {
return r;
}
}
}
public static org.apache.htrace.core.SpanId fromRandom() {
return new org.apache.htrace.core.SpanId(nonZeroRand64(), nonZeroRand64());
}
@Override
public String toString() {
return String.format("%08x%08x%08x%08x",
(0x00000000ffffffffL & (high >> 32)),
(0x00000000ffffffffL & high),
(0x00000000ffffffffL & (low >> 32)),
(0x00000000ffffffffL & low));
}
@Override
public int hashCode() {
return (int)((0xffffffff & (high >> 32))) ^
(int)((0xffffffff & (high >> 0))) ^
(int)((0xffffffff & (low >> 32))) ^
(int)((0xffffffff & (low >> 0)));
}
@Override
public int compareTo(SpanId other) {
int cmp = compareAsUnsigned(high, other.high);
if (cmp != 0) {
return cmp;
}
return compareAsUnsigned(low, other.low);
}
private static int compareAsUnsigned(long a, long b) {
boolean aSign = a < 0;
boolean bSign = b < 0;
if (aSign != bSign) {
if (aSign) {
return 1;
} else {
return -1;
}
}
if (aSign) {
a = -a;
b = -b;
}
if (a < b) {
return -1;
} else if (a > b) {
return 1;
} else {
return 0;
}
}
@Override
public boolean equals(Object o) {
if (!(o instanceof SpanId)) {
return false;
}
SpanId other = (SpanId)o;
return ((other.high == high) && (other.low == low));
}
}
}
3
package com.m;
import org.apache.htrace.core.SpanId;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ThreadLocalRandom;
public class Test {
public static void main(String[] args) {
final List<String> list = new ArrayList<>();
list.add("1");
list.add("2");
abstractTest abstractTest = new abstractTest() {
@Override
public void test() {
for (String str : list) {
System.out.println(str);
}
}
};
System.out.println(abstractTest);
}
public abstract static class abstractTest {
public abstract void test();
public void test1() {
System.out.println("test1");
}
}
}