一、基本概念:
- 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结果
Ambari源码分析之总览,布布扣,bubuko.com
Ambari源码分析之总览
原文:http://blog.csdn.net/j2eelamp/article/details/25416943