mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-08-07 23:56:57 +02:00
MINOR: samples: add a function to list register sample fetch keywords
New function smp_dump_fetch_kw lists registered sample fetch keywords with their compatibility matrix, mandatory and optional argument types, and output types. It's called from dump_registered_keywords() with class "smp".
This commit is contained in:
parent
6ff7d1b9a5
commit
f78813f74f
@ -49,6 +49,7 @@ void sample_register_convs(struct sample_conv_kw_list *psl);
|
|||||||
const char *sample_src_names(unsigned int use);
|
const char *sample_src_names(unsigned int use);
|
||||||
const char *sample_ckp_names(unsigned int use);
|
const char *sample_ckp_names(unsigned int use);
|
||||||
struct sample_fetch *find_sample_fetch(const char *kw, int len);
|
struct sample_fetch *find_sample_fetch(const char *kw, int len);
|
||||||
|
void smp_dump_fetch_kw(void);
|
||||||
struct sample_fetch *sample_fetch_getnext(struct sample_fetch *current, int *idx);
|
struct sample_fetch *sample_fetch_getnext(struct sample_fetch *current, int *idx);
|
||||||
struct sample_conv *sample_conv_getnext(struct sample_conv *current, int *idx);
|
struct sample_conv *sample_conv_getnext(struct sample_conv *current, int *idx);
|
||||||
int smp_resolve_args(struct proxy *p, char **err);
|
int smp_resolve_args(struct proxy *p, char **err);
|
||||||
|
@ -1829,6 +1829,7 @@ static void dump_registered_keywords(void)
|
|||||||
printf("cfg: configuration keywords\n");
|
printf("cfg: configuration keywords\n");
|
||||||
printf("cli: CLI keywords\n");
|
printf("cli: CLI keywords\n");
|
||||||
printf("flt: filter names\n");
|
printf("flt: filter names\n");
|
||||||
|
printf("smp: sample fetch functions\n");
|
||||||
printf("svc: service names\n");
|
printf("svc: service names\n");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -1856,6 +1857,11 @@ static void dump_registered_keywords(void)
|
|||||||
flt_dump_kws(NULL);
|
flt_dump_kws(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (all || strcmp(kwd_dump, "smp") == 0) {
|
||||||
|
printf("# List of registered sample fetch functions:\n");
|
||||||
|
smp_dump_fetch_kw();
|
||||||
|
}
|
||||||
|
|
||||||
if (all || strcmp(kwd_dump, "svc") == 0) {
|
if (all || strcmp(kwd_dump, "svc") == 0) {
|
||||||
printf("# List of registered service names:\n");
|
printf("# List of registered service names:\n");
|
||||||
list_services(NULL);
|
list_services(NULL);
|
||||||
|
61
src/sample.c
61
src/sample.c
@ -434,6 +434,67 @@ struct sample_fetch *find_sample_fetch(const char *kw, int len)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* dump list of registered sample fetch keywords on stdout */
|
||||||
|
void smp_dump_fetch_kw(void)
|
||||||
|
{
|
||||||
|
struct sample_fetch_kw_list *kwl;
|
||||||
|
struct sample_fetch *kw;
|
||||||
|
uint64_t mask;
|
||||||
|
int index;
|
||||||
|
int arg;
|
||||||
|
int bit;
|
||||||
|
|
||||||
|
for (bit = 0; bit <= SMP_CKP_ENTRIES + 1; bit++) {
|
||||||
|
putchar('#');
|
||||||
|
for (index = 0; bit + index <= SMP_CKP_ENTRIES; index++)
|
||||||
|
putchar(' ');
|
||||||
|
for (index = 0; index < bit && index < SMP_CKP_ENTRIES; index++)
|
||||||
|
printf((bit <= SMP_CKP_ENTRIES) ? "/ " : " |");
|
||||||
|
for (index = bit; bit < SMP_CKP_ENTRIES && index < SMP_CKP_ENTRIES + 2; index++)
|
||||||
|
if (index == bit)
|
||||||
|
putchar('_');
|
||||||
|
else if (index == bit + 1)
|
||||||
|
putchar('.');
|
||||||
|
else
|
||||||
|
putchar('-');
|
||||||
|
printf(" %s\n", (bit < SMP_CKP_ENTRIES) ? fetch_ckp_names[bit] : "");
|
||||||
|
}
|
||||||
|
|
||||||
|
list_for_each_entry(kwl, &sample_fetches.list, list) {
|
||||||
|
for (index = 0; kwl->kw[index].kw != NULL; index++) {
|
||||||
|
kw = &kwl->kw[index];
|
||||||
|
|
||||||
|
printf("[ ");
|
||||||
|
for (bit = 0; bit < SMP_CKP_ENTRIES; bit++)
|
||||||
|
printf("%s", (kw->val & (1 << bit)) ? "Y " : ". ");
|
||||||
|
|
||||||
|
printf("] %s", kw->kw);
|
||||||
|
if (kw->arg_mask) {
|
||||||
|
mask = kw->arg_mask >> ARGM_BITS;
|
||||||
|
printf("(");
|
||||||
|
for (arg = 0;
|
||||||
|
arg < ARGM_NBARGS && ((mask >> (arg * ARGT_BITS)) & ARGT_MASK);
|
||||||
|
arg++) {
|
||||||
|
if (arg == (kw->arg_mask & ARGM_MASK)) {
|
||||||
|
/* now dumping extra args */
|
||||||
|
printf("[");
|
||||||
|
}
|
||||||
|
if (arg)
|
||||||
|
printf(",");
|
||||||
|
printf("%s", arg_type_names[(mask >> (arg * ARGT_BITS)) & ARGT_MASK]);
|
||||||
|
}
|
||||||
|
if (arg > (kw->arg_mask & ARGM_MASK)) {
|
||||||
|
/* extra args were dumped */
|
||||||
|
printf("]");
|
||||||
|
}
|
||||||
|
printf(")");
|
||||||
|
}
|
||||||
|
printf(": %s", smp_to_type[kw->out_type]);
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* This function browses the list of available sample fetches. <current> is
|
/* This function browses the list of available sample fetches. <current> is
|
||||||
* the last used sample fetch. If it is the first call, it must set to NULL.
|
* the last used sample fetch. If it is the first call, it must set to NULL.
|
||||||
* <idx> is the index of the next sample fetch entry. It is used as private
|
* <idx> is the index of the next sample fetch entry. It is used as private
|
||||||
|
Loading…
Reference in New Issue
Block a user