]> git.proxmox.com Git - librados2-perl.git/blame - RADOS.xs
initial import
[librados2-perl.git] / RADOS.xs
CommitLineData
27bfc7c6
DM
1#include "EXTERN.h"
2#include "perl.h"
3#include "XSUB.h"
4
5#include "ppport.h"
6
7#include <rados/librados.h>
8
9MODULE = PVE::RADOS PACKAGE = PVE::RADOS
10
11rados_t pve_rados_create()
12PROTOTYPE:
13CODE:
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}
25OUTPUT: RETVAL
26
27int pve_rados_connect(cluster)
28rados_t cluster
29PROTOTYPE: $
30CODE:
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}
39OUTPUT: RETVAL
40
41void
42pve_rados_shutdown(cluster)
43rados_t cluster
44PROTOTYPE: $
45CODE:
46{
47 rados_shutdown(cluster);
48}
49
50SV *
51pve_rados_mon_command(cluster, cmds)
52rados_t cluster
53AV *cmds
54PROTOTYPE: $$
55CODE:
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}
91OUTPUT: RETVAL
92
93HV *
94pve_rados_cluster_stat(cluster)
95rados_t cluster
96PROTOTYPE: $
97CODE:
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}
115OUTPUT: RETVAL