Привет мир!
Это мой первый пост в этом блоге!
![](https://fadeev.page/content/images/2023/05/image.png)
Тут даже можно код вставлять :)
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
}
😲
Ничоси!
Конец
Вроде пока удобно и расширяемо 🤟