| /*****************************************************************************\ |
| * sacctmgr.h - definitions for all sacctmgr modules. |
| ***************************************************************************** |
| * Copyright (C) 2008-2009 Lawrence Livermore National Security. |
| * Copyright (C) 2002-2007 The Regents of the University of California. |
| * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). |
| * Written by Danny Auble <da@llnl.gov> |
| * CODE-OCEC-09-009. All rights reserved. |
| * |
| * This file is part of Slurm, a resource management program. |
| * For details, see <https://slurm.schedmd.com/>. |
| * Please also read the included file: DISCLAIMER. |
| * |
| * Slurm is free software; you can redistribute it and/or modify it under |
| * the terms of the GNU General Public License as published by the Free |
| * Software Foundation; either version 2 of the License, or (at your option) |
| * any later version. |
| * |
| * In addition, as a special exception, the copyright holders give permission |
| * to link the code of portions of this program with the OpenSSL library under |
| * certain conditions as described in each individual source file, and |
| * distribute linked combinations including the two. You must obey the GNU |
| * General Public License in all respects for all of the code used other than |
| * OpenSSL. If you modify file(s) with this exception, you may extend this |
| * exception to your version of the file(s), but you are not obligated to do |
| * so. If you do not wish to do so, delete this exception statement from your |
| * version. If you delete this exception statement from all source files in |
| * the program, then also delete it here. |
| * |
| * Slurm is distributed in the hope that it will be useful, but WITHOUT ANY |
| * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
| * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more |
| * details. |
| * |
| * You should have received a copy of the GNU General Public License along |
| * with Slurm; if not, write to the Free Software Foundation, Inc., |
| * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
| \*****************************************************************************/ |
| |
| #ifndef __SACCTMGR_H__ |
| #define __SACCTMGR_H__ |
| |
| #include "config.h" |
| |
| #include <ctype.h> |
| #include <errno.h> |
| #include <getopt.h> |
| #include <inttypes.h> |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <string.h> |
| #include <time.h> |
| #include <unistd.h> |
| |
| #if HAVE_READLINE |
| # include <readline/readline.h> |
| # include <readline/history.h> |
| #endif |
| |
| #include "slurm/slurm.h" |
| |
| #include "src/interfaces/jobacct_gather.h" |
| #include "src/common/parse_time.h" |
| #include "src/interfaces/accounting_storage.h" |
| #include "src/common/xstring.h" |
| #include "src/common/print_fields.h" |
| |
| #define MAX_INPUT_FIELDS 128 |
| #define FORMAT_STRING_SIZE 34 |
| |
| #define SA_SET_USER 0x0001 |
| #define SA_SET_ASSOC 0x0002 |
| #define SA_SET_CLUST 0x0004 |
| #define SA_SET_WCKEY 0x0008 |
| |
| typedef enum { |
| /* COMMON */ |
| PRINT_ACCT, |
| PRINT_CLUSTER, |
| PRINT_COORDS, |
| PRINT_CPUS, |
| PRINT_DESC, |
| PRINT_FEDERATION, |
| PRINT_FLAGS, |
| PRINT_NAME, |
| PRINT_PART, |
| PRINT_QOS, |
| PRINT_QOS_RAW, |
| PRINT_USER, |
| PRINT_WCKEYS, |
| |
| /* LIMITS */ |
| PRINT_FAIRSHARE = 1000, |
| PRINT_GRPCM, |
| PRINT_GRPCRM, |
| PRINT_GRPC, |
| PRINT_GRPTM, |
| PRINT_GRPTRM, |
| PRINT_GRPT, |
| PRINT_GRPJ, |
| PRINT_GRPJA, |
| PRINT_GRPMEM, |
| PRINT_GRPN, |
| PRINT_GRPS, |
| PRINT_GRPW, |
| PRINT_MAXCM, |
| PRINT_MAXCRM, |
| PRINT_MAXC, |
| PRINT_MAXCU, |
| PRINT_MAXTM, |
| PRINT_MAXTRM, |
| PRINT_MAXTRMA, |
| PRINT_MAXT, |
| PRINT_MAXTA, |
| PRINT_MAXTN, |
| PRINT_MAXTU, |
| PRINT_MAXJ, |
| PRINT_MAXJA, |
| PRINT_MAXJAA, |
| PRINT_MAXJAU, |
| PRINT_MAXJPA, |
| PRINT_MAXN, |
| PRINT_MAXNU, |
| PRINT_MAXS, |
| PRINT_MAXSA, |
| PRINT_MAXW, |
| PRINT_MINC, |
| PRINT_MINPT, |
| PRINT_MINT, |
| |
| /* ASSOCIATION */ |
| PRINT_DQOS = 2000, |
| PRINT_ID, |
| PRINT_LINEAGE, |
| PRINT_PID, |
| PRINT_PNAME, |
| PRINT_COMMENT, |
| |
| /* CLUSTER */ |
| PRINT_CHOST = 3000, |
| PRINT_CPORT, |
| PRINT_CLASS, |
| PRINT_FEATURES, |
| PRINT_FEDSTATE, |
| PRINT_FEDSTATERAW, |
| PRINT_TRES, |
| PRINT_NODECNT, |
| PRINT_NODEINX, |
| PRINT_CLUSTER_NODES, |
| PRINT_RPC_VERSION, |
| |
| /* ACCT */ |
| PRINT_ORG = 4000, |
| |
| /* USER */ |
| PRINT_ADMIN = 5000, |
| PRINT_DACCT, |
| PRINT_DWCKEY, |
| |
| /* QOS */ |
| PRINT_GRACE = 6000, |
| PRINT_PREE, |
| PRINT_PREEM, |
| PRINT_PRIO, |
| PRINT_PRXMPT, |
| PRINT_UF, |
| PRINT_UT, |
| PRINT_LF, |
| |
| /* PROBLEM */ |
| PRINT_PROBLEM = 7000, |
| |
| /* TXN */ |
| PRINT_ACTIONRAW = 8000, |
| PRINT_ACTION, |
| PRINT_ACTOR, |
| PRINT_INFO, |
| PRINT_TS, |
| PRINT_WHERE, |
| |
| /* EVENT */ |
| PRINT_DURATION, |
| PRINT_TIMEEND, |
| PRINT_EVENTRAW, |
| PRINT_EVENT, |
| PRINT_NODENAME, |
| PRINT_REASON, |
| PRINT_TIMESTART, |
| PRINT_STATERAW, |
| PRINT_STATE, |
| PRINT_TIMESUBMIT, |
| PRINT_TIMEELIGIBLE, |
| |
| /* INSTANCE */ |
| PRINT_INSTANCE_ID, |
| PRINT_INSTANCE_TYPE, |
| PRINT_EXTRA, |
| |
| /* RESOURCE */ |
| PRINT_COUNT = 9000, |
| PRINT_TYPE, |
| PRINT_SERVERTYPE, |
| PRINT_SERVER, |
| PRINT_CALLOWED, |
| PRINT_ALLOWED, |
| PRINT_ALLOCATED, |
| PRINT_USED, |
| PRINT_LAST_CONSUMED, |
| |
| /* RESERVATION */ |
| PRINT_ASSOC_NAME = 10000, |
| PRINT_UNUSED, |
| |
| } sacctmgr_print_t; |
| |
| |
| extern char *command_name; |
| extern int exit_code; /* sacctmgr's exit code, =1 on any error at any time */ |
| extern int exit_flag; /* program to terminate if =1 */ |
| extern int one_liner; /* one record per line if =1 */ |
| extern int quiet_flag; /* quiet=1, verbose=-1, normal=0 */ |
| extern int rollback_flag;/* immediate execute=0, else = 1 */ |
| extern int with_assoc_flag;/* show acct/user associations flag */ |
| extern int readonly_flag; /* make it so you can only run list commands */ |
| extern void *db_conn; |
| extern uint32_t my_uid; |
| extern char *my_user_name; |
| extern list_t *g_qos_list; |
| extern list_t *g_res_list; |
| extern list_t *g_tres_list; |
| extern const char *mime_type; /* user requested JSON or YAML */ |
| extern const char *data_parser; /* data_parser args */ |
| |
| extern bool user_case_norm; |
| extern bool tree_display; |
| extern bool have_db_conn; |
| |
| extern int sacctmgr_set_assoc_cond(slurmdb_assoc_cond_t *assoc_cond, |
| char *type, char *value, |
| int command_len); |
| extern int sacctmgr_set_assoc_rec(slurmdb_assoc_rec_t *assoc_rec, |
| char *type, char *value, |
| int command_len, int option, |
| bool *allow_option); |
| extern void sacctmgr_print_default_qos(uint32_t def_qos_id, |
| print_field_t *field, bool last); |
| extern void sacctmgr_print_assoc_rec(slurmdb_assoc_rec_t *assoc, |
| print_field_t *field, list_t *tree_list, |
| bool last); |
| extern int sacctmgr_set_qos_rec(slurmdb_qos_rec_t *qos, |
| char *type, char *value, |
| int command_len, int option, |
| bool *allow_option); |
| extern void sacctmgr_print_qos_rec(slurmdb_qos_rec_t *qos, |
| print_field_t *field, |
| bool last); |
| |
| extern int sacctmgr_add_assoc(int argc, char **argv); |
| extern int sacctmgr_add_user(int argc, char **argv); |
| extern int sacctmgr_add_account(int argc, char **argv); |
| extern int sacctmgr_add_cluster(int argc, char **argv); |
| extern int sacctmgr_add_federation(int argc, char **argv); |
| extern int sacctmgr_add_coord(int argc, char **argv); |
| extern int sacctmgr_add_qos(int argc, char **argv); |
| extern int sacctmgr_add_res(int argc, char **argv); |
| |
| extern int sacctmgr_list_assoc(int argc, char **argv); |
| extern int sacctmgr_list_user(int argc, char **argv); |
| extern int sacctmgr_list_account(int argc, char **argv); |
| extern int sacctmgr_list_cluster(int argc, char **argv); |
| extern int sacctmgr_list_config(void); |
| extern int sacctmgr_list_event(int argc, char **argv); |
| extern int sacctmgr_list_federation(int argc, char **argv); |
| extern int sacctmgr_list_instance(int argc, char **argv); |
| extern int sacctmgr_list_problem(int argc, char **argv); |
| extern int sacctmgr_list_qos(int argc, char **argv); |
| extern int sacctmgr_list_res(int argc, char **argv); |
| extern int sacctmgr_list_reservation(int argc, char **argv); |
| extern int sacctmgr_list_stats(int argc, char **argv); |
| extern int sacctmgr_list_tres(int, char **); |
| extern int sacctmgr_list_wckey(int argc, char **argv); |
| |
| extern int sacctmgr_modify_user(int argc, char **argv); |
| extern int sacctmgr_modify_account(int argc, char **argv); |
| extern int sacctmgr_modify_cluster(int argc, char **argv); |
| extern int sacctmgr_modify_federation(int argc, char **argv); |
| extern int sacctmgr_modify_job(int argc, char **argv); |
| extern int sacctmgr_modify_qos(int argc, char **argv); |
| extern int sacctmgr_modify_res(int argc, char **argv); |
| |
| extern int sacctmgr_delete_user(int argc, char **argv); |
| extern int sacctmgr_delete_account(int argc, char **argv); |
| extern int sacctmgr_delete_cluster(int argc, char **argv); |
| extern int sacctmgr_delete_coord(int argc, char **argv); |
| extern int sacctmgr_delete_federation(int argc, char **argv); |
| extern int sacctmgr_delete_qos(int argc, char **argv); |
| extern int sacctmgr_delete_res(int argc, char **argv); |
| |
| extern int sacctmgr_dump_cluster(int argc, char **argv); |
| |
| extern int sacctmgr_archive_dump(int argc, char **argv); |
| extern int sacctmgr_archive_load(int argc, char **argv); |
| |
| /* common.c */ |
| extern int parse_option_end(char *option, int *op_type, int *command_end); |
| extern bool common_verify_option_syntax(char *option, int op_type, |
| bool allow_op); |
| extern char *strip_quotes(char *option, int *increased, bool make_lower); |
| extern void notice_thread_init(void); |
| extern void notice_thread_fini(void); |
| extern int commit_check(char *warning); |
| extern int get_uint(char *in_value, uint32_t *out_value, char *type); |
| extern int get_uint16(char *in_value, uint16_t *out_value, char *type); |
| extern int get_uint64(char *in_value, uint64_t *out_value, char *type); |
| extern int get_double(char *in_value, double *out_value, char *type); |
| extern int addto_qos_char_list(list_t *char_list, list_t *qos_list, char *names, |
| int option); |
| extern int addto_action_char_list(list_t *char_list, char *names); |
| extern void sacctmgr_print_coord_list( |
| print_field_t *field, void *input, int last); |
| |
| extern void sacctmgr_print_tres(print_field_t *field, void *input, int last); |
| extern void sacctmgr_print_assoc_limits(slurmdb_assoc_rec_t *assoc); |
| extern void sacctmgr_print_cluster(slurmdb_cluster_rec_t *cluster); |
| extern void sacctmgr_print_federation(slurmdb_federation_rec_t *fed); |
| extern void sacctmgr_print_qos_limits(slurmdb_qos_rec_t *qos); |
| extern int sacctmgr_remove_assoc_usage(slurmdb_assoc_cond_t *assoc_cond); |
| extern int sacctmgr_update_qos_usage(slurmdb_qos_cond_t *qos_cond, |
| long double new_raw_usage); |
| extern int sort_coord_list(void *, void *); |
| extern list_t *sacctmgr_process_format_list(list_t *format_list); |
| extern int sacctmgr_validate_cluster_list(list_t *cluster_list); |
| |
| /* you need to free the objects returned from these functions */ |
| extern slurmdb_assoc_rec_t *sacctmgr_find_account_base_assoc( |
| char *account, char *cluster); |
| extern slurmdb_assoc_rec_t *sacctmgr_find_root_assoc(char *cluster); |
| extern slurmdb_user_rec_t *sacctmgr_find_user(char *name); |
| extern slurmdb_account_rec_t *sacctmgr_find_account(char *name); |
| extern slurmdb_cluster_rec_t *sacctmgr_find_cluster(char *name); |
| |
| /* do not free any of the object returned from these functions since |
| * they are pointing to an object in the list given |
| */ |
| |
| extern slurmdb_assoc_rec_t *sacctmgr_find_assoc_from_list( |
| list_t *assoc_list, char *user, char *account, |
| char *cluster, char *partition); |
| extern slurmdb_assoc_rec_t *sacctmgr_find_account_base_assoc_from_list( |
| list_t *assoc_list, char *account, char *cluster); |
| extern slurmdb_res_rec_t *sacctmgr_find_res_from_list( |
| list_t *res_list, uint32_t id, char *name, char *server); |
| extern slurmdb_qos_rec_t *sacctmgr_find_qos_from_list( |
| list_t *qos_list, char *name); |
| extern slurmdb_user_rec_t *sacctmgr_find_user_from_list( |
| list_t *user_list, char *name); |
| extern slurmdb_account_rec_t *sacctmgr_find_account_from_list( |
| list_t *acct_list, char *name); |
| extern slurmdb_cluster_rec_t *sacctmgr_find_cluster_from_list( |
| list_t *cluster_list, char *name); |
| extern slurmdb_wckey_rec_t *sacctmgr_find_wckey_from_list( |
| list_t *wckey_list, char *user, char *name, char *cluster); |
| |
| extern void sacctmgr_initialize_g_tres_list(void); |
| |
| /* file_functions.c */ |
| extern int print_file_add_limits_to_line(char **line, |
| slurmdb_assoc_rec_t *assoc); |
| |
| extern int file_print_qos(void *x, void *arg); |
| |
| extern int print_file_slurmdb_hierarchical_rec_list( |
| FILE *fd, list_t *slurmdb_hierarchical_rec_list, |
| list_t *user_list, list_t *acct_list); |
| |
| extern void load_sacctmgr_cfg_file (int argc, char **argv); |
| |
| /* txn_functions.c */ |
| extern int sacctmgr_list_txn(int argc, char **argv); |
| |
| /* runaway_jobs_functions.c */ |
| extern int sacctmgr_list_runaway_jobs(int argc, char **argv); |
| |
| /* federation_functions.c */ |
| extern int verify_federations_exist(list_t *name_list); |
| extern int verify_fed_clusters(list_t *cluster_list, const char *fed_name, |
| bool *existing_fed); |
| |
| #endif |