package org.skywalking.apm.trace;
import org.skywalking.apm.util.MachineInfo;
import org.skywalking.apm.util.StringUtil;
import java.util.UUID;
public final class GlobalIdGenerator {
private static final ThreadLocal<Integer> THREAD_ID_SEQUENCE = new ThreadLocal<Integer>() {
@Override
protected Integer initialValue() {
return 0;
}
};
private static final int PROCESS_UUID;
static {
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
PROCESS_UUID = uuid.substring(uuid.length() - 7).hashCode();
}
private GlobalIdGenerator() {
}
public static String generate(String type) {
Integer seq = THREAD_ID_SEQUENCE.get();
seq++;
THREAD_ID_SEQUENCE.set(seq);
return StringUtil.join('.',
type + "", System.currentTimeMillis() + "", PROCESS_UUID + "",
MachineInfo.getProcessNo() + "", Thread.currentThread().getId() + "", seq + "");
}
}