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