// Print information retrieved from an htraced server via /server/info func printServerStats(hcl *htrace.Client) int { stats, err := hcl.GetServerStats() if err != nil { fmt.Println(err.Error()) return EXIT_FAILURE } w := new(tabwriter.Writer) w.Init(os.Stdout, 0, 8, 0, '\t', 0) fmt.Fprintf(w, "HTRACED SERVER STATS\n") fmt.Fprintf(w, "Datastore Start\t%s\n", common.UnixMsToTime(stats.LastStartMs).Format(time.RFC3339)) fmt.Fprintf(w, "Server Time\t%s\n", common.UnixMsToTime(stats.CurMs).Format(time.RFC3339)) fmt.Fprintf(w, "Spans reaped\t%d\n", stats.ReapedSpans) fmt.Fprintf(w, "Spans ingested\t%d\n", stats.IngestedSpans) fmt.Fprintf(w, "Spans written\t%d\n", stats.WrittenSpans) fmt.Fprintf(w, "Spans dropped by server\t%d\n", stats.ServerDroppedSpans) dur := time.Millisecond * time.Duration(stats.AverageWriteSpansLatencyMs) fmt.Fprintf(w, "Average WriteSpan Latency\t%s\n", dur.String()) dur = time.Millisecond * time.Duration(stats.MaxWriteSpansLatencyMs) fmt.Fprintf(w, "Maximum WriteSpan Latency\t%s\n", dur.String()) fmt.Fprintf(w, "Number of leveldb directories\t%d\n", len(stats.Dirs)) w.Flush() fmt.Println("") for i := range stats.Dirs { dir := stats.Dirs[i] fmt.Printf("==== %s ===\n", dir.Path) fmt.Printf("Approximate number of bytes: %d\n", dir.ApproximateBytes) stats := strings.Replace(dir.LevelDbStats, "\\n", "\n", -1) fmt.Printf("%s\n", stats) } w = new(tabwriter.Writer) w.Init(os.Stdout, 0, 8, 0, '\t', 0) fmt.Fprintf(w, "HOST SPAN METRICS\n") mtxMap := stats.HostSpanMetrics keys := make(sort.StringSlice, len(mtxMap)) i := 0 for k, _ := range mtxMap { keys[i] = k i++ } sort.Sort(keys) for k := range keys { mtx := mtxMap[keys[k]] fmt.Fprintf(w, "%s\twritten: %d\tserver dropped: %d\n", keys[k], mtx.Written, mtx.ServerDropped) } w.Flush() return EXIT_SUCCESS }
func (rpr *Reaper) handleHeartbeat() { // TODO: check dataStore fullness now := common.TimeToUnixMs(time.Now().UTC()) d, updated := func() (int64, bool) { rpr.lock.Lock() defer rpr.lock.Unlock() newReaperDate := now - rpr.spanExpiryMs if newReaperDate > rpr.reaperDate { rpr.reaperDate = newReaperDate return rpr.reaperDate, true } else { return rpr.reaperDate, false } }() if rpr.lg.DebugEnabled() { if updated { rpr.lg.Debugf("Updating UTC reaper date to %s.\n", common.UnixMsToTime(d).Format(time.RFC3339)) } else { rpr.lg.Debugf("Not updating previous reaperDate of %s.\n", common.UnixMsToTime(d).Format(time.RFC3339)) } } }