in geronimo-opentracing-common/src/main/java/org/apache/geronimo/microprofile/opentracing/common/impl/IdGenerator.java [35:69]
public void init() {
final String type = config.read("id.generator", "counter");
counter = "counter".equalsIgnoreCase(type);
switch (type) {
case "counter":
delegate = new Supplier<Object>() {
private final AtomicLong counter = new AtomicLong();
@Override
public Object get() {
return counter.incrementAndGet();
}
};
break;
case "uuid":
delegate = () -> UUID.randomUUID().toString();
break;
case "hex": // limited to 16 for the length cause of zipkin (see span decoder)
default:
delegate = new Supplier<Object>() {
private final Random random = new Random(System.nanoTime());
private final char[] hexDigits = "0123456789abcdef".toCharArray();
private final String constantPart = config.read("id.generator.hex.prefix", "");
@Override
public Object get() {
final StringBuilder sb = new StringBuilder(16).append(constantPart);
for (int i = 0; i < 16 - constantPart.length(); i++) {
sb.append(hexDigits[random.nextInt(16)]);
}
return sb.toString();
}
};
}
}