116 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			116 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Go
		
	
	
	
| package rethinkdb
 | |
| 
 | |
| import (
 | |
| 	"reflect"
 | |
| 	"time"
 | |
| 
 | |
| 	"github.com/influxdata/telegraf"
 | |
| )
 | |
| 
 | |
| type serverStatus struct {
 | |
| 	Id      string `gorethink:"id"`
 | |
| 	Network struct {
 | |
| 		Addresses  []Address `gorethink:"canonical_addresses"`
 | |
| 		Hostname   string    `gorethink:"hostname"`
 | |
| 		DriverPort int       `gorethink:"reql_port"`
 | |
| 	} `gorethink:"network"`
 | |
| 	Process struct {
 | |
| 		Version      string    `gorethink:"version"`
 | |
| 		RunningSince time.Time `gorethink:"time_started"`
 | |
| 	} `gorethink:"process"`
 | |
| }
 | |
| 
 | |
| type Address struct {
 | |
| 	Host string `gorethink:"host"`
 | |
| 	Port int    `gorethink:"port"`
 | |
| }
 | |
| 
 | |
| type stats struct {
 | |
| 	Engine Engine `gorethink:"query_engine"`
 | |
| }
 | |
| 
 | |
| type Engine struct {
 | |
| 	ClientConns   int64 `gorethink:"client_connections,omitempty"`
 | |
| 	ClientActive  int64 `gorethink:"clients_active,omitempty"`
 | |
| 	QueriesPerSec int64 `gorethink:"queries_per_sec,omitempty"`
 | |
| 	TotalQueries  int64 `gorethink:"queries_total,omitempty"`
 | |
| 	ReadsPerSec   int64 `gorethink:"read_docs_per_sec,omitempty"`
 | |
| 	TotalReads    int64 `gorethink:"read_docs_total,omitempty"`
 | |
| 	WritesPerSec  int64 `gorethink:"written_docs_per_sec,omitempty"`
 | |
| 	TotalWrites   int64 `gorethink:"written_docs_total,omitempty"`
 | |
| }
 | |
| 
 | |
| type tableStatus struct {
 | |
| 	Id   string `gorethink:"id"`
 | |
| 	DB   string `gorethink:"db"`
 | |
| 	Name string `gorethink:"name"`
 | |
| }
 | |
| 
 | |
| type tableStats struct {
 | |
| 	Engine  Engine  `gorethink:"query_engine"`
 | |
| 	Storage Storage `gorethink:"storage_engine"`
 | |
| }
 | |
| 
 | |
| type Storage struct {
 | |
| 	Cache Cache `gorethink:"cache"`
 | |
| 	Disk  Disk  `gorethink:"disk"`
 | |
| }
 | |
| 
 | |
| type Cache struct {
 | |
| 	BytesInUse int64 `gorethink:"in_use_bytes"`
 | |
| }
 | |
| 
 | |
| type Disk struct {
 | |
| 	ReadBytesPerSec  int64      `gorethink:"read_bytes_per_sec"`
 | |
| 	ReadBytesTotal   int64      `gorethink:"read_bytes_total"`
 | |
| 	WriteBytesPerSec int64      `gorethik:"written_bytes_per_sec"`
 | |
| 	WriteBytesTotal  int64      `gorethink:"written_bytes_total"`
 | |
| 	SpaceUsage       SpaceUsage `gorethink:"space_usage"`
 | |
| }
 | |
| 
 | |
| type SpaceUsage struct {
 | |
| 	Data     int64 `gorethink:"data_bytes"`
 | |
| 	Garbage  int64 `gorethink:"garbage_bytes"`
 | |
| 	Metadata int64 `gorethink:"metadata_bytes"`
 | |
| 	Prealloc int64 `gorethink:"preallocated_bytes"`
 | |
| }
 | |
| 
 | |
| var engineStats = map[string]string{
 | |
| 	"active_clients":       "ClientActive",
 | |
| 	"clients":              "ClientConns",
 | |
| 	"queries_per_sec":      "QueriesPerSec",
 | |
| 	"total_queries":        "TotalQueries",
 | |
| 	"read_docs_per_sec":    "ReadsPerSec",
 | |
| 	"total_reads":          "TotalReads",
 | |
| 	"written_docs_per_sec": "WritesPerSec",
 | |
| 	"total_writes":         "TotalWrites",
 | |
| }
 | |
| 
 | |
| func (e *Engine) AddEngineStats(
 | |
| 	keys []string,
 | |
| 	acc telegraf.Accumulator,
 | |
| 	tags map[string]string,
 | |
| ) {
 | |
| 	engine := reflect.ValueOf(e).Elem()
 | |
| 	fields := make(map[string]interface{})
 | |
| 	for _, key := range keys {
 | |
| 		fields[key] = engine.FieldByName(engineStats[key]).Interface()
 | |
| 	}
 | |
| 	acc.AddFields("rethinkdb_engine", fields, tags)
 | |
| }
 | |
| 
 | |
| func (s *Storage) AddStats(acc telegraf.Accumulator, tags map[string]string) {
 | |
| 	fields := map[string]interface{}{
 | |
| 		"cache_bytes_in_use":            s.Cache.BytesInUse,
 | |
| 		"disk_read_bytes_per_sec":       s.Disk.ReadBytesPerSec,
 | |
| 		"disk_read_bytes_total":         s.Disk.ReadBytesTotal,
 | |
| 		"disk_written_bytes_per_sec":    s.Disk.WriteBytesPerSec,
 | |
| 		"disk_written_bytes_total":      s.Disk.WriteBytesTotal,
 | |
| 		"disk_usage_data_bytes":         s.Disk.SpaceUsage.Data,
 | |
| 		"disk_usage_garbage_bytes":      s.Disk.SpaceUsage.Garbage,
 | |
| 		"disk_usage_metadata_bytes":     s.Disk.SpaceUsage.Metadata,
 | |
| 		"disk_usage_preallocated_bytes": s.Disk.SpaceUsage.Prealloc,
 | |
| 	}
 | |
| 	acc.AddFields("rethinkdb", fields, tags)
 | |
| }
 |