github.com/Cloud-Foundations/Dominator@v0.3.4/lib/triggers/api.go (about) 1 package triggers 2 3 import ( 4 "io" 5 "regexp" 6 ) 7 8 type MergeableTriggers struct { 9 triggers map[string]*mergeableTrigger // Key: service name. 10 } 11 12 type mergeableTrigger struct { 13 matchLines map[string]struct{} 14 doReboot bool 15 highImpact bool 16 } 17 18 type Trigger struct { 19 MatchLines []string 20 matchRegexes []*regexp.Regexp 21 Service string 22 DoReboot bool `json:",omitempty"` 23 HighImpact bool `json:",omitempty"` 24 } 25 26 func (trigger *Trigger) RegisterStrings(registerFunc func(string)) { 27 trigger.registerStrings(registerFunc) 28 } 29 30 func (trigger *Trigger) ReplaceStrings(replaceFunc func(string) string) { 31 trigger.replaceStrings(replaceFunc) 32 } 33 34 type Triggers struct { 35 Triggers []*Trigger 36 compiled bool 37 matchedTriggers map[*Trigger]struct{} 38 unmatchedTriggers map[*Trigger]struct{} 39 } 40 41 func Decode(jsonData []byte) (*Triggers, error) { 42 return decode(jsonData) 43 } 44 45 func Load(filename string) (*Triggers, error) { 46 return load(filename) 47 } 48 49 func Read(reader io.Reader) (*Triggers, error) { 50 return read(reader) 51 } 52 53 func New() *Triggers { 54 return newTriggers() 55 } 56 57 func (triggers *Triggers) Len() int { 58 return len(triggers.Triggers) 59 } 60 61 func (triggers *Triggers) Less(left, right int) bool { 62 return triggers.Triggers[left].Service < triggers.Triggers[right].Service 63 } 64 65 func (triggers *Triggers) RegisterStrings(registerFunc func(string)) { 66 triggers.registerStrings(registerFunc) 67 } 68 69 func (triggers *Triggers) ReplaceStrings(replaceFunc func(string) string) { 70 triggers.replaceStrings(replaceFunc) 71 } 72 73 func (triggers *Triggers) Swap(left, right int) { 74 triggers.Triggers[left], triggers.Triggers[right] = 75 triggers.Triggers[right], triggers.Triggers[left] 76 } 77 78 func (mt *MergeableTriggers) ExportTriggers() *Triggers { 79 return mt.exportTriggers() 80 } 81 82 func (mt *MergeableTriggers) Merge(triggers *Triggers) { 83 mt.merge(triggers) 84 } 85 86 func (triggers *Triggers) Match(line string) { 87 triggers.match(line) 88 } 89 90 func (triggers *Triggers) GetMatchedTriggers() []*Trigger { 91 return triggers.getMatchedTriggers() 92 } 93 94 func (triggers *Triggers) GetMatchStatistics() (nMatched, nUnmatched uint) { 95 return triggers.getMatchStatistics() 96 }