~brianaker/libmemcached/embedded

« back to all changes in this revision

Viewing changes to clients/memstat.c

  • Committer: brian@gir-2.local
  • Date: 2008-03-10 15:04:41 UTC
  • mto: (317.6.1)
  • mto: This revision was merged to the branch mainline in revision 321.
  • Revision ID: brian@gir-2.local-20080310150441-jyhbjx6bwo46f6tg
Huge refactoring of directory structure.

Show diffs side-by-side

added added

removed removed

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