示例#1
0
extern guint
stats_tree_branch_max_namelen(const stat_node *node, guint indent)
{
	stat_node *child;
	guint maxlen = 0;
	guint len;

	indent = indent > INDENT_MAX ? INDENT_MAX : indent;

	if (node->children) {
		for (child = node->children; child; child = child->next ) {
			len = stats_tree_branch_max_namelen(child,indent+1);
			maxlen = len > maxlen ? len : maxlen;
		}
	}

	len = (guint) strlen(node->name) + indent;
	maxlen = len > maxlen ? len : maxlen;

	return maxlen;
}
示例#2
0
/* populates the given GString with a tree representation of a branch given by node,
using indent spaces as initial indentation */
extern void
stats_tree_branch_to_str(const stat_node *node, GString *s, guint indent)
{
	stat_node *child;
	static gchar indentation[INDENT_MAX+1];
	static gchar value[NUM_BUF_SIZE];
	static gchar rate[NUM_BUF_SIZE];
	static gchar percent[NUM_BUF_SIZE];

	guint i = 0;

	if (indent == 0) {
		format = g_strdup_printf(" %%s%%-%us%%12s   %%12s    %%12s\n",stats_tree_branch_max_namelen(node,0));
	}

	stats_tree_get_strs_from_node(node, value, rate, percent);

	indent = indent > INDENT_MAX ? INDENT_MAX : indent;

	/* fill indentation with indent spaces */
	if (indent > 0) {
		while(i<indent)
			indentation[i++] = ' ';
	}

	indentation[i] = '\0';

	g_string_append_printf(s,format,
					  indentation,node->name,value,rate,percent);

	if (node->children) {
		for (child = node->children; child; child = child->next ) {
			stats_tree_branch_to_str(child,s,indent+1);
		}
	}

	if (indent == 0) {
		g_free(format);
	}
}
示例#3
0
static void
draw_stats_tree(void *psp)
{
	stats_tree *st = (stats_tree *)psp;
	GString *s;
	gchar *fmt;
	stat_node *child;
	
	s = g_string_new("\n===================================================================\n");
	fmt = g_strdup_printf(" %%s%%-%us%%12s\t%%12s\t%%12s\n",stats_tree_branch_max_namelen(&st->root,0));
	g_string_append_printf(s,fmt,"",st->cfg->name,"value","rate","percent");
	g_free(fmt);
	g_string_append_printf(s,"-------------------------------------------------------------------\n");
	
	for (child = st->root.children; child; child = child->next ) {
		stats_tree_branch_to_str(child,s,0);
	}
	
	s = g_string_append(s,"\n===================================================================\n");
	
	printf("%s",s->str);
	
}
示例#4
0
extern GString*
stats_tree_format_as_str(const stats_tree* st, st_format_type format_type,
					gint sort_column, gboolean sort_descending)
{
	int maxnamelen= stats_tree_branch_max_namelen(&st->root,0);
	stat_node *child;
	GString *s;
	int count;
	gchar *separator = NULL;

	switch(format_type)
	{
	case ST_FORMAT_YAML:
		s = g_string_new("---\n");
		break;
	case ST_FORMAT_XML:
		s = g_string_new("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n");
		break;
	case ST_FORMAT_CSV:
		s = g_string_new("\"level\",\"parent\",");
		for (count = 0; count<st->num_columns; count++) {
			g_string_append_printf(s,"\"%s\",",stats_tree_get_column_name(count));
		}
		g_string_append (s,"\n");
		break;
	case ST_FORMAT_PLAIN:
		{
		char fmt[16];
		int sep_length;

		sep_length= maxnamelen;
		for (count = 1; count<st->num_columns; count++) {
			sep_length += stats_tree_get_column_size(count)+2;
		}
		separator = (gchar *)g_malloc(sep_length+1);
		memset (separator, '=', sep_length);
		separator[sep_length] = 0;

		s = g_string_new("\n");
		g_string_append(s,separator);
		g_string_append_printf(s,"\n%s:\n",st->cfg->name);
		g_sprintf (fmt,"%%-%us",maxnamelen);
		g_string_append_printf(s,fmt,stats_tree_get_column_name(0));
		for (count = 1; count<st->num_columns; count++) {
			g_sprintf (fmt," %%-%us",stats_tree_get_column_size(count)+1);
			g_string_append_printf(s,fmt,stats_tree_get_column_name(count));
		}
		memset (separator, '-', sep_length);
		g_string_append_printf(s,"\n%s\n",separator);
		}
		break;
	default:
		return g_string_new("unknown format for stats_tree\n");
	}

	for (child = st->root.children; child; child = child->next ) {
		stats_tree_format_node_as_str(child,s,format_type,0,"",maxnamelen,sort_column,sort_descending);

	}

	if (format_type==ST_FORMAT_PLAIN) {
		g_string_append_printf(s,"\n%s\n",separator);
		g_free(separator);
	}

	return s;
}