netdata/netdata

View on GitHub
src/go/collectors/go.d.plugin/modules/mongodb/charts.go

Summary

Maintainability
F
5 days
Test Coverage
// SPDX-License-Identifier: GPL-3.0-or-later

package mongo

import (
    "github.com/netdata/netdata/go/go.d.plugin/agent/module"
)

const (
    prioOperationsRate = module.Priority + iota
    prioOperationsLatencyTime
    prioOperationsByTypeRate
    prioDocumentOperationsRate
    prioScannedIndexesRate
    prioScannedDocumentsRate

    prioActiveClientsCount
    prioQueuedOperationsCount

    prioGlobalLockAcquisitionsRate
    prioDatabaseLockAcquisitionsRate
    prioCollectionLockAcquisitionsRate
    prioMutexLockAcquisitionsRate
    prioMetadataLockAcquisitionsRate
    prioOpLogLockAcquisitionsRate

    prioCursorsOpenCount
    prioCursorsOpenNoTimeoutCount
    prioCursorsOpenedRate
    prioTimedOutCursorsRate
    prioCursorsByLifespanCount

    prioTransactionsCount
    prioTransactionsRate
    prioTransactionsNoShardsCommitsRate
    prioTransactionsNoShardsCommitsDurationTime
    prioTransactionsSingleShardCommitsRate
    prioTransactionsSingleShardCommitsDurationTime
    prioTransactionsSingleWriteShardCommitsRate
    prioTransactionsSingleWriteShardCommitsDurationTime
    prioTransactionsReadOnlyCommitsRate
    prioTransactionsReadOnlyCommitsDurationTime
    prioTransactionsTwoPhaseCommitCommitsRate
    prioTransactionsTwoPhaseCommitCommitsDurationTime
    prioTransactionsRecoverWithTokenCommitsRate
    prioTransactionsRecoverWithTokenCommitsDurationTime

    prioConnectionsUsage
    prioConnectionsByStateCount
    prioConnectionsRate

    prioAssertsRate

    prioNetworkTrafficRate
    prioNetworkRequestsRate
    prioNetworkSlowDNSResolutionsRate
    prioNetworkSlowSSLHandshakesRate

    prioMemoryResidentSize
    prioMemoryVirtualSize
    prioMemoryPageFaultsRate
    prioMemoryTCMallocStats

    prioWiredTigerConcurrentReadTransactionsUsage
    prioWiredTigerConcurrentWriteTransactionsUsage
    prioWiredTigerCacheUsage
    prioWiredTigerCacheDirtySpaceSize
    prioWiredTigerCacheIORate
    prioWiredTigerCacheEvictionsRate

    prioDatabaseCollectionsCount
    prioDatabaseIndexesCount
    prioDatabaseViewsCount
    prioDatabaseDocumentsCount
    prioDatabaseDataSize
    prioDatabaseStorageSize
    prioDatabaseIndexSize

    prioReplSetMemberState
    prioReplSetMemberHealthStatus
    prioReplSetMemberReplicationLagTime
    prioReplSetMemberHeartbeatLatencyTime
    prioReplSetMemberPingRTTTime
    prioReplSetMemberUptime

    prioShardingNodesCount
    prioShardingShardedDatabasesCount
    prioShardingShardedCollectionsCount
    prioShardChunks
)

const (
    chartPxDatabase      = "database_"
    chartPxReplSetMember = "replica_set_member_"
    chartPxShard         = "sharding_shard_"
)

// these charts are expected to be available in many versions
var chartsServerStatus = module.Charts{
    chartOperationsByTypeRate.Copy(),
    chartDocumentOperationsRate.Copy(),
    chartScannedIndexesRate.Copy(),
    chartScannedDocumentsRate.Copy(),

    chartConnectionsUsage.Copy(),
    chartConnectionsByStateCount.Copy(),
    chartConnectionsRate.Copy(),

    chartNetworkTrafficRate.Copy(),
    chartNetworkRequestsRate.Copy(),

    chartMemoryResidentSize.Copy(),
    chartMemoryVirtualSize.Copy(),
    chartMemoryPageFaultsRate.Copy(),

    chartAssertsRate.Copy(),
}

var chartsTmplDatabase = module.Charts{
    chartTmplDatabaseCollectionsCount.Copy(),
    chartTmplDatabaseIndexesCount.Copy(),
    chartTmplDatabaseViewsCount.Copy(),
    chartTmplDatabaseDocumentsCount.Copy(),
    chartTmplDatabaseDataSize.Copy(),
    chartTmplDatabaseStorageSize.Copy(),
    chartTmplDatabaseIndexSize.Copy(),
}

var chartsTmplReplSetMember = module.Charts{
    chartTmplReplSetMemberState.Copy(),
    chartTmplReplSetMemberHealthStatus.Copy(),
    chartTmplReplSetMemberReplicationLagTime.Copy(),
    chartTmplReplSetMemberHeartbeatLatencyTime.Copy(),
    chartTmplReplSetMemberPingRTTTime.Copy(),
    chartTmplReplSetMemberUptime.Copy(),
}

var chartsSharding = module.Charts{
    chartShardingNodesCount.Copy(),
    chartShardingShardedDatabases.Copy(),
    chartShardingShardedCollectionsCount.Copy(),
}

var chartsTmplShardingShard = module.Charts{
    chartTmplShardChunks.Copy(),
}

