| /*****************************************************************************\ | |
| * 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); | |
| } |