str(<string>) string
table_avl([<table>]) integer
table_cnt([<table>]) integer
+term_events string
thread integer
txn.id32 integer
txn.sess_term_state string
stick-table or in the designated stick-table. See also "table_conn_cnt" and
table_avl for other entry counting methods.
+term_events: string
+ Returns all known termination events for all entities attached a stream, on
+ client and server sides. A tuple of seven elements is returned with following info:
+
+ - the termination events of the frontend connection
+ - the termination events of the frontend mux connection
+ - the termination events of the frontend stream endpoint descriptor
+ (the mux stream or the applet)
+ - the termination events of the stream
+ - the termination events of the backend stream endpoint descriptor
+ (the mux stream or the applet)
+ - the termination events of the backend mux connection
+ - the termination events of the backend connection
+
+ At each level, the first four events are reported. An empty string is
+ returned if no event was reported yet for a specific level. If termination
+ events are not supported, a "-" is returned.
+
+ It must only be used for debugging purpose. The exact format is not
+ documented because it may evolve depending on developers requirements.
+
thread : integer
Returns an integer value corresponding to the position of the thread calling
the function, between 0 and (global.nbthread-1). This is useful for logging
return 1;
}
+static int smp_fetch_tevts(const struct arg *args, struct sample *smp, const char *km, void *private)
+{
+ struct buffer *trash = get_trash_chunk();
+ struct connection *fconn, *bconn;
+ int fc_mux_ret, bc_mux_ret;
+
+ fconn = smp->sess ? objt_conn(smp->sess->origin) : NULL;
+ bconn = smp->strm ? sc_conn(smp->strm->scb) : NULL;
+ fc_mux_ret = bc_mux_ret = -1;
+
+ if (fconn && fconn->mux && fconn->mux->ctl)
+ fc_mux_ret = fconn->mux->ctl(fconn, MUX_CTL_TEVTS, NULL);
+ if (bconn && bconn->mux && bconn->mux->ctl)
+ bc_mux_ret = bconn->mux->ctl(bconn, MUX_CTL_TEVTS, NULL);
+
+ chunk_printf(trash, "{%s,", fconn ? tevt_evts2str(fconn->term_evts_log) : "-");
+ chunk_appendf(trash, "%s,", (fc_mux_ret != -1) ? tevt_evts2str(fc_mux_ret) : "-");
+ chunk_appendf(trash, "%s,", smp->strm ? tevt_evts2str(smp->strm->scf->sedesc->term_evts_log) : "-");
+ chunk_appendf(trash, "%s,", smp->strm ? tevt_evts2str(smp->strm->term_evts_log) : "-");
+ chunk_appendf(trash, "%s,", smp->strm ? tevt_evts2str(smp->strm->scb->sedesc->term_evts_log) : "-");
+ chunk_appendf(trash, "%s,", (bc_mux_ret != -1) ? tevt_evts2str(bc_mux_ret) : "-");
+ chunk_appendf(trash, "%s}", bconn ? tevt_evts2str(bconn->term_evts_log) : "-");
+
+ smp->data.u.str = *trash;
+ smp->data.type = SMP_T_STR;
+ smp->flags = SMP_F_VOL_TEST | SMP_F_MAY_CHANGE;
+ return 1;
+}
+
static int smp_fetch_id32(const struct arg *args, struct sample *smp, const char *km, void *private)
{
smp->flags = SMP_F_VOL_TXN;
{ "last_entity", smp_fetch_last_entity, 0, NULL, SMP_T_STR, SMP_USE_INTRN, },
{ "last_rule_file", smp_fetch_last_rule_file, 0, NULL, SMP_T_STR, SMP_USE_INTRN, },
{ "last_rule_line", smp_fetch_last_rule_line, 0, NULL, SMP_T_SINT, SMP_USE_INTRN, },
+ { "term_events", smp_fetch_tevts, 0, NULL, SMP_T_STR, SMP_USE_INTRN, },
{ "txn.conn_retries", smp_fetch_conn_retries, 0, NULL, SMP_T_SINT, SMP_USE_L4SRV, },
{ "txn.id32", smp_fetch_id32, 0, NULL, SMP_T_SINT, SMP_USE_INTRN, },
{ "txn.redispatched", smp_fetch_redispatched, 0, NULL, SMP_T_BOOL, SMP_USE_L4SRV, },