]> git.sur5r.net Git - bacula/bacula/blob - bacula/src/filed/python.c
- Fix ANSI labels to put EOF1 and EOF2 after each file mark.
[bacula/bacula] / bacula / src / filed / python.c
1 /*
2  *
3  * Bacula interface to Python for the File Daemon
4  *
5  * Kern Sibbald, March MMV
6  *
7  *   Version $Id$
8  *
9  */
10
11 /*
12    Copyright (C) 2005 Kern Sibbald
13
14    This program is free software; you can redistribute it and/or
15    modify it under the terms of the GNU General Public License as
16    published by the Free Software Foundation; either version 2 of
17    the License, or (at your option) any later version.
18
19    This program is distributed in the hope that it will be useful,
20    but WITHOUT ANY WARRANTY; without even the implied warranty of
21    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
22    General Public License for more details.
23
24    You should have received a copy of the GNU General Public
25    License along with this program; if not, write to the Free
26    Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
27    MA 02111-1307, USA.
28
29  */
30
31 #include "bacula.h"
32 #include "filed.h"
33
34 #ifdef HAVE_PYTHON
35 #undef _POSIX_C_SOURCE
36 #include <Python.h>
37
38 PyObject *bacula_get(PyObject *self, PyObject *args);
39 PyObject *bacula_set(PyObject *self, PyObject *args, PyObject *keyw);
40
41 /* Define Bacula entry points */
42 PyMethodDef BaculaMethods[] = {
43     {"get", bacula_get, METH_VARARGS, "Get Bacula FD variables."},
44     {"set", (PyCFunction)bacula_set, METH_VARARGS|METH_KEYWORDS,
45         "Set FD Bacula variables."},
46     {NULL, NULL, 0, NULL}             /* last item */
47 };
48
49
50 struct s_vars {
51    const char *name;
52    char *fmt;
53 };
54
55 static struct s_vars vars[] = {
56    { N_("FDName"),     "s"},          /* 0 */
57    { N_("Level"),      "s"},          /* 1 */
58    { N_("Type"),       "s"},          /* 2 */
59    { N_("JobId"),      "i"},          /* 3 */
60    { N_("Client"),     "s"},          /* 4 */
61    { N_("JobName"),    "s"},          /* 5 */
62    { N_("JobStatus"),  "s"},          /* 6 */
63
64    { NULL,             NULL}
65 };
66
67 /* Return Bacula variables */
68 PyObject *bacula_get(PyObject *self, PyObject *args)
69 {
70    PyObject *CObject;
71    JCR *jcr;
72    char *item;
73    bool found = false;
74    int i;
75    char buf[10];
76
77    if (!PyArg_ParseTuple(args, "Os:get", &CObject, &item)) {
78       return NULL;
79    }
80    jcr = (JCR *)PyCObject_AsVoidPtr(CObject);
81    for (i=0; vars[i].name; i++) {
82       if (strcmp(vars[i].name, item) == 0) {
83          found = true;
84          break;
85       }
86    }
87    if (!found) {
88       return NULL;
89    }
90    switch (i) {
91    case 0:                            /* FD's name */
92       return Py_BuildValue(vars[i].fmt, my_name);
93    case 1:                            /* level */
94       return Py_BuildValue(vars[i].fmt, job_level_to_str(jcr->JobLevel));
95    case 2:                            /* type */
96       return Py_BuildValue(vars[i].fmt, job_type_to_str(jcr->JobType));
97    case 3:                            /* JobId */
98       return Py_BuildValue(vars[i].fmt, jcr->JobId);
99    case 4:                            /* Client */
100       return Py_BuildValue(vars[i].fmt, jcr->client_name);
101    case 5:                            /* JobName */
102       return Py_BuildValue(vars[i].fmt, jcr->Job);
103    case 6:                            /* JobStatus */
104       buf[1] = 0;
105       buf[0] = jcr->JobStatus;
106       return Py_BuildValue(vars[i].fmt, buf);
107    }
108    return NULL;
109 }
110
111 /* Set Bacula variables */
112 PyObject *bacula_set(PyObject *self, PyObject *args, PyObject *keyw)
113 {
114    PyObject *CObject;
115    JCR *jcr;
116    char *msg = NULL;
117    static char *kwlist[] = {"jcr", "JobReport", NULL};
118    if (!PyArg_ParseTupleAndKeywords(args, keyw, "O|ss:set", kwlist,
119         &CObject, &msg)) {
120       return NULL;
121    }
122    jcr = (JCR *)PyCObject_AsVoidPtr(CObject);
123
124    if (msg) {
125       Jmsg(jcr, M_INFO, 0, "%s", msg);
126    }
127    return Py_BuildValue("i", 1);
128 }
129
130 #endif /* HAVE_PYTHON */