add native ptql bindings
This commit is contained in:
parent
20d17f623e
commit
25994f6abd
|
@ -21,6 +21,7 @@
|
||||||
#include "sigar_fileinfo.h"
|
#include "sigar_fileinfo.h"
|
||||||
#include "sigar_log.h"
|
#include "sigar_log.h"
|
||||||
#include "sigar_private.h"
|
#include "sigar_private.h"
|
||||||
|
#include "sigar_ptql.h"
|
||||||
#include "sigar_util.h"
|
#include "sigar_util.h"
|
||||||
#include "sigar_os.h"
|
#include "sigar_os.h"
|
||||||
|
|
||||||
|
@ -57,7 +58,7 @@ typedef struct {
|
||||||
} jni_sigar_t;
|
} jni_sigar_t;
|
||||||
|
|
||||||
#define dSIGAR_GET \
|
#define dSIGAR_GET \
|
||||||
jni_sigar_t *jsigar = sigar_get_pointer(env, sigar_obj); \
|
jni_sigar_t *jsigar = sigar_get_jpointer(env, sigar_obj); \
|
||||||
sigar_t *sigar
|
sigar_t *sigar
|
||||||
|
|
||||||
#define dSIGAR_VOID \
|
#define dSIGAR_VOID \
|
||||||
|
@ -177,20 +178,22 @@ static void sigar_throw_error(JNIEnv *env, jni_sigar_t *jsigar, int err)
|
||||||
sigar_strerror(jsigar->sigar, err));
|
sigar_strerror(jsigar->sigar, err));
|
||||||
}
|
}
|
||||||
|
|
||||||
static jni_sigar_t *sigar_get_pointer(JNIEnv *env, jobject obj) {
|
static void *sigar_get_pointer(JNIEnv *env, jobject obj) {
|
||||||
jfieldID pointer_field;
|
jfieldID pointer_field;
|
||||||
jni_sigar_t *jsigar;
|
jclass cls = JENV->GetObjectClass(env, obj);
|
||||||
jclass cls;
|
|
||||||
|
|
||||||
cls = JENV->GetObjectClass(env, obj);
|
|
||||||
|
|
||||||
#ifdef SIGAR_POINTER_LONG
|
#ifdef SIGAR_POINTER_LONG
|
||||||
pointer_field = JENV->GetFieldID(env, cls, "longSigarWrapper", "J");
|
pointer_field = JENV->GetFieldID(env, cls, "longSigarWrapper", "J");
|
||||||
jsigar = (jni_sigar_t *) JENV->GetLongField(env, obj, pointer_field);
|
return (void *)JENV->GetLongField(env, obj, pointer_field);
|
||||||
#else
|
#else
|
||||||
pointer_field = JENV->GetFieldID(env, cls, "sigarWrapper", "I");
|
pointer_field = JENV->GetFieldID(env, cls, "sigarWrapper", "I");
|
||||||
jsigar = (jni_sigar_t *) JENV->GetIntField(env, obj, pointer_field);
|
return (void *)JENV->GetIntField(env, obj, pointer_field);
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static jni_sigar_t *sigar_get_jpointer(JNIEnv *env, jobject obj) {
|
||||||
|
jni_sigar_t *jsigar =
|
||||||
|
(jni_sigar_t *)sigar_get_pointer(env, obj);
|
||||||
|
|
||||||
if (!jsigar) {
|
if (!jsigar) {
|
||||||
sigar_throw_exception(env, "sigar has been closed");
|
sigar_throw_exception(env, "sigar has been closed");
|
||||||
|
@ -1069,6 +1072,58 @@ JNIEXPORT jstring SIGAR_JNIx(getFQDN)
|
||||||
return JENV->NewStringUTF(env, fqdn);
|
return JENV->NewStringUTF(env, fqdn);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JNIEXPORT jboolean SIGAR_JNI(ptql_SigarProcessQuery_match)
|
||||||
|
(JNIEnv *env, jobject obj, jobject sigar_obj, jlong pid)
|
||||||
|
{
|
||||||
|
int status;
|
||||||
|
sigar_ptql_query_t *query =
|
||||||
|
(sigar_ptql_query_t *)sigar_get_pointer(env, obj);
|
||||||
|
dSIGAR(JNI_FALSE);
|
||||||
|
|
||||||
|
status = sigar_ptql_query_match(sigar, query, pid);
|
||||||
|
|
||||||
|
if (status == SIGAR_OK) {
|
||||||
|
return JNI_TRUE;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return JNI_FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
JNIEXPORT void SIGAR_JNI(ptql_SigarProcessQuery_create)
|
||||||
|
(JNIEnv *env, jobject obj, jstring jptql)
|
||||||
|
{
|
||||||
|
int status;
|
||||||
|
jboolean is_copy;
|
||||||
|
const char *ptql;
|
||||||
|
sigar_ptql_query_t *query;
|
||||||
|
|
||||||
|
ptql = JENV->GetStringUTFChars(env, jptql, &is_copy);
|
||||||
|
status = sigar_ptql_query_create(&query, (char *)ptql);
|
||||||
|
if (is_copy) {
|
||||||
|
JENV->ReleaseStringUTFChars(env, jptql, ptql);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (status != SIGAR_OK) {
|
||||||
|
sigar_throw_exception(env, "Malformed query"); /*XXX*/
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
sigar_set_pointer(env, obj, query);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
JNIEXPORT void SIGAR_JNI(ptql_SigarProcessQuery_destroy)
|
||||||
|
(JNIEnv *env, jobject obj)
|
||||||
|
{
|
||||||
|
sigar_ptql_query_t *query =
|
||||||
|
(sigar_ptql_query_t *)sigar_get_pointer(env, obj);
|
||||||
|
|
||||||
|
if (query) {
|
||||||
|
sigar_ptql_query_destroy(query);
|
||||||
|
sigar_set_pointer(env, obj, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#include "sigar_getline.h"
|
#include "sigar_getline.h"
|
||||||
|
|
||||||
JNIEXPORT jboolean SIGAR_JNI(util_Getline_isatty)
|
JNIEXPORT jboolean SIGAR_JNI(util_Getline_isatty)
|
||||||
|
|
|
@ -0,0 +1,47 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) [2004, 2005, 2006], Hyperic, Inc.
|
||||||
|
* This file is part of SIGAR.
|
||||||
|
*
|
||||||
|
* SIGAR is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms version 2 of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation. This program is distributed
|
||||||
|
* in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
|
||||||
|
* even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||||
|
* PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||||
|
* details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
||||||
|
* USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.hyperic.sigar.ptql;
|
||||||
|
|
||||||
|
import org.hyperic.sigar.Sigar;
|
||||||
|
import org.hyperic.sigar.SigarException;
|
||||||
|
import org.hyperic.sigar.SigarProxy;
|
||||||
|
import org.hyperic.sigar.SigarProxyCache;
|
||||||
|
|
||||||
|
public class SigarProcessQuery implements ProcessQuery {
|
||||||
|
int sigarWrapper = 0; //holds the sigar_ptql_query_t *
|
||||||
|
long longSigarWrapper = 0; //same, but where sizeof(void*) > sizeof(int)
|
||||||
|
|
||||||
|
native void create(String ptql)
|
||||||
|
throws SigarException;
|
||||||
|
|
||||||
|
native void destroy();
|
||||||
|
|
||||||
|
protected void finalize() {
|
||||||
|
destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
private native boolean match(Sigar sigar, long pid)
|
||||||
|
throws SigarException;
|
||||||
|
|
||||||
|
public boolean match(SigarProxy sigar, long pid)
|
||||||
|
throws SigarException {
|
||||||
|
|
||||||
|
return match(SigarProxyCache.getSigar(sigar), pid);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue