use of org.spf4j.base.StackSamples in project spf4j by zolyfarkas.
the class MonitorTest method main.
@SuppressFBWarnings("MDM_THREAD_YIELD")
public static void main(final String[] args) throws InterruptedException {
LOG.debug("running test main");
stopped = false;
try (ExecutionContext ctx = ExecutionContexts.start("main", 10, TimeUnit.MINUTES)) {
List<Thread> threads = new ArrayList<Thread>(20);
for (int i = 0; i < 20; i++) {
Thread t;
t = new Thread(new AbstractRunnable() {
@Override
@SuppressFBWarnings("PREDICTABLE_RANDOM")
public void doRun() throws InterruptedException {
try (ExecutionContext tctx = ExecutionContexts.start("testThread", ctx, 10, TimeUnit.MINUTES)) {
while (!stopped) {
double rnd = ThreadLocalRandom.current().nextDouble();
if (rnd < 0.33) {
doStuff1(rnd, 50);
} else if (rnd < 0.66) {
doStuff2(rnd);
} else {
doStuff3(rnd);
}
}
StackSamples stackSamples = tctx.getAndClearStackSamples();
if (stackSamples != null) {
LOG.debug("Stack samples", stackSamples);
}
}
}
@SuppressFBWarnings("MDM_THREAD_YIELD")
private double doStuff3(final double rnd) throws InterruptedException {
Thread.sleep(1);
if (rnd > 0.8) {
doStuff2(rnd);
}
return rnd * Math.pow(2, 10000);
}
@SuppressFBWarnings("MDM_THREAD_YIELD")
private double doStuff2(final double prnd) throws InterruptedException {
double rnd = prnd;
Thread.sleep(1);
for (int j = 0; j < 10000; j++) {
rnd = rnd + rnd;
}
return rnd;
}
@SuppressFBWarnings("MDM_THREAD_YIELD")
private void doStuff1(final double rnd, final int depth) throws InterruptedException {
if (depth <= 0) {
Thread.sleep(10);
} else {
doStuff1(rnd, depth - 1);
}
}
}, "Thread" + i);
t.start();
threads.add(t);
}
Thread.sleep(5000);
stopped = true;
for (Thread t : threads) {
t.join(3000);
}
}
LOG.debug("finished test main");
}
use of org.spf4j.base.StackSamples in project spf4j by zolyfarkas.
the class Slf4jLogRecord method toLogRecord.
@SuppressFBWarnings("WOC_WRITE_ONLY_COLLECTION_LOCAL")
default LogRecord toLogRecord(final String origin, final String ptraceId) {
java.lang.Throwable extraThrowable = this.getExtraThrowable();
Marker marker = this.getMarker();
Object[] extraArguments = this.getExtraArguments();
Map<String, Object> attribs = null;
List<Object> xArgs;
String traceId = ptraceId;
List<StackSampleElement> profiles = Collections.EMPTY_LIST;
if (extraArguments.length == 0) {
xArgs = Collections.emptyList();
} else {
int nrAttribs = 0;
for (Object obj : extraArguments) {
if (obj instanceof LogAttribute) {
LogAttribute la = (LogAttribute) obj;
String name = la.getName();
switch(name) {
case LogAttribute.ID_ATTR_NAME:
traceId = la.getValue().toString();
break;
case LogAttribute.PROFILE_SAMPLES_ATTR_NAME:
profiles = Converters.convert((StackSamples) la.getValue());
break;
default:
}
nrAttribs++;
}
}
if (nrAttribs == 0) {
xArgs = Arrays.asList(extraArguments);
} else {
if (nrAttribs == extraArguments.length) {
xArgs = Collections.EMPTY_LIST;
} else {
xArgs = new ArrayList<>(extraArguments.length - nrAttribs);
}
attribs = Maps.newHashMapWithExpectedSize(nrAttribs + (marker == null ? 0 : 1));
for (Object obj : extraArguments) {
if (obj instanceof LogAttribute) {
LogAttribute la = (LogAttribute) obj;
String aName = la.getName();
switch(aName) {
case LogAttribute.ID_ATTR_NAME:
case LogAttribute.PROFILE_SAMPLES_ATTR_NAME:
break;
default:
attribs.put(aName, la.getValue());
}
} else {
xArgs.add(obj);
}
}
if (marker != null) {
attribs.put(marker.getName(), marker);
}
}
}
int nrMsgArgs = this.getNrMessageArguments();
List<String> messageArgs;
if (nrMsgArgs == 0) {
messageArgs = Collections.emptyList();
} else {
Object[] args = this.getArguments();
String[] ma = new String[nrMsgArgs];
for (int i = 0; i < nrMsgArgs; i++) {
Object arg = args[i];
if (arg == null) {
ma[i] = "null";
} else {
ma[i] = ObjectAppenderSupplier.getDefaultToStringAppenderSupplier().get(arg.getClass()).toString(arg);
}
}
messageArgs = Arrays.asList(ma);
}
return new LogRecord(origin, traceId, this.getLevel().getAvroLevel(), Instant.ofEpochMilli(this.getTimeStamp()), this.getLoggerName(), this.getThreadName(), this.getMessageFormat(), messageArgs, xArgs, attribs == null ? Collections.emptyMap() : attribs, extraThrowable == null ? null : convert(extraThrowable), profiles);
}
Aggregations