| 
									
										
										
										
											2015-06-22 12:00:55 +03:00
										 |  |  | // +build !windows | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | package metrics | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"fmt" | 
					
						
							|  |  |  | 	"log/syslog" | 
					
						
							|  |  |  | 	"time" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Output each metric in the given registry to syslog periodically using | 
					
						
							|  |  |  | // the given syslogger. | 
					
						
							|  |  |  | func Syslog(r Registry, d time.Duration, w *syslog.Writer) { | 
					
						
							| 
									
										
										
										
											2018-02-23 10:56:08 +01:00
										 |  |  | 	for range time.Tick(d) { | 
					
						
							| 
									
										
										
										
											2015-06-22 12:00:55 +03:00
										 |  |  | 		r.Each(func(name string, i interface{}) { | 
					
						
							|  |  |  | 			switch metric := i.(type) { | 
					
						
							|  |  |  | 			case Counter: | 
					
						
							|  |  |  | 				w.Info(fmt.Sprintf("counter %s: count: %d", name, metric.Count())) | 
					
						
							|  |  |  | 			case Gauge: | 
					
						
							|  |  |  | 				w.Info(fmt.Sprintf("gauge %s: value: %d", name, metric.Value())) | 
					
						
							|  |  |  | 			case GaugeFloat64: | 
					
						
							|  |  |  | 				w.Info(fmt.Sprintf("gauge %s: value: %f", name, metric.Value())) | 
					
						
							|  |  |  | 			case Healthcheck: | 
					
						
							|  |  |  | 				metric.Check() | 
					
						
							|  |  |  | 				w.Info(fmt.Sprintf("healthcheck %s: error: %v", name, metric.Error())) | 
					
						
							|  |  |  | 			case Histogram: | 
					
						
							|  |  |  | 				h := metric.Snapshot() | 
					
						
							|  |  |  | 				ps := h.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999}) | 
					
						
							|  |  |  | 				w.Info(fmt.Sprintf( | 
					
						
							|  |  |  | 					"histogram %s: count: %d min: %d max: %d mean: %.2f stddev: %.2f median: %.2f 75%%: %.2f 95%%: %.2f 99%%: %.2f 99.9%%: %.2f", | 
					
						
							|  |  |  | 					name, | 
					
						
							|  |  |  | 					h.Count(), | 
					
						
							|  |  |  | 					h.Min(), | 
					
						
							|  |  |  | 					h.Max(), | 
					
						
							|  |  |  | 					h.Mean(), | 
					
						
							|  |  |  | 					h.StdDev(), | 
					
						
							|  |  |  | 					ps[0], | 
					
						
							|  |  |  | 					ps[1], | 
					
						
							|  |  |  | 					ps[2], | 
					
						
							|  |  |  | 					ps[3], | 
					
						
							|  |  |  | 					ps[4], | 
					
						
							|  |  |  | 				)) | 
					
						
							|  |  |  | 			case Meter: | 
					
						
							|  |  |  | 				m := metric.Snapshot() | 
					
						
							|  |  |  | 				w.Info(fmt.Sprintf( | 
					
						
							|  |  |  | 					"meter %s: count: %d 1-min: %.2f 5-min: %.2f 15-min: %.2f mean: %.2f", | 
					
						
							|  |  |  | 					name, | 
					
						
							|  |  |  | 					m.Count(), | 
					
						
							|  |  |  | 					m.Rate1(), | 
					
						
							|  |  |  | 					m.Rate5(), | 
					
						
							|  |  |  | 					m.Rate15(), | 
					
						
							|  |  |  | 					m.RateMean(), | 
					
						
							|  |  |  | 				)) | 
					
						
							|  |  |  | 			case Timer: | 
					
						
							|  |  |  | 				t := metric.Snapshot() | 
					
						
							|  |  |  | 				ps := t.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999}) | 
					
						
							|  |  |  | 				w.Info(fmt.Sprintf( | 
					
						
							|  |  |  | 					"timer %s: count: %d min: %d max: %d mean: %.2f stddev: %.2f median: %.2f 75%%: %.2f 95%%: %.2f 99%%: %.2f 99.9%%: %.2f 1-min: %.2f 5-min: %.2f 15-min: %.2f mean-rate: %.2f", | 
					
						
							|  |  |  | 					name, | 
					
						
							|  |  |  | 					t.Count(), | 
					
						
							|  |  |  | 					t.Min(), | 
					
						
							|  |  |  | 					t.Max(), | 
					
						
							|  |  |  | 					t.Mean(), | 
					
						
							|  |  |  | 					t.StdDev(), | 
					
						
							|  |  |  | 					ps[0], | 
					
						
							|  |  |  | 					ps[1], | 
					
						
							|  |  |  | 					ps[2], | 
					
						
							|  |  |  | 					ps[3], | 
					
						
							|  |  |  | 					ps[4], | 
					
						
							|  |  |  | 					t.Rate1(), | 
					
						
							|  |  |  | 					t.Rate5(), | 
					
						
							|  |  |  | 					t.Rate15(), | 
					
						
							|  |  |  | 					t.RateMean(), | 
					
						
							|  |  |  | 				)) | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } |