SOURCE

/**
 * 本文件定义了服务的配置信息获取机制, 通过这个机制,运营系统能够自动化的生成服务文档和配置工作;
 * 
 * 目前,我们只需要两种信息的获取
 * 
 * 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:decimal;
    /**
     * 实时价格
     */
    realtimeDataPrice:decimal;
    /**
     * 天
     */
    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:Example[];

}
/**
 * 请求参数
 */
export type Request = {
    /**
     * 系统参数
     */
    systemParams:Param[];
    /**
     * 业务参数
     */
    bizParams:Param[]
}
/**
 * 响应参数
 */
export type Response = {
    /**
     * 系统参数
     */
    headers:Param[];
    /**
     * 系统参数
     */
    body:Param[];
}
/**
 * 示例
 */
export type Example = {

    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 命令行工具 X clear

                    
>
console