]> git.proxmox.com Git - librados2-perl.git/blob - RADOS.xs
initial import
[librados2-perl.git] / RADOS.xs
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