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  }