aboutsummaryrefslogtreecommitdiffstats
path: root/resources/libraries/python/NginxUtil.py
diff options
context:
space:
mode:
authorxizhanx <xix.zhang@intel.com>2021-04-15 13:22:40 +0800
committerxizhanx <xix.zhang@intel.com>2021-05-20 09:53:59 +0800
commit9377c956a86e42727039d9dab8879c10c9399f4c (patch)
tree331c3e3792a25ed77058ada364d3d59308ccdfb1 /resources/libraries/python/NginxUtil.py
parentd4f082106d3e8cfda1c0d52bcafb177b46562944 (diff)
perf: add TCP Nginx+LDPRELOAD suites
1. Suite steup add download nginx 2. Add nginx-1.14.2/1.15.0 ldp test suite 3. Add NginxUtils,NginxConfigGenerator method 4. Taskset the PID of nginx to the unused cores in VPP and these cores are under NIC's NUMA ID 5. cleanup add Kill Processes - nohup Signed-off-by: xizhanx <xix.zhang@intel.com> Change-Id: Idbf0e4ec3bf63e88281a8e3e34f52e00a6801c85 Signed-off-by: Dave Wallace <dwallacelf@gmail.com>
Diffstat (limited to 'resources/libraries/python/NginxUtil.py')
-rw-r--r--resources/libraries/python/NginxUtil.py124
1 files changed, 124 insertions, 0 deletions
diff --git a/resources/libraries/python/NginxUtil.py b/resources/libraries/python/NginxUtil.py
new file mode 100644
index 0000000000..a19ac37291
--- /dev/null
+++ b/resources/libraries/python/NginxUtil.py
@@ -0,0 +1,124 @@
+# Copyright (c) 2021 Intel and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""NGINX Utilities Library."""
+
+from resources.libraries.python.OptionString import OptionString
+from resources.libraries.python.ssh import exec_cmd_no_error
+from resources.libraries.python.topology import NodeType
+from resources.libraries.python.DUTSetup import DUTSetup
+
+
+class NginxUtil:
+ """Utilities for NGINX."""
+
+ @staticmethod
+ def get_cmd_options(**kwargs):
+ """Create parameters options.
+
+ :param kwargs: Dict of cmd parameters.
+ :type kwargs: dict
+ :returns: cmd parameters.
+ :rtype: OptionString
+ """
+ cmd_options = OptionString()
+ nginx_path = kwargs.get(u"path", u"/usr/local/nginx")
+ cmd_options.add(nginx_path)
+ options = OptionString(prefix=u"-")
+ # Show Nginx Version
+ options.add(u"v")
+ # Verify Configuration
+ options.add(u"t")
+ # Send signal to a master process: stop, quit, reopen.
+ options.add_with_value_from_dict(
+ u"s", u"signal", kwargs
+ )
+ # Set prefix path (default: /usr/local/nginx/).
+ options.add_with_value_from_dict(
+ u"p", u"prefix", kwargs
+ )
+ # Set configuration file (default: conf/nginx.conf).
+ options.add_with_value_from_dict(
+ u"c", u"filename", kwargs
+ )
+ # Set global directives out of configuration file
+ options.add_with_value_from_dict(
+ u"g", u"directives", kwargs
+ )
+ cmd_options.extend(options)
+ return cmd_options
+
+ @staticmethod
+ def nginx_cmd_stop(node, path):
+ """Stop NGINX cmd app on node.
+ :param node: Topology node.
+ :param path: Nginx install path.
+ :type node: dict
+ :type path: str
+ :returns: nothing
+ """
+ cmd_options = NginxUtil.get_cmd_options(path=path, signal=u"stop")
+
+ exec_cmd_no_error(node, cmd_options, sudo=True, disconnect=True,
+ message=u"Nginx stop failed!")
+
+ @staticmethod
+ def nginx_cmd_start(node, path, filename):
+ """Start NGINX cmd app on node.
+ :param node: Topology node.
+ :param path: Nginx install path.
+ :param filename: Nginx conf name.
+ :type node: dict
+ :type path: str
+ :type filename: str
+
+ :returns: nothing
+ """
+ cmd_options = NginxUtil.get_cmd_options(path=path,
+ filename=filename)
+
+ exec_cmd_no_error(node, cmd_options, sudo=True, disconnect=True,
+ message=u"Nginx start failed!")
+
+ @staticmethod
+ def nginx_config_verify(node, path):
+ """Start NGINX cmd app on node.
+ :param node: Topology node.
+ :param path: Nginx install path.
+ :type node: dict
+ :type path: str
+ :returns: nothing
+ """
+ cmd_options = NginxUtil.get_cmd_options(path=path)
+ exec_cmd_no_error(node, cmd_options, sudo=True, disconnect=True,
+ message=u"Nginx Config failed!")
+
+ @staticmethod
+ def taskset_nginx_pid_to_idle_cores(node, cpu_idle_list):
+ """Set idle cpus to NGINX pid on node.
+
+ :param node: Topology node.
+ :param cpu_idle_list: Idle Cpus.
+ :type node: dict
+ :type cpu_idle_list: list
+ :returns: nothing
+ """
+ if node[u"type"] != NodeType.DUT:
+ raise RuntimeError(u'Node type is not a DUT!')
+ pids = DUTSetup.get_pid(node, u"nginx")
+ for index, pid in enumerate(pids):
+ cmd = f"taskset -pc {cpu_idle_list[index]} {pid}"
+ exec_cmd_no_error(
+ node, cmd, sudo=True, timeout=180,
+ message=u"taskset cores to nginx pid failed!"
+ )