5
5
"errors"
6
6
"fmt"
7
7
"slices"
8
+ "sync"
8
9
"time"
9
10
10
11
"github.com/fleetdm/fleet/v4/ee/server/calendar"
@@ -14,7 +15,6 @@ import (
14
15
"github.com/go-kit/log"
15
16
kitlog "github.com/go-kit/log"
16
17
"github.com/go-kit/log/level"
17
- "golang.org/x/sync/errgroup"
18
18
)
19
19
20
20
func newCalendarSchedule (
@@ -162,16 +162,18 @@ func cronCalendarEventsForTeam(
162
162
// We execute this first to remove any calendar events for a user that is now passing
163
163
// policies on one of its hosts, and possibly create a new calendar event if they have
164
164
// another failing host on the same team.
165
- if err := removeCalendarEventsFromPassingHosts (ctx , ds , calendarConfig , passingHosts , logger ); err != nil {
166
- level .Info (logger ).Log ("msg" , "removing calendar events from passing hosts" , "err" , err )
167
- }
165
+ start := time .Now ()
166
+ removeCalendarEventsFromPassingHosts (ctx , ds , calendarConfig , passingHosts , logger )
167
+ level .Debug (logger ).Log (
168
+ "msg" , "passing_hosts" , "took" , time .Since (start ),
169
+ )
168
170
169
171
// Process hosts that are failing calendar policies.
170
- if err := processCalendarFailingHosts (
171
- ctx , ds , calendarConfig , orgName , failingHosts , logger ,
172
- ); err != nil {
173
- level . Info ( logger ). Log ( "msg" , "processing failing hosts " , "err " , err )
174
- }
172
+ start = time . Now ()
173
+ processCalendarFailingHosts ( ctx , ds , calendarConfig , orgName , failingHosts , logger )
174
+ level . Debug ( logger ). Log (
175
+ "msg" , "failing_hosts " , "took " , time . Since ( start ),
176
+ )
175
177
176
178
// At last we want to log the hosts that are failing and don't have an associated email.
177
179
logHostsWithoutAssociatedEmail (
@@ -190,15 +192,18 @@ func processCalendarFailingHosts(
190
192
orgName string ,
191
193
hosts []fleet.HostPolicyMembershipData ,
192
194
logger kitlog.Logger ,
193
- ) error {
195
+ ) {
194
196
hosts = filterHostsWithSameEmail (hosts )
195
197
196
198
const consumers = 20
197
199
hostsCh := make (chan fleet.HostPolicyMembershipData )
198
- g , ctx := errgroup . WithContext ( ctx )
200
+ var wg sync. WaitGroup
199
201
200
202
for i := 0 ; i < consumers ; i ++ {
201
- g .Go (func () error {
203
+ wg .Add (+ 1 )
204
+ go func () {
205
+ defer wg .Done ()
206
+
202
207
for host := range hostsCh {
203
208
logger := log .With (logger , "host_id" , host .HostID )
204
209
@@ -230,7 +235,8 @@ func processCalendarFailingHosts(
230
235
231
236
userCalendar := createUserCalendarFromConfig (ctx , calendarConfig , logger )
232
237
if err := userCalendar .Configure (host .Email ); err != nil {
233
- return fmt .Errorf ("configure user calendar: %w" , err )
238
+ level .Error (logger ).Log ("msg" , "configure user calendar" , "err" , err )
239
+ continue // continue with next host
234
240
}
235
241
236
242
switch {
@@ -249,19 +255,19 @@ func processCalendarFailingHosts(
249
255
continue // continue with next host
250
256
}
251
257
default :
252
- return fmt .Errorf ("get calendar event: %w" , err )
258
+ level .Error (logger ).Log ("msg" , "get calendar event from db" , "err" , err )
259
+ continue // continue with next host
253
260
}
254
261
}
255
- return nil
256
- })
262
+ }()
257
263
}
258
264
259
265
for _ , host := range hosts {
260
266
hostsCh <- host
261
267
}
262
268
close (hostsCh )
263
269
264
- return g .Wait ()
270
+ wg .Wait ()
265
271
}
266
272
267
273
func filterHostsWithSameEmail (hosts []fleet.HostPolicyMembershipData ) []fleet.HostPolicyMembershipData {
@@ -472,7 +478,7 @@ func removeCalendarEventsFromPassingHosts(
472
478
calendarConfig * fleet.GoogleCalendarIntegration ,
473
479
hosts []fleet.HostPolicyMembershipData ,
474
480
logger kitlog.Logger ,
475
- ) error {
481
+ ) {
476
482
hostIDsByEmail := make (map [string ][]uint )
477
483
for _ , host := range hosts {
478
484
hostIDsByEmail [host .Email ] = append (hostIDsByEmail [host .Email ], host .HostID )
@@ -491,10 +497,13 @@ func removeCalendarEventsFromPassingHosts(
491
497
492
498
const consumers = 20
493
499
emailsCh := make (chan emailWithHosts )
494
- g , ctx := errgroup . WithContext ( ctx )
500
+ var wg sync. WaitGroup
495
501
496
502
for i := 0 ; i < consumers ; i ++ {
497
- g .Go (func () error {
503
+ wg .Add (+ 1 )
504
+ go func () {
505
+ defer wg .Done ()
506
+
498
507
for email := range emailsCh {
499
508
500
509
hostCalendarEvent , calendarEvent , err := ds .GetHostCalendarEventByEmail (ctx , email .email )
@@ -507,23 +516,24 @@ func removeCalendarEventsFromPassingHosts(
507
516
case fleet .IsNotFound (err ):
508
517
continue
509
518
default :
510
- return fmt .Errorf ("get calendar event from DB: %w" , err )
519
+ level .Error (logger ).Log ("msg" , "get calendar event from DB" , "err" , err )
520
+ continue
511
521
}
512
522
userCalendar := createUserCalendarFromConfig (ctx , calendarConfig , logger )
513
523
if err := deleteCalendarEvent (ctx , ds , userCalendar , calendarEvent ); err != nil {
514
- return fmt .Errorf ("delete user calendar event: %w" , err )
524
+ level .Error (logger ).Log ("msg" , "delete user calendar event" , "err" , err )
525
+ continue
515
526
}
516
527
}
517
- return nil
518
- })
528
+ }()
519
529
}
520
530
521
531
for _ , emailWithHostIDs := range emails {
522
532
emailsCh <- emailWithHostIDs
523
533
}
524
534
close (emailsCh )
525
535
526
- return g .Wait ()
536
+ wg .Wait ()
527
537
}
528
538
529
539
func logHostsWithoutAssociatedEmail (
0 commit comments