From : Didier Gautheron

gtktreeview patch for stat(not well tested, no traces).

svn path=/trunk/; revision=30389
This commit is contained in:
Anders Broman 2009-10-07 10:00:26 +00:00
parent 6de05a0476
commit 079ff0ba27
10 changed files with 336 additions and 296 deletions

View File

@ -72,7 +72,7 @@ struct camelcounter_t {
GtkWidget *vbox;
char *filter;
GtkWidget *scrolled_window;
GtkCList *table;
GtkTreeView *table;
guint32 camel_msg[camel_MAX_NUM_OPR_CODES];
};
@ -108,26 +108,27 @@ static void gtk_camelcounter_draw(void *phs)
{
struct camelcounter_t *p_counter=(struct camelcounter_t *)phs;
int i;
char *str[2];
for(i=0;i<2;i++) {
str[i]=g_malloc(sizeof(char[256]));
}
char str[256];
GtkListStore *store;
GtkTreeIter iter;
/* Now print Message and Reason Counter Table */
/* clear list before printing */
gtk_clist_clear(p_counter->table);
store = GTK_LIST_STORE(gtk_tree_view_get_model(p_counter->table));
gtk_list_store_clear(store);
for(i=0;i<camel_MAX_NUM_OPR_CODES;i++) {
/* Message counter */
if(p_counter->camel_msg[i]!=0) {
g_snprintf(str[0], sizeof(char[256]),
"Request %s", val_to_str(i,camel_opr_code_strings,"Unknown message "));
g_snprintf(str[1], sizeof(char[256]),
"%d", p_counter->camel_msg[i]);
gtk_clist_append(p_counter->table, str);
g_snprintf(str, 256, "Request %s", val_to_str(i,camel_opr_code_strings,"Unknown message "));
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter,
0, str,
1, p_counter->camel_msg[i],
-1);
}
} /* Message Type */
gtk_widget_show(GTK_WIDGET(p_counter->table));
}
static void win_destroy_cb(GtkWindow *win _U_, gpointer data)
@ -145,9 +146,10 @@ static void win_destroy_cb(GtkWindow *win _U_, gpointer data)
g_free(hs);
}
static const gchar *titles[]={
"Message Type or Reason",
"Count" };
static const stat_column titles[]={
{G_TYPE_STRING, LEFT, "Message Type or Reason"},
{G_TYPE_UINT, RIGHT, "Count" }
};
static void gtk_camelcounter_init(const char *optarg, void *userdata _U_)
{

View File

@ -104,28 +104,55 @@ init_main_stat_window(GtkWidget *window, GtkWidget *mainbox, const char *title,
/* create a table, using a scrollable gtkclist */
GtkCList *
create_stat_table(GtkWidget *scrolled_window, GtkWidget *vbox, int columns, const char *titles[])
GtkTreeView *
create_stat_table(GtkWidget *scrolled_window, GtkWidget *vbox, int columns, const stat_column *headers)
{
GtkCList *table;
GtkTreeView *table;
GtkListStore *store;
GtkWidget *tree;
GtkTreeViewColumn *column;
GtkTreeSelection *sel;
GtkCellRenderer *renderer;
GType *types;
int i;
/* create table */
table = GTK_CLIST(gtk_clist_new_with_titles(columns, (gchar **) titles));
if (columns <= 0)
return NULL;
types = g_malloc(columns *sizeof(GType));
for (i = 0; i < columns; i++)
types[i] = headers[i].type;
store = gtk_list_store_newv (columns, types);
g_free(types);
/* create table */
tree = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store));
table = GTK_TREE_VIEW(tree);
g_object_unref (G_OBJECT (store));
for (i = 0; i < columns; i++) {
renderer = gtk_cell_renderer_text_new ();
if (headers[i].align == RIGHT) {
/* right align */
g_object_set(G_OBJECT(renderer), "xalign", 1.0, NULL);
}
g_object_set(renderer, "ypad", 0, NULL);
column = gtk_tree_view_column_new_with_attributes (headers[i].title, renderer, "text",
i, NULL);
gtk_tree_view_column_set_resizable(column, TRUE);
gtk_tree_view_append_column (table, column);
}
gtk_container_add(GTK_CONTAINER(scrolled_window), GTK_WIDGET (table));
gtk_box_pack_start(GTK_BOX(vbox), scrolled_window, TRUE, TRUE, 0);
/* configure clist */
gtk_clist_column_titles_passive(table);
gtk_clist_column_titles_show(table);
for (i = 0; i < columns; i++)
gtk_clist_set_column_auto_resize(table, i, TRUE);
gtk_clist_set_selection_mode(table, GTK_SELECTION_SINGLE);
gtk_tree_view_set_rules_hint(table, FALSE);
gtk_tree_view_set_headers_clickable(table, FALSE);
sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(table));
gtk_tree_selection_set_mode(sel, GTK_SELECTION_SINGLE);
/* Put clist into a scrolled window */
gtk_container_add(GTK_CONTAINER(scrolled_window),
GTK_WIDGET(table));
gtk_widget_show(GTK_WIDGET(table));
gtk_widget_show(scrolled_window);
return table;

