-
Notifications
You must be signed in to change notification settings - Fork 13
/
mongostat.go
1554 lines (1398 loc) · 59 KB
/
mongostat.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
/***
The code contained here came from https://github.com/mongodb/mongo-tools/blob/master/mongostat/stat_types.go
and contains modifications so that no other dependency from that project is needed. Other modifications included
removing unnecessary code specific to formatting the output and determine the current state of the database. It
is licensed under Apache Version 2.0, http://www.apache.org/licenses/LICENSE-2.0.html
***/
package mongodb
import (
"sort"
"strings"
"time"
)
const (
MongosProcess = "mongos"
)
// Flags to determine cases when to activate/deactivate columns for output.
const (
Always = 1 << iota // always activate the column
Discover // only active when mongostat is in discover mode
Repl // only active if one of the nodes being monitored is in a replset
Locks // only active if node is capable of calculating lock info
AllOnly // only active if mongostat was run with --all option
MMAPOnly // only active if node has mmap-specific fields
WTOnly // only active if node has wiredtiger-specific fields
)
type MongoStatus struct {
SampleTime time.Time
ServerStatus *ServerStatus
ReplSetStatus *ReplSetStatus
ClusterStatus *ClusterStatus
DbStats *DbStats
ColStats *ColStats
ShardStats *ShardStats
OplogStats *OplogStats
}
type ServerStatus struct {
LocalTime time.Time `bson:"localTime"`
OpLatencies *OpLatenciesStats `bson:"opLatencies"`
Mem *MemStats `bson:"mem"`
Locks map[string]LockStats `bson:"locks,omitempty"`
Network *NetworkStats `bson:"network"`
GlobalLock *GlobalLockStats `bson:"globalLock"`
Metrics *MetricsStats `bson:"metrics"`
WiredTiger *WiredTiger `bson:"wiredTiger"`
Asserts *AssertsStats `bson:"asserts"`
BackgroundFlushing *FlushStats `bson:"backgroundFlushing"`
ExtraInfo *ExtraInfo `bson:"extra_info"`
Connections *ConnectionStats `bson:"connections"`
Dur *DurStats `bson:"dur"`
TCMallocStats *TCMallocStats `bson:"tcmalloc"`
StorageEngine map[string]string `bson:"storageEngine"`
ShardCursorType map[string]interface{} `bson:"shardCursorType"`
Opcounters *OpcountStats `bson:"opcounters"`
OpcountersRepl *OpcountStats `bson:"opcountersRepl"`
Repl *ReplStatus `bson:"repl"`
RecordStats *DBRecordStats `bson:"recordStats"`
Process string `bson:"process"`
Host string `bson:"host"`
Version string `bson:"version"`
Uptime int64 `bson:"uptime"`
Pid int64 `bson:"pid"`
UptimeEstimate int64 `bson:"uptimeEstimate"`
UptimeMillis int64 `bson:"uptimeMillis"`
}
// DbStats stores stats from all dbs
type DbStats struct {
Dbs []Db
}
// Db represent a single DB
type Db struct {
DbStatsData *DbStatsData
Name string
}
// DbStatsData stores stats from a db
type DbStatsData struct {
GleStats interface{} `bson:"gleStats"`
Db string `bson:"db"`
Collections int64 `bson:"collections"`
Objects int64 `bson:"objects"`
AvgObjSize float64 `bson:"avgObjSize"`
DataSize int64 `bson:"dataSize"`
StorageSize int64 `bson:"storageSize"`
NumExtents int64 `bson:"numExtents"`
Indexes int64 `bson:"indexes"`
IndexSize int64 `bson:"indexSize"`
Ok int64 `bson:"ok"`
}
type ColStats struct {
Collections []Collection
}
type Collection struct {
ColStatsData *ColStatsData
Name string
DbName string
}
type ColStatsData struct {
Collection string `bson:"ns"`
Count int64 `bson:"count"`
Size int64 `bson:"size"`
AvgObjSize float64 `bson:"avgObjSize"`
StorageSize int64 `bson:"storageSize"`
TotalIndexSize int64 `bson:"totalIndexSize"`
Ok int64 `bson:"ok"`
}
// ClusterStatus stores information related to the whole cluster
type ClusterStatus struct {
JumboChunksCount int64
}
// ReplSetStatus stores information from replSetGetStatus
type ReplSetStatus struct {
Members []ReplSetMember `bson:"members"`
MyState int64 `bson:"myState"`
}
// OplogStatus stores information from getReplicationInfo
type OplogStats struct {
TimeDiff int64
}
// ReplSetMember stores information related to a replica set member
type ReplSetMember struct {
OptimeDate time.Time `bson:"optimeDate"`
Name string `bson:"name"`
StateStr string `bson:"stateStr"`
State int64 `bson:"state"`
}
// WiredTiger stores information related to the WiredTiger storage engine.
type WiredTiger struct {
Transaction TransactionStats `bson:"transaction"`
Concurrent ConcurrentTransactions `bson:"concurrentTransactions"`
Cache CacheStats `bson:"cache"`
}
// ShardStats stores information from shardConnPoolStats.
type ShardStats struct {
Hosts map[string]ShardHostStatsData `bson:"hosts"`
ShardStatsData `bson:",inline"`
}
// ShardStatsData is the total Shard Stats from shardConnPoolStats database command.
type ShardStatsData struct {
TotalInUse int64 `bson:"totalInUse"`
TotalAvailable int64 `bson:"totalAvailable"`
TotalCreated int64 `bson:"totalCreated"`
TotalRefreshing int64 `bson:"totalRefreshing"`
}
// ShardHostStatsData is the host-specific stats
// from shardConnPoolStats database command.
type ShardHostStatsData struct {
InUse int64 `bson:"inUse"`
Available int64 `bson:"available"`
Created int64 `bson:"created"`
Refreshing int64 `bson:"refreshing"`
}
type ConcurrentTransactions struct {
Write ConcurrentTransStats `bson:"write"`
Read ConcurrentTransStats `bson:"read"`
}
type ConcurrentTransStats struct {
Out int64 `bson:"out"`
Available int64 `bson:"available"`
TotalTickets int64 `bson:"totalTickets"`
}
// AssertsStats stores information related to assertions raised since the MongoDB process started
type AssertsStats struct {
Regular int64 `bson:"regular"`
Warning int64 `bson:"warning"`
Msg int64 `bson:"msg"`
User int64 `bson:"user"`
Rollovers int64 `bson:"rollovers"`
}
// CacheStats stores cache statistics for WiredTiger.
type CacheStats struct {
TrackedDirtyBytes int64 `bson:"tracked dirty bytes in the cache"`
CurrentCachedBytes int64 `bson:"bytes currently in the cache"`
MaxBytesConfigured int64 `bson:"maximum bytes configured"`
AppThreadsPageReadCount int64 `bson:"application threads page read from disk to cache count"`
AppThreadsPageReadTime int64 `bson:"application threads page read from disk to cache time (usecs)"`
AppThreadsPageWriteCount int64 `bson:"application threads page write from cache to disk count"`
AppThreadsPageWriteTime int64 `bson:"application threads page write from cache to disk time (usecs)"`
BytesWrittenFrom int64 `bson:"bytes written from cache"`
BytesReadInto int64 `bson:"bytes read into cache"`
PagesEvictedByAppThread int64 `bson:"pages evicted by application threads"`
PagesQueuedForEviction int64 `bson:"pages queued for eviction"`
PagesReadIntoCache int64 `bson:"pages read into cache"`
PagesWrittenFromCache int64 `bson:"pages written from cache"`
PagesRequestedFromCache int64 `bson:"pages requested from the cache"`
ServerEvictingPages int64 `bson:"eviction server evicting pages"`
WorkerThreadEvictingPages int64 `bson:"eviction worker thread evicting pages"`
InternalPagesEvicted int64 `bson:"internal pages evicted"`
ModifiedPagesEvicted int64 `bson:"modified pages evicted"`
UnmodifiedPagesEvicted int64 `bson:"unmodified pages evicted"`
}
// TransactionStats stores transaction checkpoints in WiredTiger.
type TransactionStats struct {
TransCheckpointsTotalTimeMsecs int64 `bson:"transaction checkpoint total time (msecs)"`
TransCheckpoints int64 `bson:"transaction checkpoints"`
}
// ReplStatus stores data related to replica sets.
type ReplStatus struct {
SetName interface{} `bson:"setName"`
IsMaster interface{} `bson:"ismaster"`
Secondary interface{} `bson:"secondary"`
IsReplicaSet interface{} `bson:"isreplicaset"`
ArbiterOnly interface{} `bson:"arbiterOnly"`
Me string `bson:"me"`
Hosts []string `bson:"hosts"`
Passives []string `bson:"passives"`
}
// DBRecordStats stores data related to memory operations across databases.
type DBRecordStats struct {
DBRecordAccesses map[string]RecordAccesses `bson:",inline"`
AccessesNotInMemory int64 `bson:"accessesNotInMemory"`
PageFaultExceptionsThrown int64 `bson:"pageFaultExceptionsThrown"`
}
// RecordAccesses stores data related to memory operations scoped to a database.
type RecordAccesses struct {
AccessesNotInMemory int64 `bson:"accessesNotInMemory"`
PageFaultExceptionsThrown int64 `bson:"pageFaultExceptionsThrown"`
}
// MemStats stores data related to memory statistics.
type MemStats struct {
Supported interface{} `bson:"supported"`
Bits int64 `bson:"bits"`
Resident int64 `bson:"resident"`
Virtual int64 `bson:"virtual"`
Mapped int64 `bson:"mapped"`
MappedWithJournal int64 `bson:"mappedWithJournal"`
}
// FlushStats stores information about memory flushes.
type FlushStats struct {
LastFinished time.Time `bson:"last_finished"`
Flushes int64 `bson:"flushes"`
TotalMs int64 `bson:"total_ms"`
AverageMs float64 `bson:"average_ms"`
LastMs int64 `bson:"last_ms"`
}
// ConnectionStats stores information related to incoming database connections.
type ConnectionStats struct {
Current int64 `bson:"current"`
Available int64 `bson:"available"`
TotalCreated int64 `bson:"totalCreated"`
}
// DurTiming stores information related to journaling.
type DurTiming struct {
Dt int64 `bson:"dt"`
PrepLogBuffer int64 `bson:"prepLogBuffer"`
WriteToJournal int64 `bson:"writeToJournal"`
WriteToDataFiles int64 `bson:"writeToDataFiles"`
RemapPrivateView int64 `bson:"remapPrivateView"`
}
// DurStats stores information related to journaling statistics.
type DurStats struct {
Commits int64 `bson:"commits"`
JournaledMB int64 `bson:"journaledMB"`
WriteToDataFilesMB int64 `bson:"writeToDataFilesMB"`
Compression int64 `bson:"compression"`
CommitsInWriteLock int64 `bson:"commitsInWriteLock"`
EarlyCommits int64 `bson:"earlyCommits"`
TimeMs DurTiming
}
// QueueStats stores the number of queued read/write operations.
type QueueStats struct {
Total int64 `bson:"total"`
Readers int64 `bson:"readers"`
Writers int64 `bson:"writers"`
}
// ClientStats stores the number of active read/write operations.
type ClientStats struct {
Total int64 `bson:"total"`
Readers int64 `bson:"readers"`
Writers int64 `bson:"writers"`
}
// GlobalLockStats stores information related locks in the MMAP storage engine.
type GlobalLockStats struct {
CurrentQueue *QueueStats `bson:"currentQueue"`
ActiveClients *ClientStats `bson:"activeClients"`
TotalTime int64 `bson:"totalTime"`
LockTime int64 `bson:"lockTime"`
}
// NetworkStats stores information related to network traffic.
type NetworkStats struct {
BytesIn int64 `bson:"bytesIn"`
BytesOut int64 `bson:"bytesOut"`
NumRequests int64 `bson:"numRequests"`
}
// OpcountStats stores information related to commands and basic CRUD operations.
type OpcountStats struct {
Insert int64 `bson:"insert"`
Query int64 `bson:"query"`
Update int64 `bson:"update"`
Delete int64 `bson:"delete"`
GetMore int64 `bson:"getmore"`
Command int64 `bson:"command"`
}
// OpLatenciesStats stores information related to operation latencies for the database as a whole
type OpLatenciesStats struct {
Reads *LatencyStats `bson:"reads"`
Writes *LatencyStats `bson:"writes"`
Commands *LatencyStats `bson:"commands"`
}
// LatencyStats lists total latency in microseconds and count of operations, enabling you to obtain an average
type LatencyStats struct {
Latency int64 `bson:"latency"`
Ops int64 `bson:"ops"`
}
// MetricsStats stores information related to metrics
type MetricsStats struct {
TTL *TTLStats `bson:"ttl"`
Cursor *CursorStats `bson:"cursor"`
Document *DocumentStats `bson:"document"`
Commands *CommandsStats `bson:"commands"`
Operation *OperationStats `bson:"operation"`
QueryExecutor *QueryExecutorStats `bson:"queryExecutor"`
Repl *ReplStats `bson:"repl"`
Storage *StorageStats `bson:"storage"`
}
// TTLStats stores information related to documents with a ttl index.
type TTLStats struct {
DeletedDocuments int64 `bson:"deletedDocuments"`
Passes int64 `bson:"passes"`
}
// CursorStats stores information related to cursor metrics.
type CursorStats struct {
Open *OpenCursorStats `bson:"open"`
TimedOut int64 `bson:"timedOut"`
}
// DocumentStats stores information related to document metrics.
type DocumentStats struct {
Deleted int64 `bson:"deleted"`
Inserted int64 `bson:"inserted"`
Returned int64 `bson:"returned"`
Updated int64 `bson:"updated"`
}
// CommandsStats stores information related to document metrics.
type CommandsStats struct {
Aggregate *CommandsStatsValue `bson:"aggregate"`
Count *CommandsStatsValue `bson:"count"`
Delete *CommandsStatsValue `bson:"delete"`
Distinct *CommandsStatsValue `bson:"distinct"`
Find *CommandsStatsValue `bson:"find"`
FindAndModify *CommandsStatsValue `bson:"findAndModify"`
GetMore *CommandsStatsValue `bson:"getMore"`
Insert *CommandsStatsValue `bson:"insert"`
Update *CommandsStatsValue `bson:"update"`
}
type CommandsStatsValue struct {
Failed int64 `bson:"failed"`
Total int64 `bson:"total"`
}
// OpenCursorStats stores information related to open cursor metrics
type OpenCursorStats struct {
NoTimeout int64 `bson:"noTimeout"`
Pinned int64 `bson:"pinned"`
Total int64 `bson:"total"`
}
// OperationStats stores information related to query operations
// using special operation types
type OperationStats struct {
ScanAndOrder int64 `bson:"scanAndOrder"`
WriteConflicts int64 `bson:"writeConflicts"`
}
// QueryExecutorStats stores information related to query execution
type QueryExecutorStats struct {
Scanned int64 `bson:"scanned"`
ScannedObjects int64 `bson:"scannedObjects"`
}
// ReplStats stores information related to replication process
type ReplStats struct {
Apply *ReplApplyStats `bson:"apply"`
Buffer *ReplBufferStats `bson:"buffer"`
Executor *ReplExecutorStats `bson:"executor,omitempty"`
Network *ReplNetworkStats `bson:"network"`
}
// ReplApplyStats stores information related to oplog application process
type ReplApplyStats struct {
Batches *BasicStats `bson:"batches"`
Ops int64 `bson:"ops"`
}
// ReplBufferStats stores information related to oplog buffer
type ReplBufferStats struct {
Count int64 `bson:"count"`
SizeBytes int64 `bson:"sizeBytes"`
}
// ReplExecutorStats stores information related to replication executor
type ReplExecutorStats struct {
Pool map[string]int64 `bson:"pool"`
Queues map[string]int64 `bson:"queues"`
UnsignaledEvents int64 `bson:"unsignaledEvents"`
}
// ReplNetworkStats stores information related to network usage by replication process
type ReplNetworkStats struct {
GetMores *BasicStats `bson:"getmores"`
Bytes int64 `bson:"bytes"`
Ops int64 `bson:"ops"`
}
// BasicStats stores information about an operation
type BasicStats struct {
Num int64 `bson:"num"`
TotalMillis int64 `bson:"totalMillis"`
}
// ReadWriteLockTimes stores time spent holding read/write locks.
type ReadWriteLockTimes struct {
Read int64 `bson:"R"`
Write int64 `bson:"W"`
ReadLower int64 `bson:"r"`
WriteLower int64 `bson:"w"`
}
// LockStats stores information related to time spent acquiring/holding locks
// for a given database.
//
// AcquireCount and AcquireWaitCount are new fields of the lock stats only populated on 3.0 or newer.
// Typed as a pointer so that if it is nil, mongostat can assume the field is not populated
// with real namespace data.
type LockStats struct {
AcquireCount *ReadWriteLockTimes `bson:"acquireCount,omitempty"`
AcquireWaitCount *ReadWriteLockTimes `bson:"acquireWaitCount,omitempty"`
TimeLockedMicros ReadWriteLockTimes `bson:"timeLockedMicros"`
TimeAcquiringMicros ReadWriteLockTimes `bson:"timeAcquiringMicros"`
}
// ExtraInfo stores additional platform specific information.
type ExtraInfo struct {
PageFaults *int64 `bson:"page_faults"`
}
// TCMallocStats stores information related to TCMalloc memory allocator metrics
type TCMallocStats struct {
Generic *GenericTCMAllocStats `bson:"generic"`
TCMalloc *DetailedTCMallocStats `bson:"tcmalloc"`
}
// GenericTCMAllocStats stores generic TCMalloc memory allocator metrics
type GenericTCMAllocStats struct {
CurrentAllocatedBytes int64 `bson:"current_allocated_bytes"`
HeapSize int64 `bson:"heap_size"`
}
// DetailedTCMallocStats stores detailed TCMalloc memory allocator metrics
type DetailedTCMallocStats struct {
PageheapFreeBytes int64 `bson:"pageheap_free_bytes"`
PageheapUnmappedBytes int64 `bson:"pageheap_unmapped_bytes"`
MaxTotalThreadCacheBytes int64 `bson:"max_total_thread_cache_bytes"`
CurrentTotalThreadCacheBytes int64 `bson:"current_total_thread_cache_bytes"`
TotalFreeBytes int64 `bson:"total_free_bytes"`
CentralCacheFreeBytes int64 `bson:"central_cache_free_bytes"`
TransferCacheFreeBytes int64 `bson:"transfer_cache_free_bytes"`
ThreadCacheFreeBytes int64 `bson:"thread_cache_free_bytes"`
PageheapComittedBytes int64 `bson:"pageheap_committed_bytes"`
PageheapScavengeCount int64 `bson:"pageheap_scavenge_count"`
PageheapCommitCount int64 `bson:"pageheap_commit_count"`
PageheapTotalCommitBytes int64 `bson:"pageheap_total_commit_bytes"`
PageheapDecommitCount int64 `bson:"pageheap_decommit_count"`
PageheapTotalDecommitBytes int64 `bson:"pageheap_total_decommit_bytes"`
PageheapReserveCount int64 `bson:"pageheap_reserve_count"`
PageheapTotalReserveBytes int64 `bson:"pageheap_total_reserve_bytes"`
SpinLockTotalDelayNanos int64 `bson:"spinlock_total_delay_ns"`
}
// StorageStats stores information related to record allocations
type StorageStats struct {
FreelistSearchBucketExhausted int64 `bson:"freelist.search.bucketExhausted"`
FreelistSearchRequests int64 `bson:"freelist.search.requests"`
FreelistSearchScanned int64 `bson:"freelist.search.scanned"`
}
// StatHeader describes a single column for mongostat's terminal output,
// its formatting, and in which modes it should be displayed.
type StatHeader struct {
// The text to appear in the column's header cell
HeaderText string
// Bitmask containing flags to determine if this header is active or not
ActivateFlags int
}
// StatHeaders are the complete set of data metrics supported by mongostat.
var StatHeaders = []StatHeader{
{"", Always}, // placeholder for hostname column (blank header text)
{"insert", Always},
{"query", Always},
{"update", Always},
{"delete", Always},
{"getmore", Always},
{"command", Always},
{"% dirty", WTOnly},
{"% used", WTOnly},
{"flushes", Always},
{"mapped", MMAPOnly},
{"vsize", Always},
{"res", Always},
{"non-mapped", MMAPOnly | AllOnly},
{"faults", MMAPOnly},
{"lr|lw %", MMAPOnly | AllOnly},
{"lrt|lwt", MMAPOnly | AllOnly},
{" locked db", Locks},
{"qr|qw", Always},
{"ar|aw", Always},
{"netIn", Always},
{"netOut", Always},
{"conn", Always},
{"set", Repl},
{"repl", Repl},
{"time", Always},
}
// NamespacedLocks stores information on the LockStatus of namespaces.
type NamespacedLocks map[string]LockStatus
// LockUsage stores information related to a namespace's lock usage.
type LockUsage struct {
Namespace string
Reads int64
Writes int64
}
type lockUsages []LockUsage
func percentageInt64(value, outOf int64) float64 {
if value == 0 || outOf == 0 {
return 0
}
return 100 * (float64(value) / float64(outOf))
}
func averageInt64(value, outOf int64) int64 {
if value == 0 || outOf == 0 {
return 0
}
return value / outOf
}
func (slice lockUsages) Len() int {
return len(slice)
}
func (slice lockUsages) Less(i, j int) bool {
return slice[i].Reads+slice[i].Writes < slice[j].Reads+slice[j].Writes
}
func (slice lockUsages) Swap(i, j int) {
slice[i], slice[j] = slice[j], slice[i]
}
// CollectionLockStatus stores a collection's lock statistics.
type CollectionLockStatus struct {
ReadAcquireWaitsPercentage float64
WriteAcquireWaitsPercentage float64
ReadAcquireTimeMicros int64
WriteAcquireTimeMicros int64
}
// LockStatus stores a database's lock statistics.
type LockStatus struct {
DBName string
Percentage float64
Global bool
}
// // StatLine is a wrapper for all metrics reported by mongostat for monitored hosts.
// type StatLine struct {
// Key string
// // What storage engine is being used for the node with this stat line
// StorageEngine string
// Error error
// IsMongos bool
// Host string
// Version string
// UptimeNanos int64
// // The time at which this StatLine was generated.
// Time time.Time
// // The last time at which this StatLine was printed to output.
// LastPrinted time.Time
// // Opcounter fields
// Insert, InsertCnt int64
// Query, QueryCnt int64
// Update, UpdateCnt int64
// Delete, DeleteCnt int64
// GetMore, GetMoreCnt int64
// Command, CommandCnt int64
// // Asserts fields
// Regular int64
// Warning int64
// Msg int64
// User int64
// Rollovers int64
// // OpLatency fields
// WriteOpsCnt int64
// WriteLatency int64
// ReadOpsCnt int64
// ReadLatency int64
// CommandOpsCnt int64
// CommandLatency int64
// // TTL fields
// Passes, PassesCnt int64
// DeletedDocuments, DeletedDocumentsCnt int64
// // Cursor fields
// TimedOutC, TimedOutCCnt int64
// NoTimeoutC, NoTimeoutCCnt int64
// PinnedC, PinnedCCnt int64
// TotalC, TotalCCnt int64
// // Document fields
// DeletedD, InsertedD, ReturnedD, UpdatedD int64
// // Commands fields
// AggregateCommandTotal, AggregateCommandFailed int64
// CountCommandTotal, CountCommandFailed int64
// DeleteCommandTotal, DeleteCommandFailed int64
// DistinctCommandTotal, DistinctCommandFailed int64
// FindCommandTotal, FindCommandFailed int64
// FindAndModifyCommandTotal, FindAndModifyCommandFailed int64
// GetMoreCommandTotal, GetMoreCommandFailed int64
// InsertCommandTotal, InsertCommandFailed int64
// UpdateCommandTotal, UpdateCommandFailed int64
// // Operation fields
// ScanAndOrderOp, WriteConflictsOp int64
// // Query Executor fields
// TotalKeysScanned, TotalObjectsScanned int64
// // Connection fields
// CurrentC, AvailableC, TotalCreatedC int64
// // Collection locks (3.0 mmap only)
// CollectionLocks *CollectionLockStatus
// // Cache utilization (wiredtiger only)
// CacheDirtyPercent float64
// CacheUsedPercent float64
// // Cache utilization extended (wiredtiger only)
// TrackedDirtyBytes int64
// CurrentCachedBytes int64
// MaxBytesConfigured int64
// AppThreadsPageReadCount int64
// AppThreadsPageReadTime int64
// AppThreadsPageWriteCount int64
// BytesWrittenFrom int64
// BytesReadInto int64
// PagesEvictedByAppThread int64
// PagesQueuedForEviction int64
// PagesReadIntoCache int64
// PagesWrittenFromCache int64
// PagesRequestedFromCache int64
// ServerEvictingPages int64
// WorkerThreadEvictingPages int64
// InternalPagesEvicted int64
// ModifiedPagesEvicted int64
// UnmodifiedPagesEvicted int64
// // Replicated Opcounter fields
// InsertR, InsertRCnt int64
// QueryR, QueryRCnt int64
// UpdateR, UpdateRCnt int64
// DeleteR, DeleteRCnt int64
// GetMoreR, GetMoreRCnt int64
// CommandR, CommandRCnt int64
// ReplLag int64
// OplogStats *OplogStats
// Flushes, FlushesCnt int64
// FlushesTotalTime int64
// Mapped, Virtual, Resident, NonMapped int64
// Faults, FaultsCnt int64
// HighestLocked *LockStatus
// QueuedReaders, QueuedWriters int64
// ActiveReaders, ActiveWriters int64
// AvailableReaders, AvailableWriters int64
// TotalTicketsReaders, TotalTicketsWriters int64
// NetIn, NetInCnt int64
// NetOut, NetOutCnt int64
// NumConnections int64
// ReplSetName string
// NodeType string
// NodeState string
// NodeStateInt int64
// // Replicated Metrics fields
// ReplNetworkBytes int64
// ReplNetworkGetmoresNum int64
// ReplNetworkGetmoresTotalMillis int64
// ReplNetworkOps int64
// ReplBufferCount int64
// ReplBufferSizeBytes int64
// ReplApplyBatchesNum int64
// ReplApplyBatchesTotalMillis int64
// ReplApplyOps int64
// ReplExecutorPoolInProgressCount int64
// ReplExecutorQueuesNetworkInProgress int64
// ReplExecutorQueuesSleepers int64
// ReplExecutorUnsignaledEvents int64
// // Cluster fields
// JumboChunksCount int64
// // DB stats field
// DbStatsLines []DbStatLine
// // Col Stats field
// ColStatsLines []ColStatLine
// // Shard stats
// TotalInUse, TotalAvailable, TotalCreated, TotalRefreshing int64
// // Shard Hosts stats field
// ShardHostStatsLines map[string]ShardHostStatLine
// // TCMalloc stats field
// TCMallocCurrentAllocatedBytes int64
// TCMallocHeapSize int64
// TCMallocCentralCacheFreeBytes int64
// TCMallocCurrentTotalThreadCacheBytes int64
// TCMallocMaxTotalThreadCacheBytes int64
// TCMallocTotalFreeBytes int64
// TCMallocTransferCacheFreeBytes int64
// TCMallocThreadCacheFreeBytes int64
// TCMallocSpinLockTotalDelayNanos int64
// TCMallocPageheapFreeBytes int64
// TCMallocPageheapUnmappedBytes int64
// TCMallocPageheapComittedBytes int64
// TCMallocPageheapScavengeCount int64
// TCMallocPageheapCommitCount int64
// TCMallocPageheapTotalCommitBytes int64
// TCMallocPageheapDecommitCount int64
// TCMallocPageheapTotalDecommitBytes int64
// TCMallocPageheapReserveCount int64
// TCMallocPageheapTotalReserveBytes int64
// // Storage stats field
// StorageFreelistSearchBucketExhausted int64
// StorageFreelistSearchRequests int64
// StorageFreelistSearchScanned int64
// }
// below is an aligned struct of the above (192 pointer bytes instead of 1328)
// the above is maintained for the comments and organization of the members
// StatLine is a wrapper for all metrics reported by mongostat for monitored hosts.
type StatLine struct {
Time time.Time
LastPrinted time.Time
Error error
CollectionLocks *CollectionLockStatus
ShardHostStatsLines map[string]ShardHostStatLine
OplogStats *OplogStats
HighestLocked *LockStatus
Host string
NodeState string
NodeType string
ReplSetName string
Version string
Key string
StorageEngine string
ColStatsLines []ColStatLine
DbStatsLines []DbStatLine
DeletedD int64
AppThreadsPageReadTime int64
GetMoreCnt int64
Command int64
CommandCnt int64
Regular int64
Warning int64
Msg int64
User int64
Rollovers int64
WriteOpsCnt int64
WriteLatency int64
ReadOpsCnt int64
ReadLatency int64
CommandOpsCnt int64
CommandLatency int64
Passes int64
PassesCnt int64
DeletedDocuments int64
DeletedDocumentsCnt int64
TimedOutC int64
TimedOutCCnt int64
NoTimeoutC int64
NoTimeoutCCnt int64
PinnedC int64
PinnedCCnt int64
TotalC int64
TotalCCnt int64
DeleteCnt int64
InsertedD int64
ReturnedD int64
UpdatedD int64
AggregateCommandTotal int64
AggregateCommandFailed int64
CountCommandTotal int64
CountCommandFailed int64
DeleteCommandTotal int64
DeleteCommandFailed int64
DistinctCommandTotal int64
DistinctCommandFailed int64
FindCommandTotal int64
FindCommandFailed int64
FindAndModifyCommandTotal int64
QueryR int64
GetMoreCommandTotal int64
GetMoreCommandFailed int64
InsertCommandTotal int64
InsertCommandFailed int64
UpdateCommandTotal int64
UpdateCommandFailed int64
ScanAndOrderOp int64
WriteConflictsOp int64
TotalKeysScanned int64
TotalObjectsScanned int64
CurrentC int64
AvailableC int64
TotalCreatedC int64
UpdateR int64
CacheDirtyPercent float64
CacheUsedPercent float64
TrackedDirtyBytes int64
CurrentCachedBytes int64
MaxBytesConfigured int64
AppThreadsPageReadCount int64
QueryRCnt int64
AppThreadsPageWriteCount int64
BytesWrittenFrom int64
BytesReadInto int64
PagesEvictedByAppThread int64
PagesQueuedForEviction int64
PagesReadIntoCache int64
PagesWrittenFromCache int64
PagesRequestedFromCache int64
ServerEvictingPages int64
WorkerThreadEvictingPages int64
InternalPagesEvicted int64
ModifiedPagesEvicted int64
UnmodifiedPagesEvicted int64
InsertR int64
InsertRCnt int64
FindAndModifyCommandFailed int64
GetMore int64
Delete int64
UpdateRCnt int64
DeleteR int64
DeleteRCnt int64
GetMoreR int64
GetMoreRCnt int64
CommandR int64
CommandRCnt int64
ReplLag int64
UpdateCnt int64
Flushes int64
FlushesCnt int64
FlushesTotalTime int64
Mapped int64
Virtual int64
Resident int64
NonMapped int64
Faults int64
FaultsCnt int64
Update int64
QueuedReaders int64
QueuedWriters int64
ActiveReaders int64
ActiveWriters int64
AvailableReaders int64
AvailableWriters int64
TotalTicketsReaders int64
TotalTicketsWriters int64
NetIn int64
NetInCnt int64
NetOut int64
NetOutCnt int64
NumConnections int64
QueryCnt int64
Query int64
InsertCnt int64
NodeStateInt int64
ReplNetworkBytes int64
ReplNetworkGetmoresNum int64
ReplNetworkGetmoresTotalMillis int64
ReplNetworkOps int64
ReplBufferCount int64
ReplBufferSizeBytes int64
ReplApplyBatchesNum int64
ReplApplyBatchesTotalMillis int64
ReplApplyOps int64
ReplExecutorPoolInProgressCount int64
ReplExecutorQueuesNetworkInProgress int64
ReplExecutorQueuesSleepers int64
ReplExecutorUnsignaledEvents int64
JumboChunksCount int64
Insert int64
UptimeNanos int64
TotalInUse int64
TotalAvailable int64
TotalCreated int64
TotalRefreshing int64
StorageFreelistSearchScanned int64
TCMallocCurrentAllocatedBytes int64
TCMallocHeapSize int64
TCMallocCentralCacheFreeBytes int64
TCMallocCurrentTotalThreadCacheBytes int64
TCMallocMaxTotalThreadCacheBytes int64
TCMallocTotalFreeBytes int64
TCMallocTransferCacheFreeBytes int64
TCMallocThreadCacheFreeBytes int64
TCMallocSpinLockTotalDelayNanos int64
TCMallocPageheapFreeBytes int64
TCMallocPageheapUnmappedBytes int64
TCMallocPageheapComittedBytes int64
TCMallocPageheapScavengeCount int64
TCMallocPageheapCommitCount int64
TCMallocPageheapTotalCommitBytes int64
TCMallocPageheapDecommitCount int64
TCMallocPageheapTotalDecommitBytes int64
TCMallocPageheapReserveCount int64
TCMallocPageheapTotalReserveBytes int64
StorageFreelistSearchBucketExhausted int64
StorageFreelistSearchRequests int64
IsMongos bool
}
type DbStatLine struct {
Name string
Collections int64
Objects int64
AvgObjSize float64
DataSize int64
StorageSize int64
NumExtents int64
Indexes int64
IndexSize int64
Ok int64
}
type ColStatLine struct {
Name string
DbName string
Count int64
Size int64
AvgObjSize float64