wadebug/wa_actions/implementations/check_mysql_version.py (32 lines of code) (raw):
# Copyright (c) Facebook, Inc. and its affiliates.
# This source code is licensed under the MIT license found in the
# LICENSE file in the root directory of this source tree.
from __future__ import absolute_import, division, print_function, unicode_literals
from distutils.version import LooseVersion
from wadebug import results
from wadebug.wa_actions.base import WAAction
from wadebug.wa_actions.mysql_utils import MySQLUtil
MIN_MYSQL_VERSION = LooseVersion("5.7")
MAX_MYSQL_VERSION = LooseVersion("8")
class CheckMySQLVersion(WAAction):
user_facing_name = "check_mysql_version"
short_description = "Check MySQL version"
config_dependencies = ("db.host", "db.port", "db.user", "db.password")
@classmethod
def _run(cls, config, *args, **kwargs):
try:
mysql_utils = MySQLUtil(**config.get("db"))
mysql_version = mysql_utils.get_mysql_version()
if is_version_valid(mysql_version):
return results.OK(cls)
else:
error_message = "Please make sure MySQL version is higher than 5.7.xx but NOT version 8. "
"Refer to https://developers.facebook.com/docs/whatsapp/guides/installation for more details"
return results.Problem(
cls,
"You are using an unsupported version of MySQL",
error_message,
"",
)
except Exception as e:
return results.Problem(cls, "Unable to connect to db", e, "")
def is_version_valid(version):
semver = LooseVersion(version)
return semver >= MIN_MYSQL_VERSION and semver < MAX_MYSQL_VERSION