diff --git a/augur/application/cli/_cli_util.py b/augur/application/cli/_cli_util.py index 6ab969c6f5..f1376a0e79 100644 --- a/augur/application/cli/_cli_util.py +++ b/augur/application/cli/_cli_util.py @@ -4,6 +4,7 @@ import psutil import signal from urllib.parse import urlparse +import sqlalchemy as s from augur.tasks.init.redis_connection import get_redis_connection @@ -69,4 +70,21 @@ def raise_open_file_limit(num_files): resource.setrlimit(resource.RLIMIT_NOFILE, (num_files, current_hard)) - return \ No newline at end of file + return + +def get_db_version(engine): + """ a helper function to return the database version + used in print_db_version and upgrade_db_version in the db cli module + """ + + db_version_sql = s.sql.text( + """ + SELECT * FROM augur_operations.augur_settings WHERE setting = 'augur_data_version' + """ + ) + + with engine.connect() as connection: + result = int(connection.execute(db_version_sql).fetchone()[2]) + + engine.dispose() + return result \ No newline at end of file diff --git a/augur/application/cli/db.py b/augur/application/cli/db.py index a989050518..f50945c27f 100644 --- a/augur/application/cli/db.py +++ b/augur/application/cli/db.py @@ -29,6 +29,8 @@ process_repo_group_csv, ) +from ._cli_util import get_db_version + logger = logging.getLogger(__name__) @@ -258,21 +260,6 @@ def add_github_org(ctx, organization_name): controller.add_cli_org(organization_name) -# get_db_version is a helper function to print_db_version and upgrade_db_version -def get_db_version(engine): - db_version_sql = s.sql.text( - """ - SELECT * FROM augur_operations.augur_settings WHERE setting = 'augur_data_version' - """ - ) - - with engine.connect() as connection: - result = int(connection.execute(db_version_sql).fetchone()[2]) - - engine.dispose() - return result - - @cli.command("print-db-version") @test_connection @test_db_connection diff --git a/augur/application/cli/selftest.py b/augur/application/cli/selftest.py new file mode 100644 index 0000000000..0304d818ad --- /dev/null +++ b/augur/application/cli/selftest.py @@ -0,0 +1,51 @@ +# SPDX-License-Identifier: MIT +import logging +import click +import sqlalchemy as s +from sqlalchemy import select, func + +from augur.application.cli import ( + test_connection, + test_db_connection, + with_database, + DatabaseContext, +) +from augur.application.db.models.augur_data import Commit + +# from augur.application.db.session import DatabaseSession +from datetime import datetime +from augur.application.db.models import Repo + +from ._cli_util import get_db_version + + +logger = logging.getLogger(__name__) + + +@click.group("selftest", short_help="Augur self-testing utilities") +@click.pass_context +def cli(ctx): + ctx.obj = DatabaseContext() + + +@cli.command("report") +@test_connection +@test_db_connection +@with_database +@click.pass_context +def run_selftest_report(ctx): + """ + Run queries to evaluate various aspects of the augur system's functioning and produce a report + """ + click.echo('Generating Augur selftest report....') + + cmt_author_name_issue_3740_query = ( + select(func.count()) + .select_from(Commit) + .where(Commit.cmt_author_name == '') + ) + cmt_author_name_issue_3740_count = None + + with ctx.obj.engine.begin() as connection: + cmt_author_name_issue_3740_count = connection.execute(cmt_author_name_issue_3740_query).scalar_one() + click.echo(f'Issue 3740 count: {cmt_author_name_issue_3740_count} commit files in the `commits` table contain authors with an empty string as their name')