func (s *pageQueueType) RegisterMetrics(d *tricorder.DirectorySpec) ( err error) { var queueStats btreepq.PageQueueStats queueGroup := tricorder.NewGroup() queueGroup.RegisterUpdateFunc(func() time.Time { s.PageQueueStats(&queueStats) return time.Now() }) if err = d.RegisterMetricInGroup( "/highPriorityCount", &queueStats.HighPriorityCount, queueGroup, units.None, "Number of pages in high priority queue"); err != nil { return } if err = d.RegisterMetricInGroup( "/lowPriorityCount", &queueStats.LowPriorityCount, queueGroup, units.None, "Number of pages in low priority queue"); err != nil { return } if err = d.RegisterMetricInGroup( "/totalPages", queueStats.TotalCount, queueGroup, units.None, "Total number of pages."); err != nil { return } if err = d.RegisterMetricInGroup( "/nextLowPrioritySeqNo", &queueStats.NextLowPrioritySeqNo, queueGroup, units.None, "Next seq no in low priority queue, 0 if empty"); err != nil { return } if err = d.RegisterMetricInGroup( "/nextHighPrioritySeqNo", &queueStats.NextHighPrioritySeqNo, queueGroup, units.None, "Next seq no in high priority queue, 0 if empty"); err != nil { return } if err = d.RegisterMetricInGroup( "/endSeqNo", &queueStats.EndSeqNo, queueGroup, units.None, "All seq no smaller than this. Marks end of both queues."); err != nil { return } if err = d.RegisterMetricInGroup( "/highPriorityRatio", queueStats.HighPriorityRatio, queueGroup, units.None, "High priority page ratio"); err != nil { return } if err = d.RegisterMetric( "/expanding", s.IsExpanding, units.None, "Is page queue expanding."); err != nil { return } if err = d.RegisterMetric( "/maxValuesPerPage", &s.valueCountPerPage, units.None, "Maximum number ofvalues that can fit in a page."); err != nil { return } if err = d.RegisterMetric( "/inactiveThreshhold", &s.inactiveThreshhold, units.None, "The ratio of inactive pages needed before they are reclaimed first"); err != nil { return } if err = d.RegisterMetric( "/btreeDegree", &s.degree, units.None, "The degree of the btrees in the queue"); err != nil { return } return }
func (s *Store) registerMetrics(d *tricorder.DirectorySpec) (err error) { if err = s.supplier.RegisterMetrics(d); err != nil { return } // Allow this store instance to be GCed maxValuesPerPage := s.supplier.MaxValuesPerPage() metrics := s.metrics if err = d.RegisterMetric( "/pagesPerMetric", metrics.PagesPerMetricDist, units.None, "Number of pages used per metric"); err != nil { return } var primitiveMetrics storePrimitiveMetricsType storeGroup := tricorder.NewGroup() storeGroup.RegisterUpdateFunc(func() time.Time { metrics.Metrics(&primitiveMetrics) return time.Now() }) if err = d.RegisterMetricInGroup( "/pageUtilization", func() float64 { metricValueCount := primitiveMetrics.UniqueMetricValueCount pagesInUseCount := metrics.PagesPerMetricDist.Sum() metricCount := metrics.PagesPerMetricDist.Count() extraValueCount := float64(metricValueCount) - float64(metricCount) return extraValueCount / pagesInUseCount / float64(maxValuesPerPage) }, storeGroup, units.None, "Page utilization 0.0 - 1.0"); err != nil { return } if err = d.RegisterMetricInGroup( "/metricValueCount", &primitiveMetrics.UniqueMetricValueCount, storeGroup, units.None, "Number of unique metrics values"); err != nil { return } if err = d.RegisterMetricInGroup( "/timeSpan", primitiveMetrics.TimeSpan, storeGroup, units.Second, "Span of time in store"); err != nil { return } if err = d.RegisterMetricInGroup( "/valuePageCount", metrics.PagesPerMetricDist.Sum, storeGroup, units.None, "Number of pages used for values."); err != nil { return } if err = d.RegisterMetricInGroup( "/timestampPageCount", &primitiveMetrics.TimeStampPageCount, storeGroup, units.None, "Number of pages used for timestamps."); err != nil { return } if err = d.RegisterMetricInGroup( "/totalPagesInUseCount", func() int64 { return primitiveMetrics.TimeStampPageCount + int64(metrics.PagesPerMetricDist.Sum()) }, storeGroup, units.None, "Total number of pages used."); err != nil { return } return }