Start structural port from Spring Boot to Undertow
This commit is contained in:
@@ -28,8 +28,10 @@ import io.kamax.matrix._ThreePid;
|
||||
import io.kamax.matrix.event.EventKey;
|
||||
import io.kamax.matrix.json.GsonUtil;
|
||||
import io.kamax.mxisd.backend.sql.synapse.Synapse;
|
||||
import io.kamax.mxisd.config.ListenerConfig;
|
||||
import io.kamax.mxisd.config.MatrixConfig;
|
||||
import io.kamax.mxisd.config.MxisdConfig;
|
||||
import io.kamax.mxisd.exception.HttpMatrixException;
|
||||
import io.kamax.mxisd.exception.NotAllowedException;
|
||||
import io.kamax.mxisd.notification.NotificationManager;
|
||||
import io.kamax.mxisd.profile.ProfileManager;
|
||||
import io.kamax.mxisd.storage.IStorage;
|
||||
@@ -38,8 +40,6 @@ import io.kamax.mxisd.util.GsonParser;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.time.Instant;
|
||||
@@ -48,14 +48,12 @@ import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Component
|
||||
public class AppServiceHandler {
|
||||
public class AppSvcManager {
|
||||
|
||||
private final Logger log = LoggerFactory.getLogger(AppServiceHandler.class);
|
||||
private transient final Logger log = LoggerFactory.getLogger(AppSvcManager.class);
|
||||
|
||||
private final GsonParser parser;
|
||||
|
||||
private String localpart;
|
||||
private MatrixConfig cfg;
|
||||
private IStorage store;
|
||||
private ProfileManager profiler;
|
||||
@@ -64,22 +62,36 @@ public class AppServiceHandler {
|
||||
|
||||
private Map<String, CompletableFuture<String>> transactionsInProgress;
|
||||
|
||||
@Autowired
|
||||
public AppServiceHandler(ListenerConfig lCfg, MatrixConfig cfg, IStorage store, ProfileManager profiler, NotificationManager notif, Synapse synapse) {
|
||||
this.cfg = cfg;
|
||||
public AppSvcManager(MxisdConfig cfg, IStorage store, ProfileManager profiler, NotificationManager notif, Synapse synapse) {
|
||||
this.cfg = cfg.getMatrix();
|
||||
this.store = store;
|
||||
this.profiler = profiler;
|
||||
this.notif = notif;
|
||||
this.synapse = synapse;
|
||||
|
||||
localpart = lCfg.getLocalpart();
|
||||
parser = new GsonParser();
|
||||
transactionsInProgress = new ConcurrentHashMap<>();
|
||||
}
|
||||
|
||||
public AppSvcManager withToken(String token) {
|
||||
if (StringUtils.isBlank(token)) {
|
||||
throw new HttpMatrixException(401, "M_UNAUTHORIZED", "No HS token");
|
||||
}
|
||||
|
||||
if (!StringUtils.equals(cfg.getListener().getToken().getHs(), token)) {
|
||||
throw new NotAllowedException("Invalid HS token");
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
public CompletableFuture<String> processTransaction(String txnId, InputStream is) {
|
||||
if (StringUtils.isEmpty(txnId)) {
|
||||
throw new IllegalArgumentException("Transaction ID cannot be empty");
|
||||
}
|
||||
|
||||
synchronized (this) {
|
||||
Optional<ASTransactionDao> dao = store.getTransactionResult(localpart, txnId);
|
||||
Optional<ASTransactionDao> dao = store.getTransactionResult(cfg.getListener().getLocalpart(), txnId);
|
||||
if (dao.isPresent()) {
|
||||
log.info("AS Transaction {} already processed - returning computed result", txnId);
|
||||
return CompletableFuture.completedFuture(dao.get().getResult());
|
||||
@@ -104,19 +116,19 @@ public class AppServiceHandler {
|
||||
log.debug("{} event(s) parsed", events.size());
|
||||
|
||||
processTransaction(events);
|
||||
Instant end = Instant.now();
|
||||
log.info("Processed AS transaction {} in {} ms", txnId, (Instant.now().toEpochMilli() - start.toEpochMilli()));
|
||||
|
||||
Instant end = Instant.now();
|
||||
String result = "{}";
|
||||
|
||||
try {
|
||||
log.info("Saving transaction details to store");
|
||||
store.insertTransactionResult(localpart, txnId, end, result);
|
||||
store.insertTransactionResult(cfg.getListener().getLocalpart(), txnId, end, result);
|
||||
} finally {
|
||||
log.debug("Removing CompletedFuture from transaction map");
|
||||
transactionsInProgress.remove(txnId);
|
||||
}
|
||||
|
||||
log.info("Processed AS transaction {} in {} ms", txnId, (Instant.now().toEpochMilli() - start.toEpochMilli()));
|
||||
future.complete(result);
|
||||
} catch (Exception e) {
|
||||
log.error("Unable to properly process transaction {}", txnId, e);
|
||||
Reference in New Issue
Block a user