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…
	
	Add table
		
		Reference in a new issue
	
	 anhefti
						anhefti