From 36604f76b9372ae41f4b1d6d80e411f9a75eaf6c Mon Sep 17 00:00:00 2001 From: pavel-shirshov Date: Thu, 26 Jul 2018 13:39:08 -0700 Subject: [PATCH] [swss]: Start counter from swss container (#1875) * sonic-quagga update. Don't spam with 'Vtysh connected from' message * Enable counters inside swss container. systemd is not flexible enough to follow our business rules --- dockers/docker-orchagent/Dockerfile.j2 | 1 + dockers/docker-orchagent/enable_counters.py | 34 +++++++++++++++++++ dockers/docker-orchagent/start.sh | 2 ++ dockers/docker-orchagent/supervisord.conf | 8 +++++ files/build_templates/enable_counters.service | 8 ----- files/build_templates/enable_counters.timer | 9 ----- files/build_templates/snmp.service.j2 | 4 +-- .../build_templates/sonic_debian_extension.j2 | 3 -- 8 files changed, 47 insertions(+), 22 deletions(-) create mode 100755 dockers/docker-orchagent/enable_counters.py delete mode 100644 files/build_templates/enable_counters.service delete mode 100644 files/build_templates/enable_counters.timer diff --git a/dockers/docker-orchagent/Dockerfile.j2 b/dockers/docker-orchagent/Dockerfile.j2 index 3d6671996358..1597b436c3fe 100755 --- a/dockers/docker-orchagent/Dockerfile.j2 +++ b/dockers/docker-orchagent/Dockerfile.j2 @@ -27,6 +27,7 @@ RUN apt-get clean -y; apt-get autoclean -y; apt-get autoremove -y RUN rm -rf /debs COPY ["files/arp_update", "/usr/bin"] +COPY ["enable_counters.py", "/usr/bin"] COPY ["start.sh", "orchagent.sh", "swssconfig.sh", "/usr/bin/"] COPY ["supervisord.conf", "/etc/supervisor/conf.d/"] diff --git a/dockers/docker-orchagent/enable_counters.py b/dockers/docker-orchagent/enable_counters.py new file mode 100755 index 000000000000..712d34492b47 --- /dev/null +++ b/dockers/docker-orchagent/enable_counters.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python + +import swsssdk +import time + +def enable_counter_group(db, name): + info = {} + info['FLEX_COUNTER_STATUS'] = 'enable' + db.mod_entry("FLEX_COUNTER_TABLE", name, info) + +def enable_counters(): + db = swsssdk.ConfigDBConnector() + db.connect() + enable_counter_group(db, 'PORT') + enable_counter_group(db, 'QUEUE') + enable_counter_group(db, 'PFCWD') + +def get_uptime(): + with open('/proc/uptime') as fp: + return float(fp.read().split(' ')[0]) + +def main(): + # If the switch was just started (uptime less than 5 minutes), + # wait for 3 minutes and enable counters + # otherwise wait for 60 seconds and enable counters + uptime = get_uptime() + if uptime < 300: + time.sleep(180) + else: + time.sleep(60) + enable_counters() + +if __name__ == '__main__': + main() diff --git a/dockers/docker-orchagent/start.sh b/dockers/docker-orchagent/start.sh index e26be9286aa3..0321bf8428f4 100755 --- a/dockers/docker-orchagent/start.sh +++ b/dockers/docker-orchagent/start.sh @@ -28,6 +28,8 @@ supervisorctl start intfmgrd supervisorctl start buffermgrd +supervisorctl start enable_counters + # Start arp_update when VLAN exists VLAN=`sonic-cfggen -d -v 'VLAN.keys() | join(" ") if VLAN'` if [ "$VLAN" != "" ]; then diff --git a/dockers/docker-orchagent/supervisord.conf b/dockers/docker-orchagent/supervisord.conf index dc28e3369ca5..2369a4c31b05 100644 --- a/dockers/docker-orchagent/supervisord.conf +++ b/dockers/docker-orchagent/supervisord.conf @@ -91,3 +91,11 @@ autostart=false autorestart=false stdout_logfile=syslog stderr_logfile=syslog + +[program:enable_counters] +command=/usr/bin/enable_counters.py +priority=11 +autostart=false +autorestart=false +stdout_logfile=syslog +stderr_logfile=syslog diff --git a/files/build_templates/enable_counters.service b/files/build_templates/enable_counters.service deleted file mode 100644 index 95424474cb15..000000000000 --- a/files/build_templates/enable_counters.service +++ /dev/null @@ -1,8 +0,0 @@ -[Unit] -Description=Enable SONiC counters -PartOf=swss.service - -[Service] -Type=oneshot -ExecStart=/bin/bash -c 'sleep 60 ; /usr/bin/counterpoll queue enable ; /usr/bin/counterpoll port enable ; /usr/bin/pfcwd counter_poll enable' -RemainAfterExit=yes diff --git a/files/build_templates/enable_counters.timer b/files/build_templates/enable_counters.timer deleted file mode 100644 index 40a91525a712..000000000000 --- a/files/build_templates/enable_counters.timer +++ /dev/null @@ -1,9 +0,0 @@ -[Unit] -Description=Delays the SONiC counters gathering until SONiC has started - -[Timer] -OnBootSec=2min -Unit=enable_counters.service - -[Install] -WantedBy=timers.target diff --git a/files/build_templates/snmp.service.j2 b/files/build_templates/snmp.service.j2 index 93ef869b86e1..6398477ab6a1 100644 --- a/files/build_templates/snmp.service.j2 +++ b/files/build_templates/snmp.service.j2 @@ -1,7 +1,7 @@ [Unit] Description=SNMP container -Requires=updategraph.service swss.service enable_counters.service -After=updategraph.service swss.service enable_counters.service +Requires=updategraph.service swss.service +After=updategraph.service swss.service [Service] ExecStartPre=/usr/bin/{{docker_container_name}}.sh start diff --git a/files/build_templates/sonic_debian_extension.j2 b/files/build_templates/sonic_debian_extension.j2 index bf65cad02d1e..7e22aad82fb4 100644 --- a/files/build_templates/sonic_debian_extension.j2 +++ b/files/build_templates/sonic_debian_extension.j2 @@ -280,10 +280,7 @@ sudo LANG=C chroot $FILESYSTEM_ROOT umount -lf /sys # Copy systemd timer configuration # It implements delayed start of services -sudo cp $BUILD_TEMPLATES/enable_counters.timer $FILESYSTEM_ROOT/etc/systemd/system/ -sudo cp $BUILD_TEMPLATES/enable_counters.service $FILESYSTEM_ROOT/etc/systemd/system/ sudo cp $BUILD_TEMPLATES/snmp.timer $FILESYSTEM_ROOT/etc/systemd/system/ -sudo LANG=C chroot $FILESYSTEM_ROOT systemctl enable enable_counters.timer sudo LANG=C chroot $FILESYSTEM_ROOT systemctl enable snmp.timer sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get remove -y python-dev