一、基本概念:
- Resource:Ambari把能够被管理的资源的抽象为一个Resource实例,资源能够包括服务、组件、主机节点等,一个resource实例中包括了一系列该资源的属性;
- Property:服务组件的指标名称;
- ResourceProvider和PropertyProvider分别相应Resource和Property的提供方,获取指标须要先获取Resource,然后获取Property相应的metric;
- Query:Query是Resource的内部对象,代表了对该资源的操作;
- Request:一个Request代表了对Resource的操作请求,包括http信息及要操作的Resource的实例,Request依照http的请求方式分为四种:GET、PUT、DELETE、POST;
- Predicate:一个Predicate代表了一系列表达式,如and、or等;
二、源码结构:
- org.apache.ambari.server.api.services:对web接口的入口方法,处理/api/v1/*的请求;
- org.apache.ambari.server.controller:对Ambari中cluster的管理操作,如新增host,更新service、删除Component等;
- org.apache.ambari.server.controller.internal:主要存放ResourceProvider和PropertyProvider;
- org.apache.ambari.server.orm.*:数据库操作相关;
- org.apache.ambari.server.agent.rest:处理与Agent的接口的入口方法;
三、获取指标流程:
- jersy接口接收到请求,创建一个ResourceInstance实例;
- 解析http请求构造一个Request对象,然后交给reques的process()方法来处理;
- reques解析url或http_body得到一个Predicate对象;
- 依据http类型获取handler,GET请求相应ReadHandler;
- handler向Query对象中加入�分页、Render、Predicate等属性后,然后让query.execute();
- 依据Resource.Type获得相应的ResourceProvider对象,调用其getResources方法得到Set<Resource>;
- 调用相应的PropertyProvider填充Resource;
- 处理结果,放回json结果