shows queue usage as a percentage
This commit is contained in:
@@ -96,8 +96,10 @@ asynStatus asynStreamGeneratorDriver::createInt32Param(
|
||||
setIntegerParam(*variable, initialValue));
|
||||
}
|
||||
|
||||
asynStatus asynStreamGeneratorDriver::createFloat64Param(
|
||||
asynStatus status, char *name, int *variable, double initialValue) {
|
||||
asynStatus asynStreamGeneratorDriver::createFloat64Param(asynStatus status,
|
||||
char *name,
|
||||
int *variable,
|
||||
double initialValue) {
|
||||
// TODO should show error if there is one
|
||||
return (asynStatus)(status | createParam(name, asynParamFloat64, variable) |
|
||||
setDoubleParam(*variable, initialValue));
|
||||
@@ -114,7 +116,7 @@ asynStreamGeneratorDriver::asynStreamGeneratorDriver(
|
||||
const int kafkaMaxPacketSize)
|
||||
: asynPortDriver(portName, 1, /* maxAddr */
|
||||
asynInt32Mask | asynFloat64Mask |
|
||||
asynDrvUserMask, /* Interface mask */
|
||||
asynDrvUserMask, /* Interface mask */
|
||||
asynInt32Mask, // | asynFloat64Mask, /* Interrupt mask */
|
||||
0, /* asynFlags. This driver does not block and it is
|
||||
not multi-device, but has a
|
||||
@@ -125,6 +127,7 @@ asynStreamGeneratorDriver::asynStreamGeneratorDriver(
|
||||
0), /* Default stack size*/
|
||||
num_channels(numChannels + 1), kafkaEnabled(enableKafkaStream),
|
||||
monitorTopic(monitorTopic), detectorTopic(detectorTopic),
|
||||
udpQueueSize(udpQueueSize), kafkaQueueSize(kafkaQueueSize),
|
||||
// measured in max packet sizes
|
||||
udpQueue(
|
||||
epicsRingBytesCreate(243 * udpQueueSize * sizeof(NormalisedEvent))),
|
||||
@@ -308,15 +311,17 @@ asynStatus asynStreamGeneratorDriver::readInt32(asynUser *pasynUser,
|
||||
getParamName(function, ¶mName);
|
||||
|
||||
if (function == P_UdpQueueHighWaterMark) {
|
||||
*value = epicsRingBytesHighWaterMark(this->udpQueue) /
|
||||
sizeof(NormalisedEvent);
|
||||
const double toPercent = 100. / (243. * udpQueueSize);
|
||||
*value = (epicsInt32)(epicsRingBytesHighWaterMark(this->udpQueue) /
|
||||
sizeof(NormalisedEvent) * toPercent);
|
||||
// Aparently resetting the watermark causes problems...
|
||||
// at least concurrently :D
|
||||
// epicsRingBytesResetHighWaterMark(this->udpQueue);
|
||||
return asynSuccess;
|
||||
} else if (function == P_SortedQueueHighWaterMark) {
|
||||
*value = epicsRingBytesHighWaterMark(this->sortedQueue) /
|
||||
sizeof(NormalisedEvent);
|
||||
const double toPercent = 100. / (243. * udpQueueSize);
|
||||
*value = (epicsInt32)(epicsRingBytesHighWaterMark(this->sortedQueue) /
|
||||
sizeof(NormalisedEvent) * toPercent);
|
||||
// epicsRingBytesResetHighWaterMark(this->sortedQueue);
|
||||
return asynSuccess;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user