Привет мир!

Привет мир!
Photo by Clay Banks / Unsplash

Это мой первый пост в этом блоге!

Круто! Тут можно вставить изображение!

Тут даже можно код вставлять :)

package metrics

import (
	"log"
	"sync"

	"github.com/jtaczanowski/go-graphite-client"
)

type Service interface {
	Increment(metricName string)
	Decrement(metricName string)
	Count(metricName string, i float64)
	Gauge(metricName string, i float64)
	Flush() error
}

type service struct {
	c     *graphite.Client
	m     map[string]float64
	mutex *sync.Mutex
}

func New(c *graphite.Client) Service {
	mutex := sync.Mutex{}
	return &service{c: c, m: make(map[string]float64), mutex: &mutex}
}

func (s *service) Increment(metricName string) {
	s.Count(metricName, 1)
}

func (s *service) Decrement(metricName string) {
	s.Count(metricName, -1)
}

func (s *service) Count(metricName string, i float64) {
	s.mutex.Lock()
	s.m[metricName] += i
	s.mutex.Unlock()
}

func (s *service) Gauge(metricName string, i float64) {
	s.mutex.Lock()
	s.m[metricName] = i
	s.mutex.Unlock()
}

func (s *service) Flush() error {
	s.mutex.Lock()
	if len(s.m) == 0 {
		return nil
	}
	if err := s.c.SendData(s.m); err != nil {
		log.Println(err)
		return err
	}
	s.m = map[string]float64{}
	s.mutex.Unlock()

	return nil
}
service.go
😲
Ничоси!

Конец

Вроде пока удобно и расширяемо 🤟

Egor Fadeev

Egor Fadeev

Обычно код пишу и в свободное время изучаю темы, связанные с программированием: от DevOps до умного дома
Russia