View File

@ -29,10 +29,21 @@
#include <gtk/gtk.h>
/** @file
* Utilities for statistics.
*/
#define LEFT 0
#define RIGHT 1
/** Columns definition
*/
typedef struct {
GType type; /* column type */
gint align; /* alignement */
const char *title; /* column title */
} stat_column;
/** Init a window for stats, set title and display used filter in window.
*
@ -48,8 +59,8 @@ extern void init_main_stat_window(GtkWidget *window, GtkWidget *mainbox, const c
* @param scrolled_window the scrolled window
* @param vbox the vbox for the window
* @param columns number of columns
* @param titles
* @param headers columns title and type, G_TYPE_POINTER is illegal, there's no default cell renderer for it
*/
extern GtkCList *create_stat_table(GtkWidget *scrolled_window, GtkWidget *vbox, int columns, const char *titles[]);
extern GtkTreeView *create_stat_table(GtkWidget *scrolled_window, GtkWidget *vbox, int columns, const stat_column *headers);
#endif

View File

@ -89,7 +89,7 @@ typedef struct _h225counter_t {
GtkWidget *vbox;
char *filter;
GtkWidget *scrolled_window;
GtkCList *table;
GtkTreeView *table;
guint32 ras_msg[RAS_MSG_TYPES + 1];
guint32 cs_msg[CS_MSG_TYPES + 1];
guint32 grj_reason[GRJ_REASONS + 1];
@ -300,132 +300,141 @@ h225counter_draw(void *phs)
{
h225counter_t *hs=(h225counter_t *)phs;
int i,j;
char *str[2];
char str[256];
GtkListStore *store;
GtkTreeIter iter;
for(i=0;i<2;i++) {
str[i]=g_malloc(sizeof(char[256]));
}
/* Now print Message and Reason Counter Table */
/* clear list before printing */
gtk_clist_clear(hs->table);
store = GTK_LIST_STORE(gtk_tree_view_get_model(hs->table));
gtk_list_store_clear(store);
for(i=0;i<=RAS_MSG_TYPES;i++) {
if(hs->ras_msg[i]!=0) {
g_snprintf(str[0], sizeof(char[256]),
"%s", val_to_str(i,h225_RasMessage_vals,"unknown ras-messages "));
g_snprintf(str[1], sizeof(char[256]),
"%d", hs->ras_msg[i]);
gtk_clist_append(hs->table, str);
g_snprintf(str, 256, "%s", val_to_str(i,h225_RasMessage_vals,"unknown ras-messages"));
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter,
0, val_to_str(i,h225_RasMessage_vals,"unknown ras-messages"),
1, hs->ras_msg[i], -1);
/* reason counter */
switch(i) {
case 2: /* GRJ */
for(j=0;j<=GRJ_REASONS;j++) {
if(hs->grj_reason[j]!=0) {
g_snprintf(str[0], sizeof(char[256]),
" %s", val_to_str(j,GatekeeperRejectReason_vals,"unknown reason "));
g_snprintf(str[1], sizeof(char[256]),
"%d", hs->grj_reason[j]);
gtk_clist_append(hs->table, str);
g_snprintf(str, 256," %s",
val_to_str(j,GatekeeperRejectReason_vals,"unknown reason"));
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter,
0, str,
1, hs->grj_reason[j], -1);
}
}
break;
case 5: /* RRJ */
for(j=0;j<=RRJ_REASONS;j++) {
if(hs->rrj_reason[j]!=0) {
g_snprintf(str[0], sizeof(char[256]),
" %s", val_to_str(j,RegistrationRejectReason_vals,"unknown reason "));
g_snprintf(str[1], sizeof(char[256]),
"%d", hs->rrj_reason[j]);
gtk_clist_append(hs->table, str);
g_snprintf(str, 256," %s",
val_to_str(j,RegistrationRejectReason_vals,"unknown reason"));
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter,
0, str,
1, hs->rrj_reason[j], -1);
}
}
break;
case 6: /* URQ */
for(j=0;j<=URQ_REASONS;j++) {
if(hs->urq_reason[j]!=0) {
g_snprintf(str[0], sizeof(char[256]),
" %s", val_to_str(j,UnregRequestReason_vals,"unknown reason "));
g_snprintf(str[1], sizeof(char[256]),
"%d", hs->urq_reason[j]);
gtk_clist_append(hs->table, str);
g_snprintf(str, 256," %s",
val_to_str(j,UnregRequestReason_vals,"unknown reason"));
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter,
0, str,
1, hs->urq_reason[j], -1);
}
}
break;
case 8: /* URJ */
for(j=0;j<=URJ_REASONS;j++) {
if(hs->urj_reason[j]!=0) {
g_snprintf(str[0], sizeof(char[256]),
" %s", val_to_str(j,UnregRejectReason_vals,"unknown reason "));
g_snprintf(str[1], sizeof(char[256]),
"%d", hs->urj_reason[j]);
gtk_clist_append(hs->table, str);
g_snprintf(str, 256," %s",
val_to_str(j,UnregRejectReason_vals,"unknown reason"));
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter,
0, str,
1, hs->urj_reason[j], -1);
}
}
break;
case 11: /* ARJ */
for(j=0;j<=ARJ_REASONS;j++) {
if(hs->arj_reason[j]!=0) {
g_snprintf(str[0], sizeof(char[256]),
" %s", val_to_str(j,AdmissionRejectReason_vals,"unknown reason "));
g_snprintf(str[1], sizeof(char[256]),
"%d", hs->arj_reason[j]);
gtk_clist_append(hs->table, str);
g_snprintf(str, 256," %s",
val_to_str(j,AdmissionRejectReason_vals,"unknown reason"));
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter,
0, str,
1, hs->arj_reason[j], -1);
}
}
break;
case 14: /* BRJ */
for(j=0;j<=BRJ_REASONS;j++) {
if(hs->brj_reason[j]!=0) {
g_snprintf(str[0], sizeof(char[256]),
" %s", val_to_str(j,BandRejectReason_vals,"unknown reason "));
g_snprintf(str[1], sizeof(char[256]),
"%d", hs->brj_reason[j]);
gtk_clist_append(hs->table, str);
g_snprintf(str, 256," %s",
val_to_str(j,BandRejectReason_vals,"unknown reason"));
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter,
0, str,
1, hs->brj_reason[j], -1);
}
}
break;
case 15: /* DRQ */
for(j=0;j<=DRQ_REASONS;j++) {
if(hs->drq_reason[j]!=0) {
g_snprintf(str[0], sizeof(char[256]),
" %s", val_to_str(j,DisengageReason_vals,"unknown reason "));
g_snprintf(str[1], sizeof(char[256]),
"%d", hs->drq_reason[j]);
gtk_clist_append(hs->table, str);
g_snprintf(str, 256," %s",
val_to_str(j,DisengageReason_vals,"unknown reason"));
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter,
0, str,
1, hs->drq_reason[j], -1);
}
}
break;
case 17: /* DRJ */
for(j=0;j<=DRJ_REASONS;j++) {
if(hs->drj_reason[j]!=0) {
g_snprintf(str[0], sizeof(char[256]),
" %s", val_to_str(j,DisengageRejectReason_vals,"unknown reason "));
g_snprintf(str[1], sizeof(char[256]),
"%d", hs->drj_reason[j]);
gtk_clist_append(hs->table, str);
g_snprintf(str, 256," %s",
val_to_str(j,DisengageRejectReason_vals,"unknown reason"));
gtk_list_store_set(store, &iter,
0, str,
1, hs->drj_reason[j], -1);
}
}
break;
case 20: /* LRJ */
for(j=0;j<=LRJ_REASONS;j++) {
if(hs->lrj_reason[j]!=0) {
g_snprintf(str[0], sizeof(char[256]),
" %s", val_to_str(j,LocationRejectReason_vals,"unknown reason "));
g_snprintf(str[1], sizeof(char[256]),
"%d", hs->lrj_reason[j]);
gtk_clist_append(hs->table, str);
g_snprintf(str, 256," %s",
val_to_str(j,LocationRejectReason_vals,"unknown reason"));
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter,
0, str,
1, hs->lrj_reason[j], -1);
}
}
break;
case 29: /* IRQNak */
for(j=0;j<=IRQNAK_REASONS;j++) {
if(hs->irqnak_reason[j]!=0) {
g_snprintf(str[0], sizeof(char[256]),
" %s", val_to_str(j,InfoRequestNakReason_vals,"unknown reason "));
g_snprintf(str[1], sizeof(char[256]),
"%d", hs->irqnak_reason[j]);
gtk_clist_append(hs->table, str);
g_snprintf(str, 256," %s",
val_to_str(j,InfoRequestNakReason_vals,"unknown reason"));
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter,
0, str,
1, hs->irqnak_reason[j], -1);
}
}
break;
@ -438,33 +447,34 @@ h225counter_draw(void *phs)
for(i=0;i<=CS_MSG_TYPES;i++) {
if(hs->cs_msg[i]!=0) {
g_snprintf(str[0], sizeof(char[256]),
"%s", val_to_str(i,T_h323_message_body_vals,"unknown cs-messages "));
g_snprintf(str[1], sizeof(char[256]),
"%d", hs->cs_msg[i]);
gtk_clist_append(hs->table, str);
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter,
0, val_to_str(i,T_h323_message_body_vals,"unknown cs-messages"),
1, hs->cs_msg[i], -1);
/* reason counter */
switch(i) {
case 5: /* ReleaseComplete */
for(j=0;j<=REL_CMP_REASONS;j++) {
if(hs->rel_cmp_reason[j]!=0) {
g_snprintf(str[0], sizeof(char[256]),
" %s", val_to_str(j,h225_ReleaseCompleteReason_vals,"unknown reason "));
g_snprintf(str[1], sizeof(char[256]),
"%d", hs->rel_cmp_reason[j]);
gtk_clist_append(hs->table, str);
g_snprintf(str, 256," %s",
val_to_str(j,h225_ReleaseCompleteReason_vals,"unknown reason"));
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter,
0, str,
1, hs->rel_cmp_reason[j], -1);
}
}
break;
case 6: /* Facility */
for(j=0;j<=FACILITY_REASONS;j++) {
if(hs->facility_reason[j]!=0) {
g_snprintf(str[0], sizeof(char[256]),
" %s", val_to_str(j,FacilityReason_vals,"unknown reason "));
g_snprintf(str[1], sizeof(char[256]),
"%d", hs->facility_reason[j]);
gtk_clist_append(hs->table, str);
g_snprintf(str, 256," %s",
val_to_str(j,FacilityReason_vals,"unknown reason"));
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter,
0, str,
1, hs->facility_reason[j], -1);
}
}
break;
@ -473,9 +483,6 @@ h225counter_draw(void *phs)
}
}
}
gtk_widget_show(GTK_WIDGET(hs->table));
}
static void
@ -494,10 +501,10 @@ win_destroy_cb(GtkWindow *win _U_, gpointer data)
g_free(hs);
}
static const gchar *titles[]={
"Message Type or Reason",
"Count" };
static const stat_column titles[]={
{G_TYPE_STRING, LEFT, "Message Type or Reason"},
{G_TYPE_UINT, RIGHT, "Count" }
};
static void
gtk_h225counter_init(const char *optarg, void *userdata _U_)

