记录搭建自己应用中心
- 应用架构
- 主应用-管理中心
- 系统文件系统
- 子应用
- 日志系统
- 日志系统前端
- 日志系统后端
- 用户系统
- 接入使用
- 暂未完成
- 研发管理
- 需求面板
- 消息推送
- 任务分配
- 应用发布
应用架构
一直想做个试试,这是一个简易版的,主要是整合下知识的,依赖包构建,微服务,微前端,等等。
目前是设计的这么多
主应用-管理中心
主应用实现应用的管理。新建,logo,名称等等。这里图片换了资源,没正常显示。创建应用后,会获取appId和登录令牌。作为其他插件/依赖包的使用。
目前只展示了用户,后面计划为,应用的分析,受欢迎页面分析,来源分析,版本信息,迭代周期,以及应用告警等等。
系统文件系统
文件系统使用的是minio ,调用minio的签署,获取带有时间的直传链接,前端直接上传。
子应用
所有的子应用由分支下的base分支基础上开发。base分支完成了,除具体业务以外的功能,如登录。所有子应用可单独登录,信息保持一致,因为统一id。
日志系统
日志系统 通过编写依赖包的形式,实现应用快速接入。
目前的web依赖包为@dmhsq_monitor/web
后面可能会搞nodejs的
主要依赖下面三个包
分别是核心库,处理库,工具库。
使用rollup构建
处理库是上报前的数据的一些处理,如
核心库主要是 处理上报,初始化监控,停止监控,消息队列处理,等等。
使用脚步快速的构建和发布
日志系统前端
构建一个微前端的子应用,处理当是微前端形式启动的时候,隐藏菜单栏和顶部栏目,显示的应用信息通过主应用的 共享过去。
if (window.__POWERED_BY_WUJIE__) {let app: any;window.__WUJIE_MOUNT = () => {app = createApp(App);app.use(ElementPlus);app.use(pinia);app.use(router);app.mount("#app");const globalStore = useGlobalStore();globalStore.$reset();nextTick(() => {if (window.$wujie) {const { token, userInfo, nowApp, appList } = window.$wujie.props;// xxxx 处理主应用共享的数据}});};window.__WUJIE_UNMOUNT = () => {app.unmount();};window.__WUJIE.mount();
}`
查看上报的数据
monitor.report({type: 'custom',name: 'userAction',data: { action: 'buttonClick', page: 'home' },});
日志系统后端
数据存在mongodb。由于需要任何地方都可以掉,所以对上报接口放通了跨域。
数据定义。
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document } from 'mongoose';export type AppLogDocument = AppLog & Document;@Schema()
export class AppLog {@Prop({ required: true })appId: string;@Prop({ default: Date.now })createdAt?: Date;@Prop({ default: Date.now })updatedAt?: Date;@Prop({ default: false })isRead?: boolean;@Prop({ required: true })type: string;@Prop({ required: true })name: string;@Prop({ required: true })day: string;@Prop({ required: true })timestamp: number;@Prop({ required: true })id: string;@Prop({ type: Object })data: any;@Prop({ type: Object })sdk: any;@Prop({ type: Object })device: any;@Prop({ required: true })ip: string;@Prop({ type: Object })browser;@Prop({ required: true })sessionId: string;
}export const AppLogSchema = SchemaFactory.createForClass(AppLog);AppLogSchema.index({ appId: 1, timestamp: 1, type: 1, day: 1, name: 1 });
用户系统
接入使用
快速的接入微信扫码登录。
使用依赖包,@dmhsq_app/vue
然后查询登录状态,做轮询。
扫码后会显示具体的应用的logo的名称,以及提示登录。
换个账号登录。用户的头像默认和应用头像一致。
这里的用户会新增。
暂未完成
后端服务已经完成了,注销,踢下线,暂时没想到别的管理,用户还是应该交由具体应用具体使用。后续用户管理的依赖包,会整合后端服务,比如修改用户信息,注销,踢人下线等等。
研发管理
需求面板
还没开始,主要是参考jira的设计,实现面板管理,拖动,消息推送。
消息推送
实现为调用应用设置的推送接口url。
任务分配
其实也是一个消息推送。
应用发布
结合面板,面板上线后,可选更新版本,大版本,迭代版本,补丁版本,来更新版本号。结合git来实现标签tag的创建,方便回滚,应用发布分,构建,发布两个步骤。工作流形式。