66 "errors"
77 "fmt"
88 "log/slog"
9- "sort"
109 "strings"
1110 "sync"
1211 "time"
@@ -56,75 +55,19 @@ func newSprinklerMonitor(app *App, token string) *sprinklerMonitor {
5655 }
5756}
5857
59- // updateOrgs updates the list of organizations to monitor.
58+ // updateOrgs sets the list of organizations to monitor.
6059func (sm * sprinklerMonitor ) updateOrgs (orgs []string ) {
6160 sm .mu .Lock ()
6261 defer sm .mu .Unlock ()
6362
64- // Sort both lists for comparison
65- sortedNew := make ([]string , len (orgs ))
66- copy (sortedNew , orgs )
67- sort .Strings (sortedNew )
68-
69- sortedOld := make ([]string , len (sm .orgs ))
70- copy (sortedOld , sm .orgs )
71- sort .Strings (sortedOld )
72-
73- // Check if orgs changed after sorting
74- if len (sortedNew ) == len (sortedOld ) {
75- same := true
76- for i := range sortedNew {
77- if sortedNew [i ] != sortedOld [i ] {
78- same = false
79- break
80- }
81- }
82- if same {
83- slog .Debug ("[SPRINKLER] Org list unchanged (same after sorting)" ,
84- "orgs" , sortedNew ,
85- "count" , len (sortedNew ))
86- return // No change
87- }
88- }
89-
90- // Find what changed
91- added := []string {}
92- removed := []string {}
93- oldMap := make (map [string ]bool )
94- for _ , org := range sm .orgs {
95- oldMap [org ] = true
96- }
97- newMap := make (map [string ]bool )
98- for _ , org := range orgs {
99- newMap [org ] = true
100- if ! oldMap [org ] {
101- added = append (added , org )
102- }
103- }
104- for _ , org := range sm .orgs {
105- if ! newMap [org ] {
106- removed = append (removed , org )
107- }
63+ if len (orgs ) == 0 {
64+ slog .Debug ("[SPRINKLER] No organizations provided" )
65+ return
10866 }
10967
110- slog .Info ("[SPRINKLER] Organization list changed" ,
111- "previous" , sm .orgs ,
112- "new" , orgs ,
113- "added" , added ,
114- "removed" , removed )
115-
68+ slog .Info ("[SPRINKLER] Setting organizations" , "orgs" , orgs , "count" , len (orgs ))
11669 sm .orgs = make ([]string , len (orgs ))
11770 copy (sm .orgs , orgs )
118-
119- // Restart if running
120- if sm .isRunning {
121- slog .Info ("[SPRINKLER] Restarting monitor with new org list" )
122- sm .stop ()
123- sm .ctx , sm .cancel = context .WithCancel (context .Background ())
124- if err := sm .start (); err != nil {
125- slog .Error ("[SPRINKLER] Failed to restart" , "error" , err )
126- }
127- }
12871}
12972
13073// start begins monitoring for PR events across all user orgs.
@@ -318,8 +261,7 @@ func (sm *sprinklerMonitor) handleEvent(event client.Event) {
318261func (sm * sprinklerMonitor ) processEvents () {
319262 defer func () {
320263 if r := recover (); r != nil {
321- slog .Error ("[SPRINKLER] Event processor panic" ,
322- "panic" , r )
264+ slog .Error ("[SPRINKLER] Event processor panic" , "panic" , r )
323265 }
324266 }()
325267
@@ -328,17 +270,7 @@ func (sm *sprinklerMonitor) processEvents() {
328270 case <- sm .ctx .Done ():
329271 return
330272 case prURL := <- sm .eventChan :
331- // Process each event with panic recovery
332- func () {
333- defer func () {
334- if r := recover (); r != nil {
335- slog .Error ("[SPRINKLER] Event processing panic" ,
336- "panic" , r ,
337- "url" , prURL )
338- }
339- }()
340- sm .checkAndNotify (prURL )
341- }()
273+ sm .checkAndNotify (prURL )
342274 }
343275 }
344276}
0 commit comments