View File

@ -112,7 +112,7 @@ typedef struct _h225rassrt_t {
GtkWidget *vbox;
char *filter;
GtkWidget *scrolled_window;
GtkCList *table;
GtkTreeView *table;
h225_rtd_t ras_rtd[NUM_RAS_STATS];
} h225rassrt_t;
@ -205,48 +205,42 @@ h225rassrt_draw(void *phs)
{
h225rassrt_t *hs=(h225rassrt_t *)phs;
int i;
char *str[11];
char str[3][256];
GtkListStore *store;
GtkTreeIter iter;
for(i=0;i<11;i++) {
str[i]=g_malloc(sizeof(char[256]));
}
/* Now print Message and Reason Counter Table */
/* clear list before printing */
gtk_clist_clear(hs->table);
store = GTK_LIST_STORE(gtk_tree_view_get_model(hs->table));
gtk_list_store_clear(store);
for(i=0;i<NUM_RAS_STATS;i++) {
/* nothing seen, nothing to do */
if(hs->ras_rtd[i].stats.num==0){
continue;
}
g_snprintf(str[0], sizeof(char[256]),
"%s", val_to_str(i,ras_message_category,"Other"));
"%8.2f msec", nstime_to_msec(&(hs->ras_rtd[i].stats.min)));
g_snprintf(str[1], sizeof(char[256]),
"%7d", hs->ras_rtd[i].stats.num);
"%8.2f msec", nstime_to_msec(&(hs->ras_rtd[i].stats.max)));
g_snprintf(str[2], sizeof(char[256]),
"%8.2f msec", nstime_to_msec(&(hs->ras_rtd[i].stats.min)));
g_snprintf(str[3], sizeof(char[256]),
"%8.2f msec", nstime_to_msec(&(hs->ras_rtd[i].stats.max)));;
g_snprintf(str[4], sizeof(char[256]),
"%8.2f msec", get_average(&(hs->ras_rtd[i].stats.tot), hs->ras_rtd[i].stats.num));
g_snprintf(str[5], sizeof(char[256]),
"%6u", hs->ras_rtd[i].stats.min_num);
g_snprintf(str[6], sizeof(char[256]),
"%6u", hs->ras_rtd[i].stats.max_num);
g_snprintf(str[7], sizeof(char[256]),
"%4u", hs->ras_rtd[i].open_req_num);
g_snprintf(str[8], sizeof(char[256]),
"%4u", hs->ras_rtd[i].disc_rsp_num);
g_snprintf(str[9], sizeof(char[256]),
"%4u", hs->ras_rtd[i].req_dup_num);
g_snprintf(str[10], sizeof(char[256]),
"%4u", hs->ras_rtd[i].rsp_dup_num);
gtk_clist_append(GTK_CLIST(hs->table), str);
"%8.2f msec", get_average(&(hs->ras_rtd[i].stats.tot), hs->ras_rtd[i].stats.num));
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter,
0, val_to_str(i,ras_message_category,"Other"),
1, hs->ras_rtd[i].stats.num,
2, str[0],
3, str[1],
4, str[2],
5, hs->ras_rtd[i].stats.min_num,
6, hs->ras_rtd[i].stats.max_num,
7, hs->ras_rtd[i].open_req_num,
8, hs->ras_rtd[i].disc_rsp_num,
9, hs->ras_rtd[i].req_dup_num,
10, hs->ras_rtd[i].rsp_dup_num,
-1);
}
gtk_widget_show(GTK_WIDGET(hs->table));
}
static void
@ -266,18 +260,19 @@ win_destroy_cb(GtkWindow *win _U_, gpointer data)
}
static const gchar *titles[]={
"RAS-Type",
"Measurements",
"Min RTT",
"Max RTT",
"Avg RTT",
"Min in Frame",
"Max in Frame",
"Open Requests",
"Discarded Responses",
"Repeated Requests",
"Repeated Responses" };
static const stat_column titles[]={
{G_TYPE_STRING, LEFT, "RAS-Type" },
{G_TYPE_UINT, RIGHT, "Measurements" },
{G_TYPE_STRING, RIGHT, "Min RTT" },
{G_TYPE_STRING, RIGHT, "Max RTT" },
{G_TYPE_STRING, RIGHT, "Avg RTT" },
{G_TYPE_UINT, RIGHT, "Min in Frame" },
{G_TYPE_UINT, RIGHT, "Max in Frame" },
{G_TYPE_UINT, RIGHT, "Open Requests" },
{G_TYPE_UINT, RIGHT, "Discarded Responses" },
{G_TYPE_UINT, RIGHT, "Repeated Requests" },
{G_TYPE_UINT, RIGHT, "Repeated Responses"}
};
static void
gtk_h225rassrt_init(const char *optarg, void *userdata _U_)

