package uk.gov.gds.performance.collector;
import com.equalexperts.logging.DiagnosticContextSupplier;
import com.equalexperts.logging.OpsLogger;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.stream.IntStream;
import static uk.gov.gds.performance.collector.CollectorLogMessages.SUCCESS;
import static uk.gov.gds.performance.collector.CollectorLogMessages.UNKNOWN_ERROR;
public class ClassThatLogs {
private final OpsLogger<CollectorLogMessages> logger;
public ClassThatLogs(OpsLogger<CollectorLogMessages> logger) {
this.logger = logger;
}
public void foo() {
logger.log(SUCCESS, 42);
}
public void bar() {
RuntimeException e = new RuntimeException();
logger.logThrowable(UNKNOWN_ERROR, e);
throw e;
}
public String logContextsAcrossThreads() {
LocalContext context = new LocalContext(UUID.randomUUID().toString());
IntStream.rangeClosed(1, 5).parallel().forEach(i -> logger.with(context).log(SUCCESS, i));
IntStream.rangeClosed(6, 10).parallel().forEach(i -> logger.with(new LocalContext("fred")).log(SUCCESS, i));
return context.getJobId();
}
public void baz() {
}
static class LocalContext implements DiagnosticContextSupplier {
private final String jobId;
public LocalContext(String jobId) {
this.jobId = jobId;
}
@Override
public Map<String, String> getMessageContext() {
Map<String,String> context = new HashMap<>();
context.put("jobId", jobId);
return context;
}
public String getJobId() {
return jobId;
}
}
}