diff options
Diffstat (limited to 'resources/libraries/python/Constants.py')
-rw-r--r-- | resources/libraries/python/Constants.py | 103 |
1 files changed, 102 insertions, 1 deletions
diff --git a/resources/libraries/python/Constants.py b/resources/libraries/python/Constants.py index e01536b5e6..86cbefeb9e 100644 --- a/resources/libraries/python/Constants.py +++ b/resources/libraries/python/Constants.py @@ -1,4 +1,4 @@ -# Copyright (c) 2019 Cisco and/or its affiliates. +# Copyright (c) 2020 Cisco 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: @@ -14,6 +14,104 @@ """Constants used in CSIT.""" +import os + + +def get_str_from_env(env_var_names, default_value): + """Attempt to read string from environment variable, return that or default. + + If environment variable exists, but is empty (and default is not), + empty string is returned. + + Several environment variable names are examined, as CSIT currently supports + a mix of naming conventions. + Here "several" means there are hard coded prefixes to try, + and env_var_names itself can be single name, or a list or a tuple of names. + + :param env_var_names: Base names of environment variable to attempt to read. + :param default_value: Value to return if the env var does not exist. + :type env_var_names: str, or list of str, or tuple of str + :type default_value: str + :returns: The value read, or default value. + :rtype: str + """ + prefixes = ("FDIO_CSIT_", "CSIT_", "") + if not isinstance(env_var_names, (list, tuple)): + env_var_names = [env_var_names] + for name in env_var_names: + for prefix in prefixes: + value = os.environ.get(prefix + name, None) + if value is not None: + return value + return default_value + + +def get_int_from_env(env_var_names, default_value): + """Attempt to read int from environment variable, return that or default. + + String value is read, default is returned also if conversion fails. + + :param env_var_names: Base names of environment variable to attempt to read. + :param default_value: Value to return if read or conversion fails. + :type env_var_names: str, or list of str, or tuple of str + :type default_value: int + :returns: The value read, or default value. + :rtype: int + """ + env_str = get_str_from_env(env_var_names, "") + try: + return int(env_str) + except ValueError: + return default_value + + +def get_float_from_env(env_var_names, default_value): + """Attempt to read float from environment variable, return that or default. + + String value is read, default is returned also if conversion fails. + + :param env_var_names: Base names of environment variable to attempt to read. + :param default_value: Value to return if read or conversion fails. + :type env_var_names: str, or list of str, or tuple of str + :type default_value: float + :returns: The value read, or default value. + :rtype: float + """ + env_str = get_str_from_env(env_var_names, "") + try: + return float(env_str) + except ValueError: + return default_value + + +def get_pessimistic_bool_from_env(env_var_names): + """Attempt to read bool from environment variable, assume False by default. + + Conversion is lenient and pessimistic, only few strings are considered true. + + :param env_var_names: Base names of environment variable to attempt to read. + :type env_var_names: str, or list of str, or tuple of str + :returns: The value read, or False. + :rtype: bool + """ + env_str = get_str_from_env(env_var_names, "").lower() + return bool(env_str in ("true", "yes", "y", "1")) + + +def get_optimistic_bool_from_env(env_var_names): + """Attempt to read bool from environment variable, assume True by default. + + Conversion is lenient and optimistic, only few strings are considered false. + + :param env_var_names: Base names of environment variable to attempt to read. + :type env_var_names: str, or list of str, or tuple of str + :returns: The value read, or True. + :rtype: bool + """ + env_str = get_str_from_env(env_var_names, "").lower() + return bool(env_str not in ("false", "no", "n", "0")) + + class Constants(object): """Constants used in CSIT. @@ -109,6 +207,9 @@ class Constants(object): # Equivalent to ~0 used in vpp code BITWISE_NON_ZERO = 0xffffffff + # Global "kill switch" for CRC checking during runtime. + FAIL_ON_CRC_MISMATCH = get_pessimistic_bool_from_env("FAIL_ON_CRC_MISMATCH") + # Mapping from NIC name to its bps limit. # TODO: Implement logic to lower limits to TG NIC or software. Or PCI. NIC_NAME_TO_LIMIT = { |