1*d4a07e70Sfengbojiang /*
2*d4a07e70Sfengbojiang * Copyright (c) 2014, Juniper Networks, Inc.
3*d4a07e70Sfengbojiang * All rights reserved.
4*d4a07e70Sfengbojiang * This SOFTWARE is licensed under the LICENSE provided in the
5*d4a07e70Sfengbojiang * ../Copyright file. By downloading, installing, copying, or otherwise
6*d4a07e70Sfengbojiang * using the SOFTWARE, you agree to be bound by the terms of that
7*d4a07e70Sfengbojiang * LICENSE.
8*d4a07e70Sfengbojiang * Phil Shafer, July 2014
9*d4a07e70Sfengbojiang */
10*d4a07e70Sfengbojiang
11*d4a07e70Sfengbojiang #include <stdio.h>
12*d4a07e70Sfengbojiang #include <stdlib.h>
13*d4a07e70Sfengbojiang #include <string.h>
14*d4a07e70Sfengbojiang
15*d4a07e70Sfengbojiang #include "xo.h"
16*d4a07e70Sfengbojiang #include "xo_encoder.h"
17*d4a07e70Sfengbojiang
18*d4a07e70Sfengbojiang xo_info_t info[] = {
19*d4a07e70Sfengbojiang { "employee", "object", "Employee data" },
20*d4a07e70Sfengbojiang { "first-name", "string", "First name of employee" },
21*d4a07e70Sfengbojiang { "last-name", "string", "Last name of employee" },
22*d4a07e70Sfengbojiang { "department", "number", "Department number" },
23*d4a07e70Sfengbojiang };
24*d4a07e70Sfengbojiang int info_count = (sizeof(info) / sizeof(info[0]));
25*d4a07e70Sfengbojiang
26*d4a07e70Sfengbojiang int
main(int argc,char ** argv)27*d4a07e70Sfengbojiang main (int argc, char **argv)
28*d4a07e70Sfengbojiang {
29*d4a07e70Sfengbojiang unsigned opt_count = 1;
30*d4a07e70Sfengbojiang unsigned opt_extra = 0;
31*d4a07e70Sfengbojiang
32*d4a07e70Sfengbojiang struct employee {
33*d4a07e70Sfengbojiang const char *e_first;
34*d4a07e70Sfengbojiang const char *e_last;
35*d4a07e70Sfengbojiang unsigned e_dept;
36*d4a07e70Sfengbojiang } employees[] = {
37*d4a07e70Sfengbojiang { "Terry", "Jones", 660 },
38*d4a07e70Sfengbojiang { "Leslie", "Patterson", 341 },
39*d4a07e70Sfengbojiang { "Ashley", "Smith", 1440 },
40*d4a07e70Sfengbojiang { NULL, NULL }
41*d4a07e70Sfengbojiang }, *ep;
42*d4a07e70Sfengbojiang
43*d4a07e70Sfengbojiang argc = xo_parse_args(argc, argv);
44*d4a07e70Sfengbojiang if (argc < 0)
45*d4a07e70Sfengbojiang return 1;
46*d4a07e70Sfengbojiang
47*d4a07e70Sfengbojiang for (argc = 1; argv[argc]; argc++) {
48*d4a07e70Sfengbojiang if (xo_streq(argv[argc], "count")) {
49*d4a07e70Sfengbojiang if (argv[argc + 1])
50*d4a07e70Sfengbojiang opt_count = atoi(argv[++argc]);
51*d4a07e70Sfengbojiang } else if (xo_streq(argv[argc], "extra")) {
52*d4a07e70Sfengbojiang if (argv[argc + 1])
53*d4a07e70Sfengbojiang opt_extra = atoi(argv[++argc]);
54*d4a07e70Sfengbojiang }
55*d4a07e70Sfengbojiang }
56*d4a07e70Sfengbojiang
57*d4a07e70Sfengbojiang xo_set_info(NULL, info, info_count);
58*d4a07e70Sfengbojiang
59*d4a07e70Sfengbojiang xo_open_container("employees");
60*d4a07e70Sfengbojiang xo_open_list("employee");
61*d4a07e70Sfengbojiang
62*d4a07e70Sfengbojiang xo_emit("[{:extra/%*s}]\n", opt_extra, "");
63*d4a07e70Sfengbojiang
64*d4a07e70Sfengbojiang xo_emit("{T:/%13s} {T:/%5s} {T:/%6s} {T:/%7s} {T:/%8s} {T:Size(s)}\n",
65*d4a07e70Sfengbojiang "Type", "InUse", "MemUse", "HighUse", "Requests");
66*d4a07e70Sfengbojiang xo_open_list("memory");
67*d4a07e70Sfengbojiang xo_open_instance("memory");
68*d4a07e70Sfengbojiang
69*d4a07e70Sfengbojiang #define PRIu64 "llu"
70*d4a07e70Sfengbojiang #define TO_ULL(_x) ((unsigned long long) _x)
71*d4a07e70Sfengbojiang xo_emit("{k:type/%13s} {:in-use/%5" PRIu64 "} "
72*d4a07e70Sfengbojiang "{:memory-use/%5" PRIu64 "}{U:K} {:high-use/%7s} "
73*d4a07e70Sfengbojiang "{:requests/%8" PRIu64 "} ",
74*d4a07e70Sfengbojiang "name", TO_ULL(12345), TO_ULL(54321), "-", TO_ULL(32145));
75*d4a07e70Sfengbojiang
76*d4a07e70Sfengbojiang int first = 1, i;
77*d4a07e70Sfengbojiang #if 0
78*d4a07e70Sfengbojiang xo_open_list("size");
79*d4a07e70Sfengbojiang for (i = 0; i < 32; i++) {
80*d4a07e70Sfengbojiang if (!first)
81*d4a07e70Sfengbojiang xo_emit(",");
82*d4a07e70Sfengbojiang xo_emit("{l:size/%d}", 1 << (i + 4));
83*d4a07e70Sfengbojiang first = 0;
84*d4a07e70Sfengbojiang }
85*d4a07e70Sfengbojiang xo_close_list("size");
86*d4a07e70Sfengbojiang #endif
87*d4a07e70Sfengbojiang xo_close_instance("memory");
88*d4a07e70Sfengbojiang xo_emit("\n");
89*d4a07e70Sfengbojiang xo_close_list("memory");
90*d4a07e70Sfengbojiang
91*d4a07e70Sfengbojiang while (opt_count-- != 0) {
92*d4a07e70Sfengbojiang for (ep = employees; ep->e_first; ep++) {
93*d4a07e70Sfengbojiang xo_open_instance("employee");
94*d4a07e70Sfengbojiang xo_emit("{:first-name} {:last-name} works in "
95*d4a07e70Sfengbojiang "dept #{:department/%u}\n",
96*d4a07e70Sfengbojiang ep->e_first, ep->e_last, ep->e_dept);
97*d4a07e70Sfengbojiang xo_close_instance("employee");
98*d4a07e70Sfengbojiang }
99*d4a07e70Sfengbojiang }
100*d4a07e70Sfengbojiang
101*d4a07e70Sfengbojiang xo_emit("done\n");
102*d4a07e70Sfengbojiang
103*d4a07e70Sfengbojiang xo_close_list("employee");
104*d4a07e70Sfengbojiang xo_close_container("employees");
105*d4a07e70Sfengbojiang
106*d4a07e70Sfengbojiang xo_finish();
107*d4a07e70Sfengbojiang
108*d4a07e70Sfengbojiang return 0;
109*d4a07e70Sfengbojiang }
110