2026-06-23 22:09:06 +08:00
|
|
|
package com.quantai.trader.evidence;
|
|
|
|
|
|
|
|
|
|
import com.quantai.trader.domain.TraderEvidence;
|
|
|
|
|
import org.slf4j.Logger;
|
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
2026-06-26 21:53:22 +08:00
|
|
|
import java.time.Instant;
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
import java.util.concurrent.CopyOnWriteArrayList;
|
|
|
|
|
|
2026-06-23 22:09:06 +08:00
|
|
|
@Component
|
|
|
|
|
public class EvidenceAppender {
|
|
|
|
|
private static final Logger log = LoggerFactory.getLogger(EvidenceAppender.class);
|
2026-06-26 21:53:22 +08:00
|
|
|
private final CopyOnWriteArrayList<TraderEvidence> evidence = new CopyOnWriteArrayList<>();
|
2026-06-23 22:09:06 +08:00
|
|
|
|
2026-06-26 21:53:22 +08:00
|
|
|
public TraderEvidence append(String runId, String cycleId, String stage, boolean pass, String reason, String blocker, Map<String, Object> details) {
|
|
|
|
|
TraderEvidence item = new TraderEvidence("evidence_" + cycleId + "_" + evidence.size(), runId, cycleId,
|
|
|
|
|
stage, pass, reason, blocker, Instant.now(), details);
|
|
|
|
|
evidence.add(item);
|
|
|
|
|
log.info("event=trader.evidence.appended runId={} cycleId={} stage={} pass={} reason={} blocker={}",
|
|
|
|
|
runId, cycleId, stage, pass, reason, blocker);
|
|
|
|
|
return item;
|
2026-06-23 22:09:06 +08:00
|
|
|
}
|
|
|
|
|
|
2026-06-26 21:53:22 +08:00
|
|
|
public List<TraderEvidence> all() {
|
|
|
|
|
return new ArrayList<>(evidence);
|
2026-06-23 22:09:06 +08:00
|
|
|
}
|
|
|
|
|
}
|