@@ -101,12 +101,13 @@ STATUS canaryStreamErrorReportHandler(UINT64 customData, STREAM_HANDLE streamHan
101101 erroredTimecode, streamHandle, uploadHandle);
102102 streamErrorDatum.SetMetricName (" StreamError" );
103103 streamErrorDatum.AddDimensions (pCanaryStreamCallbacks->dimensionPerStream );
104- pushMetric (pCanaryStreamCallbacks, streamErrorDatum, Aws::CloudWatch::Model::StandardUnit::None, statusCode );
104+ pushMetric (pCanaryStreamCallbacks, streamErrorDatum, Aws::CloudWatch::Model::StandardUnit::None, 1.0 );
105105
106106 aggstreamErrorDatum.SetMetricName (" StreamError" );
107107 aggstreamErrorDatum.AddDimensions (pCanaryStreamCallbacks->aggregatedDimension );
108- pushMetric (pCanaryStreamCallbacks, aggstreamErrorDatum, Aws::CloudWatch::Model::StandardUnit::None, statusCode );
108+ pushMetric (pCanaryStreamCallbacks, aggstreamErrorDatum, Aws::CloudWatch::Model::StandardUnit::None, 1.0 );
109109
110+ pCanaryStreamCallbacks->totalNumberOfErrors ++;
110111 return STATUS_SUCCESS;
111112}
112113
@@ -191,31 +192,49 @@ STATUS publishErrorRate(STREAM_HANDLE streamHandle, PCanaryStreamCallbacks pCana
191192 STATUS retStatus = STATUS_SUCCESS;
192193 StreamMetrics canaryStreamMetrics;
193194 canaryStreamMetrics.version = STREAM_METRICS_CURRENT_VERSION;
194- Aws::CloudWatch::Model::MetricDatum putFrameErrorRateDatum, aggputFrameErrorRateDatum, errorAckDatum, aggErrorAckDatum;
195+ Aws::CloudWatch::Model::MetricDatum putFrameErrorRateDatum, aggputFrameErrorRateDatum, errorAckDatum, aggErrorAckDatum, totalErrorDatum, aggTotalErrorDatum;
196+ DOUBLE putFrameErrorRate, errorAckRate;
197+ UINT64 numberOfPutFrameErrors, numberOfErrorAcks;
195198 CHK (pCanaryStreamCallbacks != NULL , STATUS_NULL_ARG);
196199 CHK_STATUS (getKinesisVideoStreamMetrics (streamHandle, &canaryStreamMetrics));
197- DOUBLE putFrameErrorRate, errorAckRate;
198- putFrameErrorRate = (DOUBLE) (canaryStreamMetrics.putFrameErrors - pCanaryStreamCallbacks->historicStreamMetric .prevPutFrameErrorCount ) / (DOUBLE) duration;
200+
201+ numberOfPutFrameErrors = canaryStreamMetrics.putFrameErrors - pCanaryStreamCallbacks->historicStreamMetric .prevPutFrameErrorCount ;
202+ numberOfErrorAcks = canaryStreamMetrics.errorAcks - pCanaryStreamCallbacks->historicStreamMetric .prevErrorAckCount ;
203+ putFrameErrorRate = (DOUBLE) (numberOfPutFrameErrors) / (DOUBLE) (duration / HUNDREDS_OF_NANOS_IN_A_SECOND);
204+
199205 pCanaryStreamCallbacks->historicStreamMetric .prevPutFrameErrorCount = canaryStreamMetrics.putFrameErrors ;
200206 putFrameErrorRateDatum.SetMetricName (" PutFrameErrorRate" );
201207 putFrameErrorRateDatum.AddDimensions (pCanaryStreamCallbacks->dimensionPerStream );
202208 pushMetric (pCanaryStreamCallbacks, putFrameErrorRateDatum, Aws::CloudWatch::Model::StandardUnit::Count_Second, putFrameErrorRate);
203209
204210 aggputFrameErrorRateDatum.SetMetricName (" PutFrameErrorRate" );
205- aggputFrameErrorRateDatum.AddDimensions (pCanaryStreamCallbacks->dimensionPerStream );
211+ aggputFrameErrorRateDatum.AddDimensions (pCanaryStreamCallbacks->aggregatedDimension );
206212 pushMetric (pCanaryStreamCallbacks, aggputFrameErrorRateDatum, Aws::CloudWatch::Model::StandardUnit::Count_Second, putFrameErrorRate);
207213
208- errorAckRate = (DOUBLE) (canaryStreamMetrics. errorAcks - pCanaryStreamCallbacks-> historicStreamMetric . prevErrorAckCount ) / (DOUBLE) duration;
214+ errorAckRate = (DOUBLE) (numberOfErrorAcks ) / (DOUBLE) ( duration / HUNDREDS_OF_NANOS_IN_A_SECOND) ;
209215 pCanaryStreamCallbacks->historicStreamMetric .prevErrorAckCount = canaryStreamMetrics.errorAcks ;
210216 errorAckDatum.SetMetricName (" ErrorAckRate" );
211217 errorAckDatum.AddDimensions (pCanaryStreamCallbacks->dimensionPerStream );
212218 pushMetric (pCanaryStreamCallbacks, errorAckDatum, Aws::CloudWatch::Model::StandardUnit::Count_Second, putFrameErrorRate);
213219
214220 aggErrorAckDatum.SetMetricName (" ErrorAckRate" );
215- aggErrorAckDatum.AddDimensions (pCanaryStreamCallbacks->dimensionPerStream );
221+ aggErrorAckDatum.AddDimensions (pCanaryStreamCallbacks->aggregatedDimension );
216222 pushMetric (pCanaryStreamCallbacks, aggErrorAckDatum, Aws::CloudWatch::Model::StandardUnit::Count_Second, putFrameErrorRate);
217223
218- DLOGD (" Error ack rate: %lf, putFrame error rate: %lf" , errorAckRate, putFrameErrorRate);
224+ pCanaryStreamCallbacks->totalNumberOfErrors += numberOfPutFrameErrors + numberOfErrorAcks;
225+
226+ totalErrorDatum.SetMetricName (" NumberOfErrors" );
227+ totalErrorDatum.AddDimensions (pCanaryStreamCallbacks->dimensionPerStream );
228+ pushMetric (pCanaryStreamCallbacks, totalErrorDatum, Aws::CloudWatch::Model::StandardUnit::Count, pCanaryStreamCallbacks->totalNumberOfErrors );
229+
230+ aggTotalErrorDatum.SetMetricName (" NumberOfErrors" );
231+ aggTotalErrorDatum.AddDimensions (pCanaryStreamCallbacks->aggregatedDimension );
232+ pushMetric (pCanaryStreamCallbacks, aggTotalErrorDatum, Aws::CloudWatch::Model::StandardUnit::Count, pCanaryStreamCallbacks->totalNumberOfErrors );
233+ DLOGD (" Total number of errors in %lf seconds : %d" , (DOUBLE)(duration/HUNDREDS_OF_NANOS_IN_A_SECOND), pCanaryStreamCallbacks->totalNumberOfErrors );
234+ pCanaryStreamCallbacks->totalNumberOfErrors = 0 ;
235+
236+ DLOGD (" Error ack rate: %lf" , errorAckRate);
237+ DLOGD (" PutFrame error rate: %lf" , putFrameErrorRate);
219238CleanUp:
220239 return retStatus;
221240}
0 commit comments