blob: 4d488f1aa0e33982fbac31e23f3d4bf48c90a3c8 [file] [log] [blame]
/*****************************************************************************\
* data_t parser plugin interface
*****************************************************************************
* Copyright (C) SchedMD LLC.
*
* 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 _INTERFACES_DATA_PARSER_H
#define _INTERFACES_DATA_PARSER_H
#include "src/common/data.h"
#include "src/common/openapi.h"
/*
* Enumeration of all parsers that data_parser plugins will handle.
* Warning: Not all data_parsers implement every enum
* Warning: Never hard code the value of an enum as assigned values may change
* any time.
*
* Each enum must correspond to exactly 1 type:
* 'char *' and 'char' and 'unsigned char' and 'unsigned char *' would be
* considered 4 different parsers.
*
* When an enum has a _PTR suffix, then it must be a pointer to the same type
* without the _PTR suffix.
*
*/
typedef enum {
DATA_PARSER_TYPE_INVALID = 0,
DATA_PARSER_BITSTR, /* bitstr_t */
DATA_PARSER_BITSTR_PTR, /* bitstr_t* */
DATA_PARSER_STRING, /* char* */
DATA_PARSER_UINT16, /* uint16_t */
DATA_PARSER_UINT16_NO_VAL, /* uint16_t - may be NO_VAL16 or INFINITE16 */
DATA_PARSER_UINT16_NO_VAL_STRUCT, /* UINT16_NO_VAL_t */
DATA_PARSER_UINT16_NO_VAL_STRUCT_PTR, /* UINT16_NO_VAL_t* */
DATA_PARSER_UINT32, /* uint32_t */
DATA_PARSER_UINT32_NO_VAL, /* uint32_t - maybe NO_VAL or INFINITE*/
DATA_PARSER_UINT32_NO_VAL_STRUCT, /* UINT32_NO_VAL_t */
DATA_PARSER_UINT32_NO_VAL_STRUCT_PTR, /* UINT32_NO_VAL_t* */
DATA_PARSER_UINT64, /* uint64_t */
DATA_PARSER_UINT64_NO_VAL, /* uint64_t - NO_VAL64 or INFINTE64 */
DATA_PARSER_UINT64_NO_VAL_STRUCT, /* UINT64_NO_VAL_t */
DATA_PARSER_UINT64_NO_VAL_STRUCT_PTR, /* UINT64_NO_VAL_t* */
DATA_PARSER_INT32, /* int32_t */
DATA_PARSER_INT32_PTR, /* int32_t* */
DATA_PARSER_INT32_LIST, /* list_t* int32_t* */
DATA_PARSER_INT64, /* int64_t */
DATA_PARSER_INT64_NO_VAL, /* int64_t - NO_VAL64 or INFINTE64 */
DATA_PARSER_INT64_NO_VAL_STRUCT, /* INT64_NO_VAL_t */
DATA_PARSER_INT64_NO_VAL_STRUCT_PTR, /* INT64_NO_VAL_t* */
DATA_PARSER_FLOAT128, /* long double */
DATA_PARSER_FLOAT64, /* double */
DATA_PARSER_FLOAT64_NO_VAL, /* double - may be NO_VAL of INFINITE */
DATA_PARSER_FLOAT64_NO_VAL_STRUCT, /* FLOAT64_NO_VAL_t */
DATA_PARSER_FLOAT64_NO_VAL_STRUCT_PTR, /* FLOAT64_NO_VAL_t* */
DATA_PARSER_BOOL, /* uint8_t */
DATA_PARSER_BOOL16, /* uint16_t */
DATA_PARSER_BOOL16_NO_VAL, /* uint16_t - false if NO_VAL16 */
DATA_PARSER_CSV_STRING, /* char * - comma delimited list stored as a string */
DATA_PARSER_CSV_STRING_LIST, /* list_t of char* - comma delimited list stored as a list_t* */
DATA_PARSER_OPENAPI_ACCOUNTS_ADD_COND_RESP, /* openapi_resp_accounts_add_cond_t */
DATA_PARSER_OPENAPI_ACCOUNTS_ADD_COND_RESP_PTR, /* openapi_resp_accounts_add_cond_t* */
DATA_PARSER_OPENAPI_ACCOUNTS_ADD_COND_RESP_STR, /* openapi_resp_single_t */
DATA_PARSER_OPENAPI_ACCOUNTS_ADD_COND_RESP_STR_PTR, /* openapi_resp_single_t* */
DATA_PARSER_OPENAPI_ACCOUNTS_REMOVED_RESP, /* openapi_resp_single_t */
DATA_PARSER_OPENAPI_ACCOUNTS_REMOVED_RESP_PTR, /* openapi_resp_single_t* */
DATA_PARSER_OPENAPI_ACCOUNTS_RESP, /* openapi_resp_single_t */
DATA_PARSER_OPENAPI_ACCOUNTS_RESP_PTR, /* openapi_resp_single_t* */
DATA_PARSER_OPENAPI_ACCOUNT_PARAM, /* openapi_account_param_t */
DATA_PARSER_OPENAPI_ACCOUNT_PARAM_PTR, /* openapi_account_param_t* */
DATA_PARSER_OPENAPI_ACCOUNT_QUERY, /* openapi_account_query_t */
DATA_PARSER_OPENAPI_ACCOUNT_QUERY_PTR, /* openapi_account_query_t* */
DATA_PARSER_ACCOUNT_CONDITION, /* slurmdb_account_cond_t */
DATA_PARSER_ACCOUNT_CONDITION_PTR, /* slurmdb_account_cond_t* */
DATA_PARSER_ACCOUNT_CONDITION_WITH_ASSOC_V40, /* slurmdb_account_cond_t->flags&SLURMDB_ACCT_FLAG_WASSOC - TODO: Remove with v0.0.40 */
DATA_PARSER_ACCOUNT_CONDITION_WITH_WCOORD_V40, /* slurmdb_account_cond_t->flags&SLURMDB_ACCT_FLAG_WCOORD - TODO: Remove with v0.0.40 */
DATA_PARSER_ACCOUNT_CONDITION_WITH_DELETED_V40, /* slurmdb_account_cond_t->flags&SLURMDB_ACCT_FLAG_DELETED - TODO: Remove with v0.0.40 */
DATA_PARSER_ACCOUNT_LIST, /* list of slurmdb_account_rec_t* */
DATA_PARSER_ACCOUNT, /* slurmdb_account_rec_t */
DATA_PARSER_ACCOUNT_PTR, /* slurmdb_account_rec_t* */
DATA_PARSER_ACCOUNT_SHORT, /* slurmdb_account_rec_t subset */
DATA_PARSER_ACCOUNT_SHORT_PTR, /* slurmdb_account_rec_t* */
DATA_PARSER_ACCOUNT_FLAGS, /* slurmdb_account_rec_t->flags & SLURMDB_ACCT_FLAG_* */
DATA_PARSER_ACCOUNTING_LIST, /* list of slurmdb_accounting_rec_t* */
DATA_PARSER_ACCOUNTING, /* slurmdb_accounting_rec_t */
DATA_PARSER_ACCOUNTING_PTR, /* slurmdb_accounting_rec_t* */
DATA_PARSER_ACCOUNTS_ADD_COND, /* slurmdb_add_assoc_cond_t */
DATA_PARSER_ACCOUNTS_ADD_COND_PTR, /* slurmdb_add_assoc_cond_t* */
DATA_PARSER_ADMIN_LVL, /* uint16_t (placeholder for slurmdb_admin_level_t) */
DATA_PARSER_ASSOC_ID, /* uint32_t - Assumes local cluster which may be wrong */
DATA_PARSER_ASSOC_ID_STRING, /* char * of assoc id */
DATA_PARSER_ASSOC_ID_STRING_CSV_LIST, /* list of char* */
DATA_PARSER_ASSOC_LIST, /* list of slurmdb_assoc_rec_t* */
DATA_PARSER_OPENAPI_ASSOCS_RESP, /* openapi_resp_single_t */
DATA_PARSER_OPENAPI_ASSOCS_RESP_PTR, /* openapi_resp_single_t* */
DATA_PARSER_ASSOC_SHORT_LIST, /* list of slurmdb_assoc_rec_t* only for id */
DATA_PARSER_ASSOC_SHORT, /* slurmdb_assoc_rec_t (for id only) */
DATA_PARSER_ASSOC_SHORT_PTR, /* slurmdb_assoc_rec_t* (for id only) */
DATA_PARSER_ASSOC, /* slurmdb_assoc_rec_t */
DATA_PARSER_ASSOC_PTR, /* slurmdb_assoc_rec_t* */
DATA_PARSER_ASSOC_FLAGS, /* slurmdb_assoc_flags_t */
DATA_PARSER_ASSOC_CONDITION_FLAGS, /* slurmdb_assoc_cond_t->flags & ASSOC_FLAG_COND_* */
DATA_PARSER_ASSOC_USAGE, /* slurmdb_assoc_usage_t */
DATA_PARSER_ASSOC_USAGE_PTR, /* slurmdb_assoc_usage_t* */
DATA_PARSER_ASSOC_REC_SET, /* slurmdb_assoc_rec_t */
DATA_PARSER_ASSOC_REC_SET_PTR, /* slurmdb_assoc_rec_t* */
DATA_PARSER_OPENAPI_ASSOCS_REMOVED_RESP, /* openapi_resp_single_t */
DATA_PARSER_OPENAPI_ASSOCS_REMOVED_RESP_PTR, /* openapi_resp_single_t* */
DATA_PARSER_ASSOC_CONDITION, /* slurmdb_assoc_cond_t */
DATA_PARSER_ASSOC_CONDITION_PTR, /* slurmdb_assoc_cond_t* */
DATA_PARSER_ASSOC_CONDITION_WITH_DELETED_OLD, /* slurmdb_assoc_cond_t->flags&ASSOC_COND_FLAG_WITH_DELETED */
DATA_PARSER_ASSOC_CONDITION_WITH_USAGE_OLD, /* slurmdb_assoc_cond_t->flags&ASSOC_COND_FLAG_WITH_USAGE */
DATA_PARSER_ASSOC_CONDITION_ONLY_DEFS_OLD, /* slurmdb_assoc_cond_t->flags&ASSOC_COND_ONLY_DEFS */
DATA_PARSER_ASSOC_CONDITION_RAW_QOS_OLD, /* slurmdb_assoc_cond_t->flags&ASSOC_COND_RAW_QOS */
DATA_PARSER_ASSOC_CONDITION_SUB_ACCTS_OLD, /* slurmdb_assoc_cond_t->flags&ASSOC_COND_SUB_ACCTS */
DATA_PARSER_ASSOC_CONDITION_WOPI_OLD, /* slurmdb_assoc_cond_t->flags&ASSOC_COND_WOPI */
DATA_PARSER_ASSOC_CONDITION_WOPL_OLD, /* slurmdb_assoc_cond_t->flags&ASSOC_COND_WOPL */
DATA_PARSER_CLASSIFICATION_TYPE, /* slurmdb_classification_type_t */
DATA_PARSER_CLUSTER_ACCT_REC_LIST, /* list of slurmdb_cluster_accounting_rec_t* */
DATA_PARSER_CLUSTER_ACCT_REC, /* slurmdb_cluster_accounting_rec_t */
DATA_PARSER_CLUSTER_ACCT_REC_PTR, /* slurmdb_cluster_accounting_rec_t* */
DATA_PARSER_CLUSTER_CLASSIFICATION, /* uint16_t joined with slurmdb_classification_type_t */
DATA_PARSER_CLUSTER_REC_LIST, /* list of slurmdb_cluster_rec_t */
DATA_PARSER_CLUSTER_REC, /* slurmdb_cluster_rec_t */
DATA_PARSER_CLUSTER_REC_PTR, /* slurmdb_cluster_rec_t* */
DATA_PARSER_CLUSTER_REC_FLAGS, /* slurmdb_cluster_rec_t->flags & CLUSTER_FLAG_* */
DATA_PARSER_OPENAPI_CLUSTERS_RESP, /* openapi_resp_single_t */
DATA_PARSER_OPENAPI_CLUSTERS_RESP_PTR, /* openapi_resp_single_t* */
DATA_PARSER_OPENAPI_CLUSTERS_REMOVED_RESP, /* openapi_resp_single_t */
DATA_PARSER_OPENAPI_CLUSTERS_REMOVED_RESP_PTR, /* openapi_resp_single_t* */
DATA_PARSER_OPENAPI_CLUSTER_PARAM, /* openapi_cluster_param_t */
DATA_PARSER_OPENAPI_CLUSTER_PARAM_PTR, /* openapi_cluster_param_t* */
DATA_PARSER_CLUSTER_CONDITION, /* slurmdb_cluster_cond_t */
DATA_PARSER_CLUSTER_CONDITION_PTR, /* slurmdb_cluster_cond_t* */
DATA_PARSER_COORD_LIST, /* List of slurmdb_coord_rec_t* */
DATA_PARSER_COORD, /* slurmdb_coord_rec_t */
DATA_PARSER_COORD_PTR, /* slurmdb_coord_rec_t* */
DATA_PARSER_CPU_FREQ_FLAGS, /* uint32_t & CPU_FREQ_* */
DATA_PARSER_GROUP_ID, /* Group from numeric GID <-> gid_t */
DATA_PARSER_GROUP_ID_STRING, /* char * - group id string */
DATA_PARSER_GROUP_ID_STRING_LIST, /* list_t of string group id */
DATA_PARSER_GROUP_NAME, /* Group from string group name <-> gid_t */
DATA_PARSER_INSTANCE, /* slurmdb_instance_rec_t */
DATA_PARSER_INSTANCE_PTR, /* slurmdb_instance_rec_t* */
DATA_PARSER_INSTANCE_CONDITION, /* slurmdb_instance_cond_t */
DATA_PARSER_INSTANCE_CONDITION_PTR, /* slurmdb_instance_cond_t* */
DATA_PARSER_INSTANCE_LIST, /* list of slurmdb_instance_rec_t */
DATA_PARSER_OPENAPI_INSTANCES_RESP, /* openapi_resp_single_t */
DATA_PARSER_OPENAPI_INSTANCES_RESP_PTR, /* openapi_resp_single_t* */
DATA_PARSER_JOB_EXIT_CODE, /* int32_t */
DATA_PARSER_JOB_REASON, /* uint32_t <-> enum job_state_reason */
DATA_PARSER_JOB_LIST, /* list of slurmdb_job_rec_t* */
DATA_PARSER_JOB, /* slurmdb_job_rec_t */
DATA_PARSER_JOB_PTR, /* slurmdb_job_rec_t* */
DATA_PARSER_JOB_ASSOC_ID, /* slurmdb_job_rec_t->associd,cluster */
DATA_PARSER_JOB_CONDITION, /* slurmdb_job_cond_t */
DATA_PARSER_JOB_CONDITION_FLAGS, /* uint32_t - JOBCOND_FLAG_* */
DATA_PARSER_JOB_CONDITION_DB_FLAGS, /* uint32_t - SLURMDB_JOB_FLAG_* */
DATA_PARSER_JOB_CONDITION_SUBMIT_TIME, /* slurmdb_job_cond_t->usage_start&flags */
DATA_PARSER_JOB_CONDITION_PTR, /* slurmdb_job_cond_t* */
DATA_PARSER_JOB_STDIN, /* slurmdb_job_rec_t->std_in */
DATA_PARSER_JOB_STDOUT, /* slurmdb_job_rec_t->std_out */
DATA_PARSER_JOB_STDERR, /* slurmdb_job_rec_t->std_err */
DATA_PARSER_OPENAPI_SLURMDBD_JOBS_RESP, /* openapi_resp_single_t */
DATA_PARSER_OPENAPI_SLURMDBD_JOBS_RESP_PTR, /* openapi_resp_single_t* */
DATA_PARSER_OPENAPI_SLURMDBD_JOB_PARAM, /* openapi_job_param_t */
DATA_PARSER_OPENAPI_SLURMDBD_JOB_PARAM_PTR, /* openapi_job_param_t* */
DATA_PARSER_SLURMDB_JOB_FLAGS, /* slurmdb_job_rec_t->flags & SLURMDB_JOB_* */
DATA_PARSER_JOB_STATE, /* uint32_t <-> JOB_* & JOB_STATE_FLAGS */
DATA_PARSER_JOB_STATE_ID_STRING, /* char* <-> JOB_* & JOB_STATE_FLAGS - as stringified integer */
DATA_PARSER_JOB_STATE_ID_STRING_LIST, /* list_t of char* */
DATA_PARSER_OPENAPI_STEP_INFO_MSG, /* openapi_resp_job_step_info_msg_t */
DATA_PARSER_OPENAPI_STEP_INFO_MSG_PTR, /* openapi_resp_job_step_info_msg_t* */
DATA_PARSER_STEP_INFO_MSG, /* job_step_info_response_msg_t */
DATA_PARSER_STEP_INFO_MSG_PTR, /* job_step_info_response_msg_t* */
DATA_PARSER_STEP_INFO, /* job_step_info_t */
DATA_PARSER_STEP_INFO_PTR, /* job_step_info_t* */
DATA_PARSER_STEP_INFO_ARRAY, /* job_step_info_t* */
DATA_PARSER_STEP_INFO_STDIN_EXP, /* step_job_info_t->std_in (handles all pattern replacements) */
DATA_PARSER_STEP_INFO_STDOUT_EXP, /* step_job_info_t->std_out (handles all pattern replacements) */
DATA_PARSER_STEP_INFO_STDERR_EXP, /* step_job_info_t->std_err (handles all pattern replacements) */
DATA_PARSER_STEP, /* slurmdb_step_rec_t */
DATA_PARSER_STEP_PTR, /* slurmdb_step_rec_t* */
DATA_PARSER_STEP_LIST, /* List of slurmdb_step_rec_t* */
DATA_PARSER_STEP_NODES, /* slurmdb_step_rec_t->nodes */
DATA_PARSER_STEP_TRES_REQ_MAX, /* slurmdb_step_rec_t->tres_usage_in_max(|_nodeid|taskid) */
DATA_PARSER_STEP_TRES_REQ_MIN, /* slurmdb_step_rec_t->tres_usage_in_min(|_nodeid|taskid) */
DATA_PARSER_STEP_TRES_USAGE_MAX, /* slurmdb_step_rec_t->tres_usage_out_in_max(|_nodeid|taskid) */
DATA_PARSER_STEP_TRES_USAGE_MIN, /* slurmdb_step_rec_t->tres_usage_out_in_min(|_nodeid|taskid) */
DATA_PARSER_STEP_NAMES, /* uint32_t <-> SLURM_EXTERN_CONT,SLURM_BATCH_SCRIPT,SLURM_PENDING_STEP,SLURM_INTERACTIVE_STEP */
DATA_PARSER_STEP_STDIN_EXP, /* slurmdb_step_rec_t->std_in (handles all pattern replacements) */
DATA_PARSER_STEP_STDOUT_EXP, /* slurmdb_step_rec_t->std_out (handles all pattern replacements) */
DATA_PARSER_STEP_STDERR_EXP, /* slurmdb_step_rec_t->std_err (handles all pattern replacements) */
DATA_PARSER_JOB_USER, /* user/uid from slurmdb_job_rec_t* */
DATA_PARSER_NEED_PREREQS_FLAGS, /* need_t */
DATA_PARSER_QOS_ID, /* uint32_t of QOS->name or stringified QOS->id if name unresolvable */
DATA_PARSER_QOS_ID_LIST, /* List of char* of QOS ids */
DATA_PARSER_QOS_STRING_ID_LIST, /* List of char* of QOS ids */
DATA_PARSER_QOS_ID_STRING_CSV_LIST, /* List of char* of QOS ids */
DATA_PARSER_QOS_ID_STRING, /* char* of QOS id */
DATA_PARSER_QOS_NAME, /* char * of QOS name */
DATA_PARSER_QOS_NAME_LIST, /* List of char* of QOS names */
DATA_PARSER_QOS_NAME_CSV_LIST, /* List of char* of QOS names */
DATA_PARSER_QOS_PREEMPT_LIST, /* slurmdb_qos_rec_t->preempt_bitstr & preempt_list */
DATA_PARSER_QOS, /* slurmdb_qos_rec_t */
DATA_PARSER_QOS_PTR, /* slurmdb_qos_rec_t* */
DATA_PARSER_QOS_LIST, /* list of slurmdb_qos_rec_t* */
DATA_PARSER_QOS_FLAGS, /* slurmdb_qos_rec_t->flags & QOS_FLAG_* */
DATA_PARSER_QOS_PREEMPT_MODES, /* slurmdb_qos_rec_t->preempt_mode & QOS_FLAG_* */
DATA_PARSER_QOS_CONDITION, /* slurmdb_qos_cond_t */
DATA_PARSER_QOS_CONDITION_PTR, /* slurmdb_qos_cond_t* */
DATA_PARSER_QOS_CONDITION_WITH_DELETED_OLD, /* slurmdb_qos_cond_t->flags&QOS_COND_FLAG_WITH_DELETED - TODO: Remove with v0.0.42 */
DATA_PARSER_QOS_CONDITION_FLAGS, /* slurmdb_qos_cond_t->flags & QOS_FLAG_COND_* */
DATA_PARSER_OPENAPI_SLURMDBD_QOS_RESP, /* openapi_resp_single_t */
DATA_PARSER_OPENAPI_SLURMDBD_QOS_RESP_PTR, /* openapi_resp_single_t* */
DATA_PARSER_OPENAPI_SLURMDBD_QOS_REMOVED_RESP, /* openapi_resp_single_t */
DATA_PARSER_OPENAPI_SLURMDBD_QOS_REMOVED_RESP_PTR, /* openapi_resp_single_t* */
DATA_PARSER_OPENAPI_SLURMDBD_QOS_PARAM, /* openapi_qos_param_t */
DATA_PARSER_OPENAPI_SLURMDBD_QOS_PARAM_PTR, /* openapi_qos_param_t* */
DATA_PARSER_OPENAPI_SLURMDBD_QOS_QUERY, /* openapi_qos_query_t */
DATA_PARSER_OPENAPI_SLURMDBD_QOS_QUERY_PTR, /* openapi_qos_query_t* */
DATA_PARSER_RPC_ID, /* slurm_msg_type_t - uint16_t */
DATA_PARSER_SLURMDB_RPC_ID, /* slurmdbd_msg_type_t */
DATA_PARSER_SELECT_PLUGIN_ID, /* DEPRECATED v41: int (SELECT_PLUGIN_*) -> string */
DATA_PARSER_STATS_REC_PTR, /* slurmdb_stats_rec_t* */
DATA_PARSER_STATS_REC, /* slurmdb_stats_rec_t */
DATA_PARSER_OPENAPI_SLURMDBD_STATS_RESP, /* openapi_resp_single_t */
DATA_PARSER_OPENAPI_SLURMDBD_STATS_RESP_PTR, /* openapi_resp_single_t* */
DATA_PARSER_STATS_RPC_LIST, /* list of slurmdb_rpc_obj_t* */
DATA_PARSER_STATS_RPC, /* slurmdb_rpc_obj_t */
DATA_PARSER_STATS_RPC_PTR, /* slurmdb_rpc_obj_t* */
DATA_PARSER_STATS_USER_LIST, /* list of slurmdb_rpc_obj_t* */
DATA_PARSER_STATS_USER, /* slurmdb_rpc_obj_t */
DATA_PARSER_STATS_USER_PTR, /* slurmdb_rpc_obj_t* */
DATA_PARSER_ROLLUP_STATS, /* slurmdb_rollup_stats_t */
DATA_PARSER_ROLLUP_STATS_PTR, /* slurmdb_rollup_stats_t* */
DATA_PARSER_SLURM_STEP_ID, /* slurm_step_id_t */
DATA_PARSER_SLURM_STEP_ID_PTR, /* slurm_step_id_t* */
DATA_PARSER_SLURM_STEP_ID_STRING, /* slurm_step_id_t -> SELECTED_STEP */
DATA_PARSER_SLURM_STEP_ID_STRING_PTR, /* slurm_step_id_t* -> SLURM_STEP_ID_STRING */
DATA_PARSER_SLURM_STEP_ID_STRING_LIST, /* list_t of slurm_step_id_t* */
DATA_PARSER_STEP_ID, /* uint32_t of job step id */
DATA_PARSER_STEP_ID_PTR, /* uint32_t* of job step id */
DATA_PARSER_TASK_DISTRIBUTION, /* uint32_t <-> task_dist_states_t */
DATA_PARSER_TRES_STR, /* List of slurmdb_tres_rec_t* combined into a TRES string with TRES type/name instead of ID */
DATA_PARSER_TRES_ID_STR, /* List of slurmdb_tres_rec_t* combined into a TRES string with TRES id# instead of type/name */
DATA_PARSER_TRES_STR_BY_TYPE, /* List of slurmdb_tres_rec_t* combined into a TRES string with TRES type/name=#,... format */
DATA_PARSER_TRES_LIST, /* List of slurmdb_tres_rec_t* */
DATA_PARSER_TRES, /* slurmdb_tres_rec_t */
DATA_PARSER_TRES_PTR, /* slurmdb_tres_rec_t* */
DATA_PARSER_OPENAPI_TRES_RESP, /* openapi_resp_single_t */
DATA_PARSER_OPENAPI_TRES_RESP_PTR, /* openapi_resp_single_t* */
DATA_PARSER_TRES_NCT, /* slurmdb_tres_nct_rec_t */
DATA_PARSER_TRES_NCT_PTR, /* slurmdb_tres_nct_rec_t* */
DATA_PARSER_USER_ID, /* User from numeric UID */
DATA_PARSER_USER_ID_STRING, /* char * - user id string */
DATA_PARSER_USER_ID_STRING_LIST, /* list_t of string user id */
DATA_PARSER_USER_SHORT, /* slurmdb_user_rec_t subset */
DATA_PARSER_USER_SHORT_PTR, /* slurmdb_user_rec_t* */
DATA_PARSER_USER, /* slurmdb_user_rec_t */
DATA_PARSER_USER_PTR, /* slurmdb_user_rec_t* */
DATA_PARSER_USER_LIST, /* List of slurmdb_user_rec_t* */
DATA_PARSER_USER_FLAGS, /* slurmdb_user_rec_t->parser_user_flags & SLURMDB_USER_FLAG_* */
DATA_PARSER_USER_CONDITION, /* slurmdb_user_cond_t */
DATA_PARSER_USER_CONDITION_PTR, /* slurmdb_user_cond_t* */
DATA_PARSER_USERS_ADD_COND, /* slurmdb_add_assoc_cond_t subset */
DATA_PARSER_USERS_ADD_COND_PTR, /* slurmdb_add_assoc_cond_t* */
DATA_PARSER_OPENAPI_USERS_ADD_COND_RESP, /* openapi_resp_users_add_cond_t */
DATA_PARSER_OPENAPI_USERS_ADD_COND_RESP_PTR, /* openapi_resp_users_add_cond_t* */
DATA_PARSER_OPENAPI_USERS_ADD_COND_RESP_STR, /* openapi_resp_single_t */
DATA_PARSER_OPENAPI_USERS_ADD_COND_RESP_STR_PTR, /* openapi_resp_single_t* */
DATA_PARSER_OPENAPI_USERS_RESP, /* openapi_resp_single_t */
DATA_PARSER_OPENAPI_USERS_RESP_PTR, /* openapi_resp_single_t* */
DATA_PARSER_OPENAPI_USERS_REMOVED_RESP, /* openapi_resp_single_t */
DATA_PARSER_OPENAPI_USERS_REMOVED_RESP_PTR, /* openapi_resp_single_t* */
DATA_PARSER_WCKEY, /* slurmdb_wckey_rec_t */
DATA_PARSER_WCKEY_PTR, /* slurmdb_wckey_rec_t* */
DATA_PARSER_WCKEY_LIST, /* List of slurmdb_wckey_rec_t* */
DATA_PARSER_WCKEY_FLAGS, /* slurmdb_wckey_rec_t->flags & SLURMDB_WCKEY_FLAG_* */
DATA_PARSER_WCKEY_TAG, /* uint32_t - * prefix denotes default */
DATA_PARSER_WCKEY_TAG_STRUCT, /* WCKEY_TAG_STRUCT_t */
DATA_PARSER_WCKEY_TAG_STRUCT_PTR, /* WCKEY_TAG_STRUCT_t* */
DATA_PARSER_WCKEY_TAG_FLAGS, /* WCKEY_TAG_FLAGS_t */
DATA_PARSER_OPENAPI_WCKEY_RESP, /* openapi_resp_single_t */
DATA_PARSER_OPENAPI_WCKEY_RESP_PTR, /* openapi_resp_single_t* */
DATA_PARSER_OPENAPI_WCKEY_REMOVED_RESP, /* openapi_resp_single_t */
DATA_PARSER_OPENAPI_WCKEY_REMOVED_RESP_PTR, /* openapi_resp_single_t* */
DATA_PARSER_OPENAPI_WCKEY_PARAM, /* openapi_wckey_param_t */
DATA_PARSER_OPENAPI_WCKEY_PARAM_PTR, /* openapi_wckey_param_t* */
DATA_PARSER_WCKEY_CONDITION, /* slurmdb_wckey_cond_t */
DATA_PARSER_WCKEY_CONDITION_PTR, /* slurmdb_wckey_cond_t* */
DATA_PARSER_SINFO_DATA, /* sinfo_data_t */
DATA_PARSER_SINFO_DATA_PTR, /* sinfo_data_t* */
DATA_PARSER_SINFO_DATA_LIST, /* list of sinfo_data_t* */
DATA_PARSER_OPENAPI_SINFO_RESP, /* list of sinfo_data_t */
DATA_PARSER_OPENAPI_SINFO_RESP_PTR, /* list of sinfo_data_t* */
DATA_PARSER_OPENAPI_DIAG_RESP, /* openapi_resp_single_t */
DATA_PARSER_OPENAPI_DIAG_RESP_PTR, /* openapi_resp_single_t* */
DATA_PARSER_STATS_MSG, /* stats_info_response_msg_t */
DATA_PARSER_STATS_MSG_PTR, /* stats_info_response_msg_t* */
DATA_PARSER_STATS_MSG_CYCLE_MEAN, /* stats_info_response_msg_t-> computed value */
DATA_PARSER_STATS_MSG_CYCLE_MEAN_DEPTH, /* stats_info_response_msg_t-> computed value */
DATA_PARSER_STATS_MSG_CYCLE_PER_MIN, /* stats_info_response_msg_t-> computed value */
DATA_PARSER_STATS_MSG_SCHEDULE_EXIT, /* stats_info_response_msg_t-> computed value */
DATA_PARSER_STATS_MSG_BF_CYCLE_MEAN, /* stats_info_response_msg_t-> computed value */
DATA_PARSER_STATS_MSG_BF_DEPTH_MEAN, /* stats_info_response_msg_t-> computed value */
DATA_PARSER_STATS_MSG_BF_DEPTH_MEAN_TRY, /* stats_info_response_msg_t-> computed value */
DATA_PARSER_STATS_MSG_BF_QUEUE_LEN_MEAN, /* stats_info_response_msg_t-> computed value */
DATA_PARSER_STATS_MSG_BF_TABLE_SIZE_MEAN, /* stats_info_response_msg_t-> computed value */
DATA_PARSER_STATS_MSG_BF_ACTIVE, /* stats_info_response_msg_t-> computed bool */
DATA_PARSER_STATS_MSG_BF_EXIT, /* stats_info_response_msg_t-> computed value */
DATA_PARSER_STATS_MSG_RPC_TYPE, /* STATS_MSG_RPC_TYPE_t */
DATA_PARSER_STATS_MSG_RPC_TYPE_PTR, /* STATS_MSG_RPC_TYPE_t* */
DATA_PARSER_STATS_MSG_RPCS_BY_TYPE, /* stats_info_response_msg_t-> computed bool */
DATA_PARSER_STATS_MSG_RPC_USER, /* STATS_MSG_RPC_USER_t */
DATA_PARSER_STATS_MSG_RPC_USER_PTR, /* STATS_MSG_RPC_USER_t* */
DATA_PARSER_STATS_MSG_RPCS_BY_USER, /* stats_info_response_msg_t-> computed bool */
DATA_PARSER_STATS_MSG_RPC_QUEUE, /* STATS_MSG_RPC_QUEUE_t */
DATA_PARSER_STATS_MSG_RPC_QUEUE_PTR, /* STATS_MSG_RPC_QUEUE_t* */
DATA_PARSER_STATS_MSG_RPCS_QUEUE, /* stats_info_response_msg_t-> computed */
DATA_PARSER_STATS_MSG_RPC_DUMP, /* STATS_MSG_RPC_DUMP_t */
DATA_PARSER_STATS_MSG_RPC_DUMP_PTR, /* STATS_MSG_RPC_DUMP_t* */
DATA_PARSER_STATS_MSG_RPCS_DUMP, /* stats_info_response_msg_t-> computed */
DATA_PARSER_BF_EXIT_FIELDS, /* bf_exit_fields_t */
DATA_PARSER_BF_EXIT_FIELDS_PTR, /* bf_exit_fields_t* */
DATA_PARSER_SCHEDULE_EXIT_FIELDS, /* schedule_exit_fields_t */
DATA_PARSER_SCHEDULE_EXIT_FIELDS_PTR, /* schedule_exit_fields_t* */
DATA_PARSER_CONTROLLER_PING, /* controller_ping_t */
DATA_PARSER_CONTROLLER_PING_PTR, /* controller_ping_t* */
DATA_PARSER_CONTROLLER_PING_ARRAY, /* controller_ping_t (NULL terminated array) */
DATA_PARSER_OPENAPI_PING_ARRAY_RESP, /* openapi_resp_single_t */
DATA_PARSER_OPENAPI_PING_ARRAY_RESP_PTR, /* openapi_resp_single_t* */
DATA_PARSER_CONTROLLER_PING_MODE, /* char * - verbose controller mode */
DATA_PARSER_CONTROLLER_PING_PRIMARY, /* int - true if controller is primary */
DATA_PARSER_CONTROLLER_PING_RESULT, /* bool - "UP" or "DOWN" */
DATA_PARSER_SLURMDBD_PING, /* controller_ping_t */
DATA_PARSER_SLURMDBD_PING_PTR, /* controller_ping_t* */
DATA_PARSER_SLURMDBD_PING_ARRAY, /* controller_ping_t (NULL terminated array) */
DATA_PARSER_OPENAPI_SLURMDBD_PING_RESP, /* openapi_resp_single_t */
DATA_PARSER_OPENAPI_SLURMDBD_PING_RESP_PTR, /* openapi_resp_single_t* */
DATA_PARSER_SLURMDBD_PING_MODE, /* char * - verbose slurmdbd mode */
DATA_PARSER_SLURMDBD_PING_RESULT, /* bool - "UP" or "DOWN" */
DATA_PARSER_NODE, /* node_info_t */
DATA_PARSER_NODE_PTR, /* node_info_t* */
DATA_PARSER_NODE_ARRAY, /* node_info_t** (NULL terminated) */
DATA_PARSER_NODES, /* node_info_msg_t */
DATA_PARSER_NODES_PTR, /* node_info_msg_t* */
DATA_PARSER_OPENAPI_NODES_RESP, /* openapi_resp_node_info_msg_t */
DATA_PARSER_OPENAPI_NODES_RESP_PTR, /* openapi_resp_node_info_msg_t* */
DATA_PARSER_OPENAPI_NODE_PARAM, /* openapi_node_param_t */
DATA_PARSER_OPENAPI_NODE_PARAM_PTR, /* openapi_node_param_t* */
DATA_PARSER_OPENAPI_NODES_QUERY, /* openapi_nodes_query_t */
DATA_PARSER_OPENAPI_NODES_QUERY_PTR, /* openapi_nodes_query_t* */
DATA_PARSER_NODE_STATES, /* uint32_t & NODE_STATE_* */
DATA_PARSER_NODE_STATES_NO_VAL, /* uint32_t & NODE_STATE_* or NO_VAL */
DATA_PARSER_NODE_SELECT_ALLOC_IDLE_CPUS, /* node_info_t->select_nodeinfo */
DATA_PARSER_NODE_SELECT_TRES_WEIGHTED, /* DEPRECATED v43: was removed field node_info_t->select_nodeinfo */
DATA_PARSER_UPDATE_NODE_MSG, /* update_node_msg_t */
DATA_PARSER_UPDATE_NODE_MSG_PTR, /* update_node_msg_t* */
DATA_PARSER_OPENAPI_LICENSES_RESP, /* openapi_resp_license_info_msg_t */
DATA_PARSER_OPENAPI_LICENSES_RESP_PTR, /* openapi_resp_license_info_msg_t* */
DATA_PARSER_LICENSES, /* license_info_msg_t */
DATA_PARSER_LICENSES_PTR, /* license_info_msg_t* */
DATA_PARSER_LICENSE, /* slurm_license_info_t */
DATA_PARSER_LICENSE_PTR, /* slurm_license_info_t* */
DATA_PARSER_JOB_INFO_MSG, /* job_info_msg_t */
DATA_PARSER_JOB_INFO_MSG_PTR, /* job_info_msg_t* */
DATA_PARSER_OPENAPI_JOB_INFO_RESP, /* openapi_resp_job_info_msg_t */
DATA_PARSER_OPENAPI_JOB_INFO_RESP_PTR, /* openapi_resp_job_info_msg_t* */
DATA_PARSER_OPENAPI_JOB_INFO_PARAM, /* openapi_job_info_param_t */
DATA_PARSER_OPENAPI_JOB_INFO_PARAM_PTR, /* openapi_job_info_param_t* */
DATA_PARSER_OPENAPI_JOB_INFO_DELETE_QUERY, /* openapi_job_info_delete_query_t */
DATA_PARSER_OPENAPI_JOB_INFO_DELETE_QUERY_PTR, /* openapi_job_info_delete_query_t* */
DATA_PARSER_OPENAPI_JOB_INFO_QUERY, /* openapi_job_info_query_t */
DATA_PARSER_OPENAPI_JOB_INFO_QUERY_PTR, /* openapi_job_info_query_t* */
DATA_PARSER_JOB_INFO, /* slurm_job_info_t */
DATA_PARSER_JOB_INFO_PTR, /* slurm_job_info_t* */
DATA_PARSER_JOB_INFO_STDIN, /* slurm_job_info_t->stdin (handles % replacements) */
DATA_PARSER_JOB_INFO_STDOUT, /* slurm_job_info_t->stdout (handles % replacements) */
DATA_PARSER_JOB_INFO_STDERR, /* slurm_job_info_t->stderr (handles % replacements) */
DATA_PARSER_JOB_INFO_STDIN_EXP, /* slurm_job_info_t->stdin (handles all pattern replacements) */
DATA_PARSER_JOB_INFO_STDOUT_EXP, /* slurm_job_info_t->stdout (handles all pattern replacements) */
DATA_PARSER_JOB_INFO_STDERR_EXP, /* slurm_job_info_t->stderr (handles all pattern replacements) */
DATA_PARSER_JOB_FLAGS, /* uint64_t & KILL_INV_DEP/HAS_STATE_DIR/... */
DATA_PARSER_JOB_SHOW_FLAGS, /* uint32_t & SHOW_* */
DATA_PARSER_CORE_SPEC, /* uint16_t & ~CORE_SPEC_THREAD */
DATA_PARSER_THREAD_SPEC, /* uint16_t & CORE_SPEC_THREAD */
DATA_PARSER_JOB_INFO_GRES_DETAIL, /* slurm_job_info_t->core_spec & CORE_SPEC_THREAD */
DATA_PARSER_JOB_RES, /* job_resources_t */
DATA_PARSER_JOB_RES_PTR, /* job_resources_t* */
DATA_PARSER_JOB_RES_NODES, /* job_resources_t->nodes,core_bitmap,nhosts */
DATA_PARSER_JOB_RES_NODE, /* JOB_RES_NODE_t */
DATA_PARSER_JOB_RES_NODE_PTR, /* JOB_RES_NODE_t* */
DATA_PARSER_JOB_RES_CORE, /* JOB_RES_CORE_t */
DATA_PARSER_JOB_RES_CORE_PTR, /* JOB_RES_CORE_t* */
DATA_PARSER_JOB_RES_CORE_STATUS, /* JOB_RES_CORE_status_t */
DATA_PARSER_JOB_RES_CORE_ARRAY, /* JOB_RES_CORE_t[] */
DATA_PARSER_JOB_RES_SOCKET, /* JOB_RES_SOCKET_t */
DATA_PARSER_JOB_RES_SOCKET_PTR, /* JOB_RES_SOCKET_t* */
DATA_PARSER_JOB_RES_SOCKET_ARRAY, /* JOB_RES_SOCKET_t[] */
DATA_PARSER_JOB_MAIL_FLAGS, /* uint16_t & MAIL_JOB_* */
DATA_PARSER_LISTJOBS_INFO, /* listjobs_info_t */
DATA_PARSER_LISTJOBS_INFO_PTR, /* listjobs_info_t* */
DATA_PARSER_LISTJOBS_INFO_LIST, /* list_t of listjobs_info_t* */
DATA_PARSER_OPENAPI_LISTJOBS_INFO_RESP, /* openapi_resp_listjobs_info_t */
DATA_PARSER_OPENAPI_LISTJOBS_INFO_RESP_PTR, /* openapi_resp_listjobs_info_t* */
DATA_PARSER_LISTPIDS_INFO, /* listpids_info_t */
DATA_PARSER_LISTPIDS_INFO_PTR, /* listpids_info_t* */
DATA_PARSER_LISTPIDS_INFO_LIST, /* list_t of listpids_info_t* */
DATA_PARSER_OPENAPI_LISTPIDS_INFO_RESP, /* openapi_resp_listpids_info_t */
DATA_PARSER_OPENAPI_LISTPIDS_INFO_RESP_PTR, /* openapi_resp_listpids_info_t* */
DATA_PARSER_LISTSTEPS_INFO, /* liststeps_info_t */
DATA_PARSER_LISTSTEPS_INFO_PTR, /* liststeps_info_t* */
DATA_PARSER_LISTSTEPS_INFO_LIST, /* list_t of liststeps_info_t* */
DATA_PARSER_OPENAPI_LISTSTEPS_INFO_RESP, /* openapi_resp_liststeps_info_t */
DATA_PARSER_OPENAPI_LISTSTEPS_INFO_RESP_PTR, /* openapi_resp_liststeps_info_t* */
DATA_PARSER_NICE, /* uint32_t - nice value - NICE_OFFSET */
DATA_PARSER_MEM_PER_CPUS, /* uint64_t & MEM_PER_CPU */
DATA_PARSER_MEM_PER_NODE, /* uint64_t & ~MEM_PER_CPU */
DATA_PARSER_ACCT_GATHER_PROFILE, /* uint32_t - ACCT_GATHER_PROFILE_* */
DATA_PARSER_ACCT_GATHER_ENERGY, /* acct_gather_energy_t */
DATA_PARSER_ACCT_GATHER_ENERGY_PTR, /* acct_gather_energy_t* */
DATA_PARSER_JOB_SHARED, /* uint16_t - JOB_SHARED_* */
DATA_PARSER_JOB_EXCLUSIVE, /* uint16_t - JOB_SHARED_* */
DATA_PARSER_JOB_EXCLUSIVE_FLAGS, /* uint16_t - JOB_SHARED_* */
DATA_PARSER_ALLOCATED_CORES, /* DEPRECATED v41: uint32_t if slurm_conf.select_type_param & (SELECT_CORE|SELECT_SOCKET) */
DATA_PARSER_ALLOCATED_CPUS, /* DEPRECATED v41: uint32_t if slurm_conf.select_type_param & SELECT_CPU */
DATA_PARSER_HOSTLIST, /* hostlist_t* */
DATA_PARSER_HOSTLIST_STRING, /* char * - acts like hostlist_t* */
DATA_PARSER_POWER_FLAGS, /* REMOVED 24.05: uint8_t & SLURM_POWER_FLAGS_* */
DATA_PARSER_PARTITION_INFO, /* partition_info_t */
DATA_PARSER_PARTITION_INFO_PTR, /* partition_info_t* */
DATA_PARSER_PARTITION_INFO_MSG, /* partition_info_msg_t */
DATA_PARSER_PARTITION_INFO_MSG_PTR, /* partition_info_msg_t* */
DATA_PARSER_PARTITION_INFO_ARRAY, /* partition_info_t** */
DATA_PARSER_PARTITION_STATES, /* uint16_t & PARTITION_* */
DATA_PARSER_OPENAPI_PARTITION_RESP, /* openapi_resp_partitions_info_msg_t */
DATA_PARSER_OPENAPI_PARTITION_RESP_PTR, /* openapi_resp_partitions_info_msg_t* */
DATA_PARSER_OPENAPI_PARTITION_PARAM, /* openapi_partition_param_t */
DATA_PARSER_OPENAPI_PARTITION_PARAM_PTR, /* openapi_partition_param_t* */
DATA_PARSER_OPENAPI_PARTITIONS_QUERY, /* openapi_partitions_query_t */
DATA_PARSER_OPENAPI_PARTITIONS_QUERY_PTR, /* openapi_partitions_query_t* */
DATA_PARSER_EXT_SENSORS_DATA, /* REMOVED 24.05: ext_sensors_data_t */
DATA_PARSER_EXT_SENSORS_DATA_PTR, /* REMOVED 24.05: ext_sensors_data_t* */
DATA_PARSER_POWER_MGMT_DATA, /* REMOVED 24.05: power_mgmt_data_t */
DATA_PARSER_POWER_MGMT_DATA_PTR, /* REMOVED 24.05: power_mgmt_data_t* */
DATA_PARSER_RESERVATION_INFO, /* reserve_info_t */
DATA_PARSER_RESERVATION_INFO_PTR, /* reserve_info_t* */
DATA_PARSER_RESERVATION_FLAGS, /* uint64_t & RESERVE_FLAG_* */
DATA_PARSER_RESERVATION_INFO_MSG, /* reserve_info_msg_t */
DATA_PARSER_RESERVATION_INFO_MSG_PTR, /* reserve_info_msg_t* */
DATA_PARSER_RESERVATION_CORE_SPEC, /* resv_core_spec_t */
DATA_PARSER_RESERVATION_CORE_SPEC_PTR, /* resv_core_spec_t* */
DATA_PARSER_RESERVATION_INFO_CORE_SPEC, /* reserve_info_t->core_spec+core_spec_cnt */
DATA_PARSER_RESERVATION_INFO_ARRAY, /* reserve_info_t** */
DATA_PARSER_RESERVATION_DESC_MSG, /* resv_desc_msg_t */
DATA_PARSER_RESERVATION_DESC_MSG_PTR, /* resv_desc_msg_t* */
DATA_PARSER_RESERVATION_DESC_MSG_LIST, /* list_t of resv_desc_msg_t * */
DATA_PARSER_OPENAPI_RESERVATION_RESP, /* openapi_resp_reserve_info_msg_t */
DATA_PARSER_OPENAPI_RESERVATION_RESP_PTR, /* openapi_resp_reserve_info_msg_t* */
DATA_PARSER_OPENAPI_RESERVATION_PARAM, /* openapi_reservation_param_t */
DATA_PARSER_OPENAPI_RESERVATION_PARAM_PTR, /* openapi_reservation_param_t* */
DATA_PARSER_OPENAPI_RESERVATION_QUERY, /* openapi_reservation_query_t */
DATA_PARSER_OPENAPI_RESERVATION_QUERY_PTR, /* openapi_reservation_query_t* */
DATA_PARSER_RESERVATION_MOD_REQ, /* openapi_reservation_mod_request_t */
DATA_PARSER_RESERVATION_MOD_REQ_PTR, /* openapi_reservation_mod_request_t* */
DATA_PARSER_OPENAPI_RESERVATION_MOD_RESP, /* openapi_openapi_resp_single_t */
DATA_PARSER_OPENAPI_RESERVATION_MOD_RESP_PTR, /* openapi_openapi_resp_single_t* */
DATA_PARSER_JOB_ARRAY_RESPONSE_MSG, /* job_array_resp_msg_t */
DATA_PARSER_JOB_ARRAY_RESPONSE_MSG_PTR, /* job_array_resp_msg_t * */
DATA_PARSER_JOB_ARRAY_RESPONSE_MSG_ENTRY, /* JOB_ARRAY_RESPONSE_MSG_entry_t */
DATA_PARSER_JOB_ARRAY_RESPONSE_MSG_ENTRY_PTR, /* JOB_ARRAY_RESPONSE_MSG_entry_t* */
DATA_PARSER_JOB_ARRAY_RESPONSE_ARRAY, /* JOB_ARRAY_RESPONSE_MSG_entry_t[] */
DATA_PARSER_OPENAPI_JOB_POST_RESPONSE, /* job_post_response_t */
DATA_PARSER_OPENAPI_JOB_POST_RESPONSE_PTR, /* job_post_response_t* */
DATA_PARSER_ERROR, /* int -> slurm_strerror() */
DATA_PARSER_JOB_SUBMIT_RESPONSE_MSG, /* submit_response_msg_t */
DATA_PARSER_JOB_SUBMIT_RESPONSE_MSG_PTR, /* submit_response_msg_t* */
DATA_PARSER_OPENAPI_JOB_SUBMIT_RESPONSE, /* job_submit_response_t */
DATA_PARSER_OPENAPI_JOB_SUBMIT_RESPONSE_PTR, /* job_submit_response_t* */
DATA_PARSER_JOB_SUBMIT_REQ, /* job_submit_request_t */
DATA_PARSER_JOB_SUBMIT_REQ_PTR, /* job_submit_request_t */
DATA_PARSER_OPENAPI_JOB_ALLOC_RESP, /* openapi_job_alloc_response_t */
DATA_PARSER_OPENAPI_JOB_ALLOC_RESP_PTR, /* openapi_job_alloc_response_t* */
DATA_PARSER_JOB_ALLOC_REQ, /* openapi_job_alloc_request_t */
DATA_PARSER_JOB_ALLOC_REQ_PTR, /* openapi_job_alloc_request_t* */
DATA_PARSER_JOB_DESC_MSG, /* job_desc_msg_t */
DATA_PARSER_JOB_DESC_MSG_ARGV, /* job_desc_msg_t->argv+argc */
DATA_PARSER_JOB_DESC_MSG_CPU_FREQ, /* job_desc_msg_t->cpu_freq* */
DATA_PARSER_JOB_DESC_MSG_CRON_ENTRY, /* cron_entry_t * */
DATA_PARSER_JOB_DESC_MSG_ENV, /* job_desc_msg_t->env* */
DATA_PARSER_JOB_DESC_MSG_NODES, /* job_desc_msg_t->min/max_cpus */
DATA_PARSER_JOB_DESC_MSG_SPANK_ENV, /* job_desc_msg_t->spank_env* */
DATA_PARSER_JOB_DESC_MSG_RLIMIT_CPU, /* job_desc_msg_t->environment */
DATA_PARSER_JOB_DESC_MSG_RLIMIT_FSIZE, /* job_desc_msg_t->environment */
DATA_PARSER_JOB_DESC_MSG_RLIMIT_DATA, /* job_desc_msg_t->environment */
DATA_PARSER_JOB_DESC_MSG_RLIMIT_STACK, /* job_desc_msg_t->environment */
DATA_PARSER_JOB_DESC_MSG_RLIMIT_CORE, /* job_desc_msg_t->environment */
DATA_PARSER_JOB_DESC_MSG_RLIMIT_RSS, /* job_desc_msg_t->environment */
DATA_PARSER_JOB_DESC_MSG_RLIMIT_NPROC, /* job_desc_msg_t->environment */
DATA_PARSER_JOB_DESC_MSG_RLIMIT_NOFILE, /* job_desc_msg_t->environment */
DATA_PARSER_JOB_DESC_MSG_RLIMIT_MEMLOCK, /* job_desc_msg_t->environment */
DATA_PARSER_JOB_DESC_MSG_RLIMIT_AS, /* job_desc_msg_t->environment */
DATA_PARSER_JOB_DESC_MSG_PTR, /* job_desc_msg_t* */
DATA_PARSER_JOB_DESC_MSG_LIST, /* list_t of job_desc_msg_t* */
DATA_PARSER_JOB_DESC_MSG_TASK_DISTRIBUTION, /* job_desc_msg_t->plane_size and job_desc_msg_t->task_dist */
DATA_PARSER_JOB_DESC_MSG_PLANE_SIZE, /* job_desc_msg_t->plane_size and job_desc_msg_t->task_dist */
DATA_PARSER_STRING_ARRAY, /* char** (NULL terminated) */
DATA_PARSER_STRING_LIST, /* list_t of char* */
DATA_PARSER_SIGNAL, /* uint16_t - UNIX process signal */
DATA_PARSER_CPU_BINDING_FLAGS, /* uint16_t <-> cpu_bind_type_t */
DATA_PARSER_CRON_ENTRY, /* cron_entry_t */
DATA_PARSER_CRON_ENTRY_PTR, /* cron_entry_t* */
DATA_PARSER_CRON_ENTRY_FLAGS, /* cron_entry_flag_t */
DATA_PARSER_MEMORY_BINDING_TYPE, /* mem_bind_type_t */
DATA_PARSER_OPEN_MODE, /* uint8_t - OPEN_MODE_* */
DATA_PARSER_WARN_FLAGS, /* uint16_t - KILL_*|WARN_SENT */
DATA_PARSER_X11_FLAGS, /* uint16_t - X11_FORWARD_* */
DATA_PARSER_HOLD, /* uint32_t (priority) --hold */
DATA_PARSER_OPENAPI_META, /* openapi_resp_meta_t */
DATA_PARSER_OPENAPI_META_PTR, /* openapi_resp_meta_t* */
DATA_PARSER_OPENAPI_META_COMMAND, /* openapi_resp_meta_t->command */
DATA_PARSER_OPENAPI_ERROR, /* openapi_resp_error_t */
DATA_PARSER_OPENAPI_ERROR_PTR, /* openapi_resp_error_t* */
DATA_PARSER_OPENAPI_ERRORS, /* list_t of openapi_resp_error_t* */
DATA_PARSER_OPENAPI_WARNING, /* openapi_resp_warning_t */
DATA_PARSER_OPENAPI_WARNING_PTR, /* openapi_resp_warning_t* */
DATA_PARSER_OPENAPI_WARNINGS, /* list_t of openapi_resp_warning_t* */
DATA_PARSER_OPENAPI_RESP, /* openapi_resp_single_t */
DATA_PARSER_OPENAPI_RESP_PTR, /* openapi_resp_single_t* */
DATA_PARSER_TIMESTAMP, /* time_t */
DATA_PARSER_TIMESTAMP_NO_VAL, /* time_t */
DATA_PARSER_OPENAPI_SLURMDBD_CONFIG_RESP, /* openapi_resp_slurmdbd_config_t */
DATA_PARSER_OPENAPI_SLURMDBD_CONFIG_RESP_PTR, /* openapi_resp_slurmdbd_config_t* */
DATA_PARSER_SELECTED_STEP, /* slurm_selected_step_t */
DATA_PARSER_SELECTED_STEP_PTR, /* slurm_selected_step_t* */
DATA_PARSER_SELECTED_STEP_LIST, /* list_t of slurm_selected_step_t* */
DATA_PARSER_OPENAPI_USER_PARAM, /* openapi_user_param_t */
DATA_PARSER_OPENAPI_USER_PARAM_PTR, /* openapi_user_param_t* */
DATA_PARSER_OPENAPI_USER_QUERY, /* openapi_user_query_t */
DATA_PARSER_OPENAPI_USER_QUERY_PTR, /* openapi_user_query_t* */
DATA_PARSER_FLAGS, /* data_parser_flags_t */
DATA_PARSER_PROCESS_EXIT_CODE_VERBOSE, /* proc_exit_code_verbose_t */
DATA_PARSER_PROCESS_EXIT_CODE_VERBOSE_PTR, /* proc_exit_code_verbose_t* */
DATA_PARSER_PROCESS_EXIT_CODE_STATUS, /* proc_exit_code_status_t */
DATA_PARSER_PROCESS_EXIT_CODE, /* uint32_t */
DATA_PARSER_SHARES_REQ_MSG, /* shares_request_msg_t */
DATA_PARSER_SHARES_REQ_MSG_PTR, /* shares_request_msg_t* */
DATA_PARSER_SHARES_RESP_MSG, /* shares_response_msg_t */
DATA_PARSER_SHARES_RESP_MSG_PTR, /* shares_response_msg_t* */
DATA_PARSER_OPENAPI_SHARES_RESP, /* openapi_resp_single_t */
DATA_PARSER_OPENAPI_SHARES_RESP_PTR, /* openapi_resp_single_t* */
DATA_PARSER_SHARES_UINT64_TRES, /* SHARES_UINT64_TRES_t */
DATA_PARSER_SHARES_UINT64_TRES_PTR, /* SHARES_UINT64_TRES_t* */
DATA_PARSER_SHARES_UINT64_TRES_LIST, /* list_t of SHARES_UINT64_TRES_t */
DATA_PARSER_SHARES_FLOAT128_TRES, /* SHARES_FLOAT128_TRES_t */
DATA_PARSER_SHARES_FLOAT128_TRES_PTR, /* SHARES_FLOAT128_TRES_t* */
DATA_PARSER_SHARES_FLOAT128_TRES_LIST, /* list_t of SHARES_FLOAT128_TRES_t */
DATA_PARSER_ASSOC_SHARES_OBJ_LIST, /* list of assoc_shares_object_t* to convert to assoc_shares_object_wrap_t */
DATA_PARSER_ASSOC_SHARES_OBJ_WRAP, /* assoc_shares_object_wrap_t to wrap assoc_shares_object_t */
DATA_PARSER_ASSOC_SHARES_OBJ_WRAP_TRES_RUN_SECS, /* assoc_shares_object_wrap_t->tres_cnt&obj->tres_run_secs */
DATA_PARSER_ASSOC_SHARES_OBJ_WRAP_TRES_GRP_MINS, /* assoc_shares_object_wrap_t->tres_cnt&obj->tres_grp_mins */
DATA_PARSER_ASSOC_SHARES_OBJ_WRAP_TRES_USAGE_RAW, /* assoc_shares_object_wrap_t->tres_cnt&obj->usage_tres_raw */
DATA_PARSER_ASSOC_SHARES_OBJ_WRAP_TYPE, /* assoc_shares_object_wrap_t.obj->user */
DATA_PARSER_ASSOC_SHARES_OBJ_WRAP_PTR, /* assoc_shares_object_t* */
DATA_PARSER_OVERSUBSCRIBE_JOBS, /* max_share */
DATA_PARSER_OVERSUBSCRIBE_FLAGS, /* max_share */
DATA_PARSER_JOB_PLANNED_TIME, /* slurmdb_job_rec_t->start - slurmdb_job_rec_t->eligible */
DATA_PARSER_CR_TYPE, /* uint16_t - CR_* */
DATA_PARSER_NODE_CR_TYPE, /* enum node_cr_state - uint32_t - NODE_CR_* */
DATA_PARSER_OPENAPI_JOB_STATE_RESP, /* openapi_resp_job_state_t */
DATA_PARSER_OPENAPI_JOB_STATE_RESP_PTR, /* openapi_resp_job_state_t* */
DATA_PARSER_OPENAPI_JOB_STATE_QUERY, /* openapi_job_state_query_t */
DATA_PARSER_OPENAPI_JOB_STATE_QUERY_PTR, /* openapi_job_state_query_t* */
DATA_PARSER_JOB_STATE_RESP_MSG, /* job_state_response_msg_t */
DATA_PARSER_JOB_STATE_RESP_MSG_PTR, /* job_state_response_msg_t* */
DATA_PARSER_JOB_STATE_RESP_JOB, /* job_state_response_job_t */
DATA_PARSER_JOB_STATE_RESP_JOB_PTR, /* job_state_response_job_t* */
DATA_PARSER_JOB_STATE_RESP_JOB_JOB_ID, /* job_state_response_job_t->job_id,array_job_id,array_task_id_bitmap */
DATA_PARSER_KILL_JOBS_MSG, /* kill_jobs_msg_t */
DATA_PARSER_KILL_JOBS_MSG_PTR, /* kill_jobs_msg_t* */
DATA_PARSER_KILL_JOBS_MSG_JOBS_ARRAY, /* kill_jobs_msg_t->jobs_array,jobs_cnt */
DATA_PARSER_KILL_JOBS_RESP_MSG, /* kill_jobs_resp_msg_t */
DATA_PARSER_KILL_JOBS_RESP_MSG_PTR, /* kill_jobs_resp_msg_t* */
DATA_PARSER_KILL_JOBS_RESP_JOB, /* kill_jobs_resp_job_t */
DATA_PARSER_KILL_JOBS_RESP_JOB_PTR, /* kill_jobs_resp_job_t* */
DATA_PARSER_OPENAPI_KILL_JOBS_RESP, /* openapi_kill_jobs_resp_t */
DATA_PARSER_OPENAPI_KILL_JOBS_RESP_PTR, /* openapi_kill_jobs_resp_t* */
DATA_PARSER_OPENAPI_KILL_JOB_RESP, /* openapi_kill_jobs_resp_t */
DATA_PARSER_OPENAPI_KILL_JOB_RESP_PTR, /* openapi_kill_jobs_resp_t* */
DATA_PARSER_PRIORITY_BY_PARTITION, /* slurm_job_info_t */
DATA_PARSER_PART_PRIO, /* part_prio_t */
DATA_PARSER_PART_PRIO_PTR,
DATA_PARSER_NODE_CERT_FLAGS,
DATA_PARSER_TOPOLOGY_CONF, /* topology_ctx_t */
DATA_PARSER_TOPOLOGY_CONF_PTR, /* topology_ctx_t* */
DATA_PARSER_TOPOLOGY_CONF_ARRAY, /* topology_ctx_array_t */
DATA_PARSER_TOPOLOGY_TREE, /* topology_ctx_t topology/tree plugin */
DATA_PARSER_TOPOLOGY_BLOCK, /* topology_ctx_t topology/block plugin */
DATA_PARSER_TOPOLOGY_FLAT, /* topology_ctx_t topology/flat plugin */
DATA_PARSER_TOPOLOGY_TREE_CONFIG, /* topology_tree_config_t */
DATA_PARSER_TOPOLOGY_TREE_CONFIG_PTR, /* topology_tree_config_t* */
DATA_PARSER_TOPOLOGY_TREE_CONFIG_ARRAY, /* topology_tree_config_t->switch_configs,config_cnt */
DATA_PARSER_TOPOLOGY_BLOCK_CONFIG, /* topology_block_config_t */
DATA_PARSER_TOPOLOGY_BLOCK_CONFIG_PTR, /* topology_block_config_t* */
DATA_PARSER_TOPOLOGY_BLOCK_CONFIG_ARRAY, /* topology_block_config_t->block_configs,config_cnt */
DATA_PARSER_SWITCH_CONFIG, /* slurm_conf_switches_t */
DATA_PARSER_SWITCH_CONFIG_PTR, /* slurm_conf_switches_t* */
DATA_PARSER_BLOCK_CONFIG, /* slurm_conf_block_t */
DATA_PARSER_BLOCK_CONFIG_PTR, /* slurm_conf_block_t* */
DATA_PARSER_H_RESOURCE, /* hierarchical_resource_t */
DATA_PARSER_H_RESOURCE_PTR, /* hierarchical_resource_t* */
DATA_PARSER_H_RESOURCE_LIST, /* list_t* hierarchical_resource_t* */
DATA_PARSER_H_RESOURCE_MODE_FLAG, /* HRES_MODE_* */
DATA_PARSER_H_LAYER, /* hierarchy_layer_t */
DATA_PARSER_H_LAYER_PTR, /* hierarchy_layer_t* */
DATA_PARSER_H_LAYER_LIST, /* list_t* hierarchy_layer_t* */
DATA_PARSER_H_RESOURCES_AS_LICENSE_LIST, /* parse H_RESOURCE_LIST to list_t* of licenses_t* */
DATA_PARSER_TYPE_MAX
} data_parser_type_t;
/*
* Function prototype for callback when there is a parsing error
* Return: true to continue parsing, false to stop parsing
*/
typedef bool (*data_parser_on_error_t)(void *arg, data_parser_type_t type,
int error_code, const char *source,
const char *why, ...)
__attribute__((format(printf, 5, 6)));
/*
* Function prototype for callback when there is a parsing warning
*/
typedef void (*data_parser_on_warn_t)(void *arg, data_parser_type_t type,
const char *source, const char *why, ...)
__attribute__((format(printf, 4, 5)));
typedef struct data_parser_s data_parser_t;
/* data_parser plugin for current Slurm version */
#define SLURM_DATA_PARSER_VERSION \
"data_parser/v" XSTRINGIFY(SLURM_API_AGE) "." \
XSTRINGIFY(SLURM_API_REVISION) "." \
XSTRINGIFY(SLURM_API_CURRENT)
/* Separator character for parameters for a given data_parser plugin list */
#define SLURM_DATA_PARSER_PLUGIN_PARAMS_CHAR "+"
/* data_parser plugin for current Slurm version with complex mode active */
#define SLURM_DATA_PARSER_VERSION_COMPLEX \
SLURM_DATA_PARSER_VERSION SLURM_DATA_PARSER_PLUGIN_PARAMS_CHAR "complex"
/*
* Initialize new data parser against given plugin
* IN on_parse_error - callback when an parsing error is encountered
* ptr must remain valid until free called.
* IN on_dump_error - callback when an parsing error is encountered
* ptr must remain valid until free called.
* IN on_error_arg - ptr to pass to on_error function (not modified)
* ptr must remain valid until free called.
* IN on_parse_warn - callback when an parsing warning is encountered
* ptr must remain valid until free called.
* IN on_dump_warn - callback when an parsing warning is encountered
* ptr must remain valid until free called.
* IN on_warn_arg - ptr to pass to on_warn function (not modified)
* ptr must remain valid until free called.
* IN plugin_type - plugin_type of data_parser plugin to load/use
* Parameters for plugin may be included when delimited by
* SLURM_DATA_PARSER_PLUGIN_PARAMS_CHAR.
* IN listf - list function if plugin_type = "list"
* IN skip_loading - skip any calls related to loading the plugins
* RET parser ptr
* Must be freed by call to data_parser_g_free()
*/
extern data_parser_t *data_parser_g_new(data_parser_on_error_t on_parse_error,
data_parser_on_error_t on_dump_error,
data_parser_on_error_t on_query_error,
void *error_arg,
data_parser_on_warn_t on_parse_warn,
data_parser_on_warn_t on_dump_warn,
data_parser_on_warn_t on_query_warn,
void *warn_arg, const char *plugin_type,
plugrack_foreach_t listf,
bool skip_loading);
/*
* Initialize a new data parser for all plugins found
*
* IN on_parse_error - callback when an parsing error is encountered
* ptr must remain valid until free called.
* IN on_dump_error - callback when an parsing error is encountered
* ptr must remain valid until free called.
* IN on_error_arg - ptr to pass to on_error function (not modified)
* ptr must remain valid until free called.
* IN on_parse_warn - callback when an parsing warning is encountered
* ptr must remain valid until free called.
* IN on_dump_warn - callback when an parsing warning is encountered
* ptr must remain valid until free called.
* IN on_warn_arg - ptr to pass to on_warn function (not modified)
* ptr must remain valid until free called.
* IN plugin_type - CSV of plugin_types of data_parser plugin to load/use
* IN listf - list function if plugin_type = "list"
* IN skip_loading - skip any calls related to loading the plugins
* RET NULL terminated parser array ptr
* Must be freed by call to data_parser_g_array_free()
*/
extern data_parser_t **data_parser_g_new_array(
data_parser_on_error_t on_parse_error,
data_parser_on_error_t on_dump_error,
data_parser_on_error_t on_query_error,
void *error_arg,
data_parser_on_warn_t on_parse_warn,
data_parser_on_warn_t on_dump_warn,
data_parser_on_warn_t on_query_warn,
void *warn_arg,
const char *plugin_type,
plugrack_foreach_t listf,
bool skip_loading);
typedef enum {
DATA_PARSER_ATTR_INVALID = 0,
DATA_PARSER_ATTR_DBCONN_PTR, /* return of slurmdb_connection_get() - will not xfree */
DATA_PARSER_ATTR_QOS_LIST, /* List<slurmdb_qos_rec_t *> - will xfree() */
DATA_PARSER_ATTR_TRES_LIST, /* List<slurmdb_tres_rec_t *> - will xfree() */
DATA_PARSER_ATTR_MAX /* place holder - do not use */
} data_parser_attr_type_t;
/*
* Assign additional resource to parser
* IN parser - parser to add resource
* IN type - type of resource to assign
* IN obj - ptr of resource to assign
* make sure to match the type given in data_parser_attr_type_t
* RET SLURM_SUCCESS or error
*/
extern int data_parser_g_assign(data_parser_t *parser,
data_parser_attr_type_t type, void *obj);
/*
* Get Plugin type as string.
* String is valid for the life of the parser.
* RET plugin including params as string
*/
extern const char *data_parser_get_plugin(data_parser_t *parser);
/*
* Get Plugin type as string stripping "data_parser/".
* String is valid for the life of the parser.
*/
extern const char *data_parser_get_plugin_version(data_parser_t *parser);
/*
* Get Plugin params as string
* String is valid for the life of the parser.
*/
extern const char *data_parser_get_plugin_params(data_parser_t *parser);
/*
* Free data parser instance
* IN parser - parser to free
* IN skip_unloading - skip unloading plugins
* RET SLURM_SUCCESS or error
*/
extern void data_parser_g_free(data_parser_t *parser, bool skip_unloading);
#define FREE_NULL_DATA_PARSER(_X) \
do { \
if (_X) \
data_parser_g_free(_X, true); \
_X = NULL; \
} while (0)
/*
* Free NULL terminated array of parsers
*/
extern void data_parser_g_array_free(data_parser_t **ptr, bool skip_unloading);
#define FREE_NULL_DATA_PARSER_ARRAY(_X, SKIP_UNLOAD) \
do { \
if (_X) \
data_parser_g_array_free(_X, SKIP_UNLOAD); \
_X = NULL; \
} while (0)
/*
* Parse given data_t source into target struct dst
* use DATA_PARSE() macro instead of calling directly!
*
* IN parser - return from data_parser_g_new()
* IN type - expected type of data (there is no guessing here)
* IN dst - ptr to struct/scalar to populate
* This *must* be a pointer to the object and not just a value of the object.
* IN dst_bytes - size of object pointed to by dst
* IN src - data to parse into obj
* IN/OUT parent_path - array of parent dictionary keys.
* Parse path from entire source to this specific src data_t.
* Assist any callers with knowing where parsing failed in tree.
* RET SLURM_SUCCESS or error
*/
extern int data_parser_g_parse(data_parser_t *parser, data_parser_type_t type,
void *dst, ssize_t dst_bytes, data_t *src,
data_t *parent_path);
#define DATA_PARSE(parser, type, dst, src, parent_path) \
data_parser_g_parse(parser, DATA_PARSER_##type, &dst, sizeof(dst), \
src, parent_path)
/*
* Parse given target struct src into data_t dst
* use DATA_DUMP() macro instead of calling directly!
*
* IN parser - return from data_parser_g_new()
* IN type - type of obj
* IN src - ptr to struct/scalar to dump to data_t
* This *must* be a pointer to the object and not just a value of the object.
* IN src_bytes - size of object pointed to by src
* IN src - data to parse into obj
* IN dst - ptr to data to populate with obj dump
* RET SLURM_SUCCESS or error
*/
extern int data_parser_g_dump(data_parser_t *parser, data_parser_type_t type,
void *src, ssize_t src_bytes, data_t *dst);
#define DATA_DUMP(parser, type, src, dst) \
data_parser_g_dump(parser, DATA_PARSER_##type, &src, sizeof(src), dst)
/*
* Generate meta instance for a CLI command
*/
extern openapi_resp_meta_t *data_parser_cli_meta(int argc, char **argv,
const char *mime_type);
#define DATA_PARSER_DUMP_CLI_CTXT_MAGIC 0x1BA211B3
typedef struct {
int magic; /* DATA_PARSER_DUMP_CLI_CTXT_MAGIC */
int rc;
list_t *errors;
list_t *warnings;
const char *data_parser;
} data_parser_dump_cli_ctxt_t;
/*
* Dump object of given type to STDOUT
* This function is only intended for the simple dump of the data and then
* exiting of the CLI command.
* IN type - data parser type for *obj
* IN obj_bytes - sizeof(*obj)
* IN acct_db_conn - slurmdb connection or NULL
* IN mime_type - dump object as given mime type
* IN data_parser - data_parser parameters
* IN meta - ptr to meta instance
* RET SLURM_SUCCESS or error
*/
extern int data_parser_dump_cli_stdout(data_parser_type_t type, void *obj,
int obj_bytes, void *acct_db_conn,
const char *mime_type,
const char *data_parser,
data_parser_dump_cli_ctxt_t *ctxt,
openapi_resp_meta_t *meta);
/*
* Dump object to stdout
*/
#define DATA_DUMP_CLI(type, src, argc, argv, db_conn, mime_type, \
data_parser_str, rc) \
do { \
data_parser_dump_cli_ctxt_t dump_ctxt = { \
.magic = DATA_PARSER_DUMP_CLI_CTXT_MAGIC, \
.data_parser = data_parser_str, \
}; \
__typeof__(src) *src_ptr = &src; \
if (!src.OPENAPI_RESP_STRUCT_META_FIELD_NAME) \
src.OPENAPI_RESP_STRUCT_META_FIELD_NAME = \
data_parser_cli_meta(argc, argv, mime_type); \
if (!src.OPENAPI_RESP_STRUCT_ERRORS_FIELD_NAME) \
src.OPENAPI_RESP_STRUCT_ERRORS_FIELD_NAME = \
dump_ctxt.errors = \
list_create(free_openapi_resp_error); \
else \
dump_ctxt.errors = \
src.OPENAPI_RESP_STRUCT_ERRORS_FIELD_NAME; \
if (!src.OPENAPI_RESP_STRUCT_WARNINGS_FIELD_NAME) \
src.OPENAPI_RESP_STRUCT_WARNINGS_FIELD_NAME = \
dump_ctxt.warnings = list_create( \
free_openapi_resp_warning); \
else \
dump_ctxt.warnings = \
src.OPENAPI_RESP_STRUCT_WARNINGS_FIELD_NAME; \
rc = data_parser_dump_cli_stdout( \
DATA_PARSER_##type, src_ptr, sizeof(*src_ptr), \
db_conn, mime_type, data_parser_str, &dump_ctxt, \
src.OPENAPI_RESP_STRUCT_META_FIELD_NAME); \
FREE_OPENAPI_RESP_COMMON_CONTENTS(src_ptr); \
} while (false)
/*
* Dump object as single field to in common openapi response dictionary
*/
#define DATA_DUMP_CLI_SINGLE(type, src, argc, argv, db_conn, mime_type, \
data_parser, rc) \
do { \
openapi_resp_single_t openapi_resp = { \
.response = src, \
}; \
DATA_DUMP_CLI(type, openapi_resp, argc, argv, db_conn, \
mime_type, data_parser, rc); \
} while (false)
/* Dump a struct into a json or yaml string. All errors and warnings logged */
#define DATA_DUMP_TO_STR(type, src, ret_str, db_conn, mime_type, sflags, rc) \
do { \
data_parser_t *parser = NULL; \
data_parser_dump_cli_ctxt_t ctxt = { 0 }; \
data_t *dst = NULL; \
\
ctxt.magic = DATA_PARSER_DUMP_CLI_CTXT_MAGIC; \
ctxt.data_parser = SLURM_DATA_PARSER_VERSION; \
ctxt.errors = list_create(free_openapi_resp_error); \
ctxt.warnings = list_create(free_openapi_resp_warning); \
parser = data_parser_cli_parser(ctxt.data_parser, &ctxt); \
if (!parser) { \
rc = ESLURM_DATA_INVALID_PARSER; \
error("%s parsing of %s not supported by %s", \
mime_type, XSTRINGIFY(DATA_PARSER_##type), \
ctxt.data_parser); \
} else { \
if (db_conn) \
data_parser_g_assign( \
parser, DATA_PARSER_ATTR_DBCONN_PTR, \
db_conn); \
dst = data_new(); \
DATA_DUMP(parser, type, src, dst); \
list_for_each(ctxt.warnings, openapi_warn_log_foreach, \
NULL); \
list_for_each(ctxt.errors, openapi_error_log_foreach, \
NULL); \
} \
\
if (data_get_type(dst) != DATA_TYPE_NULL) { \
serializer_flags_t tmp_sflags = sflags; \
\
if (data_parser_g_is_complex(parser)) \
tmp_sflags |= SER_FLAGS_COMPLEX; \
serialize_g_data_to_string(&ret_str, NULL, dst, \
mime_type, tmp_sflags); \
} \
FREE_NULL_DATA(dst); \
FREE_NULL_LIST(ctxt.errors); \
FREE_NULL_LIST(ctxt.warnings); \
FREE_NULL_DATA_PARSER(parser); \
} while (false)
/* Parse a json or yaml string into a struct. All errors and warnings logged */
#define DATA_PARSE_FROM_STR(type, str, str_len, dst, db_conn, mime_type, rc) \
do { \
data_t *src = NULL; \
data_parser_dump_cli_ctxt_t ctxt = { 0 }; \
data_t *parent_path = NULL; \
data_parser_t *parser = NULL; \
\
rc = serialize_g_string_to_data(&src, str, str_len, \
mime_type); \
if (rc) { \
FREE_NULL_DATA(src); \
break; \
} \
\
ctxt.magic = DATA_PARSER_DUMP_CLI_CTXT_MAGIC; \
ctxt.data_parser = SLURM_DATA_PARSER_VERSION; \
ctxt.errors = list_create(free_openapi_resp_error); \
ctxt.warnings = list_create(free_openapi_resp_warning); \
parser = data_parser_cli_parser(ctxt.data_parser, &ctxt); \
if (!parser) { \
rc = ESLURM_DATA_INVALID_PARSER; \
error("%s parsing of %s not supported by %s", \
mime_type, XSTRINGIFY(DATA_PARSER_##type), \
ctxt.data_parser); \
} else { \
if (db_conn) \
data_parser_g_assign( \
parser, DATA_PARSER_ATTR_DBCONN_PTR, \
db_conn); \
parent_path = data_set_list(data_new()); \
(void) data_convert_tree(src, DATA_TYPE_NONE); \
rc = DATA_PARSE(parser, type, dst, src, parent_path); \
list_for_each(ctxt.warnings, openapi_warn_log_foreach, \
NULL); \
list_for_each(ctxt.errors, openapi_error_log_foreach, \
NULL); \
} \
FREE_NULL_DATA(src); \
FREE_NULL_LIST(ctxt.errors); \
FREE_NULL_LIST(ctxt.warnings); \
FREE_NULL_DATA(parent_path); \
FREE_NULL_DATA_PARSER(parser); \
} while (false)
/*
* Create data_parser instance for CLI
* IN data_parser - data_parser parameters
* RET parser ptr
* Must be freed by call to data_parser_g_free()
*/
extern data_parser_t *data_parser_cli_parser(const char *data_parser,
void *arg);
/*
* Get the OpenAPI type for a given parser's field
* IN parser - parser to query
* IN field - field name or NULL to get parser's type
* RET openapi type or OPENAPI_TYPE_INVALID if not found
*/
extern openapi_type_t data_parser_g_resolve_openapi_type(
data_parser_t *parser,
data_parser_type_t type,
const char *field);
/*
* Get stringified type from parser
* IN parser - parser to query
* IN type - parser type
* RET string of parser type or NULL if not known to plugin
*/
extern const char *data_parser_g_resolve_type_string(data_parser_t *parser,
data_parser_type_t type);
/*
* Add reference to type for given parser.
* Intended to be called before calling data_parser_g_populate_schema() to
* ensure the single referenced types are populated directly.
* IN parser - parser to query
* IN type - parser type
* IN/OUT references_ptr - Pointer to pointer to populate with (opaque) references.
* Must be released by call to data_parser_g_release_references().
* RET SLURM_SUCCESS or error
*/
extern int data_parser_g_increment_reference(data_parser_t *parser,
data_parser_type_t type,
void **references_ptr);
/*
* Populate reference to type for given parser.
* IN parser - parser to query
* IN type - parser type
* IN/OUT references_ptr - Pointer to pointer to populate with (opaque) references.
* Must be released by call to data_parser_g_release_references().
* IN dst - Location to populate with schema or $ref to schema
* IN schemas - dictionary of schemas for OpenAPI spec to be populated as needed
* RET SLURM_SUCCESS or error
*/
extern int data_parser_g_populate_schema(data_parser_t *parser,
data_parser_type_t type,
void **references_ptr, data_t *dst,
data_t *schemas);
/*
* Populate reference to parameter type for given parser.
* IN parser - parser to query
* IN types - list of parser types (can be DATA_PARSER_TYPE_INVALID)
* IN/OUT references_ptr - Pointer to pointer to populate with (opaque) references.
* Must be released by call to data_parser_g_release_references().
* IN dst - Location to populate with schema or $ref to schema
* IN schemas - dictionary of schemas for OpenAPI spec to be populated as needed
* RET SLURM_SUCCESS or error
*/
extern int data_parser_g_populate_parameters(data_parser_t *parser,
data_parser_type_t parameter_type,
data_parser_type_t query_type,
void **references_ptr, data_t *dst,
data_t *schemas);
/*
* Release memory used by referencesptr
* IN parser - parser to query
* IN/OUT references_ptr - Pointer to pointer to (opaque) references to release.
*/
extern void data_parser_g_release_references(data_parser_t *parser,
void **references_ptr);
/*
* Check if parser is configured with +complex flag active
* IN parser - parser to query
* RET True if parser is configure with +complex
*/
extern bool data_parser_g_is_complex(data_parser_t *parser);
/*
* Dump the data flags the parser is configure with (i.e. +complex) into dst
* IN parser - parser to query
* IN/OUT dst - populate dst
* RET - SLURM_SUCCESS on success else error
*/
extern int data_parser_g_dump_flags(data_parser_t *parser, data_t *dst);
/*
* Check if parser is deprecated
* IN parser - parser to query
* RET True if parser is deprecated
*/
extern bool data_parser_g_is_deprecated(data_parser_t *parser);
#endif