(labels)
| 229 | } |
| 230 | |
| 231 | function observe(labels) { |
| 232 | return value => { |
| 233 | const labelValuePair = convertLabelsAndValues(labels, value); |
| 234 | |
| 235 | validateLabel(this.labelNames, labelValuePair.labels); |
| 236 | if (!Number.isFinite(labelValuePair.value)) { |
| 237 | throw new TypeError( |
| 238 | `Value is not a valid number: ${util.format(labelValuePair.value)}`, |
| 239 | ); |
| 240 | } |
| 241 | |
| 242 | const hash = hashObject(labelValuePair.labels, this.sortedLabelNames); |
| 243 | let valueFromMap = this.hashMap[hash]; |
| 244 | if (!valueFromMap) { |
| 245 | valueFromMap = createBaseValues( |
| 246 | labelValuePair.labels, |
| 247 | this.bucketValues, |
| 248 | this.bucketExemplars, |
| 249 | ); |
| 250 | } |
| 251 | |
| 252 | const b = findBound(this.upperBounds, labelValuePair.value); |
| 253 | |
| 254 | valueFromMap.sum += labelValuePair.value; |
| 255 | valueFromMap.count += 1; |
| 256 | |
| 257 | if (Object.prototype.hasOwnProperty.call(valueFromMap.bucketValues, b)) { |
| 258 | valueFromMap.bucketValues[b] += 1; |
| 259 | } |
| 260 | |
| 261 | this.hashMap[hash] = valueFromMap; |
| 262 | }; |
| 263 | } |
| 264 | |
| 265 | function createBaseValues(labels, bucketValues, bucketExemplars) { |
| 266 | const result = { |
nothing calls this directly
no test coverage detected