fixes and ping preformance

This commit is contained in:
anhefti 2020-02-25 15:28:54 +01:00
parent b15ee062cf
commit a360bfffc8
4 changed files with 72 additions and 21 deletions

View file

@ -134,22 +134,10 @@ public final class MultiSelectionCombo extends Composite implements Selection {
Arrays.asList(StringUtils.split(keys, Constants.LIST_SEPARATOR))
.stream()
.map(this::itemForName)
.map(this::itemForId)
.forEach(this::addSelection);
}
private Tuple<String> itemForName(final String name) {
final Optional<Tuple<String>> findFirst = this.availableValues
.stream()
.filter(it -> it._2 != null && it._2.equals(name))
.findFirst();
if (findFirst.isPresent()) {
return findFirst.get();
}
return null;
}
@Override
public String getSelectionValue() {
if (this.selectedValues.isEmpty()) {
@ -237,4 +225,28 @@ public final class MultiSelectionCombo extends Composite implements Selection {
}
}
private Tuple<String> itemForName(final String name) {
final Optional<Tuple<String>> findFirst = this.availableValues
.stream()
.filter(it -> it._2 != null && it._2.equals(name))
.findFirst();
if (findFirst.isPresent()) {
return findFirst.get();
}
return null;
}
private Tuple<String> itemForId(final String id) {
final Optional<Tuple<String>> findFirst = this.availableValues
.stream()
.filter(it -> it._1 != null && it._1.equals(id))
.findFirst();
if (findFirst.isPresent()) {
return findFirst.get();
}
return null;
}
}

View file

@ -75,7 +75,8 @@ public class SebInstructionServiceImpl implements SebInstructionService {
loadInstruction()
.onError(
error -> log.error("Failed to initialize and load persistent storage SEB client instructions: ",
error -> log.error(
"Failed to initialize and load persistent storage SEB client instructions: ",
error));
if (this.instructions.size() > 0) {
@ -116,6 +117,9 @@ public class SebInstructionServiceImpl implements SebInstructionService {
@Override
public String getInstructionJSON(final String connectionToken) {
refreshCache();
if (this.instructions.isEmpty()) {
return null;
}
final ClientInstructionRecord clientInstruction = this.instructions.remove(connectionToken);
if (clientInstruction != null) {

View file

@ -13,7 +13,6 @@ import java.security.Principal;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
import java.util.stream.Collectors;
@ -26,6 +25,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
@ -129,7 +129,8 @@ public class ExamAPI_V1_Controller {
}
if (result.isEmpty()) {
log.warn("There are no currently running exams for institution: {}. SEB connection creation denied", institutionId);
log.warn("There are no currently running exams for institution: {}. SEB connection creation denied",
institutionId);
throw new IllegalStateException("There are no currently running exams");
}
@ -306,22 +307,48 @@ public class ExamAPI_V1_Controller {
}
}
private static final ResponseEntity<String> EMPTY_PING_RESPONSE = ResponseEntity
.ok()
.build();
@RequestMapping(
path = API.EXAM_API_PING_ENDPOINT,
method = RequestMethod.POST,
consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE,
produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public CompletableFuture<String> ping(
public ResponseEntity<String> ping(
@RequestHeader(name = API.EXAM_API_SEB_CONNECTION_TOKEN, required = true) final String connectionToken,
@RequestParam(name = API.EXAM_API_PING_TIMESTAMP, required = true) final long timestamp,
@RequestParam(name = API.EXAM_API_PING_NUMBER, required = false) final int pingNumber) {
return CompletableFuture.supplyAsync(
() -> this.sebClientConnectionService
.notifyPing(connectionToken, timestamp, pingNumber),
this.executor);
final String notifyPing = this.sebClientConnectionService
.notifyPing(connectionToken, timestamp, pingNumber);
if (notifyPing == null) {
return EMPTY_PING_RESPONSE;
}
return ResponseEntity
.ok()
.body(notifyPing);
}
// @RequestMapping(
// path = API.EXAM_API_PING_ENDPOINT,
// method = RequestMethod.POST,
// consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE,
// produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
// public CompletableFuture<String> ping(
// @RequestHeader(name = API.EXAM_API_SEB_CONNECTION_TOKEN, required = true) final String connectionToken,
// @RequestParam(name = API.EXAM_API_PING_TIMESTAMP, required = true) final long timestamp,
// @RequestParam(name = API.EXAM_API_PING_NUMBER, required = false) final int pingNumber) {
//
// return CompletableFuture.supplyAsync(
// () -> this.sebClientConnectionService
// .notifyPing(connectionToken, timestamp, pingNumber),
// this.executor);
// }
@RequestMapping(
path = API.EXAM_API_EVENT_ENDPOINT,
method = RequestMethod.POST,

View file

@ -339,6 +339,14 @@ public class ExamAdministrationController extends EntityController<Exam, Exam> {
.flatMap(this.examAdminService::applyAdditionalSEBRestrictions);
}
@Override
protected Result<Exam> notifySaved(final Exam entity) {
return Result.tryCatch(() -> {
this.examSessionService.flushCache(entity);
return entity;
});
}
@Override
protected Result<Exam> validForCreate(final Exam entity) {
return super.validForCreate(entity)