var (
    chartOperationsRate = module.Chart{
        ID:       "operations_rate",
        Title:    "Operations rate",
        Units:    "operations/s",
        Fam:      "operations",
        Ctx:      "mongodb.operations_rate",
        Priority: prioOperationsRate,
        Dims: module.Dims{
            {ID: "operations_latencies_reads_ops", Name: "reads", Algo: module.Incremental},
            {ID: "operations_latencies_writes_ops", Name: "writes", Algo: module.Incremental},
            {ID: "operations_latencies_commands_ops", Name: "commands", Algo: module.Incremental},
        },
    }
    chartOperationsLatencyTime = module.Chart{
        ID:       "operations_latency_time",
        Title:    "Operations Latency",
        Units:    "milliseconds",
        Fam:      "operations",
        Ctx:      "mongodb.operations_latency_time",
        Priority: prioOperationsLatencyTime,
        Dims: module.Dims{
            {ID: "operations_latencies_reads_latency", Name: "reads", Algo: module.Incremental, Div: 1000},
            {ID: "operations_latencies_writes_latency", Name: "writes", Algo: module.Incremental, Div: 1000},
            {ID: "operations_latencies_commands_latency", Name: "commands", Algo: module.Incremental, Div: 1000},
        },
    }
    chartOperationsByTypeRate = module.Chart{
        ID:       "operations_by_type_rate",
        Title:    "Operations by type",
        Units:    "operations/s",
        Fam:      "operations",
        Ctx:      "mongodb.operations_by_type_rate",
        Priority: prioOperationsByTypeRate,
        Dims: module.Dims{
            {ID: "operations_insert", Name: "insert", Algo: module.Incremental},
            {ID: "operations_query", Name: "query", Algo: module.Incremental},
            {ID: "operations_update", Name: "update", Algo: module.Incremental},
            {ID: "operations_delete", Name: "delete", Algo: module.Incremental},
            {ID: "operations_getmore", Name: "getmore", Algo: module.Incremental},
            {ID: "operations_command", Name: "command", Algo: module.Incremental},
        },
    }
    chartDocumentOperationsRate = module.Chart{
        ID:       "document_operations_rate",
        Title:    "Document operations",
        Units:    "operations/s",
        Fam:      "operations",
        Ctx:      "mongodb.document_operations_rate",
        Type:     module.Stacked,
        Priority: prioDocumentOperationsRate,
        Dims: module.Dims{
            {ID: "metrics_document_inserted", Name: "inserted", Algo: module.Incremental},
            {ID: "metrics_document_deleted", Name: "deleted", Algo: module.Incremental},
            {ID: "metrics_document_returned", Name: "returned", Algo: module.Incremental},
            {ID: "metrics_document_updated", Name: "updated", Algo: module.Incremental},
        },
    }
    chartScannedIndexesRate = module.Chart{
        ID:       "scanned_indexes_rate",
        Title:    "Scanned indexes",
        Units:    "indexes/s",
        Fam:      "operations",
        Ctx:      "mongodb.scanned_indexes_rate",
        Priority: prioScannedIndexesRate,
        Dims: module.Dims{
            {ID: "metrics_query_executor_scanned", Name: "scanned", Algo: module.Incremental},
        },
    }
    chartScannedDocumentsRate = module.Chart{
        ID:       "scanned_documents_rate",
        Title:    "Scanned documents",
        Units:    "documents/s",
        Fam:      "operations",
        Ctx:      "mongodb.scanned_documents_rate",
        Priority: prioScannedDocumentsRate,
        Dims: module.Dims{
            {ID: "metrics_query_executor_scanned_objects", Name: "scanned", Algo: module.Incremental},
        },
    }

    chartGlobalLockActiveClientsCount = module.Chart{
        ID:       "active_clients_count",
        Title:    "Connected clients",
        Units:    "clients",
        Fam:      "clients",
        Ctx:      "mongodb.active_clients_count",
        Priority: prioActiveClientsCount,
        Dims: module.Dims{
            {ID: "global_lock_active_clients_readers", Name: "readers"},
            {ID: "global_lock_active_clients_writers", Name: "writers"},
        },
    }
    chartGlobalLockCurrentQueueCount = module.Chart{
        ID:       "queued_operations",
        Title:    "Queued operations because of a lock",
        Units:    "operations",
        Fam:      "clients",
        Ctx:      "mongodb.queued_operations_count",
        Priority: prioQueuedOperationsCount,
        Dims: module.Dims{
            {ID: "global_lock_current_queue_readers", Name: "readers"},
            {ID: "global_lock_current_queue_writers", Name: "writers"},
        },
    }

    chartConnectionsUsage = module.Chart{
        ID:       "connections_usage",
        Title:    "Connections usage",
        Units:    "connections",
        Fam:      "connections",
        Ctx:      "mongodb.connections_usage",
        Type:     module.Stacked,
        Priority: prioConnectionsUsage,
        Dims: module.Dims{
            {ID: "connections_available", Name: "available"},
            {ID: "connections_current", Name: "used"},
        },
    }
    chartConnectionsByStateCount = module.Chart{
        ID:       "connections_by_state_count",
        Title:    "Connections By State",
        Units:    "connections",
        Fam:      "connections",
        Ctx:      "mongodb.connections_by_state_count",
        Priority: prioConnectionsByStateCount,
        Dims: module.Dims{
            {ID: "connections_active", Name: "active"},
            {ID: "connections_threaded", Name: "threaded"},
            {ID: "connections_exhaust_is_master", Name: "exhaust_is_master"},
            {ID: "connections_exhaust_hello", Name: "exhaust_hello"},
            {ID: "connections_awaiting_topology_changes", Name: "awaiting_topology_changes"},
        },
    }
    chartConnectionsRate = module.Chart{
        ID:       "connections_rate",
        Title:    "Connections Rate",
        Units:    "connections/s",
        Fam:      "connections",
        Ctx:      "mongodb.connections_rate",
        Priority: prioConnectionsRate,
        Dims: module.Dims{
            {ID: "connections_total_created", Name: "created", Algo: module.Incremental},
        },
    }

    chartNetworkTrafficRate = module.Chart{
        ID:       "network_traffic",
        Title:    "Network traffic",
        Units:    "bytes/s",
        Fam:      "network",
        Ctx:      "mongodb.network_traffic_rate",
        Priority: prioNetworkTrafficRate,
        Type:     module.Area,
        Dims: module.Dims{
            {ID: "network_bytes_in", Name: "in", Algo: module.Incremental},
            {ID: "network_bytes_out", Name: "out", Algo: module.Incremental},
        },
    }
    chartNetworkRequestsRate = module.Chart{
        ID:       "network_requests_rate",
        Title:    "Network Requests",
        Units:    "requests/s",
        Fam:      "network",
        Ctx:      "mongodb.network_requests_rate",
        Priority: prioNetworkRequestsRate,
        Dims: module.Dims{
            {ID: "network_requests", Name: "requests", Algo: module.Incremental},
        },
    }
    chartNetworkSlowDNSResolutionsRate = module.Chart{
        ID:       "network_slow_dns_resolutions_rate",
        Title:    "Slow DNS resolution operations",
        Units:    "resolutions/s",
        Fam:      "network",
        Ctx:      "mongodb.network_slow_dns_resolutions_rate",
        Priority: prioNetworkSlowDNSResolutionsRate,
        Dims: module.Dims{
            {ID: "network_slow_dns_operations", Name: "slow_dns", Algo: module.Incremental},
        },
    }
    chartNetworkSlowSSLHandshakesRate = module.Chart{
        ID:       "network_slow_ssl_handshakes_rate",
        Title:    "Slow SSL handshake operations",
        Units:    "handshakes/s",
        Fam:      "network",
        Ctx:      "mongodb.network_slow_ssl_handshakes_rate",
        Priority: prioNetworkSlowSSLHandshakesRate,
        Dims: module.Dims{
            {ID: "network_slow_ssl_operations", Name: "slow_ssl", Algo: module.Incremental},
        },
    }

    chartMemoryResidentSize = module.Chart{
        ID:       "memory_resident_size",
        Title:    "Used resident memory",
        Units:    "bytes",
        Fam:      "memory",
        Ctx:      "mongodb.memory_resident_size",
        Priority: prioMemoryResidentSize,
        Dims: module.Dims{
            {ID: "memory_resident", Name: "used"},
        },
    }
    chartMemoryVirtualSize = module.Chart{
        ID:       "memory_virtual_size",
        Title:    "Used virtual memory",
        Units:    "bytes",
        Fam:      "memory",
        Ctx:      "mongodb.memory_virtual_size",
        Priority: prioMemoryVirtualSize,
        Dims: module.Dims{
            {ID: "memory_virtual", Name: "used"},
        },
    }
    chartMemoryPageFaultsRate = module.Chart{
        ID:       "memory_page_faults",
        Title:    "Memory page faults",
        Units:    "pgfaults/s",
        Fam:      "memory",
        Ctx:      "mongodb.memory_page_faults_rate",
        Priority: prioMemoryPageFaultsRate,
        Dims: module.Dims{
            {ID: "extra_info_page_faults", Name: "pgfaults", Algo: module.Incremental},
        },
    }
    chartMemoryTCMallocStatsChart = module.Chart{
        ID:       "memory_tcmalloc_stats",
        Title:    "TCMalloc statistics",
        Units:    "bytes",
        Fam:      "memory",
        Ctx:      "mongodb.memory_tcmalloc_stats",
        Priority: prioMemoryTCMallocStats,
        Dims: module.Dims{
            {ID: "tcmalloc_generic_current_allocated_bytes", Name: "allocated"},
            {ID: "tcmalloc_central_cache_free_bytes", Name: "central_cache_freelist"},
            {ID: "tcmalloc_transfer_cache_free_bytes", Name: "transfer_cache_freelist"},
            {ID: "tcmalloc_thread_cache_free_bytes", Name: "thread_cache_freelists"},
            {ID: "tcmalloc_pageheap_free_bytes", Name: "pageheap_freelist"},
            {ID: "tcmalloc_pageheap_unmapped_bytes", Name: "pageheap_unmapped"},
        },
    }

    chartAssertsRate = module.Chart{
        ID:       "asserts_rate",
        Title:    "Raised assertions",
        Units:    "asserts/s",
        Fam:      "asserts",
        Ctx:      "mongodb.asserts_rate",
        Type:     module.Stacked,
        Priority: prioAssertsRate,
        Dims: module.Dims{
            {ID: "asserts_regular", Name: "regular", Algo: module.Incremental},
            {ID: "asserts_warning", Name: "warning", Algo: module.Incremental},
            {ID: "asserts_msg", Name: "msg", Algo: module.Incremental},
            {ID: "asserts_user", Name: "user", Algo: module.Incremental},
            {ID: "asserts_tripwire", Name: "tripwire", Algo: module.Incremental},
            {ID: "asserts_rollovers", Name: "rollovers", Algo: module.Incremental},
        },
    }

    chartTransactionsCount = module.Chart{
        ID:       "transactions_count",
        Title:    "Current transactions",
        Units:    "transactions",
        Fam:      "transactions",
        Ctx:      "mongodb.transactions_count",
        Priority: prioTransactionsCount,
        Dims: module.Dims{
            {ID: "txn_active", Name: "active"},
            {ID: "txn_inactive", Name: "inactive"},
            {ID: "txn_open", Name: "open"},
            {ID: "txn_prepared", Name: "prepared"},
        },
    }
    chartTransactionsRate = module.Chart{
        ID:       "transactions_rate",
        Title:    "Transactions rate",
        Units:    "transactions/s",
        Fam:      "transactions",
        Ctx:      "mongodb.transactions_rate",
        Priority: prioTransactionsRate,
        Dims: module.Dims{
            {ID: "txn_total_started", Name: "started", Algo: module.Incremental},
            {ID: "txn_total_aborted", Name: "aborted", Algo: module.Incremental},
            {ID: "txn_total_committed", Name: "committed", Algo: module.Incremental},
            {ID: "txn_total_prepared", Name: "prepared", Algo: module.Incremental},
        },
    }
    chartTransactionsNoShardsCommitsRate = module.Chart{
        ID:       "transactions_no_shards_commits_rate",
        Title:    "Transactions commits",
        Units:    "commits/s",
        Fam:      "transactions",
        Ctx:      "mongodb.transactions_commits_rate",
        Priority: prioTransactionsNoShardsCommitsRate,
        Type:     module.Stacked,
        Labels:   []module.Label{{Key: "commit_type", Value: "noShards"}},
        Dims: module.Dims{
            {ID: "txn_commit_types_no_shards_successful", Name: "success", Algo: module.Incremental},
            {ID: "txn_commit_types_no_shards_unsuccessful", Name: "fail", Algo: module.Incremental},
        },
    }
    chartTransactionsNoShardsCommitsDurationTime = module.Chart{
        ID:       "transactions_no_shards_commits_duration_time",
        Title:    "Transactions successful commits duration",
        Units:    "milliseconds",
        Fam:      "transactions",
        Ctx:      "mongodb.transactions_commits_duration_time",
        Priority: prioTransactionsNoShardsCommitsDurationTime,
        Labels:   []module.Label{{Key: "commit_type", Value: "noShards"}},
        Dims: module.Dims{
            {ID: "txn_commit_types_no_shards_successful_duration_micros", Name: "commits", Algo: module.Incremental, Div: 1000},
        },
    }
    chartTransactionsSingleShardCommitsRate = module.Chart{
        ID:       "transactions_single_shard_commits_rate",
        Title:    "Transactions commits",
        Units:    "commits/s",
        Fam:      "transactions",
        Ctx:      "mongodb.transactions_commits_rate",
        Priority: prioTransactionsSingleShardCommitsRate,
        Type:     module.Stacked,
        Labels:   []module.Label{{Key: "commit_type", Value: "singleShard"}},
        Dims: module.Dims{
            {ID: "txn_commit_types_single_shard_successful", Name: "success", Algo: module.Incremental},
            {ID: "txn_commit_types_single_shard_unsuccessful", Name: "fail", Algo: module.Incremental},
        },
    }
    chartTransactionsSingleShardCommitsDurationTime = module.Chart{
        ID:       "transactions_single_shard_commits_duration_time",
        Title:    "Transactions successful commits duration",
        Units:    "milliseconds",
        Fam:      "transactions",
        Ctx:      "mongodb.transactions_commits_duration_time",
        Priority: prioTransactionsSingleShardCommitsDurationTime,
        Labels:   []module.Label{{Key: "commit_type", Value: "singleShard"}},
        Dims: module.Dims{
            {ID: "txn_commit_types_single_shard_successful_duration_micros", Name: "commits", Algo: module.Incremental, Div: 1000},
        },
    }
    chartTransactionsSingleWriteShardCommitsRate = module.Chart{
        ID:       "transactions_single_write_shard_commits_rate",
        Title:    "Transactions commits",
        Units:    "commits/s",
        Fam:      "transactions",
        Ctx:      "mongodb.transactions_commits_rate",
        Priority: prioTransactionsSingleWriteShardCommitsRate,
        Type:     module.Stacked,
        Labels:   []module.Label{{Key: "commit_type", Value: "singleWriteShard"}},
        Dims: module.Dims{
            {ID: "txn_commit_types_single_write_shard_successful", Name: "success", Algo: module.Incremental},
            {ID: "txn_commit_types_single_write_shard_unsuccessful", Name: "fail", Algo: module.Incremental},
        },
    }
    chartTransactionsSingleWriteShardCommitsDurationTime = module.Chart{
        ID:       "transactions_single_write_shard_commits_duration_time",
        Title:    "Transactions successful commits duration",
        Units:    "milliseconds",
        Fam:      "transactions",
        Ctx:      "mongodb.transactions_commits_duration_time",
        Priority: prioTransactionsSingleWriteShardCommitsDurationTime,
        Labels:   []module.Label{{Key: "commit_type", Value: "singleWriteShard"}},
        Dims: module.Dims{
            {ID: "txn_commit_types_single_write_shard_successful_duration_micros", Name: "commits", Algo: module.Incremental, Div: 1000},
        },
    }
    chartTransactionsReadOnlyCommitsRate = module.Chart{
        ID:       "transactions_read_only_commits_rate",
        Title:    "Transactions commits",
        Units:    "commits/s",
        Fam:      "transactions",
        Ctx:      "mongodb.transactions_commits_rate",
        Priority: prioTransactionsReadOnlyCommitsRate,
        Type:     module.Stacked,
        Labels:   []module.Label{{Key: "commit_type", Value: "readOnly"}},
        Dims: module.Dims{
            {ID: "txn_commit_types_read_only_successful", Name: "success", Algo: module.Incremental},
            {ID: "txn_commit_types_read_only_unsuccessful", Name: "fail", Algo: module.Incremental},
        },
    }
    chartTransactionsReadOnlyCommitsDurationTime = module.Chart{
        ID:       "transactions_read_only_commits_duration_time",
        Title:    "Transactions successful commits duration",
        Units:    "milliseconds",
        Fam:      "transactions",
        Ctx:      "mongodb.transactions_commits_duration_time",
        Priority: prioTransactionsReadOnlyCommitsDurationTime,
        Labels:   []module.Label{{Key: "commit_type", Value: "readOnly"}},
        Dims: module.Dims{
            {ID: "txn_commit_types_read_only_successful_duration_micros", Name: "commits", Algo: module.Incremental, Div: 1000},
        },
    }
    chartTransactionsTwoPhaseCommitCommitsRate = module.Chart{
        ID:       "transactions_two_phase_commit_commits_rate",
        Title:    "Transactions commits",
        Units:    "commits/s",
        Fam:      "transactions",
        Ctx:      "mongodb.transactions_commits_rate",
        Priority: prioTransactionsTwoPhaseCommitCommitsRate,
        Type:     module.Stacked,
        Labels:   []module.Label{{Key: "commit_type", Value: "twoPhaseCommit"}},
        Dims: module.Dims{
            {ID: "txn_commit_types_two_phase_commit_successful", Name: "success", Algo: module.Incremental},
            {ID: "txn_commit_types_two_phase_commit_unsuccessful", Name: "fail", Algo: module.Incremental},
        },
    }
    chartTransactionsTwoPhaseCommitCommitsDurationTime = module.Chart{
        ID:       "transactions_two_phase_commit_commits_duration_time",
        Title:    "Transactions successful commits duration",
        Units:    "milliseconds",
        Fam:      "transactions",
        Ctx:      "mongodb.transactions_commits_duration_time",
        Priority: prioTransactionsTwoPhaseCommitCommitsDurationTime,
        Labels:   []module.Label{{Key: "commit_type", Value: "twoPhaseCommit"}},
        Dims: module.Dims{
            {ID: "txn_commit_types_two_phase_commit_successful_duration_micros", Name: "commits", Algo: module.Incremental, Div: 1000},
        },
    }
    chartTransactionsRecoverWithTokenCommitsRate = module.Chart{
        ID:       "transactions_recover_with_token_commits_rate",
        Title:    "Transactions commits",
        Units:    "commits/s",
        Fam:      "transactions",
        Ctx:      "mongodb.transactions_commits_rate",
        Priority: prioTransactionsRecoverWithTokenCommitsRate,
        Type:     module.Stacked,
        Labels:   []module.Label{{Key: "commit_type", Value: "recoverWithToken"}},
        Dims: module.Dims{
            {ID: "txn_commit_types_recover_with_token_successful", Name: "success", Algo: module.Incremental},
            {ID: "txn_commit_types_recover_with_token_unsuccessful", Name: "fail", Algo: module.Incremental},
        },
    }
    chartTransactionsRecoverWithTokenCommitsDurationTime = module.Chart{
        ID:       "transactions_recover_with_token_commits_duration_time",
        Title:    "Transactions successful commits duration",
        Units:    "milliseconds",
        Fam:      "transactions",
        Ctx:      "mongodb.transactions_commits_duration_time",
        Priority: prioTransactionsRecoverWithTokenCommitsDurationTime,
        Labels:   []module.Label{{Key: "commit_type", Value: "recoverWithToken"}},
        Dims: module.Dims{
            {ID: "txn_commit_types_recover_with_token_successful_duration_micros", Name: "commits", Algo: module.Incremental, Div: 1000},
        },
    }

    chartGlobalLockAcquisitionsRate = module.Chart{
        ID:       "global_lock_acquisitions_rate",
        Title:    "Global lock acquisitions",
        Units:    "acquisitions/s",
        Fam:      "locks",
        Ctx:      "mongodb.lock_acquisitions_rate",
        Priority: prioGlobalLockAcquisitionsRate,
        Labels:   []module.Label{{Key: "lock_type", Value: "global"}},
        Dims: module.Dims{
            {ID: "locks_global_acquire_shared", Name: "shared", Algo: module.Incremental},
            {ID: "locks_global_acquire_exclusive", Name: "exclusive", Algo: module.Incremental},
            {ID: "locks_global_acquire_intent_shared", Name: "intent_shared", Algo: module.Incremental},
            {ID: "locks_global_acquire_intent_exclusive", Name: "intent_exclusive", Algo: module.Incremental},
        },
    }
    chartDatabaseLockAcquisitionsRate = module.Chart{
        ID:       "database_lock_acquisitions_rate",
        Title:    "Database lock acquisitions",
        Units:    "acquisitions/s",
        Fam:      "locks",
        Ctx:      "mongodb.lock_acquisitions_rate",
        Priority: prioDatabaseLockAcquisitionsRate,
        Labels:   []module.Label{{Key: "lock_type", Value: "database"}},
        Dims: module.Dims{
            {ID: "locks_database_acquire_shared", Name: "shared", Algo: module.Incremental},
            {ID: "locks_database_acquire_exclusive", Name: "exclusive", Algo: module.Incremental},
            {ID: "locks_database_acquire_intent_shared", Name: "intent_shared", Algo: module.Incremental},
            {ID: "locks_database_acquire_intent_exclusive", Name: "intent_exclusive", Algo: module.Incremental},
        },
    }
    chartCollectionLockAcquisitionsRate = module.Chart{
        ID:       "collection_lock_acquisitions_rate",
        Title:    "Collection lock acquisitions",
        Units:    "acquisitions/s",
        Fam:      "locks",
        Ctx:      "mongodb.lock_acquisitions_rate",
        Priority: prioCollectionLockAcquisitionsRate,
        Labels:   []module.Label{{Key: "lock_type", Value: "collection"}},
        Dims: module.Dims{
            {ID: "locks_collection_acquire_shared", Name: "shared", Algo: module.Incremental},
            {ID: "locks_collection_acquire_exclusive", Name: "exclusive", Algo: module.Incremental},
            {ID: "locks_collection_acquire_intent_shared", Name: "intent_shared", Algo: module.Incremental},
            {ID: "locks_collection_acquire_intent_exclusive", Name: "intent_exclusive", Algo: module.Incremental},
        },
    }
    chartMutexLockAcquisitionsRate = module.Chart{
        ID:       "mutex_lock_acquisitions_rate",
        Title:    "Mutex lock acquisitions",
        Units:    "acquisitions/s",
        Fam:      "locks",
        Ctx:      "mongodb.lock_acquisitions_rate",
        Priority: prioMutexLockAcquisitionsRate,
        Labels:   []module.Label{{Key: "lock_type", Value: "mutex"}},
        Dims: module.Dims{
            {ID: "locks_mutex_acquire_shared", Name: "shared", Algo: module.Incremental},
            {ID: "locks_mutex_acquire_exclusive", Name: "exclusive", Algo: module.Incremental},
            {ID: "locks_mutex_acquire_intent_shared", Name: "intent_shared", Algo: module.Incremental},
            {ID: "locks_mutex_acquire_intent_exclusive", Name: "intent_exclusive", Algo: module.Incremental},
        },
    }
    chartMetadataLockAcquisitionsRate = module.Chart{
        ID:       "metadata_lock_acquisitions_rate",
        Title:    "Metadata lock acquisitions",
        Units:    "acquisitions/s",
        Fam:      "locks",
        Ctx:      "mongodb.lock_acquisitions_rate",
        Priority: prioMetadataLockAcquisitionsRate,
        Labels:   []module.Label{{Key: "lock_type", Value: "metadata"}},
        Dims: module.Dims{
            {ID: "locks_metadata_acquire_shared", Name: "shared", Algo: module.Incremental},
            {ID: "locks_metadata_acquire_exclusive", Name: "exclusive", Algo: module.Incremental},
            {ID: "locks_metadata_acquire_intent_shared", Name: "intent_shared", Algo: module.Incremental},
            {ID: "locks_metadata_acquire_intent_exclusive", Name: "intent_exclusive", Algo: module.Incremental},
        },
    }
    chartOpLogLockAcquisitionsRate = module.Chart{
        ID:       "oplog_lock_acquisitions_rate",
        Title:    "Operations log lock acquisitions",
        Units:    "acquisitions/s",
        Fam:      "locks",
        Ctx:      "mongodb.lock_acquisitions_rate",
        Priority: prioOpLogLockAcquisitionsRate,
        Labels:   []module.Label{{Key: "lock_type", Value: "oplog"}},
        Dims: module.Dims{
            {ID: "locks_oplog_acquire_shared", Name: "shared", Algo: module.Incremental},
            {ID: "locks_oplog_acquire_exclusive", Name: "exclusive", Algo: module.Incremental},
            {ID: "locks_oplog_acquire_intent_shared", Name: "intent_shared", Algo: module.Incremental},
            {ID: "locks_oplog_acquire_intent_exclusive", Name: "intent_exclusive", Algo: module.Incremental},
        },
    }

    chartCursorsOpenCount = module.Chart{
        ID:       "cursors_open_count",
        Title:    "Open cursors",
        Units:    "cursors",
        Fam:      "cursors",
        Ctx:      "mongodb.cursors_open_count",
        Priority: prioCursorsOpenCount,
        Dims: module.Dims{
            {ID: "metrics_cursor_open_total", Name: "open"},
        },
    }
    chartCursorsOpenNoTimeoutCount = module.Chart{
        ID:       "cursors_open_no_timeout_count",
        Title:    "Open cursors with disabled timeout",
        Units:    "cursors",
        Fam:      "cursors",
        Ctx:      "mongodb.cursors_open_no_timeout_count",
        Priority: prioCursorsOpenNoTimeoutCount,
        Dims: module.Dims{
            {ID: "metrics_cursor_open_no_timeout", Name: "open_no_timeout"},
        },
    }
    chartCursorsOpenedRate = module.Chart{
        ID:       "cursors_opened_rate",
        Title:    "Opened cursors rate",
        Units:    "cursors/s",
        Fam:      "cursors",
        Ctx:      "mongodb.cursors_opened_rate",
        Priority: prioCursorsOpenedRate,
        Dims: module.Dims{
            {ID: "metrics_cursor_total_opened", Name: "opened"},
        },
    }
    chartCursorsTimedOutRate = module.Chart{
        ID:       "cursors_timed_out_rate",
        Title:    "Timed-out cursors",
        Units:    "cursors/s",
        Fam:      "cursors",
        Ctx:      "mongodb.cursors_timed_out_rate",
        Priority: prioTimedOutCursorsRate,
        Dims: module.Dims{
            {ID: "metrics_cursor_timed_out", Name: "timed_out"},
        },
    }
    chartCursorsByLifespanCount = module.Chart{
        ID:       "cursors_by_lifespan_count",
        Title:    "Cursors lifespan",
        Units:    "cursors",
        Fam:      "cursors",
        Ctx:      "mongodb.cursors_by_lifespan_count",
        Priority: prioCursorsByLifespanCount,
        Type:     module.Stacked,
        Dims: module.Dims{
            {ID: "metrics_cursor_lifespan_less_than_1_second", Name: "le_1s"},
            {ID: "metrics_cursor_lifespan_less_than_5_seconds", Name: "1s_5s"},
            {ID: "metrics_cursor_lifespan_less_than_15_seconds", Name: "5s_15s"},
            {ID: "metrics_cursor_lifespan_less_than_30_seconds", Name: "15s_30s"},
            {ID: "metrics_cursor_lifespan_less_than_1_minute", Name: "30s_1m"},
            {ID: "metrics_cursor_lifespan_less_than_10_minutes", Name: "1m_10m"},
            {ID: "metrics_cursor_lifespan_greater_than_or_equal_10_minutes", Name: "ge_10m"},
        },
    }

    chartWiredTigerConcurrentReadTransactionsUsage = module.Chart{
        ID:       "wiredtiger_concurrent_read_transactions_usage",
        Title:    "Wired Tiger concurrent read transactions usage",
        Units:    "transactions",
        Fam:      "wiredtiger",
        Ctx:      "mongodb.wiredtiger_concurrent_read_transactions_usage",
        Priority: prioWiredTigerConcurrentReadTransactionsUsage,
        Type:     module.Stacked,
        Dims: module.Dims{
            {ID: "wiredtiger_concurrent_txn_read_available", Name: "available"},
            {ID: "wiredtiger_concurrent_txn_read_out", Name: "used"},
        },
    }
    chartWiredTigerConcurrentWriteTransactionsUsage = module.Chart{
        ID:       "wiredtiger_concurrent_write_transactions_usage",
        Title:    "Wired Tiger concurrent write transactions usage",
        Units:    "transactions",
        Fam:      "wiredtiger",
        Ctx:      "mongodb.wiredtiger_concurrent_write_transactions_usage",
        Priority: prioWiredTigerConcurrentWriteTransactionsUsage,
        Type:     module.Stacked,
        Dims: module.Dims{
            {ID: "wiredtiger_concurrent_txn_write_available", Name: "available"},
            {ID: "wiredtiger_concurrent_txn_write_out", Name: "used"},
        },
    }
    chartWiredTigerCacheUsage = module.Chart{
        ID:       "wiredtiger_cache_usage",
        Title:    "Wired Tiger cache usage",
        Units:    "bytes",
        Fam:      "wiredtiger",
        Ctx:      "mongodb.wiredtiger_cache_usage",
        Priority: prioWiredTigerCacheUsage,
        Type:     module.Stacked,
        Dims: module.Dims{
            {ID: "wiredtiger_cache_currently_in_cache_bytes", Name: "used"},
        },
    }
    chartWiredTigerCacheDirtySpaceSize = module.Chart{
        ID:       "wiredtiger_cache_dirty_space_size",
        Title:    "Wired Tiger cache dirty space size",
        Units:    "bytes",
        Fam:      "wiredtiger",
        Ctx:      "mongodb.wiredtiger_cache_dirty_space_size",
        Priority: prioWiredTigerCacheDirtySpaceSize,
        Dims: module.Dims{
            {ID: "wiredtiger_cache_tracked_dirty_in_the_cache_bytes", Name: "dirty"},
        },
    }
    chartWiredTigerCacheIORate = module.Chart{
        ID:       "wiredtiger_cache_io_rate",
        Title:    "Wired Tiger IO activity",
        Units:    "pages/s",
        Fam:      "wiredtiger",
        Ctx:      "mongodb.wiredtiger_cache_io_rate",
        Priority: prioWiredTigerCacheIORate,
        Dims: module.Dims{
            {ID: "wiredtiger_cache_read_into_cache_pages", Name: "read", Algo: module.Incremental},
            {ID: "wiredtiger_cache_written_from_cache_pages", Name: "written", Algo: module.Incremental},
        },
    }
    chartWiredTigerCacheEvictionsRate = module.Chart{
        ID:       "wiredtiger_cache_eviction_rate",
        Title:    "Wired Tiger cache evictions",
        Units:    "pages/s",
        Fam:      "wiredtiger",
        Ctx:      "mongodb.wiredtiger_cache_evictions_rate",
        Type:     module.Stacked,
        Priority: prioWiredTigerCacheEvictionsRate,
        Dims: module.Dims{
            {ID: "wiredtiger_cache_unmodified_evicted_pages", Name: "unmodified", Algo: module.Incremental},
            {ID: "wiredtiger_cache_modified_evicted_pages", Name: "modified", Algo: module.Incremental},
        },
    }
)

