This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
stellar-stellar/test/monitor/monitor_main.cpp
2024-11-07 18:30:58 +08:00

75 lines
2.1 KiB
C++

#include <netinet/in.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <stddef.h>
#include <getopt.h>
#include <gtest/gtest.h>
#include "monitor/monitor_private.h"
#include "stellar/packet.h"
#include "stellar/stellar.h"
/* main function to drives the stellar library to run,
using a delay plugin to increase the running time
*/
static int sleep_per_packet_ms = 0;
static int sleep_before_run_ms = 0;
static void delay_packet_cb(struct packet *pkt, enum packet_stage stage, void *plugin_env)
{
(void)stage;
(void)pkt;
(void)plugin_env;
if (sleep_per_packet_ms)
{
fprintf(stderr, "packet dump, sleep %d ms....\n", sleep_per_packet_ms);
usleep(1000 * sleep_per_packet_ms);
}
}
int main(int argc, char const *argv[])
{
if (argc > 1)
{
if (strcmp(argv[1], "-h") == 0 || strcmp(argv[1], "--help") == 0)
{
fprintf(stderr, "Usage: %s [sleep_before_run_ms] [sleep_per_packet_ms]\n", argv[0]);
exit(0);
}
sleep_before_run_ms = atoi(argv[1]);
if (argc >= 3)
{
sleep_per_packet_ms = atoi(argv[2]);
}
}
struct stellar *st = stellar_new("./conf/stellar.toml");
assert(st);
if (NULL == st)
{
fprintf(stderr, "stellar_new error!\n");
exit(1);
}
struct stellar_monitor *stm = stellar_monitor_get();
struct module *packet_mgr_mod = module_manager_get_module(stm->mod_mgr_ref, PACKET_MANAGER_MODULE_NAME);
struct packet_manager *pkt_mgr = module_to_packet_manager(packet_mgr_mod);
int ret = packet_manager_subscribe(pkt_mgr, PACKET_STAGE_INPUT, delay_packet_cb, stm);
if (ret < 0)
{
fprintf(stderr, "packet_manager_subscribe error!\n");
exit(1);
}
if (sleep_before_run_ms)
{
fprintf(stderr, "%s, sleep %d ms before run....\n", argv[0], sleep_before_run_ms);
usleep(1000 * sleep_before_run_ms);
}
fprintf(stderr, "%s starting...\r\n", argv[0]);
stellar_run(st);
stellar_free(st);
return 0;
}