SEBSP-23: Removed service health simulation and changed health value to normally be retrieved from transmission response.
This commit is contained in:
		
							parent
							
								
									a021bebde6
								
							
						
					
					
						commit
						4aacf85e9a
					
				
					 3 changed files with 47 additions and 78 deletions
				
			
		|  | @ -21,7 +21,7 @@ namespace SafeExamBrowser.Proctoring.ScreenProctoring.Service.Requests | |||
| 		{ | ||||
| 		} | ||||
| 
 | ||||
| 		internal bool TryExecute(MetaData metaData, ScreenShot screenShot, string sessionId, out string message) | ||||
| 		internal bool TryExecute(MetaData metaData, ScreenShot screenShot, string sessionId, out int health, out string message) | ||||
| 		{ | ||||
| 			var imageFormat = (Header.IMAGE_FORMAT, ToString(screenShot.Format)); | ||||
| 			var metdataJson = (Header.METADATA, metaData.ToJson()); | ||||
|  | @ -29,8 +29,14 @@ namespace SafeExamBrowser.Proctoring.ScreenProctoring.Service.Requests | |||
| 			var url = api.ScreenShotEndpoint.Replace(Api.SESSION_ID, sessionId); | ||||
| 			var success = TryExecute(HttpMethod.Post, url, out var response, screenShot.Data, ContentType.OCTET_STREAM, Authorization, imageFormat, metdataJson, timestamp); | ||||
| 
 | ||||
| 			health = default; | ||||
| 			message = response.ToLogString(); | ||||
| 
 | ||||
| 			if (success) | ||||
| 			{ | ||||
| 				parser.TryParseHealth(response, out health); | ||||
| 			} | ||||
| 
 | ||||
| 			return success; | ||||
| 		} | ||||
| 
 | ||||
|  |  | |||
|  | @ -87,10 +87,10 @@ namespace SafeExamBrowser.Proctoring.ScreenProctoring.Service | |||
| 			return new ServiceResponse<int>(success, health, message); | ||||
| 		} | ||||
| 
 | ||||
| 		internal ServiceResponse Send(MetaData metaData, ScreenShot screenShot) | ||||
| 		internal ServiceResponse<int> Send(MetaData metaData, ScreenShot screenShot) | ||||
| 		{ | ||||
| 			var request = new ScreenShotRequest(api, httpClient, logger, parser); | ||||
| 			var success = request.TryExecute(metaData, screenShot, SessionId, out var message); | ||||
| 			var success = request.TryExecute(metaData, screenShot, SessionId, out var health, out var message); | ||||
| 
 | ||||
| 			if (success) | ||||
| 			{ | ||||
|  | @ -101,7 +101,7 @@ namespace SafeExamBrowser.Proctoring.ScreenProctoring.Service | |||
| 				logger.Error("Failed to send screen shot!"); | ||||
| 			} | ||||
| 
 | ||||
| 			return new ServiceResponse(success, message); | ||||
| 			return new ServiceResponse<int>(success, health, message); | ||||
| 		} | ||||
| 
 | ||||
| 		internal ServiceResponse TerminateSession() | ||||
|  |  | |||
|  | @ -71,13 +71,8 @@ namespace SafeExamBrowser.Proctoring.ScreenProctoring | |||
| 			thread.IsBackground = true; | ||||
| 			thread.Start(); | ||||
| 
 | ||||
| 			// TODO: Only use timer when BAD, until then read health from transmission response! | ||||
| 			timer.AutoReset = false; | ||||
| 			timer.Elapsed += Timer_Elapsed; | ||||
| 			timer.Interval = 10000; | ||||
| 			// TODO: Revert! | ||||
| 			// timer.Interval = FIFTEEN_SECONDS; | ||||
| 			timer.Start(); | ||||
| 			timer.Interval = FIFTEEN_SECONDS; | ||||
| 		} | ||||
| 
 | ||||
