From 0ec1e18444e4ec7441e1e83418024a06b647968a Mon Sep 17 00:00:00 2001 From: Andrei Belov Date: Tue, 14 Jan 2025 11:32:56 +0400 Subject: [PATCH] Update agent version to 1.8.3 (#119) * Update agent version to 1.8.3 Changes: - amplify.agent.common.runner migrated to latest PEP 3143 implementation, - added support for packaging Ubuntu 24.04 "noble", - fixed package building for RHEL 9. * packages: fixed issues found by internal CI --- README.md | 4 +-- amplify/agent/common/context.py | 2 +- amplify/agent/common/runner.py | 22 ++++++++---- etc/chkconfig/amplify-agent | 23 ++++++++++-- etc/init.d/amplify-agent | 18 +++++++++- packages/install.sh | 2 +- .../nginx-amplify-agent/deb/debian/changelog | 6 ++++ .../deb/debian/control.noble | 35 +++++++++++++++++++ .../requirements-rhel9.txt | 1 + .../requirements-ubuntu2404.txt | 4 +++ .../rpm/nginx-amplify-agent.spec | 4 +++ packages/nginx-amplify-agent/setup-py310.py | 2 +- packages/nginx-amplify-agent/setup-py39.py | 2 +- packages/nginx-amplify-agent/setup.py | 2 +- packages/version | 2 +- tools/builders/deb.py | 1 + 16 files changed, 112 insertions(+), 18 deletions(-) create mode 100644 packages/nginx-amplify-agent/deb/debian/control.noble create mode 100644 packages/nginx-amplify-agent/requirements-ubuntu2404.txt diff --git a/README.md b/README.md index 72c8591..b1128e3 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,8 @@ The NGINX Amplify Agent is a Python application that provides system and NGINX metric collection. It is part of NGINX Amplify — a free configuration monitoring tool for NGINX. -Please check the list of the supported operating systems [here](https://docs.nginx.com/amplify/faq/nginx-amplify-agent/#what-operating-systems-are-supported). +Please check the list of the supported operating systems [here](https://docs.nginx.com/nginx-amplify/faq/nginx-amplify-agent/#what-operating-systems-are-supported). -This repository is not for installation purposes. To install the agent, please follow [this](https://docs.nginx.com/amplify/nginx-amplify-agent/install/installing-amplify-agent/) document. +This repository is not for installation purposes. To install the agent, please follow [this](https://docs.nginx.com/nginx-amplify/nginx-amplify-agent/install/installing-amplify-agent/) document. For more information about NGINX Amplify, please check the official documentation [here](https://docs.nginx.com/nginx-amplify/). diff --git a/amplify/agent/common/context.py b/amplify/agent/common/context.py index bf67a08..5bf5bc2 100644 --- a/amplify/agent/common/context.py +++ b/amplify/agent/common/context.py @@ -37,7 +37,7 @@ class Context(Singleton): # define vars self.cpu_last_check = 0 - self.version_semver = (1, 8, 2) + self.version_semver = (1, 8, 3) self.version_build = 1 self.uuid = None self.version = '%s-%s' % ('.'.join(map(str, self.version_semver)), self.version_build) diff --git a/amplify/agent/common/runner.py b/amplify/agent/common/runner.py index 3169bdb..d8007f3 100644 --- a/amplify/agent/common/runner.py +++ b/amplify/agent/common/runner.py @@ -1,32 +1,42 @@ # -*- coding: utf-8 -*- import signal -from daemon import runner +import daemon +from daemon.pidfile import PIDLockFile from amplify.agent.common.context import context __author__ = "Mike Belov" __copyright__ = "Copyright (C) Nginx, Inc. All rights reserved." __license__ = "" -__maintainer__ = "Mike Belov" -__email__ = "dedm@nginx.com" +__maintainer__ = "Andrei Belov" +__email__ = "a.belov@f5.com" -class Runner(runner.DaemonRunner): +class Runner: def __init__(self, app): - super(Runner, self).__init__(app) - def cleanup(signum, frame): app.stop() + self.daemon_context = daemon.DaemonContext() + self.app = app self.daemon_context.detach_process = True + self.daemon_context.pidfile = PIDLockFile('/var/run/amplify-agent/amplify-agent.pid') self.daemon_context.files_preserve = context.get_file_handlers() self.daemon_context.signal_map = { signal.SIGTERM: cleanup } + self._open_streams_from_app_stream_paths(app) def _open_streams_from_app_stream_paths(self, app): self.daemon_context.stdin = open(app.stdin_path, 'rt') self.daemon_context.stdout = open(app.stdout_path, 'w+t') self.daemon_context.stderr = open(app.stderr_path, 'w+t') + + def do_action(self): + """ + Stub function to mock old DaemonRunner behavior + """ + with self.daemon_context: + self.app.run() diff --git a/etc/chkconfig/amplify-agent b/etc/chkconfig/amplify-agent index 2514f1c..a86ef45 100755 --- a/etc/chkconfig/amplify-agent +++ b/etc/chkconfig/amplify-agent @@ -75,9 +75,19 @@ start() { chown -f $user /etc/amplify-agent/agent.conf chown -f $user /var/log/amplify-agent/agent.log daemon --user=$user $binary start --config=$conffile --pid=$pidfile - fi; + fi + RETVAL="$?" echo - return $RETVAL + if [ "$RETVAL" -ne 0 ]; then + return "$RETVAL" + fi + for i in 1 2 3 4 5; do + if [ -e "$pidfile" ]; then + return 0 + fi + sleep 1 + done + return 1 } stop() { @@ -123,6 +133,13 @@ debug() { case "$1" in start) + if status -p $pidfile amplify-agent >/dev/null 2>&1; then + echo "amplify-agent is already running" >&2 + exit 0 + fi + if [ -e "$pidfile" ]; then + rm -f "$pidfile" + fi start RETVAL=$? ;; @@ -135,7 +152,7 @@ case "$1" in RETVAL=$? ;; status) - status -p $pidfile amplify-agent + status -p $pidfile amplify-agent RETVAL=$? ;; configtest) diff --git a/etc/init.d/amplify-agent b/etc/init.d/amplify-agent index 22f43a7..363d7bc 100755 --- a/etc/init.d/amplify-agent +++ b/etc/init.d/amplify-agent @@ -66,7 +66,16 @@ do_start() chown -f $USER /var/log/amplify-agent/agent.log start-stop-daemon --start --chuid $USER --exec $DAEMON start -- $DAEMON_ARGS RETVAL="$?" - return "$RETVAL" + if [ "$RETVAL" -ne 0 ]; then + return "$RETVAL" + fi + for i in 1 2 3 4 5; do + if [ -e "$PIDFILE" ]; then + return 0 + fi + sleep 1 + done + return 1 } do_stop() @@ -94,6 +103,13 @@ do_debug() { case "$1" in start) + if status_of_proc -p "$PIDFILE" "$DAEMON" "$NAME" >/dev/null 2>&1; then + echo " * $NAME is already running" >&2 + exit 0 + fi + if [ -e "$PIDFILE" ]; then + rm -f "$PIDFILE" + fi [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC " "$NAME" do_start case "$?" in diff --git a/packages/install.sh b/packages/install.sh index a290870..67c3266 100755 --- a/packages/install.sh +++ b/packages/install.sh @@ -467,7 +467,7 @@ case "$os" in incr_step case "$codename" in - buster|bullseye|bookworm|bionic|focal|jammy) + buster|bullseye|bookworm|bionic|focal|jammy|noble) check_python 3 python_supported=3 ;; diff --git a/packages/nginx-amplify-agent/deb/debian/changelog b/packages/nginx-amplify-agent/deb/debian/changelog index a2faa49..e3e0043 100644 --- a/packages/nginx-amplify-agent/deb/debian/changelog +++ b/packages/nginx-amplify-agent/deb/debian/changelog @@ -1,3 +1,9 @@ +nginx-amplify-agent (1.8.3-1) stable; urgency=low + + * migrated to the most recent daemonizing logic (PEP 3143) + + -- Andrei Belov Wed, 8 Jan 2025 16:08:40 +0400 + nginx-amplify-agent (1.8.2-1) stable; urgency=low * pyMySQL updated to 1.1.1 diff --git a/packages/nginx-amplify-agent/deb/debian/control.noble b/packages/nginx-amplify-agent/deb/debian/control.noble new file mode 100644 index 0000000..a649ae7 --- /dev/null +++ b/packages/nginx-amplify-agent/deb/debian/control.noble @@ -0,0 +1,35 @@ +Source: nginx-amplify-agent +Homepage: https://github.com/nginxinc/nginx-amplify-agent +Maintainer: NGINX Packaging +Section: python +Priority: optional +Build-Depends: debhelper (>= 13), + dpkg-dev (>= 1.22), + python3, + dh-python +Standards-Version: 4.5.0 + +Package: nginx-amplify-agent +Description: Agent for NGINX Amplify monitoring platform + The NGINX Amplify Agent is a small, Python application that provides + system and NGINX metric collection. It is part of NGINX Amplify - + the monitoring and configuration assistance service for NGINX. + . + This package installs and runs NGINX Amplify Agent daemon. + . + See http://nginx.com/amplify for more information +Architecture: any +Depends: ${misc:Depends}, + ${python3:Depends}, + python3-daemon, + python3-pyasyncore, + python3-setproctitle, + python3-greenlet, + python3-gevent, + python3-requests, + python3-ujson, + python3-netifaces, + python3-pymysql, + python3-psutil, + lsb-release, + adduser diff --git a/packages/nginx-amplify-agent/requirements-rhel9.txt b/packages/nginx-amplify-agent/requirements-rhel9.txt index f4db2e7..2879924 100644 --- a/packages/nginx-amplify-agent/requirements-rhel9.txt +++ b/packages/nginx-amplify-agent/requirements-rhel9.txt @@ -7,3 +7,4 @@ rstr==3.0.0 python-daemon==2.2.4 ujson==5.4.0 PyMySQL==1.1.1 +setuptools<=70.3.0 diff --git a/packages/nginx-amplify-agent/requirements-ubuntu2404.txt b/packages/nginx-amplify-agent/requirements-ubuntu2404.txt new file mode 100644 index 0000000..acdbb51 --- /dev/null +++ b/packages/nginx-amplify-agent/requirements-ubuntu2404.txt @@ -0,0 +1,4 @@ +netaddr==0.8.0 +flup==1.0.3 +crossplane==0.5.8 +rstr==3.0.0 diff --git a/packages/nginx-amplify-agent/rpm/nginx-amplify-agent.spec b/packages/nginx-amplify-agent/rpm/nginx-amplify-agent.spec index 4515ada..74794cc 100644 --- a/packages/nginx-amplify-agent/rpm/nginx-amplify-agent.spec +++ b/packages/nginx-amplify-agent/rpm/nginx-amplify-agent.spec @@ -157,6 +157,10 @@ fi %changelog +* Wed Jan 8 2025 Andrei Belov 1.8.3-1 +- 1.8.3-1 +- migrated to the most recent daemonizing logic (PEP 3143) + * Mon May 27 2024 Andrei Belov 1.8.2-1 - 1.8.2-1 - pyMySQL updated to 1.1.1 diff --git a/packages/nginx-amplify-agent/setup-py310.py b/packages/nginx-amplify-agent/setup-py310.py index 2509a0e..d900f06 100644 --- a/packages/nginx-amplify-agent/setup-py310.py +++ b/packages/nginx-amplify-agent/setup-py310.py @@ -33,7 +33,7 @@ elif is_deb(): setup( name="nginx-amplify-agent", - version="1.8.2", + version="1.8.3", author="Mike Belov", author_email="dedm@nginx.com", description="NGINX Amplify Agent", diff --git a/packages/nginx-amplify-agent/setup-py39.py b/packages/nginx-amplify-agent/setup-py39.py index 2509a0e..d900f06 100644 --- a/packages/nginx-amplify-agent/setup-py39.py +++ b/packages/nginx-amplify-agent/setup-py39.py @@ -33,7 +33,7 @@ elif is_deb(): setup( name="nginx-amplify-agent", - version="1.8.2", + version="1.8.3", author="Mike Belov", author_email="dedm@nginx.com", description="NGINX Amplify Agent", diff --git a/packages/nginx-amplify-agent/setup.py b/packages/nginx-amplify-agent/setup.py index 0f8d08f..e83bd39 100644 --- a/packages/nginx-amplify-agent/setup.py +++ b/packages/nginx-amplify-agent/setup.py @@ -33,7 +33,7 @@ elif is_deb(): setup( name="nginx-amplify-agent", - version="1.8.2", + version="1.8.3", author="Mike Belov", author_email="dedm@nginx.com", description="NGINX Amplify Agent", diff --git a/packages/version b/packages/version index 80be405..8f3b86f 100644 --- a/packages/version +++ b/packages/version @@ -1 +1 @@ -1.8.2-1 +1.8.3-1 diff --git a/tools/builders/deb.py b/tools/builders/deb.py index 8ce8065..9091592 100644 --- a/tools/builders/deb.py +++ b/tools/builders/deb.py @@ -19,6 +19,7 @@ COMPAT_LEVELS = { 'bullseye': 13, 'jammy': 13, 'bookworm': 13, + 'noble': 13, }