Exemple #1
0
// runTriggers executes the triggers for each
// monitored resource if it's state has changed
func (c *Catalog) runTriggers(r resource.Resource) error {
	c.status.Lock()
	defer c.status.Unlock()

	for subscribed, trigger := range r.SubscribedTo() {
		item := c.status.Items[subscribed]
		if !item.StateChanged {
			continue
		}

		c.config.Logger.Printf("%s running trigger, because %s has changed\n", r.ID(), subscribed)
		c.config.L.Push(trigger)
		if err := c.config.L.PCall(0, 0, nil); err != nil {
			c.config.Logger.Printf("%s trigger exited with an error: %s\n", r.ID(), err)
			return err
		}
	}

	return nil
}