github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/lib/triggers/merge.go (about) 1 package triggers 2 3 import ( 4 "sort" 5 ) 6 7 func (mt *MergeableTriggers) exportTriggers() *Triggers { 8 if len(mt.triggers) < 1 { 9 return nil 10 } 11 triggerList := make([]*Trigger, 0, len(mt.triggers)) 12 serviceNames := make([]string, 0, len(mt.triggers)) 13 for service := range mt.triggers { 14 serviceNames = append(serviceNames, service) 15 } 16 sort.Strings(serviceNames) 17 for _, service := range serviceNames { 18 trigger := mt.triggers[service] 19 matchLines := make([]string, 0, len(trigger.matchLines)) 20 for matchLine := range trigger.matchLines { 21 matchLines = append(matchLines, matchLine) 22 } 23 sort.Strings(matchLines) 24 triggerList = append(triggerList, &Trigger{ 25 MatchLines: matchLines, 26 Service: service, 27 DoReboot: trigger.doReboot, 28 HighImpact: trigger.highImpact, 29 }) 30 } 31 triggers := New() 32 triggers.Triggers = triggerList 33 return triggers 34 } 35 36 func (mt *MergeableTriggers) merge(triggers *Triggers) { 37 if triggers == nil || len(triggers.Triggers) < 1 { 38 return 39 } 40 if mt.triggers == nil { 41 mt.triggers = make(map[string]*mergeableTrigger, len(triggers.Triggers)) 42 } 43 for _, trigger := range triggers.Triggers { 44 trig := mt.triggers[trigger.Service] 45 if trig == nil { 46 trig = new(mergeableTrigger) 47 trig.matchLines = make(map[string]struct{}) 48 mt.triggers[trigger.Service] = trig 49 } 50 for _, matchLine := range trigger.MatchLines { 51 trig.matchLines[matchLine] = struct{}{} 52 } 53 if trigger.DoReboot { 54 trig.doReboot = true 55 } 56 if trigger.HighImpact { 57 trig.highImpact = true 58 } 59 } 60 }