var (
    chartTmplDatabaseCollectionsCount = &module.Chart{
        ID:       chartPxDatabase + "%s_collections_count",
        Title:    "Database collections",
        Units:    "collections",
        Fam:      "databases",
        Ctx:      "mongodb.database_collections_count",
        Priority: prioDatabaseCollectionsCount,
        Dims: module.Dims{
            {ID: "database_%s_collections", Name: "collections"},
        },
    }
    chartTmplDatabaseIndexesCount = &module.Chart{
        ID:       chartPxDatabase + "%s_indexes_count",
        Title:    "Database indexes",
        Units:    "indexes",
        Fam:      "databases",
        Ctx:      "mongodb.database_indexes_count",
        Priority: prioDatabaseIndexesCount,
        Dims: module.Dims{
            {ID: "database_%s_indexes", Name: "indexes"},
        },
    }
    chartTmplDatabaseViewsCount = &module.Chart{
        ID:       chartPxDatabase + "%s_views_count",
        Title:    "Database views",
        Units:    "views",
        Fam:      "databases",
        Ctx:      "mongodb.database_views_count",
        Priority: prioDatabaseViewsCount,
        Dims: module.Dims{
            {ID: "database_%s_views", Name: "views"},
        },
    }
    chartTmplDatabaseDocumentsCount = &module.Chart{
        ID:       chartPxDatabase + "%s_documents_count",
        Title:    "Database documents",
        Units:    "documents",
        Fam:      "databases",
        Ctx:      "mongodb.database_documents_count",
        Priority: prioDatabaseDocumentsCount,
        Dims: module.Dims{
            {ID: "database_%s_documents", Name: "documents"},
        },
    }
    chartTmplDatabaseDataSize = &module.Chart{
        ID:       chartPxDatabase + "%s_data_size",
        Title:    "Database data size",
        Units:    "bytes",
        Fam:      "databases",
        Ctx:      "mongodb.database_data_size",
        Priority: prioDatabaseDataSize,
        Dims: module.Dims{
            {ID: "database_%s_data_size", Name: "data_size"},
        },
    }
    chartTmplDatabaseStorageSize = &module.Chart{
        ID:       chartPxDatabase + "%s_storage_size",
        Title:    "Database storage size",
        Units:    "bytes",
        Fam:      "databases",
        Ctx:      "mongodb.database_storage_size",
        Priority: prioDatabaseStorageSize,
        Dims: module.Dims{
            {ID: "database_%s_storage_size", Name: "storage_size"},
        },
    }
    chartTmplDatabaseIndexSize = &module.Chart{
        ID:       chartPxDatabase + "%s_index_size",
        Title:    "Database index size",
        Units:    "bytes",
        Fam:      "databases",
        Ctx:      "mongodb.database_index_size",
        Priority: prioDatabaseIndexSize,
        Dims: module.Dims{
            {ID: "database_%s_index_size", Name: "index_size"},
        },
    }
)

