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

posted on 2022-03-20 21:46  荣锋亮  阅读(315)  评论(0编辑  收藏  举报

导航