一、代理产生的需求分析


    当有客户需要定制ai、bi产品的大屏、报警时,需要调用ai、bi等数据的api,但是直接调用ai、bi的api是不能够获取数据的,因为,调用接口的时候,需要通过验证才可以,否则调用接口就是返回的是401状态(未授权的状态),所以,就需要定制一款产品,可以直接调用代理所提供的api获取ai的数据。在代理产生之前都是通过定制ai产品,对外提供开放的api提供数据,这样的做法操作起来比较繁琐,而且效率较低,所以,我们就使用了代理的方式获取ai数据。


二、代理系统原理


    根据ai、bi等产品的特性,在每一次调用dv的api时,请求的url的请求头中都会携带一些登陆验证的信息,对接用户中心的产品和没有对接用户中心的产品,登陆认证的方式是不同。


    1、对接用户中心


        对接用户中心时,登陆时访问的接口为:/account/sessionId.do    请求方法:get


    在访问其他接口之前,都会先调用这个接口获取用户的登陆信息,然后,再调用其它接口之前,每次请求的url的头信息中都会携带登陆接口所返回的认证信息,这样就可以正常访问ai、bi等产品的其他接口了。


    2、无对接用户中心


        当是部署单独的产品时,登陆时访问的接口为:/tpm/account/login  请求方法:post


    剩下的具体的操作过程是和  对接用户中心  的步骤是一样的,区别是,两个登陆接口所返回的值是不同的。


    3、代理的优化处理


        具备了基本的核心功能,后续就需要有许多优化的处理,这个工作目前已知的需要优化的部分 完成情况为:


        3.1 请求参数的处理(已完成)


        3.2 常量字段处理(已完成)


        3.3 请求流程的简化(正在进行...)


        3.4 数据请求接口化(正在进行...)


        3.5 多线程请求数据功能的实现(需要对接Ai5.0)


        


三、代理的模块化分析


    1. 开发环境配置


    1.1 IDE及周边设置


software requirements: 

 

      JDK (Oracle Hotspot JDK version >= 1.8.0_45) 

 

      Intellij IDEA 

 

      Git 

 

      Maven (version >= 3.2.0) 

 

      lombok (version >= 0.11.8)


    1.2 代码风格


    MetaMx Java Code.xml (在idea中设置代码风格)


    2. 项目和代码说明


    2.1 项目结构



|----pivot-ai (ai代理模块)


|----pivot-bi (bi代理模块)


|----pivot-dm (data manager, 模型管理模块)


|----pivot-util (data util, 工具类集合)


|----pivot-install (安装包项目)


```


类似proxy-ai和proxy-bi模块可根据需求添加或删除


    技术栈


    目前我们使用 SpringBoot + MyBatis + MySQL


    2.2 代码提交规范与jira使用


       1. 请确保对源代码的每一行修改(包括配置)都有对应的jira issue;


       2. 提交修改时comment内容如下格式: `git commit -m "JIRA-NUM: your commit comment goes here"`;其中`JIRA-NUM`为对应的jira号;


       3. commit提交到远程代码仓库后,即时更新jira issue,添加注释;注释内容为:


    * **每一个**commit的gitlab链接地址,如` http://git.oneapm.me/tps/tps/commit/8be09dd228eccab1d81fa0baaae5c438928670a0`;


    * 如果建立了远程分支,请写明分支名称;


    * 请在注释中写明修改的内容;如有必要,尽量阐明bug原因或者新功能的内容或者修改对系统的重大影响等;


       4. 功能开发完成,或者bug修改结束,需要通知测试同事测试;


       5. 测试通过,在gitlab页面,创建pull request,并提交给相关同事审核,审核通过后由审核同事负责merge;


       6. 开发过程中请更新对应的jira状态;


       7. bug修改的分支名,以`fix/`作为前缀;新功能分支名以`feature/`作为前缀;定制分支名以`release/`作为前缀;


打包命令:


    mvn clean package


执行打包命令后,会在proxy-install/target路径下生成.tar.gz和.zip两个安装包


    3. 运行项目


       1. 解压medivh-proxy.tar.gz或medivh-proxy.zip包


       2. 执行根路径下的startup.sh脚本启动项目


       3. 向 http://localhost:7080/test和http://localhost:7090/test两个链接发送get请求可查看返回值



       4. 执行根路径下的shutdown.sh脚本终止项目