46 lines
1.2 KiB
Go
46 lines
1.2 KiB
Go
|
package store
|
||
|
|
||
|
import (
|
||
|
"github.com/prometheus/client_golang/prometheus"
|
||
|
"github.uio.no/torjus/apiary/models"
|
||
|
)
|
||
|
|
||
|
type MetricsCollectingStore struct {
|
||
|
store LoginAttemptStore
|
||
|
attemptsCounter *prometheus.CounterVec
|
||
|
}
|
||
|
|
||
|
func NewMetricsCollectingStore(store LoginAttemptStore) *MetricsCollectingStore {
|
||
|
mcs := &MetricsCollectingStore{store: store}
|
||
|
|
||
|
mcs.attemptsCounter = prometheus.NewCounterVec(
|
||
|
prometheus.CounterOpts{
|
||
|
Name: "apiary_ssh_attempt_counter",
|
||
|
Help: "Total count of login attempts toward SSH",
|
||
|
ConstLabels: prometheus.Labels{"service": "honeypot_ssh"},
|
||
|
},
|
||
|
[]string{"CountryCode"},
|
||
|
)
|
||
|
prometheus.MustRegister(mcs.attemptsCounter)
|
||
|
|
||
|
return mcs
|
||
|
}
|
||
|
|
||
|
func (s *MetricsCollectingStore) AddAttempt(l *models.LoginAttempt) error {
|
||
|
err := s.store.AddAttempt(l)
|
||
|
s.attemptsCounter.WithLabelValues(l.Country).Inc()
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
func (s *MetricsCollectingStore) All() ([]models.LoginAttempt, error) {
|
||
|
return s.store.All()
|
||
|
}
|
||
|
|
||
|
func (s *MetricsCollectingStore) Stats(statType LoginStats, limit int) ([]StatsResult, error) {
|
||
|
return s.store.Stats(statType, limit)
|
||
|
}
|
||
|
|
||
|
func (s *MetricsCollectingStore) Query(query AttemptQuery) ([]models.LoginAttempt, error) {
|
||
|
return s.store.Query(query)
|
||
|
}
|