MCPcopy Create free account
hub / github.com/couchbase/sync_gateway / initEventHandlers

Method initEventHandlers

rest/server_context.go:1561–1614  ·  view source on GitHub ↗

Initialize event handlers, if present

(ctx context.Context, dbcontext *db.DatabaseContext, config *DbConfig)

Source from the content-addressed store, hash-verified

1559
1560// Initialize event handlers, if present
1561func (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.

Callers 2

Calls 7

InfofCtxFunction · 0.92
WarnfCtxFunction · 0.92
loadJavaScriptFunction · 0.85
StringMethod · 0.65
StartMethod · 0.65

Tested by 1