59 lines
1.4 KiB
Go
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
|
|
}
|