improve native ptql exception messages
This commit is contained in:
parent
aa4e73c437
commit
2bb854483f
|
@ -114,6 +114,13 @@ static void sigar_throw_notimpl(JNIEnv *env, char *msg)
|
||||||
JENV->ThrowNew(env, errorClass, msg);
|
JENV->ThrowNew(env, errorClass, msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void sigar_throw_ptql_malformed(JNIEnv *env, char *msg)
|
||||||
|
{
|
||||||
|
jclass errorClass = SIGAR_FIND_CLASS("ptql/MalformedQueryException");
|
||||||
|
|
||||||
|
JENV->ThrowNew(env, errorClass, msg);
|
||||||
|
}
|
||||||
|
|
||||||
static void sigar_throw_error(JNIEnv *env, jni_sigar_t *jsigar, int err)
|
static void sigar_throw_error(JNIEnv *env, jni_sigar_t *jsigar, int err)
|
||||||
{
|
{
|
||||||
jclass errorClass;
|
jclass errorClass;
|
||||||
|
@ -1199,7 +1206,15 @@ JNIEXPORT void SIGAR_JNI(ptql_SigarProcessQuery_create)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (status != SIGAR_OK) {
|
if (status != SIGAR_OK) {
|
||||||
sigar_throw_exception(env, "Malformed query"); /*XXX*/
|
char buf[1024], *msg=buf;
|
||||||
|
if (status == SIGAR_PTQL_MALFORMED_QUERY) {
|
||||||
|
msg = "Malformed query";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
sigar_strerror_get(status, buf, sizeof(buf));
|
||||||
|
}
|
||||||
|
|
||||||
|
sigar_throw_ptql_malformed(env, msg);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
sigar_set_pointer(env, obj, query);
|
sigar_set_pointer(env, obj, query);
|
||||||
|
|
|
@ -160,11 +160,7 @@ public class ProcessQueryFactory implements Comparator {
|
||||||
|
|
||||||
if (useNative) {
|
if (useNative) {
|
||||||
pQuery = new SigarProcessQuery();
|
pQuery = new SigarProcessQuery();
|
||||||
try {
|
|
||||||
((SigarProcessQuery)pQuery).create(query);
|
((SigarProcessQuery)pQuery).create(query);
|
||||||
} catch (SigarException e) {
|
|
||||||
throw new MalformedQueryException(e.getMessage());
|
|
||||||
}
|
|
||||||
cache.put(query, pQuery);
|
cache.put(query, pQuery);
|
||||||
return pQuery;
|
return pQuery;
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,7 +28,7 @@ public class SigarProcessQuery implements ProcessQuery {
|
||||||
long longSigarWrapper = 0; //same, but where sizeof(void*) > sizeof(int)
|
long longSigarWrapper = 0; //same, but where sizeof(void*) > sizeof(int)
|
||||||
|
|
||||||
native void create(String ptql)
|
native void create(String ptql)
|
||||||
throws SigarException;
|
throws MalformedQueryException;
|
||||||
|
|
||||||
native void destroy();
|
native void destroy();
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,8 @@
|
||||||
#ifndef SIGAR_PTQL_H
|
#ifndef SIGAR_PTQL_H
|
||||||
#define SIGAR_PTQL_H
|
#define SIGAR_PTQL_H
|
||||||
|
|
||||||
|
#define SIGAR_PTQL_MALFORMED_QUERY -1
|
||||||
|
|
||||||
typedef struct sigar_ptql_query_t sigar_ptql_query_t;
|
typedef struct sigar_ptql_query_t sigar_ptql_query_t;
|
||||||
|
|
||||||
typedef int (*sigar_ptql_re_impl_t)(void *, char *, char *);
|
typedef int (*sigar_ptql_re_impl_t)(void *, char *, char *);
|
||||||
|
|
|
@ -35,9 +35,6 @@
|
||||||
#define strtonum_failed(src, ptr) \
|
#define strtonum_failed(src, ptr) \
|
||||||
((src == ptr) || (errno == ERANGE) || (*ptr != '\0'))
|
((src == ptr) || (errno == ERANGE) || (*ptr != '\0'))
|
||||||
|
|
||||||
/* XXX need more specific errors */
|
|
||||||
#define SIGAR_PTQL_MALFORMED_QUERY 1
|
|
||||||
|
|
||||||
typedef struct ptql_parse_branch_t ptql_parse_branch_t;
|
typedef struct ptql_parse_branch_t ptql_parse_branch_t;
|
||||||
typedef struct ptql_branch_t ptql_branch_t;
|
typedef struct ptql_branch_t ptql_branch_t;
|
||||||
|
|
||||||
|
@ -631,7 +628,7 @@ static int ptql_branch_init_pid(ptql_parse_branch_t *parsed,
|
||||||
char *ptr;
|
char *ptr;
|
||||||
branch->data.pid = str2pid(parsed->value, ptr);
|
branch->data.pid = str2pid(parsed->value, ptr);
|
||||||
if (strtonum_failed(parsed->value, ptr)) {
|
if (strtonum_failed(parsed->value, ptr)) {
|
||||||
return SIGAR_PTQL_MALFORMED_QUERY;
|
return EINVAL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return SIGAR_OK;
|
return SIGAR_OK;
|
||||||
|
@ -652,7 +649,7 @@ static int ptql_branch_init_pid(ptql_parse_branch_t *parsed,
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return SIGAR_PTQL_MALFORMED_QUERY;
|
return EINVAL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -675,7 +672,7 @@ static int ptql_pid_match(sigar_t *sigar,
|
||||||
}
|
}
|
||||||
match_pid = strtoull(buffer, &ptr, 10);
|
match_pid = strtoull(buffer, &ptr, 10);
|
||||||
if (strtonum_failed(buffer, ptr)) {
|
if (strtonum_failed(buffer, ptr)) {
|
||||||
return SIGAR_PTQL_MALFORMED_QUERY;
|
return errno;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (branch->flags == PTQL_PID_SERVICE) {
|
else if (branch->flags == PTQL_PID_SERVICE) {
|
||||||
|
@ -711,7 +708,7 @@ static int ptql_args_branch_init(ptql_parse_branch_t *parsed,
|
||||||
|
|
||||||
if (strtonum_failed(parsed->attr, end)) {
|
if (strtonum_failed(parsed->attr, end)) {
|
||||||
/* conversion failed */
|
/* conversion failed */
|
||||||
return SIGAR_PTQL_MALFORMED_QUERY;
|
return errno;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return SIGAR_OK;
|
return SIGAR_OK;
|
||||||
|
@ -830,7 +827,7 @@ static int ptql_branch_init_port(ptql_parse_branch_t *parsed,
|
||||||
branch->flags = SIGAR_NETCONN_UDP;
|
branch->flags = SIGAR_NETCONN_UDP;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return SIGAR_PTQL_MALFORMED_QUERY;
|
return EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
branch->data.ui32 = atoi(parsed->value); /*XXX*/
|
branch->data.ui32 = atoi(parsed->value); /*XXX*/
|
||||||
|
@ -1005,7 +1002,7 @@ static int ptql_branch_parse(char *query, ptql_parse_branch_t *branch)
|
||||||
branch->op_flags |= PTQL_OP_FLAG_PARENT;
|
branch->op_flags |= PTQL_OP_FLAG_PARENT;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return SIGAR_PTQL_MALFORMED_QUERY;
|
return EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
++query;
|
++query;
|
||||||
|
@ -1142,7 +1139,7 @@ static int ptql_branch_add(ptql_parse_branch_t *parsed,
|
||||||
if (!is_set) {
|
if (!is_set) {
|
||||||
branch->value.ui64 = strtoull(parsed->value, &ptr, 10);
|
branch->value.ui64 = strtoull(parsed->value, &ptr, 10);
|
||||||
if (strtonum_failed(parsed->value, ptr)) {
|
if (strtonum_failed(parsed->value, ptr)) {
|
||||||
return SIGAR_PTQL_MALFORMED_QUERY;
|
return errno;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1151,7 +1148,7 @@ static int ptql_branch_add(ptql_parse_branch_t *parsed,
|
||||||
if (!is_set) {
|
if (!is_set) {
|
||||||
branch->value.ui32 = strtoul(parsed->value, &ptr, 10);
|
branch->value.ui32 = strtoul(parsed->value, &ptr, 10);
|
||||||
if (strtonum_failed(parsed->value, ptr)) {
|
if (strtonum_failed(parsed->value, ptr)) {
|
||||||
return SIGAR_PTQL_MALFORMED_QUERY;
|
return errno;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1160,7 +1157,7 @@ static int ptql_branch_add(ptql_parse_branch_t *parsed,
|
||||||
if (!is_set) {
|
if (!is_set) {
|
||||||
branch->value.dbl = strtod(parsed->value, &ptr);
|
branch->value.dbl = strtod(parsed->value, &ptr);
|
||||||
if (strtonum_failed(parsed->value, ptr)) {
|
if (strtonum_failed(parsed->value, ptr)) {
|
||||||
return SIGAR_PTQL_MALFORMED_QUERY;
|
return errno;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue