github.com/netdata/go.d.plugin@v0.58.1/modules/cassandra/metrics.go (about)

     1  // SPDX-License-Identifier: GPL-3.0-or-later
     2  
     3  package cassandra
     4  
     5  // https://cassandra.apache.org/doc/latest/cassandra/operating/metrics.html#table-metrics
     6  // https://www.datadoghq.com/blog/how-to-collect-cassandra-metrics/
     7  // https://docs.opennms.com/horizon/29/deployment/time-series-storage/newts/cassandra-jmx.html
     8  
     9  func newCassandraMetrics() *cassandraMetrics {
    10  	return &cassandraMetrics{
    11  		threadPools: make(map[string]*threadPoolMetrics),
    12  	}
    13  }
    14  
    15  type cassandraMetrics struct {
    16  	clientReqTotalLatencyReads  metricValue
    17  	clientReqTotalLatencyWrites metricValue
    18  	clientReqLatencyReads       metricValue
    19  	clientReqLatencyWrites      metricValue
    20  	clientReqTimeoutsReads      metricValue
    21  	clientReqTimeoutsWrites     metricValue
    22  	clientReqUnavailablesReads  metricValue
    23  	clientReqUnavailablesWrites metricValue
    24  	clientReqFailuresReads      metricValue
    25  	clientReqFailuresWrites     metricValue
    26  
    27  	clientReqReadLatencyP50   metricValue
    28  	clientReqReadLatencyP75   metricValue
    29  	clientReqReadLatencyP95   metricValue
    30  	clientReqReadLatencyP98   metricValue
    31  	clientReqReadLatencyP99   metricValue
    32  	clientReqReadLatencyP999  metricValue
    33  	clientReqWriteLatencyP50  metricValue
    34  	clientReqWriteLatencyP75  metricValue
    35  	clientReqWriteLatencyP95  metricValue
    36  	clientReqWriteLatencyP98  metricValue
    37  	clientReqWriteLatencyP99  metricValue
    38  	clientReqWriteLatencyP999 metricValue
    39  
    40  	rowCacheHits     metricValue
    41  	rowCacheMisses   metricValue
    42  	rowCacheCapacity metricValue
    43  	rowCacheSize     metricValue
    44  	keyCacheHits     metricValue
    45  	keyCacheMisses   metricValue
    46  	keyCacheCapacity metricValue
    47  	keyCacheSize     metricValue
    48  
    49  	// https://cassandra.apache.org/doc/latest/cassandra/operating/metrics.html#dropped-metrics
    50  	droppedMessages metricValue
    51  
    52  	// https://cassandra.apache.org/doc/latest/cassandra/operating/metrics.html#storage-metrics
    53  	storageLoad       metricValue
    54  	storageExceptions metricValue
    55  
    56  	// https://cassandra.apache.org/doc/latest/cassandra/operating/metrics.html#compaction-metrics
    57  	compactionBytesCompacted metricValue
    58  	compactionPendingTasks   metricValue
    59  	compactionCompletedTasks metricValue
    60  
    61  	// https://cassandra.apache.org/doc/latest/cassandra/operating/metrics.html#memory
    62  	jvmMemoryHeapUsed    metricValue
    63  	jvmMemoryNonHeapUsed metricValue
    64  	// https://cassandra.apache.org/doc/latest/cassandra/operating/metrics.html#garbagecollector
    65  	jvmGCParNewCount metricValue
    66  	jvmGCParNewTime  metricValue
    67  	jvmGCCMSCount    metricValue
    68  	jvmGCCMSTime     metricValue
    69  
    70  	threadPools map[string]*threadPoolMetrics
    71  }
    72  
    73  type threadPoolMetrics struct {
    74  	name      string
    75  	hasCharts bool
    76  
    77  	activeTasks       metricValue
    78  	pendingTasks      metricValue
    79  	blockedTasks      metricValue
    80  	totalBlockedTasks metricValue
    81  }
    82  
    83  type metricValue struct {
    84  	isSet bool
    85  	value float64
    86  }
    87  
    88  func (mv *metricValue) add(v float64) {
    89  	mv.isSet = true
    90  	mv.value += v
    91  }
    92  
    93  func (mv *metricValue) write(mx map[string]int64, key string) {
    94  	if mv.isSet {
    95  		mx[key] = int64(mv.value)
    96  	}
    97  }
    98  
    99  func (mv *metricValue) write1k(mx map[string]int64, key string) {
   100  	if mv.isSet {
   101  		mx[key] = int64(mv.value * 1000)
   102  	}
   103  }