View File

@ -90,14 +90,13 @@ megacostat_draw(void *pms)
{
megacostat_t *ms=(megacostat_t *)pms;
int i;
char *str[7];
for(i=0;i<7;i++) {
str[i]=g_malloc(sizeof(char[256]));
}
char str[3][256];
GtkListStore *store;
GtkTreeIter iter;
/* clear list before printing */
gtk_clist_clear(ms->table);
store = GTK_LIST_STORE(gtk_tree_view_get_model(ms->table));
gtk_list_store_clear(store);
for(i=0;i<NUM_TIMESTATS;i++) {
/* nothing seen, nothing to do */
@ -105,19 +104,19 @@ megacostat_draw(void *pms)
continue;
}
g_snprintf(str[0], sizeof(char[256]), "%s", val_to_str(i,megaco_message_type,"Other"));
g_snprintf(str[1], sizeof(char[256]), "%d", ms->rtd[i].num);
g_snprintf(str[2], sizeof(char[256]), "%8.2f msec", nstime_to_msec(&(ms->rtd[i].min)));
g_snprintf(str[3], sizeof(char[256]), "%8.2f msec", nstime_to_msec(&(ms->rtd[i].max)));
g_snprintf(str[4], sizeof(char[256]), "%8.2f msec", get_average(&(ms->rtd[i].tot), ms->rtd[i].num));
g_snprintf(str[5], sizeof(char[256]), "%6u", ms->rtd[i].min_num);
g_snprintf(str[6], sizeof(char[256]), "%6u", ms->rtd[i].max_num);
gtk_clist_append(ms->table, str);
}
gtk_widget_show(GTK_WIDGET(ms->table));
for(i=0;i<7;i++) {
g_free(str[i]);
g_snprintf(str[0], sizeof(char[256]), "%8.2f msec", nstime_to_msec(&(ms->rtd[i].min)));
g_snprintf(str[1], sizeof(char[256]), "%8.2f msec", nstime_to_msec(&(ms->rtd[i].max)));
g_snprintf(str[2], sizeof(char[256]), "%8.2f msec", get_average(&(ms->rtd[i].tot), ms->rtd[i].num));
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter,
0, val_to_str(i,megaco_message_type,"Other"),
1, ms->rtd[i].num,
2, str[0],
3, str[1],
4, str[2],
5, ms->rtd[i].min_num,
6, ms->rtd[i].max_num,
-1);
}
}
@ -137,14 +136,15 @@ win_destroy_cb(GtkWindow *win _U_, gpointer data)
g_free(ms);
}
static const gchar *titles[]={
"Type",
"Messages",
"Min SRT",
"Max SRT",
"Avg SRT",
"Min in Frame",
"Max in Frame" };
static const stat_column titles[]={
{G_TYPE_STRING, LEFT, "Type" },
{G_TYPE_UINT, RIGHT, "Messages" },
{G_TYPE_STRING, RIGHT, "Min SRT" },
{G_TYPE_STRING, RIGHT, "Max SRT" },
{G_TYPE_STRING, RIGHT, "Avg SRT" },
{G_TYPE_UINT, RIGHT, "Min in Frame" },
{G_TYPE_UINT, RIGHT, "Max in Frame" }
};
static void
gtk_megacostat_init(const char *optarg, void *userdata _U_)

