Exemple #1
0
static void _extract_series(FILE* fp, int stepx, bool header, hid_t gid_level,
			    char* node_name, char* data_set_name) {
	hid_t	gid_series;
	int 	size_data;
	void	*data;
	uint32_t type;
	char	*data_type, *subtype;
	hdf5_api_ops_t* ops;
	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????)
		// OR trying to get all tasks
		return;
	}
	data_type = get_string_attribute(gid_series, ATTR_DATATYPE);
	if (!data_type) {
		H5Gclose(gid_series);
		info("No datatype in %s", data_set_name);
		return;
	}
	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);
		info("No %s attribute", ATTR_SUBDATATYPE);
		return;
	}
	ops = profile_factory(type);
	if (ops == NULL) {
		xfree(subtype);
		H5Gclose(gid_series);
		info("Failed to create operations for %s",
		     acct_gather_profile_type_to_string(type));
		return;
	}
	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, node_name, data_set_name,
				 data, size_data);
		else
			(*(ops->extract_total)) (fp, header, params.job_id,
				 stepx, node_name, data_set_name,
				 data, size_data);
		xfree(data);
	} else {
		fprintf(fp, "%d,%d,%s,No %s Data\n",
		        params.job_id, stepx, node_name,
		        data_set_name);
	}
	xfree(ops);
	H5Gclose(gid_series);

}
Exemple #2
0
// Get the data_set for a node
static void *_get_series_data(hid_t jgid_node, char* series,
                              hdf5_api_ops_t **ops_p, int *nsmp)
{

	hid_t	gid_level, gid_series;
	int 	size_data;
	void	*data;
	uint32_t type;
	char	*data_type;
	hdf5_api_ops_t* ops;

	*nsmp = 0;	// Initialize return arguments.
	*ops_p = NULL;

	// Navigate from the node group to the data set
	gid_level = get_group(jgid_node, GRP_SAMPLES);
	if (gid_level == -1) {
		return NULL;
	}
	gid_series = get_group(gid_level, series);
	if (gid_series < 0) {
		// This is okay, may not have ran long enough for
		// a sample (srun hostname)
		H5Gclose(gid_level);
		return NULL;
	}
	data_type = get_string_attribute(gid_series, ATTR_DATATYPE);
	if (!data_type) {
		H5Gclose(gid_series);
		H5Gclose(gid_level);
		debug("No datatype in %s", series);
		return NULL;
	}
	// Invoke the data type operator to get the data set
	type = acct_gather_profile_type_from_string(data_type);
	xfree(data_type);
	ops = profile_factory(type);
	if (ops == NULL) {
		H5Gclose(gid_series);
		H5Gclose(gid_level);
		debug("Failed to create operations for %s",
		      acct_gather_profile_type_to_string(type));
		return NULL;
	}
	data = get_hdf5_data(gid_series, type, series, &size_data);
	if (data) {
		*nsmp = (size_data / ops->dataset_size());
		*ops_p = ops;
	} else {
		xfree(ops);
	}
	H5Gclose(gid_series);
	H5Gclose(gid_level);
	return data;
}
Exemple #3
0
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);
	}

}
Exemple #4
0
static void _merge_series_data(hid_t jgid_tasks, hid_t jg_node, hid_t nsg_node)
{
 	hid_t   jg_samples, nsg_samples;
	hid_t   g_series, g_series_total = -1;
 	hsize_t num_samples, n_series;
	int     idsx, len;
	void    *data = NULL, *series_total = NULL;
	uint32_t type;
	char *data_type;
	char    nam_series[MAX_GROUP_NAME+1];
	hdf5_api_ops_t* ops = NULL;
	H5G_info_t group_info;
	H5O_info_t object_info;

	if (jg_node < 0) {
		info("Job Node is not HDF5 object");
		return;
	}
	if (nsg_node < 0) {
		info("Node-Step is not HDF5 object");
		return;
	}

	jg_samples = H5Gcreate(jg_node, GRP_SAMPLES,
			       H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
	if (jg_samples < 0) {
		info("Failed to create job node Samples");
		return;
	}
	nsg_samples = get_group(nsg_node, GRP_SAMPLES);
	if (nsg_samples < 0) {
		H5Gclose(jg_samples);
		debug("Failed to get node-step Samples");
		return;
	}
	H5Gget_info(nsg_samples, &group_info);
	n_series = group_info.nlinks;
	if (n_series < 1) {
		// No series?
		H5Gclose(jg_samples);
		H5Gclose(nsg_samples);
		info("No Samples");
		return;
	}
	for (idsx = 0; idsx < n_series; idsx++) {
		H5Oget_info_by_idx(nsg_samples, ".", H5_INDEX_NAME, H5_ITER_INC,
				   idsx, &object_info, H5P_DEFAULT);
		if (object_info.type != H5O_TYPE_GROUP)
			continue;

		len = H5Lget_name_by_idx(nsg_samples, ".", H5_INDEX_NAME,
					 H5_ITER_INC, idsx, nam_series,
					 MAX_GROUP_NAME, H5P_DEFAULT);
		if (len<1 || len>MAX_GROUP_NAME) {
			info("Invalid group name %s", nam_series);
			continue;
		}
		g_series = H5Gopen(nsg_samples, nam_series, H5P_DEFAULT);
		if (g_series < 0) {
			info("Failed to open %s", nam_series);
			continue;
		}
		H5Gget_info(g_series, &group_info);
		num_samples = group_info.nlinks;
		if (num_samples <= 0) {
			H5Gclose(g_series);
			info("_series %s has no samples", nam_series);
			continue;
		}
		// Get first sample in series to find out how big the data is.
		data_type = get_string_attribute(g_series, ATTR_DATATYPE);
		if (!data_type) {
			H5Gclose(g_series);
			info("Failed to get datatype for Time Series Dataset");
			continue;
		}
		type = acct_gather_profile_type_from_string(data_type);
		xfree(data_type);
		data = _get_all_samples(g_series, nam_series, type,
					num_samples);
		if (data == NULL) {
			H5Gclose(g_series);
			info("Failed to get memory for Time Series Dataset");
			continue;
		}
		put_hdf5_data(jg_samples, type, SUBDATA_SERIES, nam_series,
			      data, num_samples);
		ops = profile_factory(type);
		if (ops == NULL) {
			xfree(data);
			H5Gclose(g_series);
			info("Failed to create operations for %s",
			     acct_gather_profile_type_to_string(type));
			continue;
		}
		series_total = (*(ops->series_total))(num_samples, data);
		if (series_total != NULL) {
			// Totals for series attaches to node
			g_series_total = make_group(jg_node, GRP_TOTALS);
			if (g_series_total < 0) {
				H5Gclose(g_series);
				xfree(series_total);
				xfree(data);
				xfree(ops);
				info("Failed to make Totals for Node");
				continue;
			}
			put_hdf5_data(g_series_total, type,
				      SUBDATA_SUMMARY,
				      nam_series, series_total, 1);
			H5Gclose(g_series_total);
		}
		xfree(series_total);
		xfree(ops);
		xfree(data);
		H5Gclose(g_series);
	}

	return;
}