Beispiel #1
0
	"log"

	"github.com/cloudfoundry-incubator/notifications/metrics"

	. "github.com/onsi/ginkgo"
	. "github.com/onsi/gomega"
)

var _ = Describe("Metric", func() {
	var packageLogger *log.Logger
	var buffer *bytes.Buffer

	BeforeEach(func() {
		buffer = bytes.NewBuffer([]byte{})
		packageLogger = metrics.DefaultLogger
		metrics.DefaultLogger = metrics.NewLogger(buffer)
	})

	AfterEach(func() {
		metrics.DefaultLogger = packageLogger
	})

	It("can log itself", func() {
		metric := metrics.NewMetric("counter", map[string]interface{}{
			"name": "test",
		})
		metric.Log()

		message, err := buffer.ReadString('\n')
		if err != nil {
			panic(err)
	. "github.com/onsi/gomega"
)

var _ = Describe("QueueGauge", func() {
	var (
		gauge  metrics.QueueGauge
		timer  chan time.Time
		queue  *mocks.Queue
		buffer *bytes.Buffer
	)

	BeforeEach(func() {
		buffer = bytes.NewBuffer([]byte{})
		queue = mocks.NewQueue()
		timer = make(chan time.Time, 10)
		gauge = metrics.NewQueueGauge(queue, metrics.NewLogger(buffer), timer)
	})

	It("reports the number of items on the queue as a metric", func() {
		go gauge.Run()

		Expect(buffer.String()).To(BeEmpty())

		timer <- time.Now()

		Eventually(func() []string {
			return strings.Split(buffer.String(), "\n")
		}).Should(Equal([]string{
			`[METRIC] {"kind":"gauge","payload":{"name":"notifications.queue.length","value":0}}`,
			`[METRIC] {"kind":"gauge","payload":{"name":"notifications.queue.retry","tags":{"count":"0"},"value":0}}`,
			`[METRIC] {"kind":"gauge","payload":{"name":"notifications.queue.retry","tags":{"count":"1"},"value":0}}`,