| 		internal void Stop() | ||||
|  | @ -88,8 +83,8 @@ namespace SafeExamBrowser.Proctoring.ScreenProctoring | |||
| 			{ | ||||
| 				logger.Debug("Stopping..."); | ||||
| 
 | ||||
| 				timer.Elapsed -= Timer_Elapsed; | ||||
| 				timer.Stop(); | ||||
| 				timer.Elapsed -= Timer_Elapsed; | ||||
| 
 | ||||
| 				try | ||||
| 				{ | ||||
|  | @ -113,6 +108,7 @@ namespace SafeExamBrowser.Proctoring.ScreenProctoring | |||
| 					logger.Error("Failed to stop!", e); | ||||
| 				} | ||||
| 
 | ||||
| 				recovering = false; | ||||
| 				resume = default; | ||||
| 				thread = default; | ||||
| 				token = default; | ||||
|  | @ -157,6 +153,9 @@ namespace SafeExamBrowser.Proctoring.ScreenProctoring | |||
| 				recovering = true; | ||||
| 				resume = DateTime.Now.AddSeconds(random.Next(0, THREE_MINUTES)); | ||||
| 
 | ||||
| 				timer.Elapsed += Timer_Elapsed; | ||||
| 				timer.Start(); | ||||
| 
 | ||||
| 				logger.Warn($"Activating local caching and suspending transmission due to bad service health (value: {health}, resume: {resume:HH:mm:ss})."); | ||||
| 			} | ||||
| 
 | ||||
|  | @ -188,6 +187,9 @@ namespace SafeExamBrowser.Proctoring.ScreenProctoring | |||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				timer.Stop(); | ||||
| 				timer.Elapsed -= Timer_Elapsed; | ||||
| 
 | ||||
| 				logger.Info($"Deactivating local caching and resuming transmission due to improved service health (value: {health})."); | ||||
| 			} | ||||
| 		} | ||||
|  | @ -196,23 +198,6 @@ namespace SafeExamBrowser.Proctoring.ScreenProctoring | |||
| 		{ | ||||
| 			buffer.Enqueue((metaData, schedule, screenShot)); | ||||
| 			buffer = new Queue<(MetaData, DateTime, ScreenShot)>(buffer.OrderBy((b) => b.schedule)); | ||||
| 
 | ||||
| 			// TODO: Remove! | ||||
| 			PrintBuffer(); | ||||
| 		} | ||||
| 
 | ||||
| 		private void PrintBuffer() | ||||
| 		{ | ||||
| 			logger.Log("-------------------------------------------------------------------------------------------------------"); | ||||
| 			logger.Info(""); | ||||
| 			logger.Log($"\t\t\t\tBuffer: {buffer.Count} items"); | ||||
| 
 | ||||
| 			foreach (var (m, t, s) in buffer) | ||||
| 			{ | ||||
| 				logger.Log($"\t\t\t\t{s.CaptureTime:HH:mm:ss} -> {t:HH:mm:ss} ({m.Elapsed} {s.Data.Length / 1000:N0}kB)"); | ||||
| 			} | ||||
| 
 | ||||
| 			logger.Log("-------------------------------------------------------------------------------------------------------"); | ||||
| 		} | ||||
| 
 | ||||
| 		private void BufferFromCache() | ||||
|  | @ -241,9 +226,6 @@ namespace SafeExamBrowser.Proctoring.ScreenProctoring | |||
| 				{ | ||||
| 					buffer.Dequeue(); | ||||
| 					screenShot.Dispose(); | ||||
| 
 | ||||
| 					// TODO: Remove! | ||||
| 					PrintBuffer(); | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
|  | @ -313,9 +295,6 @@ namespace SafeExamBrowser.Proctoring.ScreenProctoring | |||
| 				{ | ||||
| 					buffer.Dequeue(); | ||||
| 					screenShot.Dispose(); | ||||
| 
 | ||||
| 					// TODO: Remove! | ||||
| 					PrintBuffer(); | ||||
| 				} | ||||
| 			} | ||||
| 
 | ||||
