Skip to content

Commit 076a6ac

Browse files
Merge pull request #3 from renukamanavalan/remanava_events
Integrate with BGP container
2 parents 8c03eb5 + e5be04f commit 076a6ac

18 files changed

+93
-30
lines changed

dockers/docker-fpm-frr/Dockerfile.j2

+6
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,15 @@ COPY ["TSC", "/usr/bin/TSC"]
5656
COPY ["TS", "/usr/bin/TS"]
5757
COPY ["files/supervisor-proc-exit-listener", "/usr/bin"]
5858
COPY ["zsocket.sh", "/usr/bin/"]
59+
COPY ["*.json", "/etc/rsyslog.d/"]
60+
COPY ["files/rsyslog_plugin.conf.j2", "/etc/rsyslog.d/"]
5961
RUN chmod a+x /usr/bin/TSA && \
6062
chmod a+x /usr/bin/TSB && \
6163
chmod a+x /usr/bin/TSC && \
6264
chmod a+x /usr/bin/zsocket.sh
6365

66+
RUN j2 -f json /etc/rsyslog.d/rsyslog_plugin.conf.j2 /etc/rsyslog.d/events_info.json > /etc/rsyslog.d/bgp_events.conf
67+
RUN rm -f /etc/rsyslog.d/rsyslog_plugin.conf.j2*
68+
RUN rm -f /etc/rsyslog.d/events_info.json*
69+
6470
ENTRYPOINT ["/usr/bin/docker_init.sh"]

dockers/docker-fpm-frr/bgp_regex.json

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
[
2+
{
3+
"tag": "bgp-state",
4+
"regex": "Peer .default\\|([0-9a-f:.]*[0-9a-f]*). admin state is set to .(up|down).",
5+
"params": [ "peer_ip", "status" ]
6+
}
7+
]
8+
+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"yang_module": "sonic-events-bgp",
3+
"proclist": [
4+
{
5+
"name": "bgp",
6+
"parse_json": "bgp_regex.json"
7+
}
8+
]
9+
}
10+

files/build_templates/docker_image_ctl.j2