View File

@ -63,7 +63,7 @@ typedef struct _mgcpstat_t {
GtkWidget *vbox;
char *filter;
GtkWidget *scrolled_window;
GtkCList *table;
GtkTreeView *table;
timestat_t rtd[NUM_TIMESTATS];
guint32 open_req_num;
guint32 disc_rsp_num;
@ -190,14 +190,13 @@ mgcpstat_draw(void *pms)
{
mgcpstat_t *ms=(mgcpstat_t *)pms;
int i;
char *str[7];
for(i=0;i<7;i++) {
str[i]=g_malloc(sizeof(char[256]));
}
char str[3][256];
GtkListStore *store;
GtkTreeIter iter;
/* clear list before printing */
gtk_clist_clear(ms->table);
store = GTK_LIST_STORE(gtk_tree_view_get_model(ms->table));
gtk_list_store_clear(store);
for(i=0;i<NUM_TIMESTATS;i++) {
/* nothing seen, nothing to do */
@ -205,19 +204,19 @@ mgcpstat_draw(void *pms)
continue;
}
g_snprintf(str[0], sizeof(char[256]), "%s", val_to_str(i,mgcp_mesage_type,"Other"));
g_snprintf(str[1], sizeof(char[256]), "%d", ms->rtd[i].num);
g_snprintf(str[2], sizeof(char[256]), "%8.2f msec", nstime_to_msec(&(ms->rtd[i].min)));
g_snprintf(str[3], sizeof(char[256]), "%8.2f msec", nstime_to_msec(&(ms->rtd[i].max)));
g_snprintf(str[4], sizeof(char[256]), "%8.2f msec", get_average(&(ms->rtd[i].tot), ms->rtd[i].num));
g_snprintf(str[5], sizeof(char[256]), "%6u", ms->rtd[i].min_num);
g_snprintf(str[6], sizeof(char[256]), "%6u", ms->rtd[i].max_num);
gtk_clist_append(ms->table, str);
}
gtk_widget_show(GTK_WIDGET(ms->table));
for(i=0;i<7;i++) {
g_free(str[i]);
g_snprintf(str[0], sizeof(char[256]), "%8.2f msec", nstime_to_msec(&(ms->rtd[i].min)));
g_snprintf(str[1], sizeof(char[256]), "%8.2f msec", nstime_to_msec(&(ms->rtd[i].max)));
g_snprintf(str[2], sizeof(char[256]), "%8.2f msec", get_average(&(ms->rtd[i].tot), ms->rtd[i].num));
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter,
0, val_to_str(i, mgcp_mesage_type,"Other"),
1, ms->rtd[i].num,
2, str[0],
3, str[1],
4, str[2],
5, ms->rtd[i].min_num,
6, ms->rtd[i].max_num,
-1);
}
}
@ -237,14 +236,15 @@ win_destroy_cb(GtkWindow *win _U_, gpointer data)
g_free(ms);
}
static const gchar *titles[]={
"Type",
"Messages",
"Min SRT",
"Max SRT",
"Avg SRT",
"Min in Frame",
"Max in Frame" };
static const stat_column titles[]={
{G_TYPE_STRING, LEFT, "Type" },
{G_TYPE_UINT, RIGHT, "Messages" },
{G_TYPE_STRING, RIGHT, "Min SRT" },
{G_TYPE_STRING, RIGHT, "Max SRT" },
{G_TYPE_STRING, RIGHT, "Avg SRT" },
{G_TYPE_UINT, RIGHT, "Min in Frame" },
{G_TYPE_UINT, RIGHT, "Max in Frame" }
};
static void
gtk_mgcpstat_init(const char *optarg, void *userdata _U_)

