fixed ping (use SEB Server system-clock instead of SEB time sent)
This commit is contained in:
parent
5229906f69
commit
150c679f21
3 changed files with 39 additions and 12 deletions
|
@ -11,7 +11,9 @@ package ch.ethz.seb.sebserver.webservice.datalayer.checks;
|
|||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.mybatis.dynamic.sql.SqlBuilder;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
@ -19,6 +21,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|||
import ch.ethz.seb.sebserver.gbl.profile.WebServiceProfile;
|
||||
import ch.ethz.seb.sebserver.gbl.util.Result;
|
||||
import ch.ethz.seb.sebserver.webservice.DBIntegrityCheck;
|
||||
import ch.ethz.seb.sebserver.webservice.datalayer.batis.mapper.OrientationRecordDynamicSqlSupport;
|
||||
import ch.ethz.seb.sebserver.webservice.datalayer.batis.mapper.OrientationRecordMapper;
|
||||
import ch.ethz.seb.sebserver.webservice.datalayer.batis.model.OrientationRecord;
|
||||
|
||||
|
@ -68,7 +71,12 @@ public class OrientationTableDuplicatesCheck implements DBIntegrityCheck {
|
|||
}
|
||||
|
||||
if (tryFix) {
|
||||
toDelete
|
||||
final List<Long> checkedToDelete = toDelete
|
||||
.stream()
|
||||
.filter(this::doubleCheck)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
checkedToDelete
|
||||
.stream()
|
||||
.forEach(this.orientationRecordMapper::deleteByPrimaryKey);
|
||||
return "Fixed duplicates by deletion: " + toDelete;
|
||||
|
@ -79,6 +87,24 @@ public class OrientationTableDuplicatesCheck implements DBIntegrityCheck {
|
|||
});
|
||||
}
|
||||
|
||||
private boolean doubleCheck(final Long id) {
|
||||
try {
|
||||
final OrientationRecord selectByPrimaryKey = this.orientationRecordMapper.selectByPrimaryKey(id);
|
||||
final Long count = this.orientationRecordMapper.countByExample()
|
||||
.where(
|
||||
OrientationRecordDynamicSqlSupport.configAttributeId,
|
||||
SqlBuilder.isEqualTo(selectByPrimaryKey.getConfigAttributeId()))
|
||||
.and(
|
||||
OrientationRecordDynamicSqlSupport.templateId,
|
||||
SqlBuilder.isEqualTo(selectByPrimaryKey.getTemplateId()))
|
||||
.build()
|
||||
.execute();
|
||||
return count != null && count.longValue() > 1;
|
||||
} catch (final Exception e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
final StringBuilder builder = new StringBuilder();
|
||||
|
|
|
@ -87,7 +87,8 @@ public final class PingIntervalClientIndicator extends AbstractPingIndicator {
|
|||
this.lastUpdate = this.distributedIndicatorValueService.lastUpdate();
|
||||
}
|
||||
|
||||
return currentTimeMillis - value;
|
||||
final double res = currentTimeMillis - value;
|
||||
return res >= 0.0D ? res : 0.0D;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -286,23 +286,23 @@ public class ExamAPI_V1_Controller {
|
|||
public void ping(final HttpServletRequest request, final HttpServletResponse response) {
|
||||
|
||||
final String connectionToken = request.getHeader(API.EXAM_API_SEB_CONNECTION_TOKEN);
|
||||
final String timeStampString = request.getParameter(API.EXAM_API_PING_TIMESTAMP);
|
||||
//final String timeStampString = request.getParameter(API.EXAM_API_PING_TIMESTAMP);
|
||||
final String pingNumString = request.getParameter(API.EXAM_API_PING_NUMBER);
|
||||
final String instructionConfirm = request.getParameter(API.EXAM_API_PING_INSTRUCTION_CONFIRM);
|
||||
|
||||
long pingTime;
|
||||
try {
|
||||
pingTime = Long.parseLong(timeStampString);
|
||||
} catch (final Exception e) {
|
||||
log.error("Invalid ping request: {}", connectionToken);
|
||||
response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
|
||||
return;
|
||||
}
|
||||
// long pingTime;
|
||||
// try {
|
||||
// pingTime = Long.parseLong(timeStampString);
|
||||
// } catch (final Exception e) {
|
||||
// log.error("Invalid ping request: {}", connectionToken);
|
||||
// response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
|
||||
// return;
|
||||
// }
|
||||
|
||||
final String instruction = this.sebClientConnectionService
|
||||
.notifyPing(
|
||||
connectionToken,
|
||||
pingTime,
|
||||
Utils.getMillisecondsNow(),
|
||||
pingNumString != null ? Integer.parseInt(pingNumString) : -1,
|
||||
instructionConfirm);
|
||||
|
||||
|
|
Loading…
Reference in a new issue