稳定性报告(report)平台 -- 模板篇

介绍

后续我们称这个平台为srp平台。

后续的每一个模块,基本上会通过几个方面来介绍:

  1. 基础讲解
  2. 数据库设计
  3. 核心功能介绍
  4. 简单展示

基础讲解

模板篇,我会把模板和变量注册放在一起讲解,因为两个关联性比较大,所以一起讲解会比较容易点。
前面说到,我们的模板分成了三种类型:

模板类型 说明
基础模板 基础模板主要提供接入能力,比如我定义好了域名QPS统计的能力,那么你只需要提供你的域名,我就可以帮你完成统计动作
开放模板/周期模板 这类模板就相对自由,你可以自定义模板内容,变量,最终定义定时任务来定时的渲染该模板,然后选择发送等

基础模板

首先对于基础模板,换个概念理解就是平台已经约定了这个模板只会采集某一类型的数据,然后对于用户来讲,你只需要关注要不要采集即可。

举个例子:

1
2
我创建一个统计`QPS峰值`的模板,这个模板主要是统计每一个注册进来的域名过去1小时的峰值,而且是每小时统计一次。
那么对于用户来讲,我只需要增加注册即可,比如我有一个a域名,那么新增注册,告诉平台我这个域名希望加入统计。

png1

像这种模板还有很多,比如带宽、nat网关、负载均衡等等,都可以当成基础模板来使用,用户只需接入即可,不用配置更多。

开放模板/周期模板

其实当初定义了两种类型,最后发现没有实际上的差别,所以就放到一起讲吧。
这里我统称为自定义模板吧,字面意义上理解就是完全自定义,你可以定义你想要的报告的样子,比如下面:

png2

我这变用了一个markdown编辑器来做,目前我们都是通过markdown格式的数据来展示报告,你可以跟日常写markdown文档一样就行。
当你在某个位置想要用变量展示,那么定义一个变量名称,然后在下面添加就行,这个变量可以是图片变量、内置变量、模板变量。

变量注册

我们定义好开放模板之后,以及也增加好了里面的变量。现在就需要去注册变量,本质就是告诉平台我这个变量是什么意思,怎么获取到这个值。

数据库设计

首先对于模板表,我这边主要设计了以下几个字段:(唯一需要关注的就是Content字段,本身是markdown内容,所以设置成了TEXT类型)

1
2
3
4
5
6
7
8
9
10
11
12
// 模板表
type ReportTemplate struct {
BaseModel
TemplateId string `json:"template_id"` // 模板id
Name string `json:"name"` // 模板名称
Creater string `json:"creater"` // 创建人
Status string `json:"status"` // 模板状态 禁用,可用 enable disable
Type string `json:"type"` // 模板类型,基础模板(base_temp),开放模板(open_temp),周期模板(cron_temp)
Router string `json:"router" gorm:"default:null"` // 前端跳转路由
Content string `json:"content" gorm:"type:TEXT;default:null"` // markdown内容
VarList string `json:"var_list" gorm:"type:TEXT;default:null"` // 变量json串
}

其次是变量表:(变量参数是指请求url的时候带上什么参数,获取字段是指请求的结果中我用哪个字段的数据)

1
2
3
4
5
6
7
8
9
10
11
// 变量注册表
type ReportTemplateVar struct {
BaseModel
VarTempId string `json:"var_temp_id"` // 模板id
VarName string `json:"var_name"` // 变量名称
VarUrl string `json:"var_url" gorm:"type:TEXT"` // 变量获取地址
VarUrlField string `json:"var_url_field"` // 变量结果获取字段
VarType string `json:"var_type"` // 变量类型 ,内置变量、自定义变量、图片变量,inner_temp_var、custom_temp_var、img_temp_var
VarParams string `json:"var_params" gorm:"default:null"` // 变量参数
VarDesc string `json:"var_desc" gorm:"default:null"` // 变量备注,变量说明
}

如果是基础模板的话,我们其实还会涉及到一个接入信息,比如我有一个qps的基础模板,那么接入表里面就会涉及到,哪个域名,什么path等:

1
2
3
4
5
6
7
8
9
10
11
12
// qps峰值模板接入表,当前默认规定该模板下的接入,都是定时1小时获取数据一次,并存储数据。
type QPSPeakBaseTemp struct {
model.BaseModel
Aid string `json:"aid"` // 接入id
Name string `json:"name"` // 接入名称
Domain string `json:"domain"` // 接入域名
LoadBalanceBiz string `json:"load_balance_biz"` // lb分组
Path string `json:"path"` // 域名path
Group string `json:"group"` // 业务组
Creater string `json:"creater"` // 创建人
Status string `json:"status"` // 接入状态 禁用,可用 enable disable
}

核心功能介绍

其实对于模板来讲,没啥核心功能,就是简单的crud。

前端的markdown表单

使用的是一个开源的markdown插件,git地址:https://github.com/hinesboy/mavonEditor

注册完成之后,可以很容易就创建一个markdown编辑框:

1
<v-md-editor v-model="markdownContent" height="500px"></v-md-editor>

变量注册

因为涉及到几种变量类型,所以需要分别做处理。

内置变量:其实就是平台提供好的变量,我这边主要是定义了一些基础的,比如时间的获取、某个域名的QPS峰值获取、某个nat网关的峰值获取等
自定义变量:就是用户自己提供的url,返回值需要按照一定的格式来填写
图片变量:目前主要是对接grafana,每一个grafana的panel都可以生成一个图片地址

比如:
https://grafana.baidu.com/render/d-solo/BvV4IsPWk/nat?from=000000000&orgId=63&to=000000000&panelId=2&width=1000&height=500&tz=Asia%2FShanghai
我在注册的时候就会替换里面的fromto两个时间,因为时间需要可传参,结果就是这样:
https://grafana.baidu.com/render/d-solo/BvV4IsPWk/nat?from=SVAR_START_TIME&orgId=63&to=SVAR_END_TIME&panelId=2&width=1000&height=500&tz=Asia%2FShanghai

简单展示

模板列表:(不同的模板类型,他的操作按钮也是不一样的)
png3

变量列表:
png4