Files

59 lines
1.4 KiB
Go

package monitoring
import (
"time"
"github.com/rs/zerolog"
)
type LDAPMonitorWatcher struct {
syncTicker *time.Ticker
ldap LDAPServerInterface
monitor MonitorInterface
logger *zerolog.Logger
}
func (m *LDAPMonitorWatcher) sync() {
for {
select {
case tick := <-m.syncTicker.C:
m.logger.Debug().Time("value", tick).Msg("Tick")
m.storeMetrics()
}
}
}
func (m *LDAPMonitorWatcher) storeMetrics() {
stats := m.ldap.GetStats()
if err := m.monitor.SetLDAPMetric(map[string]string{"type": "conns"}, float64(stats.Conns)); err != nil {
m.logger.Error().Err(err).Msg("failed to set metric")
}
if err := m.monitor.SetLDAPMetric(map[string]string{"type": "binds"}, float64(stats.Binds)); err != nil {
m.logger.Error().Err(err).Msg("failed to set metric")
}
if err := m.monitor.SetLDAPMetric(map[string]string{"type": "unbinds"}, float64(stats.Unbinds)); err != nil {
m.logger.Error().Err(err).Msg("failed to set metric")
}
if err := m.monitor.SetLDAPMetric(map[string]string{"type": "searches"}, float64(stats.Searches)); err != nil {
m.logger.Error().Err(err).Msg("failed to set metric")
}
}
func NewLDAPMonitorWatcher(ldap LDAPServerInterface, monitor MonitorInterface, logger *zerolog.Logger) *LDAPMonitorWatcher {
m := new(LDAPMonitorWatcher)
m.syncTicker = time.NewTicker(15 * time.Second)
m.ldap = ldap
m.monitor = monitor
m.logger = logger
m.ldap.SetStats(true)
go m.sync()
return m
}