public putDimensions()

in src/logger/MetricsContext.ts [113:141]


  public putDimensions(incomingDimensionSet: Record<string, string>): void {
    if (this.dimensions.length === 0) {
      this.dimensions.push(incomingDimensionSet);
      return;
    }

    for (let i = 0; i < this.dimensions.length; i++) {
      const existingDimensionSet = this.dimensions[i];

      // check for duplicate dimensions when putting
      // this is an O(n^2) operation, but since we never expect to have more than
      // 10 dimensions, this is acceptable for almost all cases.
      // This makes re-using loggers much easier.
      const existingDimensionSetKeys = Object.keys(existingDimensionSet);
      const incomingDimensionSetKeys = Object.keys(incomingDimensionSet);
      if (existingDimensionSetKeys.length !== incomingDimensionSetKeys.length) {
        this.dimensions.push(incomingDimensionSet);
        return;
      }

      for (let j = 0; j < existingDimensionSetKeys.length; j++) {
        if (!incomingDimensionSetKeys.includes(existingDimensionSetKeys[j])) {
          // we're done now because we know that the dimensions keys are not identical
          this.dimensions.push(incomingDimensionSet);
          return;
        }
      }
    }
  }