mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-08-18 12:54:08 +08:00
- 接入任务持久化、生命周期、调度运行与检查点管理 - 提供 ID 作用域元数据、能力解析、预检和生产审批接口 - 串联水位与 MongoDB CDC 执行、错误行隔离及安全重放
51 lines
1.5 KiB
Go
51 lines
1.5 KiB
Go
package app
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"strings"
|
|
"time"
|
|
|
|
"GoNavi-Wails/internal/connection"
|
|
"GoNavi-Wails/internal/synccdc"
|
|
)
|
|
|
|
const dataSyncCDCProbeTimeout = 15 * time.Second
|
|
|
|
func (a *App) dataSyncCDCAdapters() *synccdc.Registry {
|
|
if a != nil && a.dataSyncCDCRegistry != nil {
|
|
return a.dataSyncCDCRegistry
|
|
}
|
|
return synccdc.NewRegistry()
|
|
}
|
|
|
|
func (a *App) probeDataSyncCDC(config connection.ConnectionConfig, adapterName string) (synccdc.Capability, error) {
|
|
adapterName = strings.TrimSpace(adapterName)
|
|
if adapterName == "" {
|
|
return synccdc.Capability{}, errors.New("CDC adapter is required")
|
|
}
|
|
adapter, err := a.dataSyncCDCAdapters().Get(adapterName)
|
|
if err != nil {
|
|
return synccdc.Capability{}, err
|
|
}
|
|
ctx, cancel := context.WithTimeout(context.Background(), dataSyncCDCProbeTimeout)
|
|
defer cancel()
|
|
return adapter.Probe(ctx, config)
|
|
}
|
|
|
|
func (a *App) DataSyncCDCAdapterList() connection.QueryResult {
|
|
return connection.QueryResult{Success: true, Data: a.dataSyncCDCAdapters().Names()}
|
|
}
|
|
|
|
func (a *App) DataSyncCDCProbe(connectionID, database, schema, adapterName string) connection.QueryResult {
|
|
endpoint, err := a.resolveDataSyncJobEndpoint(connectionID, database, schema)
|
|
if err != nil {
|
|
return connection.QueryResult{Success: false, Message: err.Error()}
|
|
}
|
|
capability, err := a.probeDataSyncCDC(normalizeMetadataRunConfig(endpoint.Config, endpoint.Database), adapterName)
|
|
if err != nil {
|
|
return connection.QueryResult{Success: false, Message: err.Error()}
|
|
}
|
|
return connection.QueryResult{Success: true, Data: capability}
|
|
}
|