diff options
Diffstat (limited to '')
-rw-r--r-- | src/go/collectors/go.d.plugin/modules/couchdb/metrics.go | 200 |
1 files changed, 200 insertions, 0 deletions
diff --git a/src/go/collectors/go.d.plugin/modules/couchdb/metrics.go b/src/go/collectors/go.d.plugin/modules/couchdb/metrics.go new file mode 100644 index 000000000..4d2f02679 --- /dev/null +++ b/src/go/collectors/go.d.plugin/modules/couchdb/metrics.go @@ -0,0 +1,200 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +package couchdb + +// https://docs.couchdb.org/en/stable/api/index.html + +type cdbMetrics struct { + // https://docs.couchdb.org/en/stable/api/server/common.html#active-tasks + ActiveTasks []cdbActiveTask + // https://docs.couchdb.org/en/stable/api/server/common.html#node-node-name-stats + NodeStats *cdbNodeStats + // https://docs.couchdb.org/en/stable/api/server/common.html#node-node-name-system + NodeSystem *cdbNodeSystem + // https://docs.couchdb.org/en/stable/api/database/common.html + DBStats []cdbDBStats +} + +func (m cdbMetrics) empty() bool { + switch { + case m.hasActiveTasks(), m.hasNodeStats(), m.hasNodeSystem(), m.hasDBStats(): + return false + } + return true +} + +func (m cdbMetrics) hasActiveTasks() bool { return m.ActiveTasks != nil } +func (m cdbMetrics) hasNodeStats() bool { return m.NodeStats != nil } +func (m cdbMetrics) hasNodeSystem() bool { return m.NodeSystem != nil } +func (m cdbMetrics) hasDBStats() bool { return m.DBStats != nil } + +type cdbActiveTask struct { + Type string `json:"type"` +} + +type cdbNodeStats struct { + CouchDB struct { + DatabaseReads struct { + Value float64 `stm:"" json:"value"` + } `stm:"database_reads" json:"database_reads"` + DatabaseWrites struct { + Value float64 `stm:"" json:"value"` + } `stm:"database_writes" json:"database_writes"` + HTTPd struct { + ViewReads struct { + Value float64 `stm:"" json:"value"` + } `stm:"view_reads" json:"view_reads"` + } `stm:"httpd" json:"httpd"` + HTTPdRequestMethods struct { + Copy struct { + Value float64 `stm:"" json:"value"` + } `stm:"COPY" json:"COPY"` + Delete struct { + Value float64 `stm:"" json:"value"` + } `stm:"DELETE" json:"DELETE"` + Get struct { + Value float64 `stm:"" json:"value"` + } `stm:"GET" json:"GET"` + Head struct { + Value float64 `stm:"" json:"value"` + } `stm:"HEAD" json:"HEAD"` + Options struct { + Value float64 `stm:"" json:"value"` + } `stm:"OPTIONS" json:"OPTIONS"` + Post struct { + Value float64 `stm:"" json:"value"` + } `stm:"POST" json:"POST"` + Put struct { + Value float64 `stm:"" json:"value"` + } `stm:"PUT" json:"PUT"` + } `stm:"httpd_request_methods" json:"httpd_request_methods"` + HTTPdStatusCodes struct { + Code200 struct { + Value float64 `stm:"" json:"value"` + } `stm:"200" json:"200"` + Code201 struct { + Value float64 `stm:"" json:"value"` + } `stm:"201" json:"201"` + Code202 struct { + Value float64 `stm:"" json:"value"` + } `stm:"202" json:"202"` + Code204 struct { + Value float64 `stm:"" json:"value"` + } `stm:"204" json:"204"` + Code206 struct { + Value float64 `stm:"" json:"value"` + } `stm:"206" json:"206"` + Code301 struct { + Value float64 `stm:"" json:"value"` + } `stm:"301" json:"301"` + Code302 struct { + Value float64 `stm:"" json:"value"` + } `stm:"302" json:"302"` + Code304 struct { + Value float64 `stm:"" json:"value"` + } `stm:"304" json:"304"` + Code400 struct { + Value float64 `stm:"" json:"value"` + } `stm:"400" json:"400"` + Code401 struct { + Value float64 `stm:"" json:"value"` + } `stm:"401" json:"401"` + Code403 struct { + Value float64 `stm:"" json:"value"` + } `stm:"403" json:"403"` + Code404 struct { + Value float64 `stm:"" json:"value"` + } `stm:"404" json:"404"` + Code405 struct { + Value float64 `stm:"" json:"value"` + } `stm:"405" json:"405"` + Code406 struct { + Value float64 `stm:"" json:"value"` + } `stm:"406" json:"406"` + Code409 struct { + Value float64 `stm:"" json:"value"` + } `stm:"409" json:"409"` + Code412 struct { + Value float64 `stm:"" json:"value"` + } `stm:"412" json:"412"` + Code413 struct { + Value float64 `stm:"" json:"value"` + } `stm:"413" json:"413"` + Code414 struct { + Value float64 `stm:"" json:"value"` + } `stm:"414" json:"414"` + Code415 struct { + Value float64 `stm:"" json:"value"` + } `stm:"415" json:"415"` + Code416 struct { + Value float64 `stm:"" json:"value"` + } `stm:"416" json:"416"` + Code417 struct { + Value float64 `stm:"" json:"value"` + } `stm:"417" json:"417"` + Code500 struct { + Value float64 `stm:"" json:"value"` + } `stm:"500" json:"500"` + Code501 struct { + Value float64 `stm:"" json:"value"` + } `stm:"501" json:"501"` + Code503 struct { + Value float64 `stm:"" json:"value"` + } `stm:"503" json:"503"` + } `stm:"httpd_status_codes" json:"httpd_status_codes"` + OpenOSFiles struct { + Value float64 `stm:"" json:"value"` + } `stm:"open_os_files" json:"open_os_files"` + } `stm:"couchdb" json:"couchdb"` + CouchReplicator struct { + Jobs struct { + Running struct { + Value float64 `stm:"" json:"value"` + } `stm:"running" json:"running"` + Pending struct { + Value float64 `stm:"" json:"value"` + } `stm:"pending" json:"pending"` + Crashed struct { + Value float64 `stm:"" json:"value"` + } `stm:"crashed" json:"crashed"` + } `stm:"jobs" json:"jobs"` + } `stm:"couch_replicator" json:"couch_replicator"` +} + +type cdbNodeSystem struct { + Memory struct { + Other float64 `stm:"other" json:"other"` + Atom float64 `stm:"atom" json:"atom"` + AtomUsed float64 `stm:"atom_used" json:"atom_used"` + Processes float64 `stm:"processes" json:"processes"` + Binary float64 `stm:"binary" json:"binary"` + Code float64 `stm:"code" json:"code"` + Ets float64 `stm:"ets" json:"ets"` + } `stm:"memory" json:"memory"` + + RunQueue float64 `stm:"run_queue" json:"run_queue"` + EtsTableCount float64 `stm:"ets_table_count" json:"ets_table_count"` + ContextSwitches float64 `stm:"context_switches" json:"context_switches"` + Reductions float64 `stm:"reductions" json:"reductions"` + IOInput float64 `stm:"io_input" json:"io_input"` + IOOutput float64 `stm:"io_output" json:"io_output"` + OSProcCount float64 `stm:"os_proc_count" json:"os_proc_count"` + ProcessCount float64 `stm:"process_count" json:"process_count"` + InternalReplicationJobs float64 `stm:"internal_replication_jobs" json:"internal_replication_jobs"` + + MessageQueues map[string]interface{} `json:"message_queues"` +} + +type cdbDBStats struct { + Key string + Error string + Info struct { + Sizes struct { + File float64 `stm:"file" json:"file"` + External float64 `stm:"external" json:"external"` + Active float64 `stm:"active" json:"active"` + } `stm:"db_sizes" json:"sizes"` + DocDelCount float64 `stm:"db_doc_del_counts" json:"doc_del_count"` + DocCount float64 `stm:"db_doc_counts" json:"doc_count"` + } +} |