| /*****************************************************************************\ |
| * sacct.c - job accounting reports for Slurm's jobacct/log plugin |
| ***************************************************************************** |
| * Copyright (C) 2008-2009 Lawrence Livermore National Security. |
| * Copyright (C) 2005 Hewlett-Packard Development Company, L.P. |
| * |
| * 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. |
| \*****************************************************************************/ |
| |
| #include "sacct.h" |
| |
| /* |
| * Globals |
| */ |
| sacct_parameters_t params; |
| print_field_t fields[] = { |
| {10, "Account", print_fields_str, PRINT_ACCOUNT}, |
| {15, "AdminComment", print_fields_str, PRINT_ADMIN_COMMENT}, |
| {10, "AllocCPUS", print_fields_uint, PRINT_ALLOC_CPUS}, |
| {10, "AllocNodes", print_fields_str, PRINT_ALLOC_NODES}, |
| {10, "AllocTRES", print_fields_str, PRINT_TRESA}, |
| {7, "AssocID", print_fields_uint, PRINT_ASSOCID}, |
| {10, "AveCPU", print_fields_str, PRINT_AVECPU}, |
| {10, "AveCPUFreq", print_fields_str, PRINT_ACT_CPUFREQ}, |
| {14, "AveDiskRead", print_fields_str, PRINT_AVEDISKREAD}, |
| {14, "AveDiskWrite", print_fields_str, PRINT_AVEDISKWRITE}, |
| {10, "AvePages", print_fields_str, PRINT_AVEPAGES}, |
| {10, "AveRSS", print_fields_str, PRINT_AVERSS}, |
| {10, "AveVMSize", print_fields_str, PRINT_AVEVSIZE}, |
| {16, "BlockID", print_fields_str, PRINT_BLOCKID}, |
| {10, "Cluster", print_fields_str, PRINT_CLUSTER}, |
| {14, "Comment", print_fields_str, PRINT_COMMENT}, |
| {19, "Constraints", print_fields_str, PRINT_CONSTRAINTS}, |
| {14, "ConsumedEnergy", print_fields_str, PRINT_CONSUMED_ENERGY}, |
| {17, "ConsumedEnergyRaw", print_fields_uint64, |
| PRINT_CONSUMED_ENERGY_RAW}, |
| {19, "Container", print_fields_str, PRINT_CONTAINER}, |
| {10, "CPUTime", print_fields_time_from_secs, PRINT_CPU_TIME}, |
| {10, "CPUTimeRAW", print_fields_uint64, PRINT_CPU_TIME_RAW}, |
| {-21, "DBIndex", print_fields_uint64, PRINT_DB_INX}, |
| {15, "DerivedExitCode", print_fields_str, PRINT_DERIVED_EC}, |
| {10, "Elapsed", print_fields_time_from_secs, PRINT_ELAPSED}, |
| {10, "ElapsedRaw", print_fields_uint32, PRINT_ELAPSED_RAW}, |
| {19, "Eligible", print_fields_date, PRINT_ELIGIBLE}, |
| {19, "End", print_fields_date, PRINT_END}, |
| {8, "ExitCode", print_fields_str, PRINT_EXITCODE}, |
| {14, "Extra", print_fields_str, PRINT_EXTRA}, |
| {8, "FailedNode", print_fields_str, PRINT_FAILED_NODE}, |
| {19, "Flags", print_fields_str, PRINT_FLAGS}, |
| {6, "GID", print_fields_uint, PRINT_GID}, |
| {9, "Group", print_fields_str, PRINT_GROUP}, |
| {-12, "JobID", print_fields_str, PRINT_JOBID}, |
| {-12, "JobIDRaw", print_fields_str, PRINT_JOBIDRAW}, |
| {10, "JobName", print_fields_str, PRINT_JOBNAME}, |
| {9, "Layout", print_fields_str, PRINT_LAYOUT}, |
| {10, "Licenses", print_fields_str, PRINT_LICENSES}, |
| {12, "MaxDiskRead", print_fields_str, PRINT_MAXDISKREAD}, |
| {15, "MaxDiskReadNode", print_fields_str, PRINT_MAXDISKREADNODE}, |
| {15, "MaxDiskReadTask", print_fields_uint, PRINT_MAXDISKREADTASK}, |
| {12, "MaxDiskWrite", print_fields_str, PRINT_MAXDISKWRITE}, |
| {16, "MaxDiskWriteNode", print_fields_str, PRINT_MAXDISKWRITENODE}, |
| {16, "MaxDiskWriteTask", print_fields_uint, PRINT_MAXDISKWRITETASK}, |
| {8, "MaxPages", print_fields_str, PRINT_MAXPAGES}, |
| {12, "MaxPagesNode", print_fields_str, PRINT_MAXPAGESNODE}, |
| {14, "MaxPagesTask", print_fields_uint, PRINT_MAXPAGESTASK}, |
| {10, "MaxRSS", print_fields_str, PRINT_MAXRSS}, |
| {10, "MaxRSSNode", print_fields_str, PRINT_MAXRSSNODE}, |
| {10, "MaxRSSTask", print_fields_uint, PRINT_MAXRSSTASK}, |
| {10, "MaxVMSize", print_fields_str, PRINT_MAXVSIZE}, |
| {14, "MaxVMSizeNode", print_fields_str, PRINT_MAXVSIZENODE}, |
| {14, "MaxVMSizeTask", print_fields_uint, PRINT_MAXVSIZETASK}, |
| {12, "McsLabel", print_fields_str, PRINT_MCS_LABEL}, |
| {10, "MinCPU", print_fields_str, PRINT_MINCPU}, |
| {10, "MinCPUNode", print_fields_str, PRINT_MINCPUNODE}, |
| {10, "MinCPUTask", print_fields_uint, PRINT_MINCPUTASK}, |
| {10, "NCPUS", print_fields_uint, PRINT_ALLOC_CPUS}, |
| {8, "NNodes", print_fields_uint, PRINT_NNODES}, |
| {15, "NodeList", print_fields_str, PRINT_NODELIST}, |
| {8, "NTasks", print_fields_uint, PRINT_NTASKS}, |
| {10, "Partition", print_fields_str, PRINT_PARTITION}, |
| {10, "Planned", print_fields_time_from_secs, PRINT_PLANNED}, |
| {10, "PlannedCPU", print_fields_time_from_secs, PRINT_PLANNED_CPU}, |
| {13, "PlannedCPURAW", print_fields_uint, PRINT_PLANNED_CPU_RAW}, |
| {10, "Priority", print_fields_uint, PRINT_PRIO}, |
| {10, "QOS", print_fields_str, PRINT_QOS}, |
| {6, "QOSRAW", print_fields_uint, PRINT_QOSRAW}, |
| {10, "QOSREQ", print_fields_str, PRINT_QOSREQ}, |
| {22, "Reason", print_fields_str, PRINT_REASON}, |
| {10, "ReqCPUFreq", print_fields_str, PRINT_REQ_CPUFREQ_MAX}, /* vestigial */ |
| {13, "ReqCPUFreqGov", print_fields_str, PRINT_REQ_CPUFREQ_GOV}, |
| {13, "ReqCPUFreqMax", print_fields_str, PRINT_REQ_CPUFREQ_MAX}, |
| {13, "ReqCPUFreqMin", print_fields_str, PRINT_REQ_CPUFREQ_MIN}, |
| {8, "ReqCPUS", print_fields_uint, PRINT_REQ_CPUS}, |
| {10, "ReqMem", print_fields_str, PRINT_REQ_MEM}, |
| {8, "ReqNodes", print_fields_str, PRINT_REQ_NODES}, |
| {10, "ReqTRES", print_fields_str, PRINT_TRESR}, |
| {20, "Reservation", print_fields_str, PRINT_RESERVATION}, |
| {8, "ReservationId", print_fields_uint, PRINT_RESERVATION_ID}, |
| {20, "ReqReservation", print_fields_str, PRINT_RESERVATION_REQ}, |
| {8, "Restarts", print_fields_uint16, PRINT_RESTART_CNT}, |
| {11, "SegmentSize", print_fields_uint16, PRINT_SEGMENT_SIZE}, |
| {14, "SLUID", print_fields_sluid, PRINT_SLUID}, |
| {19, "Start", print_fields_date, PRINT_START}, |
| {10, "State", print_fields_str, PRINT_STATE}, |
| {20, "StdErr", print_fields_str, PRINT_STDERR}, |
| {20, "StdIn", print_fields_str, PRINT_STDIN}, |
| {20, "StdOut", print_fields_str, PRINT_STDOUT}, |
| {19, "Submit", print_fields_date, PRINT_SUBMIT}, |
| {20, "SubmitLine", print_fields_str, PRINT_SUBMIT_LINE}, |
| {10, "Suspended", print_fields_time_from_secs, PRINT_SUSPENDED}, |
| {15, "SystemComment", print_fields_str, PRINT_SYSTEM_COMMENT}, |
| {10, "SystemCPU", print_fields_str, PRINT_SYSTEMCPU}, |
| {10, "Timelimit", print_fields_str, PRINT_TIMELIMIT}, |
| {10, "TimelimitRaw", print_fields_str, PRINT_TIMELIMIT_RAW}, |
| {10, "TotalCPU", print_fields_str, PRINT_TOTALCPU}, |
| {14, "TRESUsageInAve", print_fields_str, PRINT_TRESUIA}, |
| {14, "TRESUsageInMax", print_fields_str, PRINT_TRESUIM}, |
| {18, "TRESUsageInMaxNode", print_fields_str, PRINT_TRESUIMN}, |
| {18, "TRESUsageInMaxTask", print_fields_str, PRINT_TRESUIMT}, |
| {14, "TRESUsageInMin", print_fields_str, PRINT_TRESUIMI}, |
| {18, "TRESUsageInMinNode", print_fields_str, PRINT_TRESUIMIN}, |
| {18, "TRESUsageInMinTask", print_fields_str, PRINT_TRESUIMIT}, |
| {14, "TRESUsageInTot", print_fields_str, PRINT_TRESUIT}, |
| {15, "TRESUsageOutAve", print_fields_str, PRINT_TRESUOA}, |
| {15, "TRESUsageOutMax", print_fields_str, PRINT_TRESUOM}, |
| {19, "TRESUsageOutMaxNode", print_fields_str, PRINT_TRESUOMN}, |
| {19, "TRESUsageOutMaxTask", print_fields_str, PRINT_TRESUOMT}, |
| {15, "TRESUsageOutMin", print_fields_str, PRINT_TRESUOMI}, |
| {19, "TRESUsageOutMinNode", print_fields_str, PRINT_TRESUOMIN}, |
| {19, "TRESUsageOutMinTask", print_fields_str, PRINT_TRESUOMIT}, |
| {15, "TRESUsageOutTot", print_fields_str, PRINT_TRESUOT}, |
| {6, "UID", print_fields_uint, PRINT_UID}, |
| {9, "User", print_fields_str, PRINT_USER}, |
| {10, "UserCPU", print_fields_str, PRINT_USERCPU}, |
| {10, "WCKey", print_fields_str, PRINT_WCKEY}, |
| {10, "WCKeyID", print_fields_uint, PRINT_WCKEYID}, |
| {20, "WorkDir", print_fields_str, PRINT_WORK_DIR}, |
| {0, NULL, NULL, 0} |
| }; |
| |
| list_t *jobs = NULL; |
| |
| int main(int argc, char **argv) |
| { |
| int rc = 0; |
| |
| slurm_init(NULL); |
| sacct_init(); |
| parse_command_line(argc, argv); |
| |
| if (!params.mimetype && |
| !(params.job_cond->flags & JOBCOND_FLAG_SCRIPT) && |
| !(params.job_cond->flags & JOBCOND_FLAG_ENV)) |
| print_fields_header(print_fields_list); |
| if (get_data() == SLURM_ERROR) |
| exit(1); |
| if (params.opt_completion) |
| do_list_completion(); |
| else |
| do_list(argc, argv); |
| |
| sacct_fini(); |
| |
| #if MEMORY_LEAK_DEBUG |
| slurm_fini(); |
| log_fini(); |
| #endif |
| |
| return (rc); |
| } |