|  | @ -370,7 +349,13 @@ namespace SafeExamBrowser.Proctoring.ScreenProctoring | |||
| 
 | ||||
| 			if (service.IsConnected) | ||||
| 			{ | ||||
| 				success = service.Send(metaData, screenShot).Success; | ||||
| 				var response = service.Send(metaData, screenShot); | ||||
| 
 | ||||
| 				if (response.Success) | ||||
| 				{ | ||||
| 					health = UpdateHealth(response.Value); | ||||
| 					success = true; | ||||
| 				} | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
|  | @ -380,58 +365,36 @@ namespace SafeExamBrowser.Proctoring.ScreenProctoring | |||
| 			return success; | ||||
| 		} | ||||
| 
 | ||||
| 		private int factor = 2; | ||||
| 		private int bads = 0; | ||||
| 
 | ||||
| 		private void Timer_Elapsed(object sender, ElapsedEventArgs e) | ||||
| 		{ | ||||
| 			// TODO: Revert! | ||||
| 			//if (service.IsConnected) | ||||
| 			//{ | ||||
| 			//	var response = service.GetHealth(); | ||||
| 
 | ||||
| 			//	if (response.Success) | ||||
| 			//	{ | ||||
| 			//		var previous = health; | ||||
| 
 | ||||
| 			//		health = response.Value > BAD ? BAD : (response.Value < GOOD ? GOOD : response.Value); | ||||
| 
 | ||||
| 			//		if (previous != health) | ||||
| 			//		{ | ||||
| 			//			logger.Info($"Service health {(previous < health ? "deteriorated" : "improved")} from {previous} to {health}."); | ||||
| 			//		} | ||||
| 			//	} | ||||
| 			//} | ||||
| 			//else | ||||
| 			//{ | ||||
| 			//	logger.Warn("Cannot query health as service is disconnected!"); | ||||
| 			//} | ||||
| 
 | ||||
| 			var previous = health; | ||||
| 
 | ||||
| 			if (bads < 2) | ||||
| 			if (service.IsConnected) | ||||
| 			{ | ||||
| 				bads += health == BAD ? 1 : 0; | ||||
| 				factor = health == BAD ? -2 : (health == GOOD ? 2 : factor); | ||||
| 				health += factor; | ||||
| 				health = health < GOOD ? GOOD : (health > BAD ? BAD : health); | ||||
| 				var response = service.GetHealth(); | ||||
| 
 | ||||
| 				if (response.Success) | ||||
| 				{ | ||||
| 					health = UpdateHealth(response.Value); | ||||
| 				} | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				health = 0; | ||||
| 			} | ||||
| 
 | ||||
| 			if (previous != health) | ||||
| 			{ | ||||
| 				logger.Warn($"Service health {(previous < health ? "deteriorated" : "improved")} from {previous} to {health}."); | ||||
| 
 | ||||
| 				if (bads >= 2 && health == 0) | ||||
| 				{ | ||||
| 					logger.Warn("Stopped health simulation."); | ||||
| 				} | ||||
| 				logger.Warn("Cannot query health as service is disconnected!"); | ||||
| 			} | ||||
| 
 | ||||
| 			timer.Start(); | ||||
| 		} | ||||
| 
 | ||||
| 		private int UpdateHealth(int value) | ||||
| 		{ | ||||
| 			var previous = health; | ||||
| 			var current = value > BAD ? BAD : (value < GOOD ? GOOD : value); | ||||
| 
 | ||||
| 			if (previous != current) | ||||
| 			{ | ||||
| 				logger.Info($"Service health {(previous < current ? "deteriorated" : "improved")} from {previous} to {current}."); | ||||
| 			} | ||||
| 
 | ||||
| 			return current; | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Damian Büchel
						Damian Büchel