master
go 57 lines 988 Bytes
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package openldap
4
5 import (
6 "context"
7
8 "github.com/go-ldap/ldap/v3"
9 )
10
11 func (c *Collector) collect() (map[string]int64, error) {
12 if c.conn == nil {
13 conn, err := c.establishConn()
14 if err != nil {
15 return nil, err
16 }
17 c.conn = conn
18 }
19
20 mx := make(map[string]int64)
21
22 if err := c.collectMonitorCounters(mx); err != nil {
23 c.Cleanup(context.Background())
24 return nil, err
25 }
26 if err := c.collectOperations(mx); err != nil {
27 c.Cleanup(context.Background())
28 return nil, err
29 }
30
31 return mx, nil
32 }
33
34 func (c *Collector) doSearchRequest(req *ldap.SearchRequest, fn func(*ldap.Entry)) error {
35 resp, err := c.conn.search(req)
36 if err != nil {
37 return err
38 }
39
40 for _, entry := range resp.Entries {
41 if len(entry.Attributes) != 0 {
42 fn(entry)
43 }
44 }
45
46 return nil
47 }
48
49 func (c *Collector) establishConn() (ldapConn, error) {
50 conn := c.newConn(c.Config)
51
52 if err := conn.connect(); err != nil {
53 return nil, err
54 }
55
56 return conn, nil
57 }