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  }