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