acl/app/master/daemon/manage/action/service_list.cpp
2017-07-21 15:38:28 +08:00

75 lines
1.7 KiB
C++

/**
* Copyright (C) 2015-2018
* All rights reserved.
*
* AUTHOR(S)
* Zheng Shuxin
* E-mail: zhengshuxin@qiyi.com
*
* VERSION
* Fri 16 Jun 2017 10:48:20 AM CST
*/
#include "stdafx.h"
#include "master/master_api.h"
#include "service_list.h"
void service_list::add_one(list_res_t& res, const ACL_MASTER_SERV* serv)
{
serv_info_t info;
info.status = 200;
info.name = serv->name;
info.type = serv->type;
info.path = serv->path;
info.conf = serv->conf;
info.proc_max = serv->max_proc;
info.proc_prefork = serv->prefork_proc;
info.proc_total = serv->total_proc;
info.proc_avail = serv->avail_proc;
info.throttle_delay = serv->throttle_delay;
info.listen_fd_count = serv->listen_fd_count;
if (serv->owner && *serv->owner)
info.owner = serv->owner;
if (serv->notify_addr && *serv->notify_addr)
info.notify_addr = serv->notify_addr;
if (serv->notify_recipients && *serv->notify_recipients)
info.notify_recipients = serv->notify_recipients;
ACL_ITER iter;
acl_foreach(iter, serv->children_env)
{
ACL_MASTER_NV* v = (ACL_MASTER_NV *) iter.data;
info.env[v->name] = v->value;
}
if (acl_ring_size(&serv->children) > 0)
{
ACL_RING_ITER iter2;
acl_ring_foreach(iter2, &serv->children)
{
ACL_MASTER_PROC* proc = (ACL_MASTER_PROC *)
acl_ring_to_appl(iter2.ptr, ACL_MASTER_PROC, me);
info.pids.insert(proc->pid);
}
}
else
info.pids.insert(-1);
res.data.push_back(info);
}
bool service_list::run(const list_req_t&, list_res_t& res)
{
ACL_MASTER_SERV *serv;
for (serv = acl_var_master_head; serv != 0; serv = serv->next)
add_one(res, serv);
res.status = 200;
res.msg = "ok";
return true;
}