add Python ptql re op impl
This commit is contained in:
parent
1f15289d75
commit
2f8090559e
|
@ -69,6 +69,42 @@ static void pysigar_free(PyObject *self)
|
|||
self->ob_type->tp_free((PyObject *)self);
|
||||
}
|
||||
|
||||
static int pysigar_ptql_re_impl(void *data,
|
||||
char *haystack, char *needle)
|
||||
{
|
||||
PyObject *name = PyString_FromString("sigar");
|
||||
PyObject *module = PyImport_Import(name);
|
||||
PyObject *match, *args, *source, *regex, *result;
|
||||
int matches = 0;
|
||||
|
||||
match = PyObject_GetAttrString(module, "string_matches");
|
||||
|
||||
source = PyString_FromString(haystack);
|
||||
regex = PyString_FromString(needle);
|
||||
args = PyTuple_New(2);
|
||||
PyTuple_SetItem(args, 0, source); /* steals source reference */
|
||||
PyTuple_SetItem(args, 1, regex); /* steals regex reference */
|
||||
|
||||
result = PyObject_CallObject(match, args);
|
||||
|
||||
Py_DECREF(name);
|
||||
Py_DECREF(module);
|
||||
Py_DECREF(args);
|
||||
Py_DECREF(match);
|
||||
|
||||
if (result == NULL) {
|
||||
if (PyErr_Occurred()) {
|
||||
PyErr_Print();
|
||||
}
|
||||
}
|
||||
else {
|
||||
matches = (result == Py_True);
|
||||
Py_DECREF(result);
|
||||
}
|
||||
|
||||
return matches;
|
||||
}
|
||||
|
||||
#define sigar_isdigit(c) \
|
||||
(isdigit(((unsigned char)(c))))
|
||||
|
||||
|
@ -103,9 +139,9 @@ static int pysigar_parse_pid(sigar_t *sigar, PyObject *args, long *pid)
|
|||
|
||||
status = sigar_ptql_query_create(&query, ptql, &error);
|
||||
if (status == SIGAR_OK) {
|
||||
/*sigar_ptql_re_impl_set(sigar, NULL, pysigar_ptql_re_impl);*/
|
||||
sigar_ptql_re_impl_set(sigar, NULL, pysigar_ptql_re_impl);
|
||||
status = sigar_ptql_query_find_process(sigar, query, (sigar_pid_t *)pid);
|
||||
/*sigar_ptql_re_impl_set(sigar, NULL, NULL);*/
|
||||
sigar_ptql_re_impl_set(sigar, NULL, NULL);
|
||||
sigar_ptql_query_destroy(query);
|
||||
|
||||
if (status == SIGAR_OK) {
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
#
|
||||
# Copyright (c) 2007 Hyperic, Inc.
|
||||
# Copyright (c) 2011 VMware, Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
|
@ -15,3 +16,8 @@
|
|||
#
|
||||
|
||||
from _sigar import *
|
||||
|
||||
import re
|
||||
#wrapper for pysigar_ptql_re_impl
|
||||
def string_matches(source, regex):
|
||||
return re.compile(regex).match(source) != None
|
||||
|
|
Loading…
Reference in New Issue