Skip to content

Commit e246e81

Browse files
authored
Merge pull request #103 from aws-samples/create-error-metric
Add aggregated error number and minor fixes
2 parents 4dc0d67 + 31e017c commit e246e81

2 files changed

Lines changed: 29 additions & 9 deletions

File tree

producer-c/producer-cloudwatch-integ/canary/CanaryStreamUtils.cpp

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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);
219238
CleanUp:
220239
return retStatus;
221240
}

producer-c/producer-cloudwatch-integ/canary/CanaryUtils.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ struct __CanaryStreamCallbacks {
9696
// First member should be the stream callbacks
9797
StreamCallbacks streamCallbacks;
9898
PCHAR pStreamName;
99+
UINT64 totalNumberOfErrors;
99100
Aws::CloudWatch::CloudWatchClient* pCwClient;
100101
Aws::CloudWatch::Model::PutMetricDataRequest* cwRequest;
101102
Aws::CloudWatch::Model::Dimension dimensionPerStream;

0 commit comments

Comments
 (0)