Appearance
Thrift 接口
示例
以下结构需遵照示例进行使用
JavaScript
在 JavaScript 中使用之前需引用 Thrift.js
以及对应 *.thrift
接口生成的 *.js
文件
例如:
html
<script src="/path/to/thrift.js"></script>
<script type="text/javascript" src="/path/to/common_types.js"></script>
<script type="text/javascript" src="/path/to/MetadataServer.js"></script>
<script>
let url = "http://host:port/metadata"
let transport = new Thrift.Transport(url)
let protocol = new Thrift.TJSONProtocol(transport)
let client = new MetadataServerClient(protocol)
// 初始化 BaseReq
let baseReq = new BaseReq({
TransID: "...",
Token: "..."
})
// 初始化请求参数
let getMetadataReq = new GetMetadataReq({
Req: baseReq,
Database: "...",
Table: "...",
UserID: "..."
})
// 调用接口回调函数
let callback = function (resp) {
console.log(resp.Resp)
console.log(resp.Database)
// ...
}
// 调用 GetMetadata 接口获取表结构
client.GetMetadata(getMetadataReq, callback)
</script>
base
所有请求需携带 Req
字段,类型为 BaseReq
所有响应需携带 Resp
字段,类型为 BaseResp
go
BaseReq {
// 事务 ID
TransID string
// Token
Token string
}
BaseResp {
// 事务 ID
TransId string
// 错误码
ErrCode int32
// 错误信息
ErrMsg string
}
登录 (Login)
请求
go
LoginReq {
Req BaseReq
// 登录账户名
Account string
// 登录账户密码
Password string
}
响应
go
LoginResp {
Resp BaseResp
// Token, 后续所有请求需将此字段放入 `Req` 中再请求
Token string
// 登录用户 ID
UserID string
}
登出 (Logout)
请求
go
LogoutReq {
Req BaseReq
// 登录用户 ID
UserID string
}
响应
go
LogoutResp {
Resp BaseResp
}
控制台查询 (ConsoleQuery)
请求
go
ConsoleQueryReq {
Req BaseReq
// 需要执行的 sql
Sql string
// 登录用户 ID
UserID string
}
响应
go
ConsoleQueryResp {
Resp BaseResp
// 返回的所有列信息
Columns []OPColumn
// json 序列化的行数据信息
Rows []ConsoleRow
// 数据字典,暂未使用
DataDictionary map[int16]map[int32]string
}
OPColumn {
// 编号,暂未使用
ID int32
// 字段名称
Name string
// 字段类型
Type int8
// 列序号
Index int16
Offset int16
Length int16
Mask int32
Expr string
IsSheet bool
Values map[int16]string
// 是否是主键
PK bool
DecimalDigits int16
// 是否不为 NULL
NotNull bool
// 默认值
DefaultValue string
// 备注
Remarks string
// 生成时间
GenerateTime int32
}
ConsoleRow {
// 行数据 json 串
Data string
}
添加角色 (AddRole)
请求
go
AddRoleReq {
Req BaseReq
// 登录用户 ID
UserID string
// 角色信息
Role RoleInfo
}
RoleInfo {
// 角色名称
Name string
// 角色描述
Desc string
}
响应
go
AddRoleResp {
Resp BaseResp
}
获取角色 (GetRole)
请求
go
GetRoleReq {
Req BaseReq
// 登录用户 ID
UserID string
// 角色名称列表
RoleNames []string
}
响应
go
GetRoleResp {
Resp BaseResp
// 角色信息
Roles []RoleInfo
}
删除角色 (RemoveRole)
请求
go
RemoveRoleReq {
Req BaseReq
// 登录用户 ID
UserID string
// 角色名称
RoleName string
}
响应
go
RemoveRoleResp {
Resp BaseResp
}
添加角色用户 (AddRoleUser)
请求
go
AddRoleUserReq {
Req BaseReq
// 登录用户 ID
UserID string
// 角色名称
RoleName string
// 用户名列表
Accounts []string
}
响应
go
AddRoleUserResp {
Resp BaseResp
}
获取角色用户 (GetRoleUser)
请求
go
GetRoleUserReq {
Req BaseReq
// 登录用户 ID
UserID string
// 角色名称
RoleName string
}
响应
go
GetRoleUserResp {
Resp BaseResp
// 角色名称
RoleName string
// 用户名列表
Accounts []string
}
获取用户角色 (GetUserRoles)
请求
go
GetUserRolesReq {
Req BaseReq
// 登录用户 ID
UserID string
// 需要查询的用户名
Account string
}
响应
go
GetUserRolesResp {
Resp BaseResp
// 用户名
UserName string
// 角色名
RoleNames []string
}
删除角色用户 (RemoveRoleUser)
请求
go
RemoveRoleUserReq {
Req BaseReq
// 登录用户 ID
UserID string
// 角色名
RoleName string
// 需要删除的用户名
Account string
}
响应
go
RemoveRoleUserResp {
Resp BaseResp
// 角色名
RoleName string
// 被删除的用户名
Account string
}
刷新角色权限 (RefreshRolePolicies)
请求
go
RefreshRolePoliciesReq {
Req BaseReq
// 登录用户 ID
UserID string
// 权限列表
Policies []RolePolicy
}
RolePolicy {
// 主体
Subject string
// 对象
Object string
// 动作
Action string
// 影响
Effect string
// 对象类型
ObjectType PolicyObjectType
}
enum PolicyObjectType {
// 固定 Object
ObjectTypeFixed = 0
// 数据库
ObjectTypeDatabase = 1
// 表
ObjectTypeTable = 2
}
响应
go
RefreshRolePoliciesResp {
Resp BaseResp
}
批量添加角色权限 (BatchAddRolePolicy)
请求
go
BatchAddRolePolicyReq {
Req BaseReq
// 登录用户 ID
UserID string
// 权限列表
Policies []RolePolicy
}
响应
go
BatchAddRolePolicyResp {
Resp BaseResp
}
获取角色权限 (GetRolePolicy)
请求
go
GetRolePolicyReq {
Req BaseReq
// 登录用户 ID
UserID string
// 角色名
RoleName string
}
响应
go
GetRolePolicyResp {
Resp BaseResp
// 权限列表
Policies []RolePolicy
}
获取用户权限 (GetUserPolicy)
请求
go
GetUserPolicyReq {
Req BaseReq
// 登录用户 ID
UserID string
// 需要获取权限的用户名
Account string
}
响应
go
GetUserPolicyResp {
Resp BaseResp
// 用户名
Account string
// 权限列表
Policies []RolePolicy
}
删除角色权限
请求
go
RemoveRolePolicyReq {
Req BaseReq
// 登录用户 ID
UserID string
// 需要删除的权限
Policy RolePolicy
}
响应
go
RemoveRolePolicyResp {
Resp BaseResp
}
添加用户 (AddUser)
请求
go
AddUserInfoReq {
Req BaseReq
// 登录用户 ID
UserID string
// 用户信息
User UserInfo
}
UserInfo {
// 用户名
Account string
// 用户 ID
ID string
// 密码
Password string
// 描述
Desc string
// 备注
Remark string
}
响应
go
AddUserInfoResp {
Resp BaseResp
}
更新用户信息 (UpdateUser)
请求
go
UpdateUserInfoReq {
Req BaseReq
// 登录用户 ID
UserID string
// 需要更新的用户信息
User UserInfo
}
响应
go
UpdateUserInfoResp {
Resp BaseResp
}
获取用户信息 (GetUserInfo)
请求
go
GetUserInfoReq {
Req BaseReq
// 登录用户 ID
UserID string
// 需要获取信息的用户名列表
AccountList []string
}
响应
go
GetUserInfoResp {
Resp BaseResp
// 用户列表
UserList []UserCompositeInfo
}
UserCompositeInfo {
// 用户名
Account string
// 用户 ID
ID string
// 描述
Desc string
// 备注
Remark string
// 所属角色列表
Roles []string
}
删除用户 (RemoveUser)
请求
go
RemoveUserInfoReq {
Req BaseReq
// 登录用户 ID
UserID string
// 需要删除的用户名
Account string
}
响应
go
RemoveUserInfoResp {
Resp BaseResp
}
获取表列表 (GetTableList)
请求
go
GetTableListReq {
Req BaseReq
// 数据库名
Database string
// 登录用户 ID
UserID string
}
响应
go
GetTableListResp {
Resp BaseResp
// 数据库名
Database string
// 表名列表
Tables []string
}
创建表结构 (CreateMetaData)
请求
go
CreateMetaDataReq {
Req BaseReq
// 数据库
Database string
// 表名
Table string
// 列信息
Columns []OPColumn
// 时间列
MatchDateColumn string
// 主键列
ClassifyColumn string
// 其他选项
// 现支持 {"dataSpace": "size_and_unit"|size,"memorySpace":"size_and_unit"|size}
Options map[string]Option
// 约束
Constraints map[string][]string
// 登录用户 ID
UserID string
}
Option {
// 选项名称
Title string
// 选项值类型
OpType OP_TYPE
// 选项值
Val string
}
enum OP_TYPE {
//自定义类型。当前保留 0-15 用于 OPType 中使用
OPTypeNull = 0 //int8 类型 extend(0)
OPTypeBool = 1 //int8 类型 extend(1)
OPTypeInt8 = 2 //int8 类型 extend(2)
OPTypeInt16 = 3 //int16 类型 extend(3)
OPTypeInt32 = 4 //int32 类型 extend(4)
OPTypeInt64 = 5 //int64 类型 extend(5)
OPTypeFloat = 6 //float,extend(6)
OPTypeDouble = 7 //double,extend(7)
OPTypeDateTime = 8 // double extend(8)
OPTypeString = 9 //string,extend(9)
OPTypeBinary = 10 //binary,extend(10)
OPTypeObject = 11 //object,extend(11)
OPTypeMap = 12 //object,extend(12)
OPStructure = 13 //object,extend(13), 结构体类型
OPTypeArray = 14 //object,extend(14), OPTypeArray 即可代表定长数組 (array) 又可代表变长数组 (slice)
// OPTypeEnum = 15 //object,extend(15)
//自定义类型。当前保留 16-30 用于 一维结构/多维结构互转时的类型定义
OPBoolArray = 17 //value=17, int8 类型 extend(17)
OPInt8Array = 18 //value=18, int8 类型 extend(18)
OPInt16Array = 19 //value=19, int16 类型 extend(19)
OPInt32Array = 20 //value=20, int32 类型 extend(20)
OPInt64Array = 21 //value=21, int64 类型 extend(21)
OPFloatArray = 22 //value=22, float,extend(22)
OPDoubleArray = 23 //value=23, double,extend(23)
OPDateTimeArray = 24 //value=24, double, extend(24)
OPStringArray = 25 //value=25, binary,extend(25)
OPBinaryArray = 26 //value=26, object,extend(26)
OPTypeRow = 32
OPRowArray = 48 // row,extend(48)
}
响应
go
CreateMetaDataResp {
Resp BaseResp
// 数据库名称
Database string
// 表名
Table string
}
获取表结构 (GetMetadata)
请求
go
GetMetadataReq {
Req BaseReq
// 数据库名
Database string
// 表名
Table string
// 登录用户 ID
UserID string
}
响应
go
GetMetadataResp {
Resp BaseResp
// 数据库名
Database string
// 表名
Table string
// 列信息
Columns []OPColumn
// 时间列
MatchDateColumn string
// 主键列
ClassifyColumn string
// 可选项
// 现支持 {"dataSpace": "size_and_unit"|size,"memorySpace":"size_and_unit"|size}
Options map[string]Option
// 约束
Constraints map[string][]string
}
更新表结构 (UpdateMetadata)
请求
go
UpdateMetadataReq {
Req BaseReq
// 登录用户 ID
UserID string
// 数据库名
Database string
// 表名
Table string
// 列信息
Columns []OPColumn
// 可选项
// 现支持 {"dataSpace": "size_and_unit"|size,"memorySpace":"size_and_unit"|size}
Options map[string]Option
// 约束
Constraints map[string][]string
}
响应
go
UpdateMetadataResp {
Resp BaseResp
// 数据库名
Database string
// 表名
Table string
}
删除表结构 (DeleteMetaData)
请求
go
DeleteMetaDataReq {
Req BaseReq
// 数据库名
Database string
// 表名
Table string
// 登录用户 ID
UserID string
}
响应
go
DeleteMetaDataResp {
Resp BaseResp
// 数据库名
Database string
// 表名
Table string
}
监控获取历史数据 (GetCollectorData)
请求
go
GetCollectorDataReq {
Req BaseReq
// 收集器类型
Type CollectorType
// 指标名称,为下方 json 中的字段名称
Metrics []string
// 开始时间
From string
// 结束时间
To string
// 时间粒度,单位 s
Interval int64
}
// 如果开始或者结束时间为空,则返回当前信息
enum CollectorType {
// 系统信息
SystemInfo = 0
// CPU 信息
CPUInfo = 1
// 网络信息
NetInfo = 2
// 磁盘信息
DiskInfo = 3
// 网络连接信息
ConnectionsInfo = 4
// 内存信息
MemoryInfo = 5
// 容器信息,暂时未使用
ContainerInfo = 6
// ldb 信息
LDBInfo = 7
// ldb 的任务信息
ProcessInfo = 8
// ldb 运行时信息
RuntimeInfo = 9
}
响应
go
GetCollectorDataResp {
Resp BaseResp
Data []string // 为时间戳 + 指标项的 json 字符串
}
各指标收集的信息如下:
系统信息:
json
{
"host": "11eded85-69bc-4960-a65f-a16b5d08563c",
"name": "systemInfo",
"timestamp": "2023-11-27T11:27:30.141927306+08:00",
"load1": 0.27, // 1 分钟负载
"load5": 0.95, // 5 分钟 负载
"load15": 11.45, // 15 分钟负载
"host_name": "magus-PowerEdge-R7525", // 主机名称
"up_time": 6398286, // 启动时间(s)
"boot_time": 1694657365, // 开机时间
"procs": 1601, // 进程数
"os": "linux", // 系统
"platform": "ubuntu", // 平台
"platform_family": "debian", // 平台系列
"platform_version": "22.04", // 版本号
"kernel_version": "5.15.0-76-generic", // 内核版本
"kernel_arch": "x86_64", // 内核架构
"virtualization_system": "kvm", // 虚拟系统
"virtualization_role": "host" // 虚拟角色
}
CPU 信息:
json
{
"host": "11eded85-69bc-4960-a65f-a16b5d08563c",
"name": "cpu",
"timestamp": "2023-11-27T11:27:45.141815995+08:00",
"cpu": "cpu-total", // 总览 cpu
"user": 40945090.09, // 用户时间
"system": 15807944.49, // 系统时间
"idle": 537799662.61, // 闲置时间
"nice": 14486590.78, // 在较低优先级进程上的使用时间
"iowait": 3703024.62, // io 等待时间
"irq": 0, // 硬件中断时间
"softirq": 89733.04, // 软件中断时间
"steal": 0, // 被其他虚拟机占用的时间
"guest": 0, // 执行客户操作系统的时间
"guestNice": 0, // 执行客户操作系统中较低优先级进程的使用时间
"total": 612832045.63, // 总使用时间
"total_percent": [ // cpu 使用率
0.1639793985627126
],
"usage_user": 0.43953581546201936, // 用户使用率
"usage_system": 0.2462911298946998, // 系统使用率
"usage_idle": 98.85815709758168, // 闲置率
"usage_nice": 0.000050610799645269087, // 较低优先级进程使用率
"usage_iowait": 0.45549719638320696, // io 等待占比
"usage_softirq": 0.0004681498962768486 // 软件中断时间占比
}
网络信息:
json
{
"host": "11eded85-69bc-4960-a65f-a16b5d08563c",
"name": "net",
"timestamp": "2023-11-27T11:27:33.142659865+08:00",
"interfaceName": "eno8403", // 网卡名称
"byte_sent": 311985575690, // 发送字节数
"byte_recv": 1312353355, // 接收字节数
"packet_sent": 386431744, // 发送包数量
"packet_recv": 7409662 // 接收包数量
}
磁盘信息:
json
{
"host": "11eded85-69bc-4960-a65f-a16b5d08563c",
"name": "disk",
"timestamp": "2023-11-27T11:27:39.142987942+08:00",
"device": "/dev/sda2", // 设备名称
"mountpoint": "/21T", // 挂载点
"fs_type": "ext4", // 文件系统类型
"total": 23905826930688, // 总容量
"free": 6118566490112, // 空闲容量
"used": 16587122520064, // 已使用容量
"used_percent": 73.05271605116302, // 已使用占比
"inodes_total": 366247936, // inodes 总量
"inodes_free": 365974725, // 未使用的 inodes 数量
"inodes_used_percent": 0.07459728046085153, // 使用的 inodes 占比
"read_count": 187497617, // 读取次数
"merged_read_count": 4937045, // 读磁盘时发生合并操作的次数
"write_count": 968744831, // 写入次数
"merged_write_count": 1039325888, // 写磁盘时发生合并操作的次数
"read_bytes": 21792119350272, // 读取字节数
"write_bytes": 379609554526208, // 写入字节数
"read_time": 1825933904, // 读取时间
"write_time": 315943317, // 写入时间
"iops_in_progress": 0, // 当前正在进行的 I/O 操作的数量
"io_time": 1224634032, // 执行 I/O 操作花费的时间
"weighted_io": 2141877222, // 相对负载
"stats_name": "sda2",
"serial_number": "3670b5e80cba01c00b856b5eb04759857", // 磁盘序列号
"label": ""
}
网络连接信息:
json
{
"host": "",
"name": "net",
"timestamp": "",
"fd": 0, // 文件描述符
"family": 0, // 协议族
"type": 0, // 类型
"local_addr": "", // 本地地址
"remote_addr": "", // 远程地址
"status": "", // 状态
"uids": [], // 用户标识符
"pid": 0 // 进程编号
}
内存信息:
json
{
"host": "11eded85-69bc-4960-a65f-a16b5d08563c",
"name": "mem",
"timestamp": "2023-11-27T11:30:14.141702125+08:00",
"total": 270028476416, // 内存总量
"available": 223658266624, // 可用内存量
"used": 44468248576, // 已使用内存
"used_percent": 16.4679848459735, // 已使用内存占比
"free": 9047441408, // 空闲内存
"inactive": 197884284928, // 非活跃状态内存量
"buffers": 629497856, // 缓冲区
"cached": 215883288576, // 已缓存
"dirty": 458752, // 脏内存 (已被修改但未写回到磁盘)
"shared": 9687040, // 共享内存
"slab": 7147175936, // 表示用于管理内存分配和缓存的数据结构所占用的内存大小
"sreclaimable": 5620305920, // 可回收 Slab,表示可被回收的 Slab 内存大小
"sunreclaim": 1526870016, // 不可回收 Slab,表示不可被回收的 Slab 内存大小
"page_tables": 328978432, // 页面表,表示用于管理进程页表的内存大小
"commit_limit": 135014236160, // 提交限制,表示系统允许的最大内存提交量
"committed_as": 93984342016, // 已提交内存,表示已被应用程序提交的内存大小
"mapped": 444977152, // 映射内存,表示进程已映射的内存大小
"vmalloc_total": 35184372087808, // 虚拟内存总量,表示系统可用的虚拟内存总大小
"vmalloc_used": 355336192, // 已使用的虚拟内存大小
"huge_page_size": 2097152, // 巨大页面大小,表示系统中使用的巨大页面的大小
"swap_sin": 14518296576, // 交换区读入,表示从交换区读入的数据量
"swap_sout": 23080718336, // 交换区写出,表示写入到交换区的数据量
"swap_pg_in": 94261869580288, // 交换区页面读入,表示从交换区读入的页面数量
"swap_pg_out": 1530655109545984, // 交换区页面写出,表示写入到交换区的页面数量
"swap_pg_fault": 2370142102962176, // 交换区页面故障,表示发生页面故障的次数
"swap_pg_maj_fault": 26303188992 // 交换区页面主要故障,表示发生主要页面故障的次数
}
ldb 信息
json
{
"host": "",
"name": "ldb",
"timestamp": "",
"table_name": "...", // 表名
"total_size": 40, // 表数据量占用磁盘大小
"file_info": "...", // 文件信息
}
ldb 的任务信息
json
{
"host": "",
"name": "",
"timestamp": "",
"total": 5, // 总任务量
"Conn": 1, // 连接数
"Query": 1, // 查询任务数量
"Insert": 1, // 插入任务数量
"tasks": 1, // 系统内部任务(数据文件整理,aaf 转 archive 等)
"ThriftApi": 1 // Thrift 请求数量
}
运行时信息:
json
{
"host": "11eded85-69bc-4960-a65f-a16b5d08563c",
"name": "runtime",
"timestamp": "2023-11-27T11:30:36.141910115+08:00",
"num_cgo_call": 25601, // CGO 调用数量
"num_goroutine": 823, // Goroutine 数量
"heap_alloc": 18421130040, // 堆内存分配量
"total_alloc": 75526586808, // 总分配量,表示程序运行期间总共分配的内存大小
"sys": 30943616680, // 系统内存分配量,表示已向操作系统申请的内存大小
"mallocs": 484805878, // 内存分配次数,表示已执行的内存分配次数
"frees": 204534319, // 内存释放次数,表示已执行的内存释放次数
"heap_sys": 29839065088, // 堆内存系统分配量,表示已分配的堆内存系统分配量
"heap_idle": 10779934720, // 堆内存空闲量,表示当前未被使用的堆内存大小
"heap_in_use": 19059130368, // 堆内存使用量,表示当前正在使用的堆内存大小
"heap_released": 8745140224, // 堆内存释放量,表示已释放的堆内存大小
"heap_objects": 280271559, // 堆对象数量,表示当前堆中的对象数量
"stack_in_use": 7602176, // 栈内存使用量,表示当前正在使用的栈内存大小
"stack_sys": 7602176, // 栈内存系统分配量,表示已分配的栈内存系统分配量
"mspan_in_use": 355582584, // mspan(内存分配器中的管理结构)使用量,表示当前正在使用的 mspan 内存大小
"mspan_sys": 369381432, // mspan 系统分配量,表示已分配的 mspan 内存大小
"mcache_in_use": 115200, // mcache(内存分配器中的管理结构)使用量,表示当前正在使用的 mcache 内存大小
"mcachs_sys": 124800, // mcache 系统分配量,表示已分配的 mcache 内存大小
"buck_hash_sys": 1976998, // buckhash(哈希桶)系统分配量,表示已分配的 buckhash 内存大小
"gc_sys": 679346992, // GC 系统分配量,表示已分配的 GC 相关内存大小
"other_sys": 46119194, // 其他系统分配量,表示已分配的其他系统内存大小
"next_gc": 34878410288, // 下次 GC 内存大小,表示在触发下一次 GC 之前的内存大小
"last_gc": 1701055763775766800, // 上次 GC 时间戳,表示上一次 GC 的时间戳
"pause_total_ns": 23457580, // GC 暂停总耗时,表示程序运行期间 GC 暂停的总时间
"num_gc": 101, // GC 次数,表示程序运行期间执行的 GC 次数
"num_forced_gc": 0, // 强制执行 GC 次数,表示程序运行期间强制执行的 GC 次数
"gc_cpu_fraction": 0.0012116597907093926, // GC CPU 占用比例,表示 GC 占用 CPU 时间的比例
"enable_gc": true, // 是否启用 GC,表示是否启用垃圾回收机制
"debug_gc": false, // 是否开启 GC 调试模式,表示是否开启了 GC 调试模式
"num_fds": 0, // 文件描述符数量,表示当前打开的文件描述符数量
"cpu_time_stats_cpu": "cpu", // CPU 时间统计,表示 CPU 时间的统计信息
"cpu_time_stats_user": 339.72, // 用户态 CPU 时间,表示用户态 CPU 时间的累计值
"cpu_time_stats_system": 181.25, // 内核态 CPU 时间,表示内核态 CPU 时间的累计值
"io_counter_read_count": 8287084, // 读操作计数,表示读操作的次数
"io_counter_write_count": 23171, // 写操作计数,表示写操作的次数
"io_counter_read_bytes": 256583811072, // 读取的字节数,表示读取的字节数量
"io_counter_write_bytes": 147898368 // 写入的字节数,表示写入的字节数量
}
数据导出
请求
shell
GET /export?token=<token>&sql=<base64(sql)>&transId=<transId>
响应
file