public async Task StartAsync( DateTime runExpirationTime, DateTime edgeHubRestartedTime, CancellationToken cancellationToken) { (DateTime msgCompletedTime, HttpStatusCode mgsStatusCode) = await this.SendMessageAsync( Settings.Current.TrackingId, this.batchId, Settings.Current.MessageOutputEndpoint, runExpirationTime, cancellationToken); TestResultBase msgTestResult = new EdgeHubRestartMessageResult( this.GetSource(), DateTime.UtcNow, Settings.Current.TrackingId, this.batchId.ToString(), this.messageCount.ToString(), edgeHubRestartedTime, msgCompletedTime, mgsStatusCode); await ModuleUtil.ReportTestResultAsync( this.GetReportClient(), this.logger, msgTestResult, cancellationToken); }
// (sequenceNumber) is only valid if and only if (hasValue) is true async Task <(ulong resultCount, bool hasValue, long sequenceNumber)> MoveNextSenderResultAsync(ulong senderResultCount) { bool hasValue = await this.SenderTestResults.MoveNextAsync(); long seqNum = 0; if (!hasValue) { return(resultCount : senderResultCount, hasValue : hasValue, sequenceNumber : seqNum); } senderResultCount++; EdgeHubRestartMessageResult senderResult = JsonConvert.DeserializeObject <EdgeHubRestartMessageResult>(this.SenderTestResults.Current.Result); seqNum = this.ParseSenderSequenceNumber(senderResult.SequenceNumber); this.AddEntryToCompletedStatusHistogram(senderResult); return(resultCount : senderResultCount, hasValue : hasValue, sequenceNumber : seqNum); }
bool VerifyCurrentResult( long senderSeqNum, long receiverSeqNum) { // Check if the current message is passing bool isCurrentMessagePassing = true; EdgeHubRestartMessageResult senderResult = JsonConvert.DeserializeObject <EdgeHubRestartMessageResult>(this.SenderTestResults.Current.Result); string receiverResult = this.ReceiverTestResults.Current.Result; // Verified "TrackingId;BatchId;SequenceNumber" altogether. isCurrentMessagePassing &= string.Compare(senderResult.GetMessageTestResult(), receiverResult) == 0; // Verify the sequence numbers isCurrentMessagePassing &= senderSeqNum == receiverSeqNum; // Verify if the report status is passable isCurrentMessagePassing &= senderResult.MessageCompletedStatusCode == HttpStatusCode.OK; // Log the data if the reportin result is failing if (!isCurrentMessagePassing) { Logger.LogDebug($"\n MessageResultVerification = {string.Compare(senderResult.GetMessageTestResult(), receiverResult) == 0}\n\t\t|{senderResult.GetMessageTestResult()}|\n\t\t|{receiverResult}|\n SeqeunceNumber = {senderSeqNum} {receiverSeqNum}\n MessageStatusCode = {senderResult.MessageCompletedStatusCode}\n"); } return(isCurrentMessagePassing); }
void AddEntryToCompletedStatusHistogram(EdgeHubRestartMessageResult senderResult) { HttpStatusCode completedStatus = senderResult.MessageCompletedStatusCode; TimeSpan completedPeriod = senderResult.MessageCompletedTime - senderResult.EdgeHubRestartedTime; // Try to allocate the list if it is the first time HttpStatusCode shows up this.completedStatusHistogram.TryAdd(completedStatus, new List <TimeSpan>()); this.completedStatusHistogram[completedStatus].Add(completedPeriod); }