blob: c76bb4305322996422d92dca7906fbcaa5375b95 [file] [log] [blame]
/*****************************************************************************\
* 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);
}