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排序。

posted on 2016-01-11 17:18  L&M 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/lucianmaki/p/5120990.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值