6b7f0ae52770e05cec8b6b1b0fa7fecde05a6d0d
[awesomized/libmemcached] / src / memstat.c
1 #include <stdio.h>
2 #include <sys/types.h>
3 #include <sys/stat.h>
4 #include <sys/types.h>
5 #include <sys/mman.h>
6 #include <fcntl.h>
7 #include <getopt.h>
8
9 #include <memcached.h>
10
11 #include "client_options.h"
12 #include "utilities.h"
13
14 #define PROGRAM_NAME "memstat"
15 #define PROGRAM_DESCRIPTION "Output the state of a memcached cluster."
16
17 /* Prototypes */
18 void options_parse(int argc, char *argv[]);
19
20 static int opt_verbose= 0;
21 static int opt_displayflag= 0;
22 static char *opt_servers= NULL;
23
24 int main(int argc, char *argv[])
25 {
26 unsigned int x;
27 memcached_return rc;
28 memcached_st *memc;
29 memcached_stat_st *stat;
30 memcached_server_st *servers;
31 memcached_server_st *server_list;
32
33 options_parse(argc, argv);
34
35 if (!opt_servers)
36 {
37 char *temp;
38
39 if ((temp= getenv("MEMCACHED_SERVERS")))
40 opt_servers= strdup(temp);
41 else
42 exit(1);
43 }
44
45 memc= memcached_create(NULL);
46
47 servers= memcached_servers_parse(opt_servers);
48 memcached_server_push(memc, servers);
49 memcached_server_list_free(servers);
50
51 stat= memcached_stat(memc, NULL, &rc);
52
53 if (rc != MEMCACHED_SUCCESS && rc != MEMCACHED_SOME_ERRORS)
54 {
55 printf("Failure to communicate with servers (%s)\n",
56 memcached_strerror(memc, rc));
57 exit(1);
58 }
59
60 server_list= memcached_server_list(memc);
61
62 printf("Listing %u Server\n\n", memcached_server_count(memc));
63 for (x= 0; x < memcached_server_count(memc); x++)
64 {
65 char **list;
66 char **ptr;
67
68 list= memcached_stat_get_keys(memc, &stat[x], &rc);
69 assert(list);
70 assert(rc == MEMCACHED_SUCCESS);
71
72 printf("Server: %s (%u)\n", memcached_server_name(memc, server_list[x]),
73 memcached_server_port(memc, server_list[x]));
74 for (ptr= list; *ptr; ptr++)
75 {
76 memcached_return rc;
77 char *value= memcached_stat_get_value(memc, &stat[x], *ptr, &rc);
78
79 printf("\t %s: %s\n", *ptr, value);
80 free(value);
81 }
82
83 free(list);
84 printf("\n");
85 }
86
87 free(stat);
88 free(opt_servers);
89
90 memcached_free(memc);
91
92 return 0;
93 }
94
95 void options_parse(int argc, char *argv[])
96 {
97 memcached_programs_help_st help_options[]=
98 {
99 {0},
100 };
101
102 static struct option long_options[]=
103 {
104 {"version", no_argument, NULL, OPT_VERSION},
105 {"help", no_argument, NULL, OPT_HELP},
106 {"verbose", no_argument, &opt_verbose, OPT_VERBOSE},
107 {"debug", no_argument, &opt_verbose, OPT_DEBUG},
108 {"servers", required_argument, NULL, OPT_SERVERS},
109 {"flag", no_argument, &opt_displayflag, OPT_FLAG},
110 {0, 0, 0, 0},
111 };
112
113 int option_index= 0;
114 int option_rv;
115
116 while (1)
117 {
118 option_rv= getopt_long(argc, argv, "Vhvds:", long_options, &option_index);
119 if (option_rv == -1) break;
120 switch (option_rv)
121 {
122 case 0:
123 break;
124 case OPT_VERBOSE: /* --verbose or -v */
125 opt_verbose = OPT_VERBOSE;
126 break;
127 case OPT_DEBUG: /* --debug or -d */
128 opt_verbose = OPT_DEBUG;
129 break;
130 case OPT_VERSION: /* --version or -V */
131 version_command(PROGRAM_NAME);
132 break;
133 case OPT_HELP: /* --help or -h */
134 help_command(PROGRAM_NAME, PROGRAM_DESCRIPTION, long_options, help_options);
135 break;
136 case OPT_SERVERS: /* --servers or -s */
137 opt_servers= strdup(optarg);
138 break;
139 case '?':
140 /* getopt_long already printed an error message. */
141 exit(1);
142 default:
143 abort();
144 }
145 }
146 }