View File

@ -73,7 +73,7 @@ typedef struct _radiusstat_t {
GtkWidget *vbox;
char *filter;
GtkWidget *scrolled_window;
GtkCList *table;
GtkTreeView *table;
radius_rtd_t radius_rtd[NUM_TIMESTATS];
} radiusstat_t;
@ -230,41 +230,41 @@ radiusstat_draw(void *prs)
{
radiusstat_t *rs=(radiusstat_t *)prs;
int i;
char *str[NUM_COLUMNS];
for(i=0;i<NUM_COLUMNS;i++) {
str[i]=g_malloc(sizeof(char[256]));
}
char str[5][256];
GtkListStore *store;
GtkTreeIter iter;
/* clear list before printing */
gtk_clist_clear(rs->table);
store = GTK_LIST_STORE(gtk_tree_view_get_model(rs->table));
gtk_list_store_clear(store);
for(i=0;i<NUM_TIMESTATS;i++) {
/* nothing seen, nothing to do */
if(rs->radius_rtd[i].stats.num==0){
continue;
}
g_snprintf(str[0], sizeof(char[256]), "%s", val_to_str(i,radius_message_code,"Other"));
g_snprintf(str[1], sizeof(char[256]), "%d", rs->radius_rtd[i].stats.num);
g_snprintf(str[2], sizeof(char[256]), "%8.2f msec", nstime_to_msec(&(rs->radius_rtd[i].stats.min)));
g_snprintf(str[3], sizeof(char[256]), "%8.2f msec", nstime_to_msec(&(rs->radius_rtd[i].stats.max)));
g_snprintf(str[4], sizeof(char[256]), "%8.2f msec", get_average(&(rs->radius_rtd[i].stats.tot), rs->radius_rtd[i].stats.num));
g_snprintf(str[5], sizeof(char[256]), "%6u", rs->radius_rtd[i].stats.min_num);
g_snprintf(str[6], sizeof(char[256]), "%6u", rs->radius_rtd[i].stats.max_num);
g_snprintf(str[7], sizeof(char[256]), "%4u", rs->radius_rtd[i].open_req_num);
g_snprintf(str[8], sizeof(char[256]), "%4u", rs->radius_rtd[i].disc_rsp_num);
g_snprintf(str[9], sizeof(char[256]), "%4u (%4.2f%%)", rs->radius_rtd[i].req_dup_num,
g_snprintf(str[0], 256, "%8.2f msec", nstime_to_msec(&(rs->radius_rtd[i].stats.min)));
g_snprintf(str[1], 256, "%8.2f msec", nstime_to_msec(&(rs->radius_rtd[i].stats.max)));
g_snprintf(str[2], 256, "%8.2f msec", get_average(&(rs->radius_rtd[i].stats.tot), rs->radius_rtd[i].stats.num));
g_snprintf(str[3], 256, "%4u (%4.2f%%)", rs->radius_rtd[i].req_dup_num,
rs->radius_rtd[i].stats.num?((double)rs->radius_rtd[i].req_dup_num*100)/(double)rs->radius_rtd[i].stats.num:0);
g_snprintf(str[10], sizeof(char[256]), "%4u (%4.2f%%)", rs->radius_rtd[i].rsp_dup_num,
g_snprintf(str[4], 256, "%4u (%4.2f%%)", rs->radius_rtd[i].rsp_dup_num,
rs->radius_rtd[i].stats.num?((double)rs->radius_rtd[i].rsp_dup_num*100)/(double)rs->radius_rtd[i].stats.num:0);
gtk_clist_append(rs->table, str);
}
gtk_widget_show(GTK_WIDGET(rs->table));
for(i=0;i<NUM_COLUMNS;i++) {
g_free(str[i]);
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter,
0, val_to_str(i, radius_message_code,"Other"),
1, rs->radius_rtd[i].stats.num,
2, str[0],
3, str[1],
4, str[2],
5, rs->radius_rtd[i].stats.min_num,
6, rs->radius_rtd[i].stats.max_num,
7, rs->radius_rtd[i].open_req_num,
8, rs->radius_rtd[i].disc_rsp_num,
9, str[3],
10, str[4],
-1);
}
}
@ -284,18 +284,19 @@ win_destroy_cb(GtkWindow *win _U_, gpointer data)
g_free(rs);
}
static const gchar *titles[]={
"Type",
"Messages",
"Min SRT",
"Max SRT",
"Avg SRT",
"Min in Frame",
"Max in Frame",
"Open Requests",
"Discarded Responses",
"Repeated Requests",
"Repeated Responses" };
static const stat_column titles[]={
{G_TYPE_STRING, LEFT, "Type" },
{G_TYPE_UINT, RIGHT, "Messages" },
{G_TYPE_STRING, RIGHT, "Min SRT" },
{G_TYPE_STRING, RIGHT, "Max SRT" },
{G_TYPE_STRING, RIGHT, "Avg SRT" },
{G_TYPE_UINT, RIGHT, "Min in Frame" },
{G_TYPE_UINT, RIGHT, "Max in Frame" },
{G_TYPE_UINT, RIGHT, "Open Requests" },
{G_TYPE_UINT, RIGHT, "Discarded Responses" },
{G_TYPE_STRING, RIGHT, "Repeated Requests" },
{G_TYPE_STRING, RIGHT, "Repeated Responses"}
};
static void
gtk_radiusstat_init(const char *optarg, void *userdata _U_)

