Initialize event handlers, if present
(ctx context.Context, dbcontext *db.DatabaseContext, config *DbConfig)
| 1559 | |
| 1560 | // Initialize event handlers, if present |
| 1561 | func (sc *ServerContext) initEventHandlers(ctx context.Context, dbcontext *db.DatabaseContext, config *DbConfig) (err error) { |
| 1562 | if config.EventHandlers == nil { |
| 1563 | return nil |
| 1564 | } |
| 1565 | // Load Webhook Filter Function. |
| 1566 | eventHandlersByType := map[db.EventType][]*EventConfig{ |
| 1567 | db.DocumentChange: config.EventHandlers.DocumentChanged, |
| 1568 | db.DBStateChange: config.EventHandlers.DBStateChanged, |
| 1569 | } |
| 1570 | |
| 1571 | for eventType, handlers := range eventHandlersByType { |
| 1572 | for _, conf := range handlers { |
| 1573 | if err := validateEventConfigOptions(eventType, conf); err != nil { |
| 1574 | return err |
| 1575 | } |
| 1576 | |
| 1577 | // Load external webhook filter function |
| 1578 | insecureSkipVerify := false |
| 1579 | if config.Unsupported != nil { |
| 1580 | insecureSkipVerify = config.Unsupported.RemoteConfigTlsSkipVerify |
| 1581 | } |
| 1582 | filter, err := loadJavaScript(ctx, conf.Filter, insecureSkipVerify) |
| 1583 | if err != nil { |
| 1584 | return &JavaScriptLoadError{ |
| 1585 | JSLoadType: WebhookFilter, |
| 1586 | Path: conf.Filter, |
| 1587 | Err: err, |
| 1588 | } |
| 1589 | } |
| 1590 | conf.Filter = filter |
| 1591 | if conf.Filter == "" { |
| 1592 | base.InfofCtx(ctx, base.KeyEvents, "No filter function defined for event handler %s - everything will be processed", eventType.String()) |
| 1593 | } |
| 1594 | } |
| 1595 | |
| 1596 | // Register event handlers |
| 1597 | if err = sc.processEventHandlersForEvent(ctx, handlers, eventType, dbcontext); err != nil { |
| 1598 | return err |
| 1599 | } |
| 1600 | } |
| 1601 | |
| 1602 | // WaitForProcess uses string, to support both omitempty and zero values |
| 1603 | customWaitTime := int64(-1) |
| 1604 | if config.EventHandlers.WaitForProcess != "" { |
| 1605 | customWaitTime, err = strconv.ParseInt(config.EventHandlers.WaitForProcess, 10, 0) |
| 1606 | if err != nil { |
| 1607 | customWaitTime = -1 |
| 1608 | base.WarnfCtx(ctx, "Error parsing wait_for_process from config, using default %s", err) |
| 1609 | } |
| 1610 | } |
| 1611 | dbcontext.EventMgr.Start(ctx, config.EventHandlers.MaxEventProc, int(customWaitTime)) |
| 1612 | |
| 1613 | return nil |
| 1614 | } |
| 1615 | |
| 1616 | // Adds a database to the ServerContext given its configuration. If an existing config is found |
| 1617 | // for the name, returns an error. |