OCT 1. 增加IPTV上报接口配置项

2. 增加POST IPTV设备信息
This commit is contained in:
黄昕 2022-12-21 18:46:53 +08:00
parent c3be7eafe2
commit 2529f04b66
6 changed files with 58 additions and 2 deletions

View File

@ -12,6 +12,10 @@ application:
system_info_refresh = 10; # 硬件信息监控刷新频率(秒)
};
agent: {
iptv_report_url = "http://127.0.0.1:50012/vcpe/dhcp/info"; # IPTV 设备上报接口
};
# 硬件监控相关配置内容
watch_params:
{

View File

@ -65,6 +65,8 @@ static CFG_ITEM g_cfgItem[] = {
DEF_CFG_ITEM(CFG_BANNER_SHOW, "system.show_banner", VAL_BOOL, "1", "Enable/Disable show banner"),
DEF_CFG_ITEM(CFG_HARDWARE_WATCH, "system.system_info_watch", VAL_BOOL, "1", "Monitor cpu, memory, disk, fan, temperature ..."),
DEF_CFG_ITEM(CFG_HARDWARE_REFRESH, "system.system_info_refresh", VAL_INT, "10", "Monitor hardware information upgrade frequency"),
// Agent 配置
DEF_CFG_ITEM(CFG_AGENT_IPTV_POST_URL, "agent.iptv_report_url", VAL_STR, "", "IPTV report URL"),
/* 系统监控设备相配置 */
DEF_CFG_ITEM(CFG_WATCH_CPU, "watch_params.cpu", VAL_BOOL, "1", "Monitor cpu information"),
DEF_CFG_ITEM(CFG_WATCH_MEMORY, "watch_params.memory", VAL_BOOL, "1", "Monitor memory information"),

View File

@ -33,6 +33,10 @@ c_vector config_get_dhcp_mac_filter() {
}
#endif
const char *config_get_agent_iptv_report_url() {
return cfg_get_string_value(CFG_AGENT_IPTV_POST_URL);
}
const char *config_get_http_server_addr() {
return cfg_get_string_value(CFG_HTTP_SVR_ADDR);
}

View File

@ -35,6 +35,7 @@ typedef enum {
CFG_BANNER_SHOW,
CFG_HARDWARE_WATCH,
CFG_HARDWARE_REFRESH,
CFG_AGENT_IPTV_POST_URL,
CFG_WATCH_CPU,
CFG_WATCH_MEMORY,
CFG_WATCH_DISK,
@ -132,6 +133,7 @@ const char *config_get_vxlan_nic_name();
const char *config_get_vxlan_peer_mac();
const char *config_get_vxlan_peer_ip();
const char *config_get_vxlan_pkg_filter();
const char *config_get_agent_iptv_report_url();
const char *config_get_http_server_addr();
unsigned int config_get_http_server_port();
int config_get_http_server_tcp_nodelay();

View File

@ -729,6 +729,7 @@ const char *inet_http_post_async(const char *pURL, const char *pPost, on_http_re
pParams->pCurl = pCurl;
pParams->lastTm = 0;
pParams->isCancel = FALSE;
pParams->createTm = LIBUV_CURRENT_TIME_S();
memset(pParams->pReqUrl, 0, strlen(pURL) + 1);
strcpy(pParams->pReqUrl, pURL);

View File

@ -26,6 +26,7 @@ using namespace std;
#include "user_errno.h"
#include "uthash/uthash.h"
#include "sds/sds.h"
#include "inet_misc.h"
extern data2 cfig;
extern bool kRunning;
@ -1173,8 +1174,27 @@ int opendhcp_add_listener() {
return i;
}
void on_http_response_cb(void *pData,
unsigned int size,
const char *pReqUrl,
const char *pDlPath,
const char *pTaskUuid,
int iFinished,
void *pUserData) {
if (iFinished == 0) {
dzlog_debug("Request(%s): [%s] Response: [%u] OK:\n", pTaskUuid, pReqUrl, size);
} else if (iFinished == 1) {
dzlog_error("Request(%s): [%s] Response: [%u] Error\n", pTaskUuid, pReqUrl, size);
} else {
dzlog_error("Download Error Code: %d\n", iFinished);
}
}
void iptvCacheCb(void *UNUSED(pArg)) {
do {
bool isReport = false;
const char *pUrl = config_get_agent_iptv_report_url();
PIPTV_DEV_SET report = nullptr;
PIPTV_DEV_SET pDev, pTmp = nullptr;
uv_rwlock_wrlock(&g_uvCacheLock);
HASH_ITER(hh, g_iptvNewDevs, pDev, pTmp) {
@ -1185,8 +1205,9 @@ void iptvCacheCb(void *UNUSED(pArg)) {
if (!pTemp) {
auto pCacheDev = (PIPTV_DEV_SET)malloc(sizeof(IPTV_DEV_SET));
memcpy(pCacheDev, pDev, sizeof(IPTV_DEV_SET));
// Report new IPTV device MAC
pCacheDev->isReport = 1;
HASH_ADD_STR(report, iptvMAC, pCacheDev);
isReport = true;
// 添加到缓存列表供后续查询
HASH_ADD_STR(g_iptvCacheDevs, iptvMAC, pCacheDev);
dzlog_debug("Add IPTV device %s vni %d to cache\n", pCacheDev->iptvMAC, pCacheDev->vni);
@ -1197,6 +1218,28 @@ void iptvCacheCb(void *UNUSED(pArg)) {
free((void *)pDevMac);
}
uv_rwlock_wrunlock(&g_uvCacheLock);
if (isReport && pUrl && strlen(pUrl) > 0) {
cJSON *pRspMsg = cJSON_CreateObject();
cJSON *pMsgArray = cJSON_CreateArray();
cJSON_AddItemToObject(pRspMsg, "iptvDevs", pMsgArray);
HASH_ITER(hh, report, pDev, pTmp) {
cJSON *pRspItem = cJSON_CreateObject();
cJSON_AddStringToObject(pRspItem, "mac", pDev->iptvMAC);
cJSON_AddNumberToObject(pRspItem, "vni", pDev->vni);
pDev->isReport = 1;
cJSON_AddItemToArray(pMsgArray, pRspItem);
}
const char *pStrPro = proto_create_new(pRspMsg, 200);
// Report new IPTV device MAC
inet_http_post_async(config_get_agent_iptv_report_url(), pStrPro, on_http_response_cb, nullptr);
free((void *)pStrPro);
}
uv_sleep(10);
} while (true);
}