lightdash 源码简单介绍
以下简单介绍下lightdash
lightdash 源码结构
代码基于yarn workspace 模式,对于数据库访问为了提升性能基于了odbc(当然也是有其他原因的,比如本来就不能很好使用js驱动的)
核心代码目录都在packages 中
backend // 后端接口项目,比较核心
common // 公共部分,包含了类型,openapi 接口定义
e2e // 端到端测试部分
frontend // 前端ui 部分
api 接口结构
主要入口,包含了模块的依赖
index.ts
apiV1Router (接口的入口,依赖的模块是不少的)
lightdash 项目适配处理
代码主要在packages/backend/src/projectAdapters
基本类(提供了对于项目操作的包装,以及接口定义)
参考gitlab 实现 (基于simple-git 进行git 操作)
dbt 集成处理
packages/backend/src/projectAdapters/dbtLocalProjectAdapter.ts
export class DbtLocalProjectAdapter extends DbtBaseProjectAdapter {
constructor({
warehouseClient,
projectDir,
profilesDir,
target,
profileName,
environment,
}: DbtLocalProjectAdapterArgs) {
const dbtClient = new DbtCliClient({
dbtProjectDirectory: projectDir,
dbtProfilesDirectory: profilesDir,
environment: environment || {},
profileName,
target,
});
super(dbtClient, warehouseClient);
}
}
DbtCliClient
实际上就是一个基于了cli 包装的dbt 操作(当然dbt 是支持rpc 的,lightdash 也包装了rpc 操作的包,从dbt 目前官方介绍,会有大的变动)
packages/backend/src/dbt/dbtCliClient.ts
说明
lightdash 的源码并不是很难,学习下还是比较有意义的,后续对于内部细节处理再好好研究下,同时webstorm 的依赖图是一个好东西,很方便值得使用
参考资料
https://github.com/lightdash/lightdash
https://www.npmjs.com/package/execa
https://www.npmjs.com/package/simple-git
https://github.com/sindresorhus/execa