zabbix2.2.2-hostgroups.php代码分析(1)
想模仿hostgroups.php仿写一个主机组页面。直接从页面展示开始分析。
if (isset($_REQUEST['form'])) {
//这里面是点击创建主机组的页面展示
}else{
//从这里开始分析
}
$sortfield = getPageSortField('name'); //获取排序的字段依据
$sortorder = getPageSortOrder(); //升序降序
$data = array(
'config' => $config, //获取配置
'displayNodes' => is_array(get_current_nodeid()) //获取展示的节点,字面意义,具体是啥不知道,暂时不深究
);
接下来是目前最让我头疼的zabbix自带的对sql语句的构造方法,里面各种字段,复杂的很。
$groups = API::HostGroup()->get(array(
'editable' => true, //将权限设置为PERM_READ_WRITE,否则为PERM_READ
'output' => array('groupid'), //在select 后面增加字段'groupid',注释掉这句,发现获得的数据是一样的,应该默认是有groupid字段的。applyQueryOutputOptions()
'sortfield' => $sortfield, //在order by 后面增加字段$sortfield,此处为'name',会自动加表的别名,g.name。applyQuerySortOptions()->applyQuerySortField()
'limit' => $config['search_limit'] + 1 //默认是1000,不知道+1是为什么,然后在zabbix生产sql的方法createSelectQueryFromParts()发现并没有对'limit'做任何操作,感觉这里写不写无所谓
));
反正上面构造出来的sql 语句是'SELECT g.groupid FROM groups g ORDER BY g.name'。继续往下看:
$data['paging'] = getPagingLine($groups, array('groupid'));
这个是分页的,进去随便看了一下,每页显示多少数据来源于user表的rows_per_page字段。
// get hosts and templates count
$data['groupCounts'] = API::HostGroup()->get(array(
'groupids' => zbx_objectValues($groups, 'groupid'), //在sql语句where后面添加(g.groupid BETWEEN '4' AND '17' OR g.groupid IN ('1','2')
'selectHosts' => API_OUTPUT_COUNT, //API::HostGroup()->get()->addRelatedObjects()->API::Host()->get()SELECT DISTINCT COUNT(DISTINCT h.hostid) AS rowscount,hg.groupid FROM hosts h,hosts_groups hg WHERE h.flags IN (0,4) AND (hg.groupid BETWEEN '4' AND '17' OR hg.groupid IN ('1','2')) AND hg.hostid=h.hostid AND h.status IN (0,1) GROUP BY hg.groupid
'selectTemplates' => API_OUTPUT_COUNT, //API::HostGroup()->get()->addRelatedObjects()->API::Host()->get()
'nopermissions' => true //
));
$data['groupCounts'] = zbx_toHash($data['groupCounts'], 'groupid');
这是对取得的结果进行重新排序。以结果中的groupid作为新数组的下标。
$data['groups'] = API::HostGroup()->get(array(
'groupids' => zbx_objectValues($groups, 'groupid'),
'selectHosts' => array('hostid', 'name', 'status'),
'selectTemplates' => array('hostid', 'name', 'status'),
'selectGroupDiscovery' => array('ts_delete'),
'selectDiscoveryRule' => array('itemid', 'name'),
'output' => API_OUTPUT_EXTEND,
'limitSelects' => $config['max_in_table'] + 1
));
获取详细信息。
order_result($data['groups'], $sortfield, $sortorder);
按$sortfield,进行$sortorder排序。
zabbix2.2.2-hostgroups.php代码分析(1)的更多相关文章
- Android代码分析工具lint学习
1 lint简介 1.1 概述 lint是随Android SDK自带的一个静态代码分析工具.它用来对Android工程的源文件进行检查,找出在正确性.安全.性能.可使用性.可访问性及国际化等方面可能 ...
- pmd静态代码分析
在正式进入测试之前,进行一定的静态代码分析及code review对代码质量及系统提高是有帮助的,以上为数据证明 Pmd 它是一个基于静态规则集的Java源码分析器,它可以识别出潜在的如下问题:– 可 ...
- [Asp.net 5] DependencyInjection项目代码分析-目录
微软DI文章系列如下所示: [Asp.net 5] DependencyInjection项目代码分析 [Asp.net 5] DependencyInjection项目代码分析2-Autofac [ ...
- [Asp.net 5] DependencyInjection项目代码分析4-微软的实现(5)(IEnumerable<>补充)
Asp.net 5的依赖注入注入系列可以参考链接: [Asp.net 5] DependencyInjection项目代码分析-目录 我们在之前讲微软的实现时,对于OpenIEnumerableSer ...
- 完整全面的Java资源库(包括构建、操作、代码分析、编译器、数据库、社区等等)
构建 这里搜集了用来构建应用程序的工具. Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置进行构建.Maven优于Apache Ant.后者采用了一种过程化 ...
- STM32启动代码分析 IAR 比较好
stm32启动代码分析 (2012-06-12 09:43:31) 转载▼ 最近开始使用ST的stm32w108芯片(也是一款zigbee芯片).开始看他的启动代码看的晕晕呼呼呼的. 还好在c ...
- 常用 Java 静态代码分析工具的分析与比较
常用 Java 静态代码分析工具的分析与比较 简介: 本文首先介绍了静态代码分析的基 本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBu ...
- SonarQube-5.6.3 代码分析平台搭建使用
python代码分析 官网主页: http://docs.sonarqube.org/display/PLUG/Python+Plugin Windows下安装使用: 快速使用: 1.下载jdk ht ...
- angular代码分析之异常日志设计
angular代码分析之异常日志设计 错误异常是面向对象开发中的记录提示程序执行问题的一种重要机制,在程序执行发生问题的条件下,异常会在中断程序执行,同时会沿着代码的执行路径一步一步的向上抛出异常,最 ...
- [Asp.net 5] DependencyInjection项目代码分析4-微软的实现(2)
在 DependencyInjection项目代码分析4-微软的实现(1)中介绍了“ServiceTable”.“ServiceEntry”.“IGenericService”.“IService”. ...
随机推荐
- App开发中甲乙方冲突会闹出啥后果?H5 APP 开发可以改变现状吗
随着各种应用的全面App化,因App而起的合作纠纷也日益增多,其中不乏最终对簿公堂的情形.WeX5(html5开发工具)为您汇总了三个典型的真实案例,方便您体会甲乙方冲突情景. 在围观别人争吵之余,您 ...
- Spring 官方下载地址(非Maven)
现在spring的官网停止了使用zip包下载,只能使用maven,非常的不方便,分享如下网址可以使用zip包下载,是不是方便多了!~ 下载列表如下: spring-framework-3.2.8.RE ...
- sublime主题推荐
PS:之前在CSDN上写的文章,现在转到博客园~ 寒假的时候发现一个sublime主题,我觉得很赞哦~~推荐给大家~~ 下载方式 step1:ctrl+shift+p 调出command palet ...
- ubuntu14.04配置lnmp
看到了一片讲解ubuntu下安装lnmp的文章,跟着一步步的来,竟然很顺利的成功了,将文章复制如下,原著勿怪 一.操作步骤 1.安装Nginx sudo apt-get install update ...
- MAC自带的lnmp
MAC自身带有apache,php. 1.启动apache服务 sudo apachectl start/restart/stop 2.查看php的版本 php -v 3.让apache支持ph ...
- 不能将“const char [7]”转换为“LPCTSTR”
試試用強制轉換變數型態的方法吧,像這樣(LPCTSTR)"WinSun",若不行再試L"WinSun",再不行試_L"WinSun".
- 注意WPF中绑定使用的是引用类型
绑定(Binding)是WPF提供的一个非常方便的特性,它可以方便的实现一个WPF的MVVM结构. 既可以实现数据驱动UI变化,也可以做到End-user在UI上的修改实现的反映到数据上. 但是有一点 ...
- 【python】迭代一列 斐波那契数列
def fabm(n): if n < 1: print('输入不能小于1') return -1 if n == 1 or n == 2: return 1 else: return fabm ...
- 洛谷 P1417 烹调方案
题目背景 由于你的帮助,火星只遭受了最小的损失.但gw懒得重建家园了,就造了一艘飞船飞向遥远的earth星.不过飞船飞到一半,gw发现了一个很严重的问题:肚子饿了~ gw还是会做饭的,于是拿出了储藏的 ...
- Git Commit Template 提交模板
多人协作开发一个项目时,版本控制工具是少不了的,git是linux 内核开发时引入的一个优秀代码管理工具,利用它能很好使团队协作完成一个项目.为了规范团队的代码提交,也方便出版本时的release n ...