X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=resources%2Flibraries%2Fpython%2FNginxUtil.py;fp=resources%2Flibraries%2Fpython%2FNginxUtil.py;h=a19ac372919c9963a59dda2e7ff2ed19e1992924;hb=9377c956a86e42727039d9dab8879c10c9399f4c;hp=0000000000000000000000000000000000000000;hpb=d4f082106d3e8cfda1c0d52bcafb177b46562944;p=csit.git 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!" + )