func (ir *IndexRegistry) GetOrRegisterPrivateDF(fs sigar.FileSystem) operating.MetricDF { ir.PrivateMutex.Lock() defer ir.PrivateMutex.Unlock() if fs.DirName == "/" { fs.DevName = "root" } else { fs.DevName = strings.Replace(strings.TrimPrefix(fs.DevName, "/dev/"), "/", "-", -1) } if metric := ir.PrivateDFRegistry.Get(fs.DevName); metric != nil { return metric.(operating.MetricDF) } label := func(tail string) string { return fmt.Sprintf("df-%s.df_complex-%s", fs.DevName, tail) } r, unusedr := ir.Registry, metrics.NewRegistry() i := operating.MetricDF{ DF: &operating.DF{ DevName: &operating.StandardMetricString{}, // unregistered DirName: &operating.StandardMetricString{}, // unregistered Free: metrics.NewRegisteredGaugeFloat64(label("free"), r), Reserved: metrics.NewRegisteredGaugeFloat64(label("reserved"), r), Total: metrics.NewRegisteredGauge(label("total"), unusedr), Used: metrics.NewRegisteredGaugeFloat64(label("used"), r), Avail: metrics.NewRegisteredGauge(label("avail"), unusedr), UsePercent: metrics.NewRegisteredGaugeFloat64(label("usepercent"), unusedr), Inodes: metrics.NewRegisteredGauge(label("inodes"), unusedr), Iused: metrics.NewRegisteredGauge(label("iused"), unusedr), Ifree: metrics.NewRegisteredGauge(label("ifree"), unusedr), IusePercent: metrics.NewRegisteredGaugeFloat64(label("iusepercent"), unusedr), }, } ir.PrivateDFRegistry.Register(fs.DevName, i) // error is ignored // errs when the type is not derived from (go-)metrics types return i }
func NewMetricLoad(r metrics.Registry) *MetricLoad { return &MetricLoad{ Short: metrics.NewRegisteredGaugeFloat64("load.shortterm", r), Mid: metrics.NewRegisteredGaugeFloat64("load.midterm", r), Long: metrics.NewRegisteredGaugeFloat64("load.longterm", r), } }
// Start calculating and reporting statistics on the repo and tiles. // // We presume the git.Update(true) is called somewhere else, usually this is done // in the trace/db.Builder, so the repo is always as good as the loaded tiles. func Start(nanoTileStore *db.Builder, git *gitinfo.GitInfo) { coverage := metrics.NewRegisteredGaugeFloat64("stats.tests.bench_runs_per_changelist", metrics.DefaultRegistry) skpLatency := metrics.NewRegisteredTimer("stats.skp.update_latency", metrics.DefaultRegistry) commits := metrics.NewRegisteredGauge("stats.commits.total", metrics.DefaultRegistry) go func() { for _ = range time.Tick(2 * time.Minute) { tile := nanoTileStore.GetTile() numCommits := tile.LastCommitIndex() + 1 numTraces := len(tile.Traces) total := 0 for _, tr := range tile.Traces { for i := 0; i < numCommits; i++ { if !tr.IsMissing(i) { total += 1 } } } cov := float64(total) / float64(numCommits*numTraces) glog.Info("Coverage: ", cov) coverage.Update(cov) last, err := git.LastSkpCommit() if err != nil { glog.Warning("Failed to read last SKP commit: %s", err) continue } skpLatency.Update(time.Since(last)) commits.Update(int64(git.NumCommits())) } }() }
func NewGaugePercent(name string, r metrics.Registry) *GaugePercent { return &GaugePercent{ Percent: metrics.NewRegisteredGaugeFloat64(name, r), Previous: metrics.NewRegisteredGauge(name+"-previous", metrics.NewRegistry()), } }