+1
Original file line numberDiff line numberDiff line change
@@ -500,6 +500,7 @@ start() {
500500
{%- endif -%}
501501
{%- if docker_container_name == "bgp" %}
502502
-v /etc/sonic/frr/$DEV:/etc/frr:rw \
503+
-v /usr/share/sonic/scripts:/usr/share/sonic/scripts:ro \
503504
{%- endif %}
504505
{%- if docker_container_name == "database" %}
505506
$DB_OPT \
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
## rsyslog-plugin for streaming telemetry via gnmi
2+
3+
4+
5+
template(name="prog_msg" type="list") {
6+
property(name="msg")
7+
constant(value="\n")
8+
}
9+
10+
$ModLoad omprog
11+
12+
{% for proc in proclist %}
13+
if re_match($programname, "{{ proc.name }}") then {
14+
action(type="omprog"
15+
binary="/usr/share/sonic/scripts/rsyslog_plugin -r /etc/rsyslog.d/{{ proc.parse_json }} -m {{ yang_module }}"
16+
output="/var/log/rsyslog_plugin.log"
17+
template="prog_msg")
18+
}
19+
{% endfor %}

files/build_templates/sonic_debian_extension.j2

+4-1
Original file line numberDiff line numberDiff line change
@@ -763,6 +763,10 @@ sudo bash -c "echo { > $FILESYSTEM_ROOT_USR_SHARE_SONIC_TEMPLATES/ctr_image_name
763763
{% endfor %}
764764
sudo bash -c "echo } >> $FILESYSTEM_ROOT_USR_SHARE_SONIC_TEMPLATES/ctr_image_names.json"
765765

766+
# copy rsyslog plugin binary for use by all dockers that use plugin to publish events.
767+
sudo mkdir -p ${FILESYSTEM_ROOT_USR_SHARE_SONIC_SCRIPTS}
768+
sudo cp ${files_path}/rsyslog_plugin ${FILESYSTEM_ROOT_USR_SHARE_SONIC_SCRIPTS}/
769+
766770
{% for script in installer_start_scripts.split(' ') -%}
767771
if [ -f $TARGET_MACHINE"_{{script}}" ]; then
768772
sudo cp $TARGET_MACHINE"_{{script}}" $FILESYSTEM_ROOT/usr/bin/{{script}}
@@ -813,7 +817,6 @@ sudo LANG=C cp $SCRIPTS_DIR/bgp.sh $FILESYSTEM_ROOT/usr/local/bin/bgp.sh
813817
sudo LANG=C cp $SCRIPTS_DIR/teamd.sh $FILESYSTEM_ROOT/usr/local/bin/teamd.sh
814818
sudo LANG=C cp $SCRIPTS_DIR/lldp.sh $FILESYSTEM_ROOT/usr/local/bin/lldp.sh
815819
sudo LANG=C cp $SCRIPTS_DIR/radv.sh $FILESYSTEM_ROOT/usr/local/bin/radv.sh
816-
sudo LANG=C cp $SCRIPTS_DIR/eventd.sh $FILESYSTEM_ROOT/usr/local/bin/eventd.sh
817820
sudo LANG=C cp $SCRIPTS_DIR/asic_status.sh $FILESYSTEM_ROOT/usr/local/bin/asic_status.sh
818821
sudo LANG=C cp $SCRIPTS_DIR/asic_status.py $FILESYSTEM_ROOT/usr/local/bin/asic_status.py
819822

rules/docker-config-engine-bullseye.mk

+4-1
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,17 @@ $(DOCKER_CONFIG_ENGINE_BULLSEYE)_DEPENDS += $(LIBSWSSCOMMON) \
88
$(LIBYANG_CPP) \
99
$(LIBYANG_PY3) \
1010
$(PYTHON3_SWSSCOMMON) \
11-
$(SONIC_DB_CLI)
11+
$(SONIC_DB_CLI) \
12+
$(SONIC_EVENTD)
1213
$(DOCKER_CONFIG_ENGINE_BULLSEYE)_PYTHON_WHEELS += $(SWSSSDK_PY3)
1314
$(DOCKER_CONFIG_ENGINE_BULLSEYE)_PYTHON_WHEELS += $(SONIC_PY_COMMON_PY3) \
1415
$(SONIC_YANG_MGMT_PY3) \
1516
$(SONIC_YANG_MODELS_PY3)
1617
$(DOCKER_CONFIG_ENGINE_BULLSEYE)_PYTHON_WHEELS += $(SONIC_CONFIG_ENGINE_PY3)
1718
$(DOCKER_CONFIG_ENGINE_BULLSEYE)_LOAD_DOCKERS += $(DOCKER_BASE_BULLSEYE)
1819
$(DOCKER_CONFIG_ENGINE_BULLSEYE)_FILES += $(SWSS_VARS_TEMPLATE)
20+
$(DOCKER_CONFIG_ENGINE_BULLSEYE)_FILES += $(RSYSLOG_PLUGIN_CONF_J2)
21+
$(DOCKER_CONFIG_ENGINE_BULLSEYE)_FILES += $($(DOCKER_EVENTD)_PLUGIN)
1922
$(DOCKER_CONFIG_ENGINE_BULLSEYE)_FILES += $($(SONIC_CTRMGRD)_CONTAINER_SCRIPT)
2023

2124
$(DOCKER_CONFIG_ENGINE_BULLSEYE)_DBG_DEPENDS = $($(DOCKER_BASE_BULLSEYE)_DBG_DEPENDS) \

rules/docker-config-engine-buster.mk

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ $(DOCKER_CONFIG_ENGINE_BUSTER)_PYTHON_WHEELS += $(SONIC_PY_COMMON_PY3) \
1616
$(DOCKER_CONFIG_ENGINE_BUSTER)_PYTHON_WHEELS += $(SONIC_CONFIG_ENGINE_PY3)
1717
$(DOCKER_CONFIG_ENGINE_BUSTER)_LOAD_DOCKERS += $(DOCKER_BASE_BUSTER)
1818
$(DOCKER_CONFIG_ENGINE_BUSTER)_FILES += $(SWSS_VARS_TEMPLATE)
19+
$(DOCKER_CONFIG_ENGINE_BUSTER)_FILES += $(RSYSLOG_PLUGIN_CONF_J2)
1920
$(DOCKER_CONFIG_ENGINE_BUSTER)_FILES += $($(SONIC_CTRMGRD)_CONTAINER_SCRIPT)
2021

2122
$(DOCKER_CONFIG_ENGINE_BUSTER)_DBG_DEPENDS = $($(DOCKER_BASE_BUSTER)_DBG_DEPENDS) \

rules/docker-eventd.mk

+8
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,11 @@ $(DOCKER_EVENTD)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro
3636

3737
SONIC_BULLSEYE_DOCKERS += $(DOCKER_EVENTD)
3838
SONIC_BULLSEYE_DBG_DOCKERS += $(DOCKER_EVENTD_DBG)
39+
40+
$(DOCKER_EVENTD)_FILESPATH = $($(SONIC_EVENTD)_SRC_PATH)/rsyslog_plugin
41+
42+
$(DOCKER_EVENTD)_PLUGIN = rsyslog_plugin
43+
$($(DOCKER_EVENTD)_PLUGIN)_PATH = $($(DOCKER_EVENTD)_FILESPATH)
44+
45+
SONIC_COPY_FILES += $($(DOCKER_EVENTD)_PLUGIN)
46+

rules/scripts.mk

+4
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ $(SWSS_VARS_TEMPLATE)_PATH = files/build_templates
3232
COPP_CONFIG_TEMPLATE = copp_cfg.j2
3333
$(COPP_CONFIG_TEMPLATE)_PATH = files/image_config/copp
3434

35+
RSYSLOG_PLUGIN_CONF_J2 = rsyslog_plugin.conf.j2
36+
$(RSYSLOG_PLUGIN_CONF_J2)_PATH = files/build_templates
37+
3538
SONIC_COPY_FILES += $(CONFIGDB_LOAD_SCRIPT) \
3639
$(ARP_UPDATE_SCRIPT) \
3740
$(ARP_UPDATE_VARS_TEMPLATE) \
@@ -42,4 +45,5 @@ SONIC_COPY_FILES += $(CONFIGDB_LOAD_SCRIPT) \
4245
$(SYSCTL_NET_CONFIG) \
4346
$(UPDATE_CHASSISDB_CONFIG_SCRIPT) \
4447
$(SWSS_VARS_TEMPLATE) \
48+
$(RSYSLOG_PLUGIN_CONF_J2) \
4549
$(COPP_CONFIG_TEMPLATE)

rules/telemetry.mk

+4-2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
SONIC_TELEMETRY = sonic-telemetry_0.1_$(CONFIGURED_ARCH).deb
44
$(SONIC_TELEMETRY)_SRC_PATH = $(SRC_PATH)/sonic-telemetry
5-
$(SONIC_TELEMETRY)_DEPENDS = $(SONIC_MGMT_COMMON) $(SONIC_MGMT_COMMON_CODEGEN)
6-
$(SONIC_TELEMETRY)_RDEPENDS =
5+
$(SONIC_TELEMETRY)_DEPENDS = $(SONIC_MGMT_COMMON) $(SONIC_MGMT_COMMON_CODEGEN) \
6+
$(LIBSAIREDIS_DEV) $(LIBSAIMETADATA_DEV) $(LIBSWSSCOMMON_DEV) $(LIBSWSSCOMMON)
7+
$(SONIC_TELEMETRY)_RDEPENDS = $(LIBSAIREDIS) $(LIBSAIMETADATA) \
8+
$(LIBSWSSCOMMON) $(LIBSWSSCOMMON_DEV)
79
SONIC_DPKG_DEBS += $(SONIC_TELEMETRY)

src/sonic-eventd/Makefile

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ RM := rm -rf
22
EVENTD_TARGET := eventd
33
EVENTD_TEST := tests/tests
44
EVENTD_TOOL := tools/events_tool
5-
RSYSLOG-PLUGIN_TARGET := rsyslog_plugin
6-
RSYSLOG-PLUGIN_TEST: rsyslog_plugin_tests/tests
5+
RSYSLOG-PLUGIN_TARGET := rsyslog_plugin/rsyslog_plugin
6+
RSYSLOG-PLUGIN_TEST := rsyslog_plugin_tests/tests
77
CP := cp
88
MKDIR := mkdir
99
CC := g++
@@ -26,7 +26,7 @@ endif
2626
-include rsyslog_plugin/subdir.mk
2727
-include rsyslog_plugin_tests/subdir.mk
2828

29-
all: sonic-eventd eventd-tests eventd-tool rsyslog-plugin rsyslog-plugin-tests
29+
all: sonic-eventd eventd-tests eventd-tool rsyslog-plugin
3030

3131
sonic-eventd: $(OBJS)
3232
@echo 'Building target: $@'

src/sonic-eventd/rsyslog_plugin/rsyslog_plugin.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
#include <fstream>
44
#include <regex>
55
#include "rsyslog_plugin.h"
6-
#include "common/json.hpp"
6+
#include "json.hpp"
77

88
using json = nlohmann::json;
99

@@ -16,7 +16,7 @@ bool RsyslogPlugin::onMessage(string msg) {
1616
} else {
1717
int returnCode = event_publish(m_eventHandle, tag, &paramDict);
1818
if (returnCode != 0) {
19-
SWSS_LOG_ERROR("rsyslog_plugin was not able to publish event for %s. last thrown event error: %d\n", tag.c_str(), event_last_error());
19+
SWSS_LOG_ERROR("rsyslog_plugin was not able to publish event for %s.\n", tag.c_str());
2020
return false;
2121
}
2222
return true;
@@ -64,7 +64,7 @@ bool RsyslogPlugin::createRegexList() {
6464
return true;
6565
}
6666

67-
[[noreturn]] void RsyslogPlugin::run() {
67+
void RsyslogPlugin::run() {
6868
while(true) {
6969
string line;
7070
getline(cin, line);

src/sonic-eventd/rsyslog_plugin/rsyslog_plugin.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
#include <string>
55
#include <memory>
66
#include "syslog_parser.h"
7-
#include "common/events.h"
8-
#include "common/logger.h"
7+
#include "events.h"
8+
#include "logger.h"
99

1010
using namespace std;
1111
using namespace swss;

src/sonic-eventd/rsyslog_plugin/subdir.mk

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,5 @@ rsyslog_plugin/%.o: rsyslog_plugin/%.cpp
99
@echo 'Building file: $<'
1010
@echo 'Invoking: GCC C++ Compiler'
1111
$(CC) -D__FILENAME__="$(subst rsyslog_plugin/,,$<)" $(CFLAGS) -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -o "$(@)" "$<"
12-
@echo 'Finished building: $<
13-
'@echo ' '
12+
@echo 'Finished building: $<'
13+
@echo ' '

src/sonic-eventd/rsyslog_plugin/syslog_parser.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#include <iostream>
22
#include "syslog_parser.h"
3-
#include "common/logger.h"
3+
#include "logger.h"
44

55
/**
66
* Parses syslog message and returns structured event

src/sonic-eventd/rsyslog_plugin/syslog_parser.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
#include <vector>
55
#include <string>
66
#include <regex>
7-
#include "common/json.hpp"
8-
#include "common/events.h"
7+
#include "json.hpp"
8+
#include "events.h"
99

1010
using namespace std;
1111
using json = nlohmann::json;

src/sonic-eventd/tools/events_tool.cpp

+11-13
Original file line numberDiff line numberDiff line change
@@ -103,24 +103,22 @@ do_receive(const event_subscribe_sources_t filter, const string outfile, int cnt
103103
ASSERT(h != NULL, "Failed to get subscriber handle");
104104

105105
while(!term_receive) {
106-
string key;
107-
event_params_t params;
108-
map_str_str_t evt;
109-
int missed_cnt=-1;
106+
event_receive_op_t evt;
107+
map_str_str_t evtOp;
110108

111-
int rc = event_receive(h, key, params, missed_cnt);
112-
if (rc != 0) {
113-
ASSERT(rc == EAGAIN, "Failed to receive rc=%d index=%d\n",
114-
rc, index);
109+
evt = event_receive(h);
110+
if (evt.rc != 0) {
111+
ASSERT(evt.rc == EAGAIN, "Failed to receive rc=%d index=%d\n",
112+
evt.rc, index);
115113
continue;
116114
}
117-
ASSERT(!key.empty(), "received EMPTY key");
118-
ASSERT(missed_cnt >= 0, "Missed count uninitialized");
115+
ASSERT(!evt.key.empty(), "received EMPTY key");
116+
ASSERT(evt.missed_cnt >= 0, "Missed count uninitialized");
119117

120-
total_missed += missed_cnt;
118+
total_missed += evt.missed_cnt;
121119

122-
evt[key] = t_map_to_str(params);
123-
(*fp) << t_map_to_str(evt) << "\n";
120+
evtOp[evt.key] = t_map_to_str(evt.params);
121+
(*fp) << t_map_to_str(evtOp) << "\n";
124122
fp->flush();
125123

126124
if ((++index % PRINT_CHUNK_SZ) == 0) {

0 commit comments

Comments
 (0)