var (
    chartTmplReplSetMemberState = &module.Chart{
        ID:       chartPxReplSetMember + "%s_state",
        Title:    "Replica Set member state",
        Units:    "state",
        Fam:      "replica sets",
        Ctx:      "mongodb.repl_set_member_state",
        Priority: prioReplSetMemberState,
        Dims: module.Dims{
            {ID: "repl_set_member_%s_state_primary", Name: "primary"},
            {ID: "repl_set_member_%s_state_startup", Name: "startup"},
            {ID: "repl_set_member_%s_state_secondary", Name: "secondary"},
            {ID: "repl_set_member_%s_state_recovering", Name: "recovering"},
            {ID: "repl_set_member_%s_state_startup2", Name: "startup2"},
            {ID: "repl_set_member_%s_state_unknown", Name: "unknown"},
            {ID: "repl_set_member_%s_state_arbiter", Name: "arbiter"},
            {ID: "repl_set_member_%s_state_down", Name: "down"},
            {ID: "repl_set_member_%s_state_rollback", Name: "rollback"},
            {ID: "repl_set_member_%s_state_removed", Name: "removed"},
        },
    }
    chartTmplReplSetMemberHealthStatus = &module.Chart{
        ID:       chartPxReplSetMember + "%s_health_status",
        Title:    "Replica Set member health status",
        Units:    "status",
        Fam:      "replica sets",
        Ctx:      "mongodb.repl_set_member_health_status",
        Priority: prioReplSetMemberHealthStatus,
        Dims: module.Dims{
            {ID: "repl_set_member_%s_health_status_up", Name: "up"},
            {ID: "repl_set_member_%s_health_status_down", Name: "down"},
        },
    }
    chartTmplReplSetMemberReplicationLagTime = &module.Chart{
        ID:       chartPxReplSetMember + "%s_replication_lag_time",
        Title:    "Replica Set member replication lag",
        Units:    "milliseconds",
        Fam:      "replica sets",
        Ctx:      "mongodb.repl_set_member_replication_lag_time",
        Priority: prioReplSetMemberReplicationLagTime,
        Dims: module.Dims{
            {ID: "repl_set_member_%s_replication_lag", Name: "replication_lag"},
        },
    }
    chartTmplReplSetMemberHeartbeatLatencyTime = &module.Chart{
        ID:       chartPxReplSetMember + "%s_heartbeat_latency_time",
        Title:    "Replica Set member heartbeat latency",
        Units:    "milliseconds",
        Fam:      "replica sets",
        Ctx:      "mongodb.repl_set_member_heartbeat_latency_time",
        Priority: prioReplSetMemberHeartbeatLatencyTime,
        Dims: module.Dims{
            {ID: "repl_set_member_%s_heartbeat_latency", Name: "heartbeat_latency"},
        },
    }
    chartTmplReplSetMemberPingRTTTime = &module.Chart{
        ID:       chartPxReplSetMember + "%s_ping_rtt_time",
        Title:    "Replica Set member ping RTT",
        Units:    "milliseconds",
        Fam:      "replica sets",
        Ctx:      "mongodb.repl_set_member_ping_rtt_time",
        Priority: prioReplSetMemberPingRTTTime,
        Dims: module.Dims{
            {ID: "repl_set_member_%s_ping_rtt", Name: "ping_rtt"},
        },
    }
    chartTmplReplSetMemberUptime = &module.Chart{
        ID:       chartPxReplSetMember + "%s_uptime",
        Title:    "Replica Set member uptime",
        Units:    "seconds",
        Fam:      "replica sets",
        Ctx:      "mongodb.repl_set_member_uptime",
        Priority: prioReplSetMemberUptime,
        Dims: module.Dims{
            {ID: "repl_set_member_%s_uptime", Name: "uptime"},
        },
    }
)

