/**
* 本文件定义了服务的配置信息获取机制, 通过这个机制,运营系统能够自动化的生成服务文档和配置工作;
*
* 目前,我们只需要两种信息的获取
*
* 1. 服务的状态信息, 用于跟踪每一个数据服务当前的状态
* 2. 元数据信息,用于获取对服务的描述,方便一些工作的自动化
*
* 借助服务的状态信息,我们除了能够了解服务的当前健康状态,还可以获取一些其他信息,例如
* 1. 运行时间
* 2. 代码版本号
* 3. 元数据版本号
*
* 其中,元数据版本号十分重要,通过对元数据版本的记录,可以实现增量更新,只有当元数据版本号发生了变化,
* 才需要更新诸如服务文档和配置等信息
*
* 前置声明:
* 1. 每一个服务部署后都需要向管理端提供服务地址,例如
* http://ip:port/svc/firespot
* 服务地址是一个服务的入口地址,其所提供的接口(包含元数据接口)都是以此为前缀
*/
/**
* 服务状态模型定义
*
* 状态接口
*
* GET http://ip:port/svc/firespot/_status
*
* @Remark 可以根据需要扩展状态数据内容
*/
export type ServiceStatus = {
/**
* 服务运行时间, 单位毫秒
*/
uptime: number;
/**
* 代码版本号
*/
codeVersion: number;
/**
* 元数据版本号
*/
metaVersion: number;
}
/**
* 服务元数据模型定义
*
* 元数据接口
*
* GET http://ip:port/svc/firespot/_meta
*/
export type ServiceDescriptor = {
/**
* 服务的名称
*/
name: string;
/**
* 服务的基本描述
*/
desc: string;
/**
* 数据源信息
*/
dataSources: DataSource[];
/**
* 服务接口描述
*/
apis: ServiceInterface[];
}
/**
* 数据源模型
*
* 该模型为通用模型,即可用于表示卫星数据源,也可用来表示其他类型的数据源
*
*/
export type DataSource = {
/**
* 数据源名称
*/
name: string;
/**
* 英文代码
*/
code: string;
/**
* 负载
*/
loading: string;
specs: DataSourceSpec[];
}
/**
* 数据源具体的规格
*
* TODO: 如果能够更好的表示价格信息 ?
*/
export type DataSourceSpec = {
id:int;
/**
* 数据源规格名称 16分钟/次?
*/
name: string;
/**
* 历史价格
*/
historyDataPrice:int;
/**
* 实时价格
*/
realtimeDataPrice:int;
/**
* 天
*/
unit:string;
}
/**
* 服务接口描述
*
* TODO: 完善
*/
export type ServiceInterface = {
/**
* 接口地址
*/
url:string;
/**
* 接口名称
*/
name:string;
/**
* doc
*/
doc:Doc;
}
/**
* 接口文档
*/
export type Doc = {
/**
* 描述信息
*/
description:string;
/**
* GET、POST
*/
method:string;
/**
* 请求参数
*/
request:Request;
/**
* 响应参数
*/
response:Response;
/**
* 示例
*/
example:Examplse[];
}
/**
* 请求参数
*/
export type Request = {
/**
* 系统参数
*/
systemParams:Param[];
/**
* 业务参数
*/
bizParams:Param[]
}
/**
* 响应参数
*/
export type Response = {
/**
* 系统参数
*/
headers:Param[];
/**
* 系统参数
*/
body:Param[];
}
/**
* 示例
*/
export type Examplse = {
request:RequestExample;
response:ResponseExample;
}
/**
* 参数
*/
export type Param = {
/**
* key
*/
key:string;
/**
* 数据类型
*/
dataType:string;
/**
* 变量类型
*/
paramType:string;
/**
* 是否必填
*/
required:boolean;
/**
* 默认值
*/
defaultValue:string;
/**
* 描述信息
*/
desc:string;
}
/**
* 请求参数示例
*/
export type RequestExample = {
/**
* https、http
*/
schema:string;
/**
* ip、域名
*/
host:string;
/**
* 端口
*/
port:string;
/**
* 接口地址
*/
path:string;
/**
* GET|POST
*/
method:string;
/**
* 头
*/
headers:KeyValue[];
/**
* query参数
*/
query:KeyValue[]
}
/**
* 响应参数示例
*/
export type ResponseExample = {
/**
* 头信息
*/
headers:KeyVaue[];
/**
* 体信息
*/
body:Body;
}
/**
* 键值
*/
export type KeyVaue = {
key:string;
value:string;
}
export type Body = {
/**
* 编码
*/
code:int
/**
* 消息
*/
message:string;
}
console