blob: 26b03742c5f3bd4d735887f5e50f00a9d48c6535 [file] [log] [blame] [edit]
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include "ppport.h"
#include <slurm/slurm.h>
#include <slurm/slurmdb.h>
#include "slurmdb-perl.h"
#include "const-c.inc"
extern void *slurm_xmalloc(size_t, const char *, int, const char *);
extern void slurmdb_destroy_association_cond(void *object);
extern void slurmdb_destroy_cluster_cond(void *object);
extern void slurmdb_destroy_job_cond(void *object);
extern void slurmdb_destroy_user_cond(void *object);
MODULE = Slurmdb PACKAGE = Slurmdb PREFIX=slurmdb_
INCLUDE: const-xs.inc
PROTOTYPES: ENABLE
void*
slurmdb_connection_get()
int
slurmdb_connection_close(db_conn)
void* db_conn
SV*
slurmdb_clusters_get(db_conn, conditions)
void* db_conn
HV* conditions
INIT:
AV* results;
HV* rh;
List list = NULL;
ListIterator itr;
slurmdb_cluster_cond_t *cluster_cond = (slurmdb_cluster_cond_t*)
slurm_xmalloc(sizeof(slurmdb_cluster_cond_t), __FILE__,
__LINE__, "slurmdb_clusters_get");
slurmdb_cluster_rec_t *rec = NULL;
if (hv_to_cluster_cond(conditions, cluster_cond) < 0) {
XSRETURN_UNDEF;
}
results = (AV*)sv_2mortal((SV*)newAV());
CODE:
list = slurmdb_clusters_get(db_conn, cluster_cond);
if (list) {
itr = slurm_list_iterator_create(list);
while ((rec = slurm_list_next(itr))) {
rh = (HV *)sv_2mortal((SV*)newHV());
if (cluster_rec_to_hv(rec, rh) < 0) {
XSRETURN_UNDEF;
}
av_push(results, newRV((SV*)rh));
}
slurm_list_destroy(list);
}
RETVAL = newRV((SV*)results);
slurmdb_destroy_cluster_cond(cluster_cond);
OUTPUT:
RETVAL
SV*
slurmdb_report_cluster_account_by_user(db_conn, assoc_condition)
void* db_conn
HV* assoc_condition
INIT:
AV* results;
List list = NULL;
slurmdb_association_cond_t *assoc_cond = (slurmdb_association_cond_t*)
slurm_xmalloc(sizeof(slurmdb_association_cond_t), __FILE__,
__LINE__, "slurmdb_report_cluster_account_by_user");
if (hv_to_assoc_cond(assoc_condition, assoc_cond) < 0) {
XSRETURN_UNDEF;
}
results = (AV*)sv_2mortal((SV*)newAV());
CODE:
list = slurmdb_report_cluster_account_by_user(db_conn, assoc_cond);
if (list) {
if (report_cluster_rec_list_to_av(list, results) < 0) {
XSRETURN_UNDEF;
}
slurm_list_destroy(list);
}
RETVAL = newRV((SV*)results);
slurmdb_destroy_association_cond(assoc_cond);
OUTPUT:
RETVAL
SV*
slurmdb_report_cluster_user_by_account(db_conn, assoc_condition)
void* db_conn
HV* assoc_condition
INIT:
AV* results;
List list = NULL;
slurmdb_association_cond_t *assoc_cond = (slurmdb_association_cond_t*)
slurm_xmalloc(sizeof(slurmdb_association_cond_t), __FILE__,
__LINE__, "slurmdb_report_cluster_user_by_account");
if (hv_to_assoc_cond(assoc_condition, assoc_cond) < 0) {
XSRETURN_UNDEF;
}
results = (AV*)sv_2mortal((SV*)newAV());
CODE:
list = slurmdb_report_cluster_user_by_account(db_conn, assoc_cond);
if (list) {
if (report_cluster_rec_list_to_av(list, results) < 0) {
XSRETURN_UNDEF;
}
slurm_list_destroy(list);
}
RETVAL = newRV((SV*)results);
slurmdb_destroy_association_cond(assoc_cond);
OUTPUT:
RETVAL
SV*
slurmdb_report_job_sizes_grouped_by_top_account(db_conn, job_condition, grouping_array, flat_view)
void* db_conn
HV* job_condition
AV* grouping_array
bool flat_view
INIT:
AV* results;
List list = NULL;
List grouping_list = slurm_list_create(NULL);
slurmdb_job_cond_t *job_cond = (slurmdb_job_cond_t*)
slurm_xmalloc(sizeof(slurmdb_job_cond_t), __FILE__,
__LINE__, "slurmdb_report_job_sizes_grouped_by_top_account");
if (hv_to_job_cond(job_condition, job_cond) < 0) {
XSRETURN_UNDEF;
}
if (av_to_cluster_grouping_list(grouping_array, grouping_list) < 0) {
XSRETURN_UNDEF;
}
results = (AV*)sv_2mortal((SV*)newAV());
CODE:
list = slurmdb_report_job_sizes_grouped_by_top_account(db_conn,
job_cond, grouping_list, flat_view);
if (list) {
if (cluster_grouping_list_to_av(list, results) < 0) {
XSRETURN_UNDEF;
}
slurm_list_destroy(list);
}
RETVAL = newRV((SV*)results);
slurmdb_destroy_job_cond(job_cond);
slurm_list_destroy(grouping_list);
OUTPUT:
RETVAL
SV*
slurmdb_report_user_top_usage(db_conn, user_condition, group_accounts)
void* db_conn
HV* user_condition
bool group_accounts
INIT:
AV* results;
List list = NULL;
slurmdb_user_cond_t* user_cond = (slurmdb_user_cond_t*)
slurm_xmalloc(sizeof(slurmdb_user_cond_t), __FILE__,
__LINE__, "slurmdb_report_user_top_usage");
user_cond->assoc_cond = (slurmdb_association_cond_t*)
slurm_xmalloc(sizeof(slurmdb_association_cond_t), __FILE__,
__LINE__, "slurmdb_report_user_top_usage");
if (hv_to_user_cond(user_condition, user_cond) < 0) {
XSRETURN_UNDEF;
}
results = (AV*)sv_2mortal((SV*)newAV());
CODE:
list = slurmdb_report_user_top_usage(db_conn, user_cond,
group_accounts);
if (list) {
if (report_cluster_rec_list_to_av(list, results) < 0) {
XSRETURN_UNDEF;
}
slurm_list_destroy(list);
}
RETVAL = newRV((SV*)results);
slurmdb_destroy_user_cond(user_cond);
OUTPUT:
RETVAL