update socket protocol to get version string
Add a new method to get the version data from the fail2ban socket and return it to the metric collector. The version is now correctly exposed.
This commit is contained in:
parent
3f09e5af8c
commit
1a6cd7a1a9
@ -282,9 +282,14 @@ func (e *Exporter) collectJailStatsMetric(ch chan<- prometheus.Metric, s *socket
|
||||
}
|
||||
|
||||
func (e *Exporter) collectVersionMetric(ch chan<- prometheus.Metric, s *socket.Fail2BanSocket) {
|
||||
fail2banVersion := "9.9.9"
|
||||
var err error
|
||||
var fail2banVersion = ""
|
||||
if s != nil {
|
||||
// TODO: Get fail2ban server version
|
||||
fail2banVersion, err = s.GetServerVersion()
|
||||
if err != nil {
|
||||
e.socketRequestErrorCount++
|
||||
log.Printf("failed to get fail2ban server version: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
|
@ -118,6 +118,20 @@ func (s *Fail2BanSocket) GetJailStats(jail string) (JailStats, error) {
|
||||
return stats, newBadFormatError(statusCommand, response)
|
||||
}
|
||||
|
||||
func (s *Fail2BanSocket) GetServerVersion() (string, error) {
|
||||
response, err := s.sendCommand([]string{versionCommand})
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
if lvl1, ok := response.(*types.Tuple); ok {
|
||||
if versionStr, ok := lvl1.Get(1).(string); ok {
|
||||
return versionStr, nil
|
||||
}
|
||||
}
|
||||
return "", newBadFormatError(versionCommand, response)
|
||||
}
|
||||
|
||||
func newBadFormatError(command string, data interface{}) error {
|
||||
return fmt.Errorf("(%s) unexpected response format - cannot parse: %v", command, data)
|
||||
}
|
||||
|
@ -11,6 +11,7 @@ const (
|
||||
commandTerminator = "<F2B_END_COMMAND>"
|
||||
pingCommand = "ping"
|
||||
statusCommand = "status"
|
||||
versionCommand = "version"
|
||||
socketReadBufferSize = 1024
|
||||
)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user