diff options
Diffstat (limited to 'qa/src/parsehostattrs.c')
-rw-r--r-- | qa/src/parsehostattrs.c | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/qa/src/parsehostattrs.c b/qa/src/parsehostattrs.c new file mode 100644 index 0000000..68a3a42 --- /dev/null +++ b/qa/src/parsehostattrs.c @@ -0,0 +1,65 @@ +#include <stdio.h> +#include <pcp/pmapi.h> +#include <pcp/impl.h> + +static __pmHashWalkState +print_attribute(const __pmHashNode *tp, void *cp) +{ + char buffer[256]; + + if (!__pmAttrStr_r(tp->key, tp->data, buffer, sizeof(buffer))) { + fprintf(stderr, "Found unrecognised attribute (%d: \"%s\")\n", + tp->key, tp->data ? (char *)tp->data : ""); + } + buffer[sizeof(buffer)-1] = '\0'; + printf("%s\n", buffer); + return PM_HASH_WALK_NEXT; +} + +int +main(int argc, char **argv) +{ + char *msg; + char buffer[512]; + __pmHashCtl attrs; + pmHostSpec *hosts; + int count, sts, i, j; + + if (argc != 2) { + fprintf(stderr, "Usage: parsehostattrs spec\n"); + exit(1); + } + + __pmHashInit(&attrs); + printf("pmParseHostAttrsSpec(\"%s\", ...)\n", argv[1]); + sts = __pmParseHostAttrsSpec(argv[1], &hosts, &count, &attrs, &msg); + if (sts < 0) { + if (sts == PM_ERR_GENERIC) + printf("pmParseHostAttrsSpec error:\n%s\n", msg); + else + printf("Error: %s\n", pmErrStr(sts)); + exit(1); + } + for (i = 0; i < count; i++) { + printf("host[%d]: \"%s\"", i, hosts[i].name); + if (hosts[i].nports == 1) + printf(" port:"); + else if (hosts[i].nports > 1) + printf(" ports:"); + for (j = 0; j < hosts[i].nports; j++) + printf(" %d", hosts[i].ports[j]); + putchar('\n'); + } + __pmHashWalkCB(print_attribute, NULL, &attrs); + + sts = __pmUnparseHostAttrsSpec(hosts, count, &attrs, buffer, sizeof(buffer)); + if (sts < 0) { + printf("pmUnparseHostAttrsSpec: %s\n", pmErrStr(sts)); + exit(1); + } + printf("pmUnparseHostAttrsSpec(\"%s\") -> \"%s\"\n", argv[1], buffer); + + __pmFreeHostAttrsSpec(hosts, count, &attrs); + __pmHashClear(&attrs); + exit(0); +} |