in components/otelopscol/receiver/mongodbreceiver/metrics.go [428:456]
func (s *mongodbScraper) recordLockDeadlockCount(now pcommon.Timestamp, doc bson.M, dBName string, errs *scrapererror.ScrapeErrors) {
mongo32, _ := version.NewVersion("3.2")
if s.mongoVersion.LessThan(mongo32) {
return
}
mongo42, _ := version.NewVersion("4.2")
for lockTypeKey, lockTypeAttribute := range lockTypeMap {
for lockModeKey, lockModeAttribute := range lockModeMap {
// Continue if the lock type is not supported by current server's MongoDB version
if s.mongoVersion.LessThan(mongo42) && (lockTypeKey == "ParallelBatchWriterMode" || lockTypeKey == "ReplicationStateTransition") {
continue
}
metricPath := []string{"locks", lockTypeKey, "deadlockCount", lockModeKey}
metricName := "mongodb.lock.deadlock.count"
metricAttributes := fmt.Sprintf("%s, %s, %s", dBName, lockTypeAttribute.String(), lockModeAttribute.String())
val, err := collectMetric(doc, metricPath)
// MongoDB only publishes this lock metric is it is available.
// Do not raise error when key is not found
if errors.Is(err, errKeyNotFound) {
continue
}
if err != nil {
errs.AddPartial(1, fmt.Errorf(collectMetricWithAttributes, metricName, metricAttributes, err))
continue
}
s.mb.RecordMongodbLockDeadlockCountDataPoint(now, val, dBName, lockTypeAttribute, lockModeAttribute)
}
}
}