View File

@ -79,7 +79,7 @@ typedef struct _sctp_stat_t {
GtkWidget *vbox;
char *filter;
GtkWidget *scrolled_window;
GtkCList *table;
GtkTreeView *table;
guint32 number_of_packets;
sctp_ep_t* ep_list;
} sctpstat_t;
@ -209,41 +209,37 @@ static void
sctpstat_draw(void *phs)
{
sctpstat_t *hs=(sctpstat_t *)phs;
sctp_ep_t* list = hs->ep_list, *tmp=0;
char *str[15];
int i=0;
sctp_ep_t* list = hs->ep_list, *tmp;
GtkListStore *store;
GtkTreeIter iter;
for(i=0;i<15;i++) {
str[i]=g_malloc(sizeof(char[256]));
}
/* Now print Message and Reason Counter Table */
/* clear list before printing */
gtk_clist_clear(hs->table);
/* XXX use an iter for new/modified ? */
store = GTK_LIST_STORE(gtk_tree_view_get_model(hs->table));
gtk_list_store_clear(store);
for(tmp = list ; tmp ; tmp=tmp->next) {
g_snprintf(str[0], sizeof(char[256]),"%s", ep_address_to_str(&tmp->src));
g_snprintf(str[1], sizeof(char[256]),"%u", tmp->sport);
g_snprintf(str[2], sizeof(char[256]),"%s", ep_address_to_str(&tmp->dst));
g_snprintf(str[3], sizeof(char[256]),"%u", tmp->dport);
g_snprintf(str[4], sizeof(char[256]),"%u", tmp->chunk_count[SCTP_DATA_CHUNK_ID]);
g_snprintf(str[5], sizeof(char[256]),"%u", tmp->chunk_count[SCTP_SACK_CHUNK_ID]);
g_snprintf(str[6], sizeof(char[256]),"%u", tmp->chunk_count[SCTP_HEARTBEAT_CHUNK_ID]);
g_snprintf(str[7], sizeof(char[256]),"%u", tmp->chunk_count[SCTP_HEARTBEAT_ACK_CHUNK_ID]);
g_snprintf(str[8], sizeof(char[256]),"%u", tmp->chunk_count[SCTP_INIT_CHUNK_ID]);
g_snprintf(str[9], sizeof(char[256]),"%u", tmp->chunk_count[SCTP_INIT_ACK_CHUNK_ID]);
g_snprintf(str[10], sizeof(char[256]),"%u", tmp->chunk_count[SCTP_COOKIE_ECHO_CHUNK_ID]);
g_snprintf(str[11], sizeof(char[256]),"%u", tmp->chunk_count[SCTP_COOKIE_ACK_CHUNK_ID]);
g_snprintf(str[12], sizeof(char[256]),"%u", tmp->chunk_count[SCTP_ABORT_CHUNK_ID]);
g_snprintf(str[13], sizeof(char[256]),"%u", tmp->chunk_count[SCTP_ERROR_CHUNK_ID]);
g_snprintf(str[14], sizeof(char[256]),"%u", tmp->chunk_count[SCTP_NR_SACK_CHUNK_ID]);
gtk_clist_append(hs->table, str);
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter,
0, ep_address_to_str(&tmp->src),
1, tmp->sport,
2, ep_address_to_str(&tmp->dst),
3, tmp->dport,
4, tmp->chunk_count[SCTP_DATA_CHUNK_ID],
5, tmp->chunk_count[SCTP_SACK_CHUNK_ID],
6, tmp->chunk_count[SCTP_HEARTBEAT_CHUNK_ID],
7, tmp->chunk_count[SCTP_HEARTBEAT_ACK_CHUNK_ID],
8, tmp->chunk_count[SCTP_INIT_CHUNK_ID],
9, tmp->chunk_count[SCTP_INIT_ACK_CHUNK_ID],
10, tmp->chunk_count[SCTP_COOKIE_ECHO_CHUNK_ID],
11, tmp->chunk_count[SCTP_COOKIE_ACK_CHUNK_ID],
12, tmp->chunk_count[SCTP_ABORT_CHUNK_ID],
13, tmp->chunk_count[SCTP_ERROR_CHUNK_ID],
14, tmp->chunk_count[SCTP_NR_SACK_CHUNK_ID],
-1
);
}
gtk_widget_show(GTK_WIDGET(hs->table));
}
static void
@ -263,22 +259,23 @@ win_destroy_cb(GtkWindow *win _U_, gpointer data)
}
static const gchar *titles[]={
"Source IP",
"Source Port",
"Dest IP",
"Dest Port",
"DATA",
"SACK",
"HBEAT",
"HBEAT_ACK",
"INIT",
"INIT_ACK",
"COOKIE",
"COOKIE_ACK",
"ABORT",
"ERROR",
"NR_SACK" };
static const stat_column titles[]={
{G_TYPE_STRING, LEFT, "Source IP" },
{G_TYPE_UINT, RIGHT, "Source Port" },
{G_TYPE_STRING, LEFT, "Dest IP" },
{G_TYPE_UINT, RIGHT, "Dest Port" },
{G_TYPE_UINT, RIGHT, "DATA" },
{G_TYPE_UINT, RIGHT, "SACK" },
{G_TYPE_UINT, RIGHT, "HBEAT" },
{G_TYPE_UINT, RIGHT, "HBEAT_ACK" },
{G_TYPE_UINT, RIGHT, "INIT" },
{G_TYPE_UINT, RIGHT, "INIT_ACK" },
{G_TYPE_UINT, RIGHT, "COOKIE" },
{G_TYPE_UINT, RIGHT, "COOKIE_ACK" },
{G_TYPE_UINT, RIGHT, "ABORT" },
{G_TYPE_UINT, RIGHT, "ERROR" },
{G_TYPE_UINT, RIGHT, "NR_SACK" }
};
static void
sctpstat_init(const char *optarg, void *userdata _U_)

View File

@ -71,7 +71,7 @@ typedef struct _megacostat_t {
GtkWidget *win;
GtkWidget *vbox;
GtkWidget *scrolled_window;
GtkCList *table;
GtkTreeView *table;
#endif /*__GHTK_H__*/
} megacostat_t;