static void _extract_node_level(FILE* fp, int stepx, hid_t jgid_nodes, int nnodes, char* data_set_name) { hid_t jgid_node, gid_level; int nodex, len; char jgrp_node_name[MAX_GROUP_NAME+1]; bool header = true; for (nodex=0; nodex<nnodes; nodex++) { len = H5Lget_name_by_idx(jgid_nodes, ".", H5_INDEX_NAME, H5_ITER_INC, nodex, jgrp_node_name, MAX_GROUP_NAME, H5P_DEFAULT); if ((len < 0) || (len > MAX_GROUP_NAME)) { info("Invalid node name=%s", jgrp_node_name); continue; } jgid_node = get_group(jgid_nodes, jgrp_node_name); if (jgid_node < 0) { info("Failed to open group %s", jgrp_node_name); continue; } if (params.node && strcmp(params.node, "*") && strcmp(params.node, jgrp_node_name)) continue; gid_level = _get_series_parent(jgid_node); if (gid_level == -1) { H5Gclose(jgid_node); continue; } _extract_series(fp, stepx, header, gid_level, jgrp_node_name, data_set_name); header = false; H5Gclose(gid_level); H5Gclose(jgid_node); } }
static void _extract_node_level(FILE* fp, int stepx, hid_t jgid_nodes, int nnodes, bool header, char* data_set_name) { hid_t jgid_node, gid_level, gid_series; int nodex, len, size_data; void *data; uint32_t type; char *data_type, *subtype; char jgrp_node_name[MAX_GROUP_NAME+1]; hdf5_api_ops_t* ops; for (nodex=0; nodex<nnodes; nodex++) { len = H5Lget_name_by_idx(jgid_nodes, ".", H5_INDEX_NAME, H5_ITER_INC, nodex, jgrp_node_name, MAX_GROUP_NAME, H5P_DEFAULT); if ((len < 0) || (len > MAX_GROUP_NAME)) { info("Invalid node name=%s", jgrp_node_name); continue; } jgid_node = get_group(jgid_nodes, jgrp_node_name); if (jgid_node < 0) { info("Failed to open group %s", jgrp_node_name); continue; } if (params.node && strcmp(params.node, "*") && strcmp(params.node, jgrp_node_name)) continue; gid_level = _get_series_parent(jgid_node); if (gid_level == -1) { H5Gclose(jgid_node); continue; } gid_series = get_group(gid_level, data_set_name); if (gid_series < 0) { // This is okay, may not have ran long enough for // a sample (hostname????) H5Gclose(gid_level); H5Gclose(jgid_node); continue; } data_type = get_string_attribute(gid_series, ATTR_DATATYPE); if (!data_type) { H5Gclose(gid_series); H5Gclose(gid_level); H5Gclose(jgid_node); info("No datatype in %s", data_set_name); continue; } type = acct_gather_profile_type_from_string(data_type); xfree(data_type); subtype = get_string_attribute(gid_series, ATTR_SUBDATATYPE); if (subtype == NULL) { H5Gclose(gid_series); H5Gclose(gid_level); H5Gclose(jgid_node); info("No %s attribute", ATTR_SUBDATATYPE); continue; } ops = profile_factory(type); if (ops == NULL) { xfree(subtype); H5Gclose(gid_series); H5Gclose(gid_level); H5Gclose(jgid_node); info("Failed to create operations for %s", acct_gather_profile_type_to_string(type)); continue; } data = get_hdf5_data( gid_series, type, data_set_name, &size_data); if (data) { if (strcmp(subtype,SUBDATA_SUMMARY) != 0) (*(ops->extract_series)) (fp, header, params.job_id, stepx, jgrp_node_name, data_set_name, data, size_data); else (*(ops->extract_total)) (fp, header, params.job_id, stepx, jgrp_node_name, data_set_name, data, size_data); header = false; xfree(data); } else { fprintf(fp, "%d,%d,%s,No %s Data\n", params.job_id, stepx, jgrp_node_name, data_set_name); } xfree(ops); H5Gclose(gid_series); H5Gclose(gid_level); H5Gclose(jgid_node); } }
static void _extract_data() { hid_t fid_job, jgid_root, jgid_step, jgid_nodes, jgid_node, jgid_level; int nsteps, nnodes, stepx, isx, len; char jgrp_step_name[MAX_GROUP_NAME+1]; char jgrp_node_name[MAX_GROUP_NAME+1]; bool header; FILE* fp = fopen(params.output, "w"); if (fp == NULL) { error("Failed to create output file %s -- %m", params.output); } fid_job = H5Fopen(params.input, H5F_ACC_RDONLY, H5P_DEFAULT); if (fid_job < 0) { error("Failed to open %s", params.input); return; } jgid_root = H5Gopen(fid_job, "/", H5P_DEFAULT); if (jgid_root < 0) { H5Fclose(fid_job); error("Failed to open root"); return; } nsteps = get_int_attribute(jgid_root, ATTR_NSTEPS); for (stepx=0; stepx<nsteps; stepx++) { if ((params.step_id != -1) && (stepx != params.step_id)) continue; sprintf(jgrp_step_name, "%s_%d", GRP_STEP, stepx); jgid_step = get_group(jgid_root, jgrp_step_name); if (jgid_step < 0) { error("Failed to open group %s", jgrp_step_name); continue; } if (params.level && !strncasecmp(params.level, "Node:", 5)) { nnodes = get_int_attribute(jgid_step, ATTR_NNODES); jgid_nodes = get_group(jgid_step, GRP_NODES); if (jgid_nodes < 0) { H5Gclose(jgid_step); error("Failed to open group %s", GRP_NODES); continue; } len = H5Lget_name_by_idx(jgid_nodes, ".", H5_INDEX_NAME, H5_ITER_INC, 0, jgrp_node_name, MAX_GROUP_NAME, H5P_DEFAULT); if ((len < 0) || (len > MAX_GROUP_NAME)) { H5Gclose(jgid_nodes); H5Gclose(jgid_step); error("Invalid node name %s", jgrp_node_name); continue; } jgid_node = get_group(jgid_nodes, jgrp_node_name); if (jgid_node < 0) { H5Gclose(jgid_nodes); H5Gclose(jgid_step); info("Failed to open group %s", jgrp_node_name); continue; } jgid_level = _get_series_parent(jgid_node); if (jgid_level == -1) { H5Gclose(jgid_node); H5Gclose(jgid_nodes); H5Gclose(jgid_step); continue; } _get_series_names(jgid_level); H5Gclose(jgid_level); H5Gclose(jgid_node); if (!params.series || !strcmp(params.series, "*")) { for (isx=0; isx<num_series; isx++) { _extract_node_level( fp, stepx, jgid_nodes, nnodes, true, series_names[isx]); } } else if (!strcmp(params.series, GRP_TASKS)) { header = true; for (isx=0; isx<num_series; isx++) { if (strstr(series_names[isx], GRP_TASK)) { _extract_node_level( fp, stepx, jgid_nodes, nnodes, header, series_names[isx]); header = false; } } } else { _extract_node_level(fp, stepx, jgid_nodes, nnodes, true, params.series); } _delete_string_list(series_names, num_series); series_names = NULL; num_series = 0; H5Gclose(jgid_nodes); } else { error("%s is an illegal level", params.level); } H5Gclose(jgid_step); } H5Gclose(jgid_root); H5Fclose(fid_job); fclose(fp); }