2017-06-16 17:00:49 +08:00
|
|
|
/**
|
|
|
|
* Copyright (C) 2015-2018
|
|
|
|
* All rights reserved.
|
|
|
|
*
|
|
|
|
* AUTHOR(S)
|
|
|
|
* Zheng Shuxin
|
|
|
|
* E-mail: zhengshuxin@qiyi.com
|
|
|
|
*
|
|
|
|
* VERSION
|
|
|
|
* Fri 16 Jun 2017 01:54:45 PM CST
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "stdafx.h"
|
|
|
|
#include "master/master_api.h"
|
|
|
|
#include "service_stat.h"
|
|
|
|
|
2017-06-26 12:34:23 +08:00
|
|
|
bool service_stat::stat_one(const char* name, int type, serv_info_t& info)
|
2017-06-16 17:00:49 +08:00
|
|
|
{
|
2017-06-26 12:34:23 +08:00
|
|
|
ACL_MASTER_SERV *serv = acl_master_lookup(name, type);
|
2017-06-16 17:00:49 +08:00
|
|
|
|
|
|
|
if (serv == NULL)
|
|
|
|
{
|
|
|
|
info.status = 404;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
info.name = serv->name;
|
2017-06-26 12:34:23 +08:00
|
|
|
info.type = serv->type;
|
2017-06-16 17:00:49 +08:00
|
|
|
info.path = serv->path;
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
|
|
|
info.status = 200;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool service_stat::run(const stat_req_t& req, stat_res_t& res)
|
|
|
|
{
|
|
|
|
size_t n = 0;
|
|
|
|
|
2017-06-26 12:34:23 +08:00
|
|
|
for (std::vector<stat_req_data_t>::const_iterator
|
|
|
|
cit = req.data.begin(); cit != req.data.end(); ++cit)
|
2017-06-16 17:00:49 +08:00
|
|
|
{
|
|
|
|
serv_info_t info;
|
2017-06-26 12:34:23 +08:00
|
|
|
if (stat_one((*cit).name.c_str(), (*cit).type, info))
|
2017-06-16 17:00:49 +08:00
|
|
|
n++;
|
|
|
|
res.data.push_back(info);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (n == req.data.size())
|
|
|
|
{
|
|
|
|
res.status = 200;
|
|
|
|
res.msg = "ok";
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
res.status = 500;
|
|
|
|
res.msg = "error";
|
|
|
|
logger_error("not all service have been started!, n=%d, %d",
|
|
|
|
(int) n, (int) req.data.size());
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|