var (
    chartShardingNodesCount = &module.Chart{
        ID:       "sharding_nodes_count",
        Title:    "Sharding Nodes",
        Units:    "nodes",
        Fam:      "sharding",
        Ctx:      "mongodb.sharding_nodes_count",
        Type:     module.Stacked,
        Priority: prioShardingNodesCount,
        Dims: module.Dims{
            {ID: "shard_nodes_aware", Name: "shard_aware"},
            {ID: "shard_nodes_unaware", Name: "shard_unaware"},
        },
    }
    chartShardingShardedDatabases = &module.Chart{
        ID:       "sharding_sharded_databases_count",
        Title:    "Sharded databases",
        Units:    "databases",
        Fam:      "sharding",
        Ctx:      "mongodb.sharding_sharded_databases_count",
        Type:     module.Stacked,
        Priority: prioShardingShardedDatabasesCount,
        Dims: module.Dims{
            {ID: "shard_databases_partitioned", Name: "partitioned"},
            {ID: "shard_databases_unpartitioned", Name: "unpartitioned"},
        },
    }

    chartShardingShardedCollectionsCount = &module.Chart{
        ID:       "sharding_sharded_collections_count",
        Title:    "Sharded collections",
        Units:    "collections",
        Fam:      "sharding",
        Ctx:      "mongodb.sharding_sharded_collections_count",
        Type:     module.Stacked,
        Priority: prioShardingShardedCollectionsCount,
        Dims: module.Dims{
            {ID: "shard_collections_partitioned", Name: "partitioned"},
            {ID: "shard_collections_unpartitioned", Name: "unpartitioned"},
        },
    }

    chartTmplShardChunks = &module.Chart{
        ID:       chartPxShard + "%s_chunks",
        Title:    "Shard chunks",
        Units:    "chunks",
        Fam:      "sharding",
        Ctx:      "mongodb.sharding_shard_chunks_count",
        Priority: prioShardChunks,
        Dims: module.Dims{
            {ID: "shard_id_%s_chunks", Name: "chunks"},
        },
    }
)