]>
Commit | Line | Data |
---|---|---|
1 | #include "EXTERN.h" | |
2 | #include "perl.h" | |
3 | #include "XSUB.h" | |
4 | ||
5 | #include "ppport.h" | |
6 | ||
7 | #include <rados/librados.h> | |
8 | ||
9 | MODULE = PVE::RADOS PACKAGE = PVE::RADOS | |
10 | ||
11 | rados_t pve_rados_create() | |
12 | PROTOTYPE: | |
13 | CODE: | |
14 | { | |
15 | rados_t clu = NULL; | |
16 | int ret = rados_create(&clu, NULL); | |
17 | ||
18 | if (ret == 0) | |
19 | RETVAL = clu; | |
20 | else { | |
21 | warn("rados_create failed (ret=%d)\n", ret); | |
22 | RETVAL = NULL; | |
23 | } | |
24 | } | |
25 | OUTPUT: RETVAL | |
26 | ||
27 | int pve_rados_connect(cluster) | |
28 | rados_t cluster | |
29 | PROTOTYPE: $ | |
30 | CODE: | |
31 | { | |
32 | rados_conf_read_file(cluster, NULL); | |
33 | ||
34 | RETVAL = rados_connect(cluster); | |
35 | if (RETVAL < 0) { | |
36 | die("rados_connect failed - %s\n", strerror(-RETVAL)); | |
37 | } | |
38 | } | |
39 | OUTPUT: RETVAL | |
40 | ||
41 | void | |
42 | pve_rados_shutdown(cluster) | |
43 | rados_t cluster | |
44 | PROTOTYPE: $ | |
45 | CODE: | |
46 | { | |
47 | rados_shutdown(cluster); | |
48 | } | |
49 | ||
50 | SV * | |
51 | pve_rados_mon_command(cluster, cmds) | |
52 | rados_t cluster | |
53 | AV *cmds | |
54 | PROTOTYPE: $$ | |
55 | CODE: | |
56 | { | |
57 | const char *cmd[64]; | |
58 | size_t cmdlen = 0; | |
59 | ||
60 | char *outbuf =NULL; | |
61 | size_t outbuflen = 0; | |
62 | char *outs = NULL; | |
63 | size_t outslen = 0; | |
64 | ||
65 | SV *arg; | |
66 | ||
67 | while ((arg = av_pop(cmds)) && (arg != &PL_sv_undef)) { | |
68 | if (cmdlen >= 63) { | |
69 | die("too many arguments"); | |
70 | } | |
71 | cmd[cmdlen] = SvPV_nolen(arg); | |
72 | cmdlen++; | |
73 | } | |
74 | ||
75 | int ret = rados_mon_command(cluster, cmd, cmdlen, | |
76 | NULL, 0, | |
77 | &outbuf, &outbuflen, | |
78 | &outs, &outslen); | |
79 | ||
80 | if (ret < 0) { | |
81 | die("mon_command failed - %s\n", outs); | |
82 | rados_buffer_free(outs); | |
83 | } | |
84 | ||
85 | printf("TEST %d %d %d\n", ret, outbuflen, outslen); | |
86 | ||
87 | RETVAL = newSVpv(outbuf, outbuflen); | |
88 | ||
89 | rados_buffer_free(outbuf); | |
90 | } | |
91 | OUTPUT: RETVAL | |
92 | ||
93 | HV * | |
94 | pve_rados_cluster_stat(cluster) | |
95 | rados_t cluster | |
96 | PROTOTYPE: $ | |
97 | CODE: | |
98 | { | |
99 | struct rados_cluster_stat_t result; | |
100 | int ret = rados_cluster_stat(cluster, &result); | |
101 | ||
102 | if(ret != 0) { | |
103 | warn("rados_cluster_stat failed (ret=%d)\n", ret); | |
104 | XSRETURN_UNDEF; | |
105 | } | |
106 | HV * rh = (HV *)sv_2mortal((SV *)newHV()); | |
107 | ||
108 | hv_store(rh, "kb", 2, newSViv(result.kb), 0); | |
109 | hv_store(rh, "kb_used", 7, newSViv(result.kb_used), 0); | |
110 | hv_store(rh, "kb_avail", 8, newSViv(result.kb_avail), 0); | |
111 | hv_store(rh, "num_objects", 11, newSViv(result.num_objects), 0); | |
112 | ||
113 | RETVAL = rh; | |
114 | } | |
115 | OUTPUT: RETVAL |