add ptql support to proc methods
This commit is contained in:
parent
63141c38b9
commit
4bd7310f9a
|
@ -2350,7 +2350,7 @@ sub generate_class {
|
||||||
if ($func->{num_args} == 1) {
|
if ($func->{num_args} == 1) {
|
||||||
my $arg_type;
|
my $arg_type;
|
||||||
if ($func->{is_proc}) {
|
if ($func->{is_proc}) {
|
||||||
$arg_type = 'NUM2UINT';
|
$arg_type = 'OBJ2PID';
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$arg_type = 'StringValuePtr';
|
$arg_type = 'StringValuePtr';
|
||||||
|
|
|
@ -14,5 +14,5 @@ end
|
||||||
sigar = Sigar.new
|
sigar = Sigar.new
|
||||||
|
|
||||||
ARGV.each do |pid|
|
ARGV.each do |pid|
|
||||||
output(sigar, pid.to_i)
|
output(sigar, pid)
|
||||||
end
|
end
|
||||||
|
|
|
@ -10,5 +10,5 @@ end
|
||||||
sigar = Sigar.new
|
sigar = Sigar.new
|
||||||
|
|
||||||
ARGV.each do |pid|
|
ARGV.each do |pid|
|
||||||
output(sigar, pid.to_i)
|
output(sigar, pid)
|
||||||
end
|
end
|
||||||
|
|
|
@ -21,9 +21,11 @@
|
||||||
#include "sigar.h"
|
#include "sigar.h"
|
||||||
#include "sigar_fileinfo.h"
|
#include "sigar_fileinfo.h"
|
||||||
#include "sigar_format.h"
|
#include "sigar_format.h"
|
||||||
|
#include "sigar_ptql.h"
|
||||||
|
|
||||||
#define RB_SIGAR_CROAK rb_raise(rb_eArgError, "%s", sigar_strerror(sigar, status))
|
#define RB_SIGAR_RAISE(msg) rb_raise(rb_eArgError, "%s", msg)
|
||||||
#define NUM2PID NUM2UINT
|
#define RB_SIGAR_CROAK RB_SIGAR_RAISE(sigar_strerror(sigar, status))
|
||||||
|
#define OBJ2PID(pid) rb_sigar_pid_get(sigar, pid)
|
||||||
|
|
||||||
#ifndef RSTRING_PTR
|
#ifndef RSTRING_PTR
|
||||||
#define RSTRING_PTR(s) RSTRING(s)->ptr
|
#define RSTRING_PTR(s) RSTRING(s)->ptr
|
||||||
|
@ -40,6 +42,50 @@ static sigar_t *rb_sigar_get(VALUE obj)
|
||||||
return sigar;
|
return sigar;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define sigar_isdigit(c) \
|
||||||
|
(isdigit(((unsigned char)(c))))
|
||||||
|
|
||||||
|
static sigar_pid_t rb_sigar_pid_get(sigar_t *sigar, VALUE obj)
|
||||||
|
{
|
||||||
|
if (TYPE(obj) == T_STRING) {
|
||||||
|
char *pid = StringValuePtr(obj);
|
||||||
|
|
||||||
|
if (sigar_isdigit(*pid)) {
|
||||||
|
obj = rb_str2inum(obj, 10);
|
||||||
|
/* fallthru */
|
||||||
|
}
|
||||||
|
else if ((RSTRING_LEN(obj) == 2) &&
|
||||||
|
(*pid == '$') && (*(pid + 1) == '$'))
|
||||||
|
{
|
||||||
|
return sigar_pid_get(sigar);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
/* XXX cache queries */
|
||||||
|
sigar_ptql_query_t *query;
|
||||||
|
sigar_ptql_error_t error;
|
||||||
|
int status =
|
||||||
|
sigar_ptql_query_create(&query, (char *)pid, &error);
|
||||||
|
|
||||||
|
if (status == SIGAR_OK) {
|
||||||
|
sigar_pid_t qpid;
|
||||||
|
|
||||||
|
status = sigar_ptql_query_find_process(sigar, query, &qpid);
|
||||||
|
sigar_ptql_query_destroy(query);
|
||||||
|
if (status == SIGAR_OK) {
|
||||||
|
return qpid;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
RB_SIGAR_RAISE(sigar_strerror(sigar, status));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
RB_SIGAR_RAISE(error.message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return NUM2UINT(obj);
|
||||||
|
}
|
||||||
|
|
||||||
static void rb_sigar_free(void *obj)
|
static void rb_sigar_free(void *obj)
|
||||||
{
|
{
|
||||||
free(obj);
|
free(obj);
|
||||||
|
@ -359,7 +405,7 @@ static VALUE rb_sigar_proc_args(VALUE obj, VALUE pid)
|
||||||
sigar_proc_args_t args;
|
sigar_proc_args_t args;
|
||||||
VALUE RETVAL;
|
VALUE RETVAL;
|
||||||
|
|
||||||
status = sigar_proc_args_get(sigar, NUM2PID(pid), &args);
|
status = sigar_proc_args_get(sigar, OBJ2PID(pid), &args);
|
||||||
|
|
||||||
if (status != SIGAR_OK) {
|
if (status != SIGAR_OK) {
|
||||||
RB_SIGAR_CROAK;
|
RB_SIGAR_CROAK;
|
||||||
|
@ -393,7 +439,7 @@ static VALUE rb_sigar_proc_env(VALUE obj, VALUE pid)
|
||||||
procenv.env_getter = rb_sigar_env_getall;
|
procenv.env_getter = rb_sigar_env_getall;
|
||||||
procenv.data = &RETVAL;
|
procenv.data = &RETVAL;
|
||||||
|
|
||||||
status = sigar_proc_env_get(sigar, NUM2PID(pid), &procenv);
|
status = sigar_proc_env_get(sigar, OBJ2PID(pid), &procenv);
|
||||||
if (status != SIGAR_OK) {
|
if (status != SIGAR_OK) {
|
||||||
RB_SIGAR_CROAK;
|
RB_SIGAR_CROAK;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue