Exemple #1
0
 def test_15_no_options_passed(self):
     my_dict = {}
     job_records = jobs.view_job_records(jobs_conn, op, **my_dict)
     self.assertEqual(len(job_records), 4)
Exemple #2
0
def main():

    parser = argparse.ArgumentParser(description="""
        Description: Translate command line arguments into
        SQLite instructions for the Flux Accounting Database.
        """)
    subparsers = parser.add_subparsers(help="sub-command help",
                                       dest="subcommand")
    subparsers.required = True

    parser.add_argument("-p",
                        "--path",
                        dest="path",
                        help="specify location of database file")

    parser.add_argument(
        "-o",
        "--output-file",
        dest="output_file",
        help="specify location of output file",
    )

    subparser_view_user = subparsers.add_parser(
        "view-user",
        help="view a user's information in the accounting database")
    subparser_view_user.set_defaults(func="view_user")
    subparser_view_user.add_argument("username",
                                     help="username",
                                     metavar=("USERNAME"))

    subparser_add_user = subparsers.add_parser(
        "add-user", help="add a user to the accounting database")
    subparser_add_user.set_defaults(func="add_user")
    subparser_add_user.add_argument(
        "--username",
        help="username",
        metavar="USERNAME",
    )
    subparser_add_user.add_argument(
        "--admin-level",
        help="admin level",
        default=1,
        metavar="ADMIN_LEVEL",
    )
    subparser_add_user.add_argument(
        "--account",
        help="account to charge jobs against",
        metavar="ACCOUNT",
    )
    subparser_add_user.add_argument(
        "--parent-acct",
        help="parent account",
        default="",
        metavar="PARENT_ACCOUNT",
    )
    subparser_add_user.add_argument(
        "--shares",
        help="shares",
        default=1,
        metavar="SHARES",
    )
    subparser_add_user.add_argument(
        "--max-jobs",
        help="max jobs",
        default=1,
        metavar="MAX_JOBS",
    )
    subparser_add_user.add_argument(
        "--max-wall-pj",
        help="max wall time per job",
        default=60,
        metavar="MAX_WALL_PJ",
    )

    subparser_delete_user = subparsers.add_parser(
        "delete-user", help="remove a user from the accounting database")
    subparser_delete_user.set_defaults(func="delete_user")
    subparser_delete_user.add_argument("username",
                                       help="username",
                                       metavar=("USERNAME"))

    subparser_edit_user = subparsers.add_parser("edit-user",
                                                help="edit a user's value")
    subparser_edit_user.set_defaults(func="edit_user")
    subparser_edit_user.add_argument(
        "--username",
        help="username",
        metavar="USERNAME",
    )
    subparser_edit_user.add_argument(
        "--field",
        help="column name",
        metavar="FIELD",
    )
    subparser_edit_user.add_argument(
        "--new-value",
        help="new value",
        metavar="VALUE",
    )

    subparser_view_job_records = subparsers.add_parser("view-job-records",
                                                       help="view job records")
    subparser_view_job_records.set_defaults(func="view_job_records")
    subparser_view_job_records.add_argument(
        "-u",
        "--user",
        help="username",
        metavar="USERNAME",
    )
    subparser_view_job_records.add_argument("-j",
                                            "--jobid",
                                            help="jobid",
                                            metavar="JOBID")
    subparser_view_job_records.add_argument(
        "-a",
        "--after-start-time",
        help="start time",
        metavar="START TIME",
    )
    subparser_view_job_records.add_argument(
        "-b",
        "--before-end-time",
        help="end time",
        metavar="END TIME",
    )

    subparser_create_db = subparsers.add_parser(
        "create-db", help="create the flux-accounting database")
    subparser_create_db.set_defaults(func="create_db")

    subparser_add_bank = subparsers.add_parser("add-bank",
                                               help="add a new bank")
    subparser_add_bank.set_defaults(func="add_bank")
    subparser_add_bank.add_argument(
        "bank",
        help="bank name",
        metavar="BANK",
    )
    subparser_add_bank.add_argument("--parent-bank",
                                    help="parent bank name",
                                    default="",
                                    metavar="PARENT BANK")
    subparser_add_bank.add_argument(
        "shares",
        help="number of shares to allocate to bank",
        metavar="SHARES")

    subparser_view_bank = subparsers.add_parser("view-bank",
                                                help="view bank information")
    subparser_view_bank.set_defaults(func="view_bank")
    subparser_view_bank.add_argument(
        "bank",
        help="bank name",
        metavar="BANK",
    )

    subparser_delete_bank = subparsers.add_parser("delete-bank",
                                                  help="remove a bank")
    subparser_delete_bank.set_defaults(func="delete_bank")
    subparser_delete_bank.add_argument(
        "bank",
        help="bank name",
        metavar="BANK",
    )

    subparser_edit_bank = subparsers.add_parser(
        "edit-bank", help="edit a bank's allocation")
    subparser_edit_bank.set_defaults(func="edit_bank")
    subparser_edit_bank.add_argument(
        "bank",
        help="bank",
        metavar="BANK",
    )
    subparser_edit_bank.add_argument(
        "--shares",
        help="new shares value",
        metavar="SHARES",
    )

    subparser_print_hierarchy = subparsers.add_parser(
        "print-hierarchy", help="print accounting database")
    subparser_print_hierarchy.set_defaults(func="print_hierarchy")

    args = parser.parse_args()

    path = args.path if args.path else flux.accounting.db_path
    # if we are creating the DB for the first time, we need
    # to ONLY create the DB and then exit out successfully
    if args.func == "create_db":
        c.create_db(path)
        sys.exit(0)

    # try to open database file; will exit with -1 if database file not found
    if not os.path.isfile(path):
        print(f"Database file does not exist: {path}", file=sys.stderr)
        sys.exit(1)

    db_uri = "file:" + path + "?mode=rw"
    try:
        conn = sqlite3.connect(db_uri, uri=True)
    except sqlite3.OperationalError:
        print(f"Unable to open database file: {db_uri}", file=sys.stderr)
        sys.exit(1)

    # set path for output file
    output_file = args.output_file if args.output_file else None

    try:
        if args.func == "view_user":
            aclif.view_user(conn, args.username)
        elif args.func == "add_user":
            aclif.add_user(
                conn,
                args.username,
                args.account,
                args.admin_level,
                args.shares,
                args.max_jobs,
                args.max_wall_pj,
            )
        elif args.func == "delete_user":
            aclif.delete_user(conn, args.username)
        elif args.func == "edit_user":
            aclif.edit_user(conn, args.username, args.field, args.new_value)
        elif args.func == "view_job_records":
            jobs.view_job_records(
                conn,
                output_file,
                jobid=args.jobid,
                user=args.user,
                before_end_time=args.before_end_time,
                after_start_time=args.after_start_time,
            )
        elif args.func == "add_bank":
            aclif.add_bank(conn, args.bank, args.shares, args.parent_bank)
        elif args.func == "view_bank":
            aclif.view_bank(conn, args.bank)
        elif args.func == "delete_bank":
            aclif.delete_bank(conn, args.bank)
        elif args.func == "edit_bank":
            aclif.edit_bank(conn, args.bank, args.shares)
        elif args.func == "print_hierarchy":
            print(ph.print_full_hierarchy(conn))
        else:
            print(parser.print_usage())
    finally:
        conn.close()
Exemple #3
0
 def test_13_multiple_params_3(self):
     my_dict = {"before_end_time": 5000, "user": "******"}
     job_records = jobs.view_job_records(jobs_conn, op, **my_dict)
     self.assertEqual(len(job_records), 1)
Exemple #4
0
 def test_14_multiple_params_4(self):
     my_dict = {"jobid": 102, "after_start_time": 0}
     job_records = jobs.view_job_records(jobs_conn, op, **my_dict)
     self.assertEqual(len(job_records), 1)
Exemple #5
0
 def test_11_multiple_params_1(self):
     my_dict = {"user": "******", "after_start_time": 1009}
     job_records = jobs.view_job_records(jobs_conn, op, **my_dict)
     self.assertEqual(len(job_records), 1)
Exemple #6
0
 def test_12_multiple_params_2(self):
     my_dict = {"user": "******", "before_end_time": 1021}
     job_records = jobs.view_job_records(jobs_conn, op, **my_dict)
     self.assertEqual(len(job_records), 1)
Exemple #7
0
 def test_09_by_user_failure(self):
     my_dict = {"user": "******"}
     job_records = jobs.view_job_records(jobs_conn, op, **my_dict)
     self.assertEqual(len(job_records), 0)
Exemple #8
0
 def test_10_by_user_success(self):
     my_dict = {"user": "******"}
     job_records = jobs.view_job_records(jobs_conn, op, **my_dict)
     self.assertEqual(len(job_records), 1)
Exemple #9
0
 def test_07_before_end_time_some(self):
     my_dict = {"before_end_time": 3000}
     job_records = jobs.view_job_records(jobs_conn, op, **my_dict)
     self.assertEqual(len(job_records), 2)
Exemple #10
0
 def test_08_before_end_time_none(self):
     my_dict = {"before_end_time": 0}
     job_records = jobs.view_job_records(jobs_conn, op, **my_dict)
     self.assertEqual(len(job_records), 0)
Exemple #11
0
 def test_06_before_end_time_all(self):
     my_dict = {"before_end_time": 5000}
     job_records = jobs.view_job_records(jobs_conn, op, **my_dict)
     self.assertEqual(len(job_records), 4)
Exemple #12
0
 def test_05_after_start_time_none(self):
     my_dict = {"after_start_time": 5000}
     job_records = jobs.view_job_records(jobs_conn, op, **my_dict)
     self.assertEqual(len(job_records), 0)
Exemple #13
0
 def test_03_after_start_time_all(self):
     my_dict = {"after_start_time": 0}
     job_records = jobs.view_job_records(jobs_conn, op, **my_dict)
     self.assertEqual(len(job_records), 4)
Exemple #14
0
 def test_02_with_jobid_failure(self):
     my_dict = {"jobid": 000}
     job_records = jobs.view_job_records(jobs_conn, op, **my_dict)
     self.assertEqual(len(job_records), 0)
Exemple #15
0
 def test_01_with_jobid_valid(self):
     my_dict = {"jobid": 102}
     job_records = jobs.view_job_records(jobs_conn, op, **my_dict)
     self.assertEqual(len(job_records), 1)