Skip to content

Commit eec8f93

Browse files
committed
refactor(sophos): Implement consistent time-based polling with ticker
1 parent 70c2de0 commit eec8f93

2 files changed

Lines changed: 27 additions & 24 deletions

File tree

sophos/main.go

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,23 +20,32 @@ func main() {
2020
panelServ := configuration.GetPanelServiceName()
2121
client := utmconf.NewUTMClient(intKey, "http://"+panelServ)
2222

23-
for {
23+
ticker := time.NewTicker(time.Second * delayCheck)
24+
defer ticker.Stop()
25+
26+
startTime := time.Now().Add(-600 * time.Second).UTC()
27+
28+
for range ticker.C {
2429
if err := utils.ConnectionChecker(configuration.CHECKCON); err != nil {
2530
utils.Logger.ErrorF("External connection failure detected: %v", err)
2631
}
2732

33+
endTime := startTime.Add(299 * time.Second).UTC()
34+
startTimeStr := startTime.Format(time.RFC3339)
35+
endTimeStr := endTime.Format(time.RFC3339)
36+
2837
moduleConfig, err := client.GetUTMConfig(enum.SOPHOS)
2938
if err != nil {
3039
if strings.Contains(err.Error(), "invalid character '<'") {
31-
time.Sleep(time.Second * delayCheck)
40+
startTime = endTime.Add(time.Second)
3241
continue
3342
}
3443
if (err.Error() != "") && (err.Error() != " ") {
3544
utils.Logger.ErrorF("error getting configuration of the SOPHOS module: %v", err)
3645
}
3746

3847
utils.Logger.Info("sync complete waiting %v seconds", delayCheck)
39-
time.Sleep(time.Second * delayCheck)
48+
startTime = endTime.Add(time.Second)
4049
continue
4150
}
4251

@@ -56,7 +65,7 @@ func main() {
5665
}
5766

5867
if !skip {
59-
processor.PullLogs(group)
68+
processor.PullLogs(group, startTimeStr, endTimeStr)
6069
}
6170

6271
wg.Done()
@@ -65,6 +74,7 @@ func main() {
6574

6675
wg.Wait()
6776
utils.Logger.Info("sync complete waiting %d seconds", delayCheck)
68-
time.Sleep(time.Second * delayCheck)
77+
78+
startTime = endTime.Add(time.Second)
6979
}
7080
}

sophos/processor/pull.go

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,37 +8,30 @@ import (
88
"github.com/utmstack/config-client-go/types"
99
)
1010

11-
const delayCheck = 300
12-
13-
var timeGroups = make(map[int]int)
1411
var nextKeys = make(map[int]string)
1512

16-
func PullLogs(group types.ModuleGroup) *logger.Error {
17-
utils.Logger.Info("starting log sync for : %s", group.GroupName)
18-
19-
epoch := int(time.Now().Unix())
13+
func PullLogs(group types.ModuleGroup, startTimeStr, endTimeStr string) *logger.Error {
14+
utils.Logger.Info("starting log sync for : %s from %s to %s", group.GroupName, startTimeStr, endTimeStr)
2015

21-
_, ok := timeGroups[group.ModuleID]
22-
if !ok {
23-
timeGroups[group.ModuleID] = epoch - delayCheck
16+
startTime, err := time.Parse(time.RFC3339, startTimeStr)
17+
if err != nil {
18+
return utils.Logger.ErrorF("error parsing start time: %v", err)
2419
}
2520

26-
defer func() {
27-
timeGroups[group.ModuleID] = epoch + 1
28-
}()
21+
startEpoch := int(startTime.Unix())
2922

3023
agent := getSophosCentralProcessor(group)
3124

32-
logs, newNextKey, err := agent.getLogs(timeGroups[group.ModuleID], nextKeys[group.ModuleID], group)
33-
if err != nil {
34-
return err
25+
logs, newNextKey, logErr := agent.getLogs(startEpoch, nextKeys[group.ModuleID], group)
26+
if logErr != nil {
27+
return logErr
3528
}
3629

3730
nextKeys[group.ModuleID] = newNextKey
3831

39-
err = SendToLogstash(logs)
40-
if err != nil {
41-
return err
32+
sendErr := SendToLogstash(logs)
33+
if sendErr != nil {
34+
return sendErr
4235
}
4336

4437
return nil

0 commit comments

Comments
 (0)