All files / redis-smq-monitor-app/src/plugins/message-rate/producer producer-message-rate-writer.ts

100% Statements 24/24
100% Branches 6/6
100% Functions 3/3
100% Lines 23/23

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 5257x 57x 57x         57x         31x           31x 31x 31x               136x 136x 135x 14x 14x 14x 14x 14x 14x 14x 14x         14x     14x 121x 1x      
import { MessageRateWriter } from '../common/message-rate-writer';
import { GlobalPublishedTimeSeries } from './global-published-time-series';
import { QueuePublishedTimeSeries } from './queue-published-time-series';
import { IProducerMessageRateFields } from '../../../../types';
import { RedisClient } from 'redis-smq-common';
import { ICallback } from 'redis-smq-common/dist/types';
 
export class ProducerMessageRateWriter extends MessageRateWriter<IProducerMessageRateFields> {
  protected redisClient: RedisClient;
  protected globalPublishedTimeSeries: ReturnType<
    typeof GlobalPublishedTimeSeries
  >;
  protected queuePublishedTimeSeries: Record<
    string,
    ReturnType<typeof QueuePublishedTimeSeries>
  > = {};
 
  constructor(redisClient: RedisClient) {
    super();
    this.redisClient = redisClient;
    this.globalPublishedTimeSeries = GlobalPublishedTimeSeries(redisClient);
  }
 
  onUpdate(
    ts: number,
    rates: IProducerMessageRateFields,
    cb: ICallback<void>,
  ): void {
    const { publishedRate, queuePublishedRate } = rates;
    if (Object.keys(queuePublishedRate).length) {
      if (publishedRate) {
        const multi = this.redisClient.multi();
        this.globalPublishedTimeSeries.add(ts, publishedRate, multi);
        for (const key in queuePublishedRate) {
          const value = queuePublishedRate[key];
          if (value) {
            if (!this.queuePublishedTimeSeries[key]) {
              const [ns, name] = key.split(':');
              this.queuePublishedTimeSeries[key] = QueuePublishedTimeSeries(
                this.redisClient,
                { ns, name },
              );
            }
            this.queuePublishedTimeSeries[key].add(ts, value, multi);
          }
        }
        this.redisClient.execMulti(multi, () => cb());
      } else cb();
    } else cb();
  }
}