added lua bindings
added lua bindings for the majority of sigar functions look at sigar-test.lua on how to use it
This commit is contained in:
parent
b3bfe99aea
commit
5d222575ef
|
@ -0,0 +1 @@
|
||||||
|
SUBDIRS=lua
|
|
@ -0,0 +1,31 @@
|
||||||
|
INCLUDES=@INCLUDES@
|
||||||
|
|
||||||
|
lib_LTLIBRARIES = sigar.la
|
||||||
|
|
||||||
|
sigar_la_SOURCES =\
|
||||||
|
sigar.c \
|
||||||
|
sigar-cpu.c \
|
||||||
|
sigar-disk.c \
|
||||||
|
sigar-fs.c \
|
||||||
|
sigar-mem.c \
|
||||||
|
sigar-netif.c \
|
||||||
|
sigar-proc.c \
|
||||||
|
sigar-swap.c \
|
||||||
|
sigar-sysinfo.c \
|
||||||
|
sigar-version.c \
|
||||||
|
sigar-who.c
|
||||||
|
|
||||||
|
sigar_la_CPPFLAGS = ${LUA_CFLAGS}
|
||||||
|
sigar_la_LDFLAGS = $(AM_LDFLAGS) -module -avoid-version
|
||||||
|
sigar_la_LIBADD = $(top_builddir)/src/libsigar.la
|
||||||
|
|
||||||
|
noinst_HEADERS = lua-sigar.h
|
||||||
|
|
||||||
|
TESTS_ENVIRONMENT = \
|
||||||
|
LUA_PATH="${srcdir}/?.lua" \
|
||||||
|
LUA_CPATH="${builddir}/.libs/?.so" \
|
||||||
|
DYLD_LIBRARY_PATH="${top_builddir}/src/.libs/" \
|
||||||
|
lua
|
||||||
|
|
||||||
|
TESTS = \
|
||||||
|
sigar-test.lua
|
|
@ -0,0 +1,70 @@
|
||||||
|
/**
|
||||||
|
* Copyright (c) 2009, Sun Microsystems Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
* are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
* - Neither the name of Sun Microsystems Inc. nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||||
|
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||||
|
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||||
|
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
#ifndef __LUA_SIGAR_H__
|
||||||
|
#define __LUA_SIGAR_H__
|
||||||
|
|
||||||
|
#include "sigar.h"
|
||||||
|
|
||||||
|
#define LUA_EXPORT_INT(x, y) \
|
||||||
|
if (x->y == SIGAR_FIELD_NOTIMPL) { \
|
||||||
|
lua_pushnil(L); \
|
||||||
|
} else { \
|
||||||
|
lua_pushnumber(L, x->y); \
|
||||||
|
} \
|
||||||
|
lua_setfield(L, -2, #y);
|
||||||
|
|
||||||
|
#define LUA_EXPORT_DOUBLE(x, y) \
|
||||||
|
lua_pushnumber(L, x->y); \
|
||||||
|
lua_setfield(L, -2, #y);
|
||||||
|
|
||||||
|
#define LUA_EXPORT_STR(x, y) \
|
||||||
|
lua_pushstring(L, x->y); \
|
||||||
|
lua_setfield(L, -2, #y);
|
||||||
|
|
||||||
|
#define LUA_EXPORT_ADDRESS(x, y) \
|
||||||
|
lua_sigar_push_address(L, &(x->y)); \
|
||||||
|
lua_setfield(L, -2, #y);
|
||||||
|
|
||||||
|
int lua_sigar_cpus_get(lua_State *L);
|
||||||
|
int lua_sigar_mem_get(lua_State *L);
|
||||||
|
int lua_sigar_swap_get(lua_State *L);
|
||||||
|
int lua_sigar_procs_get(lua_State *L);
|
||||||
|
int lua_sigar_proc_get(lua_State *L);
|
||||||
|
int lua_sigar_pid_get(lua_State *L);
|
||||||
|
int lua_sigar_fses_get(lua_State *L);
|
||||||
|
int lua_sigar_disk_get(lua_State *L);
|
||||||
|
int lua_sigar_disks_get(lua_State *L);
|
||||||
|
int lua_sigar_netifs_get(lua_State *L);
|
||||||
|
int lua_sigar_who_get(lua_State *L);
|
||||||
|
int lua_sigar_version_get(lua_State *L);
|
||||||
|
int lua_sigar_sysinfo_get(lua_State *L);
|
||||||
|
|
||||||
|
int lua_sigar_push_address(lua_State *L, sigar_net_address_t *addr);
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,183 @@
|
||||||
|
/**
|
||||||
|
* Copyright (c) 2009, Sun Microsystems Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
* are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
* - Neither the name of Sun Microsystems Inc. nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||||
|
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||||
|
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||||
|
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
#include <lua.h>
|
||||||
|
#include <lauxlib.h>
|
||||||
|
#include <lualib.h>
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "sigar.h"
|
||||||
|
#include "lua-sigar.h"
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
sigar_cpu_list_t data;
|
||||||
|
sigar_cpu_info_list_t info;
|
||||||
|
|
||||||
|
int ref_count;
|
||||||
|
|
||||||
|
sigar_t *sigar;
|
||||||
|
} lua_sigar_cpus_t;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
lua_sigar_cpus_t *cpus;
|
||||||
|
|
||||||
|
int ndx;
|
||||||
|
} lua_sigar_cpu_t;
|
||||||
|
|
||||||
|
static int lua_sigar_cpus_free(lua_State *L, lua_sigar_cpus_t *cpus);
|
||||||
|
|
||||||
|
static int lua_sigar_cpu_gc(lua_State *L) {
|
||||||
|
lua_sigar_cpu_t *cpu = (lua_sigar_cpu_t *)luaL_checkudata(L, 1, "sigar_cpu");
|
||||||
|
|
||||||
|
lua_sigar_cpus_free(L, cpu->cpus);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int lua_sigar_cpu_get_data(lua_State *L) {
|
||||||
|
lua_sigar_cpu_t *cpu = (lua_sigar_cpu_t *)luaL_checkudata(L, 1, "sigar_cpu");
|
||||||
|
|
||||||
|
lua_newtable(L);
|
||||||
|
#define DATA \
|
||||||
|
(&(cpu->cpus->data.data[cpu->ndx]))
|
||||||
|
|
||||||
|
LUA_EXPORT_INT(DATA, user);
|
||||||
|
LUA_EXPORT_INT(DATA, sys);
|
||||||
|
LUA_EXPORT_INT(DATA, idle);
|
||||||
|
LUA_EXPORT_INT(DATA, nice);
|
||||||
|
LUA_EXPORT_INT(DATA, wait);
|
||||||
|
LUA_EXPORT_INT(DATA, irq);
|
||||||
|
LUA_EXPORT_INT(DATA, soft_irq);
|
||||||
|
LUA_EXPORT_INT(DATA, stolen);
|
||||||
|
LUA_EXPORT_INT(DATA, total);
|
||||||
|
|
||||||
|
#undef DATA
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int lua_sigar_cpu_get_info(lua_State *L) {
|
||||||
|
lua_sigar_cpu_t *cpu = (lua_sigar_cpu_t *)luaL_checkudata(L, 1, "sigar_cpu");
|
||||||
|
|
||||||
|
lua_newtable(L);
|
||||||
|
#define DATA \
|
||||||
|
(&(cpu->cpus->info.data[cpu->ndx]))
|
||||||
|
|
||||||
|
LUA_EXPORT_STR(DATA, vendor);
|
||||||
|
LUA_EXPORT_STR(DATA, model);
|
||||||
|
LUA_EXPORT_INT(DATA, mhz);
|
||||||
|
LUA_EXPORT_INT(DATA, total_sockets);
|
||||||
|
LUA_EXPORT_INT(DATA, total_cores);
|
||||||
|
LUA_EXPORT_INT(DATA, cores_per_socket);
|
||||||
|
LUA_EXPORT_INT(DATA, cache_size);
|
||||||
|
|
||||||
|
#undef DATA
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int lua_sigar_cpus_get_cpu(lua_State *L) {
|
||||||
|
lua_sigar_cpus_t *cpus = (lua_sigar_cpus_t *)luaL_checkudata(L, 1, "sigar_cpus");
|
||||||
|
lua_sigar_cpu_t *cpu;
|
||||||
|
int ndx = luaL_checkint(L, 2);
|
||||||
|
|
||||||
|
if (ndx - 1 < 0 ||
|
||||||
|
ndx - 1 >= cpus->data.number) {
|
||||||
|
luaL_error(L, ".cpu[%d] out of range: 1..%d", ndx, cpus->data.number);
|
||||||
|
}
|
||||||
|
|
||||||
|
cpu = lua_newuserdata(L, sizeof(lua_sigar_cpu_t));
|
||||||
|
cpu->cpus = cpus;
|
||||||
|
cpu->ndx = ndx - 1;
|
||||||
|
cpus->ref_count++;
|
||||||
|
|
||||||
|
if (0 != luaL_newmetatable(L, "sigar_cpu")) {
|
||||||
|
lua_newtable(L);
|
||||||
|
lua_pushcfunction(L, lua_sigar_cpu_get_data);
|
||||||
|
lua_setfield(L, -2, "data");
|
||||||
|
lua_pushcfunction(L, lua_sigar_cpu_get_info);
|
||||||
|
lua_setfield(L, -2, "info");
|
||||||
|
lua_setfield(L, -2, "__index");
|
||||||
|
lua_pushcfunction(L, lua_sigar_cpu_gc);
|
||||||
|
lua_setfield(L, -2, "__gc");
|
||||||
|
}
|
||||||
|
lua_setmetatable(L, -2);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int lua_sigar_cpus_free(lua_State *L, lua_sigar_cpus_t *cpus) {
|
||||||
|
if (--cpus->ref_count == 0) {
|
||||||
|
sigar_cpu_list_destroy(cpus->sigar, &(cpus->data));
|
||||||
|
sigar_cpu_info_list_destroy(cpus->sigar, &(cpus->info));
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int lua_sigar_cpus_gc(lua_State *L) {
|
||||||
|
lua_sigar_cpus_t *cpus = (lua_sigar_cpus_t *)luaL_checkudata(L, 1, "sigar_cpus");
|
||||||
|
|
||||||
|
lua_sigar_cpus_free(L, cpus);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int lua_sigar_cpus_len(lua_State *L) {
|
||||||
|
lua_sigar_cpus_t *cpus = (lua_sigar_cpus_t *)luaL_checkudata(L, 1, "sigar_cpus");
|
||||||
|
|
||||||
|
lua_pushinteger(L, cpus->data.number);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int lua_sigar_cpus_get(lua_State *L) {
|
||||||
|
sigar_t *s = *(sigar_t **)luaL_checkudata(L, 1, "sigar");
|
||||||
|
lua_sigar_cpus_t *cpus;
|
||||||
|
|
||||||
|
cpus = lua_newuserdata(L, sizeof(lua_sigar_cpus_t));
|
||||||
|
cpus->sigar = s;
|
||||||
|
sigar_cpu_list_get(s, &(cpus->data));
|
||||||
|
sigar_cpu_info_list_get(s, &(cpus->info));
|
||||||
|
cpus->ref_count = 1;
|
||||||
|
if (0 != luaL_newmetatable(L, "sigar_cpus")) {
|
||||||
|
lua_pushcfunction(L, lua_sigar_cpus_len);
|
||||||
|
lua_setfield(L, -2, "__len");
|
||||||
|
lua_pushcfunction(L, lua_sigar_cpus_get_cpu);
|
||||||
|
lua_setfield(L, -2, "__index");
|
||||||
|
lua_pushcfunction(L, lua_sigar_cpus_gc);
|
||||||
|
lua_setfield(L, -2, "__gc");
|
||||||
|
}
|
||||||
|
lua_setmetatable(L, -2);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,192 @@
|
||||||
|
/**
|
||||||
|
* Copyright (c) 2009, Sun Microsystems Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
* are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
* - Neither the name of Sun Microsystems Inc. nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||||
|
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||||
|
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||||
|
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
#include <lua.h>
|
||||||
|
#include <lauxlib.h>
|
||||||
|
#include <lualib.h>
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "sigar.h"
|
||||||
|
#include "lua-sigar.h"
|
||||||
|
|
||||||
|
/* disks */
|
||||||
|
typedef struct {
|
||||||
|
sigar_file_system_list_t disks;
|
||||||
|
|
||||||
|
sigar_t *sigar;
|
||||||
|
|
||||||
|
int ref_count;
|
||||||
|
} lua_sigar_disks_t;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
char *dev_name;
|
||||||
|
sigar_t *sigar;
|
||||||
|
} lua_sigar_disk_t;
|
||||||
|
|
||||||
|
static int lua_sigar_disks_free(lua_State *L, lua_sigar_disks_t *disks) {
|
||||||
|
if (--disks->ref_count == 0) {
|
||||||
|
sigar_file_system_list_destroy(disks->sigar, &(disks->disks));
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int lua_sigar_disks_gc(lua_State *L) {
|
||||||
|
lua_sigar_disks_t *disks = (lua_sigar_disks_t *)luaL_checkudata(L, 1, "sigar_disks");
|
||||||
|
|
||||||
|
lua_sigar_disks_free(L, disks);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int lua_sigar_disks_len(lua_State *L) {
|
||||||
|
lua_sigar_disks_t *disks = (lua_sigar_disks_t *)luaL_checkudata(L, 1, "sigar_disks");
|
||||||
|
|
||||||
|
lua_pushinteger(L, disks->disks.number);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int lua_sigar_disk_gc(lua_State *L) {
|
||||||
|
lua_sigar_disk_t *disk = (lua_sigar_disk_t *)luaL_checkudata(L, 1, "sigar_disk");
|
||||||
|
|
||||||
|
free(disk->dev_name);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int lua_sigar_disk_get_name(lua_State *L) {
|
||||||
|
lua_sigar_disk_t *disk = (lua_sigar_disk_t *)luaL_checkudata(L, 1, "sigar_disk");
|
||||||
|
|
||||||
|
lua_pushstring(L, disk->dev_name);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int lua_sigar_disk_get_usage(lua_State *L) {
|
||||||
|
lua_sigar_disk_t *disk = (lua_sigar_disk_t *)luaL_checkudata(L, 1, "sigar_disk");
|
||||||
|
sigar_disk_usage_t usage;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
if (SIGAR_OK != (err = sigar_disk_usage_get(disk->sigar, disk->dev_name, &usage))) {
|
||||||
|
lua_pushnil(L);
|
||||||
|
lua_pushstring(L, strerror(err));
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
lua_newtable(L);
|
||||||
|
#define DATA \
|
||||||
|
(&(usage))
|
||||||
|
|
||||||
|
LUA_EXPORT_INT(DATA, reads);
|
||||||
|
LUA_EXPORT_INT(DATA, writes);
|
||||||
|
LUA_EXPORT_INT(DATA, read_bytes);
|
||||||
|
LUA_EXPORT_INT(DATA, write_bytes);
|
||||||
|
LUA_EXPORT_INT(DATA, rtime);
|
||||||
|
LUA_EXPORT_INT(DATA, wtime);
|
||||||
|
LUA_EXPORT_INT(DATA, qtime);
|
||||||
|
LUA_EXPORT_INT(DATA, time);
|
||||||
|
LUA_EXPORT_INT(DATA, snaptime);
|
||||||
|
LUA_EXPORT_DOUBLE(DATA, service_time);
|
||||||
|
LUA_EXPORT_DOUBLE(DATA, queue);
|
||||||
|
#undef DATA
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int lua_sigar_disk_set_metatable(lua_State *L, int ndx) {
|
||||||
|
if (0 != luaL_newmetatable(L, "sigar_disk")) {
|
||||||
|
lua_newtable(L);
|
||||||
|
lua_pushcfunction(L, lua_sigar_disk_get_name);
|
||||||
|
lua_setfield(L, -2, "name");
|
||||||
|
lua_pushcfunction(L, lua_sigar_disk_get_usage);
|
||||||
|
lua_setfield(L, -2, "usage");
|
||||||
|
lua_setfield(L, -2, "__index");
|
||||||
|
lua_pushcfunction(L, lua_sigar_disk_gc);
|
||||||
|
lua_setfield(L, -2, "__gc");
|
||||||
|
}
|
||||||
|
lua_setmetatable(L, ndx - 1);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int lua_sigar_disks_get_disk(lua_State *L) {
|
||||||
|
lua_sigar_disks_t *disks = (lua_sigar_disks_t *)luaL_checkudata(L, 1, "sigar_disks");
|
||||||
|
lua_sigar_disk_t *disk;
|
||||||
|
int ndx = luaL_checkint(L, 2);
|
||||||
|
|
||||||
|
if (ndx - 1 < 0 ||
|
||||||
|
ndx - 1 >= disks->disks.number) {
|
||||||
|
luaL_error(L, ".disks[%d] out of range: 1..%d", ndx, disks->disks.number);
|
||||||
|
}
|
||||||
|
|
||||||
|
disk = lua_newuserdata(L, sizeof(*disk));
|
||||||
|
disk->dev_name = strdup(disks->disks.data[ndx - 1].dir_name);
|
||||||
|
disk->sigar = disks->sigar;
|
||||||
|
lua_sigar_disk_set_metatable(L, -1);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int lua_sigar_disk_get(lua_State *L) {
|
||||||
|
sigar_t *s = *(sigar_t **)luaL_checkudata(L, 1, "sigar");
|
||||||
|
lua_sigar_disk_t *disk;
|
||||||
|
const char *key = luaL_checkstring(L, 2);
|
||||||
|
|
||||||
|
disk = lua_newuserdata(L, sizeof(*disk));
|
||||||
|
disk->dev_name = strdup(key);
|
||||||
|
disk->sigar = s;
|
||||||
|
lua_sigar_disk_set_metatable(L, -1);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int lua_sigar_disks_get(lua_State *L) {
|
||||||
|
sigar_t *s = *(sigar_t **)luaL_checkudata(L, 1, "sigar");
|
||||||
|
lua_sigar_disks_t *disks;
|
||||||
|
|
||||||
|
disks = lua_newuserdata(L, sizeof(lua_sigar_disks_t));
|
||||||
|
disks->sigar = s;
|
||||||
|
sigar_file_system_list_get(s, &(disks->disks));
|
||||||
|
disks->ref_count = 1;
|
||||||
|
if (0 != luaL_newmetatable(L, "sigar_disks")) {
|
||||||
|
lua_pushcfunction(L, lua_sigar_disks_len);
|
||||||
|
lua_setfield(L, -2, "__len");
|
||||||
|
lua_pushcfunction(L, lua_sigar_disks_get_disk);
|
||||||
|
lua_setfield(L, -2, "__index");
|
||||||
|
lua_pushcfunction(L, lua_sigar_disks_gc);
|
||||||
|
lua_setfield(L, -2, "__gc");
|
||||||
|
}
|
||||||
|
lua_setmetatable(L, -2);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,186 @@
|
||||||
|
/**
|
||||||
|
* Copyright (c) 2009, Sun Microsystems Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
* are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
* - Neither the name of Sun Microsystems Inc. nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||||
|
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||||
|
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||||
|
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
#include <lua.h>
|
||||||
|
#include <lauxlib.h>
|
||||||
|
#include <lualib.h>
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "sigar.h"
|
||||||
|
#include "lua-sigar.h"
|
||||||
|
|
||||||
|
/* file-systems */
|
||||||
|
typedef struct {
|
||||||
|
sigar_file_system_list_t fses;
|
||||||
|
|
||||||
|
sigar_t *sigar;
|
||||||
|
|
||||||
|
int ref_count;
|
||||||
|
} lua_sigar_fses_t;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
lua_sigar_fses_t *fses;
|
||||||
|
|
||||||
|
int ndx;
|
||||||
|
} lua_sigar_fs_t;
|
||||||
|
|
||||||
|
static int lua_sigar_fses_free(lua_State *L, lua_sigar_fses_t *fses) {
|
||||||
|
if (--fses->ref_count == 0) {
|
||||||
|
sigar_file_system_list_destroy(fses->sigar, &(fses->fses));
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int lua_sigar_fses_gc(lua_State *L) {
|
||||||
|
lua_sigar_fses_t *fses = (lua_sigar_fses_t *)luaL_checkudata(L, 1, "sigar_fses");
|
||||||
|
|
||||||
|
lua_sigar_fses_free(L, fses);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int lua_sigar_fses_len(lua_State *L) {
|
||||||
|
lua_sigar_fses_t *fses = (lua_sigar_fses_t *)luaL_checkudata(L, 1, "sigar_fses");
|
||||||
|
|
||||||
|
lua_pushinteger(L, fses->fses.number);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int lua_sigar_fs_gc(lua_State *L) {
|
||||||
|
lua_sigar_fs_t *fs = (lua_sigar_fs_t *)luaL_checkudata(L, 1, "sigar_fs");
|
||||||
|
|
||||||
|
lua_sigar_fses_free(L, fs->fses);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int lua_sigar_fs_get_info(lua_State *L) {
|
||||||
|
lua_sigar_fs_t *fs = (lua_sigar_fs_t *)luaL_checkudata(L, 1, "sigar_fs");
|
||||||
|
|
||||||
|
lua_newtable(L);
|
||||||
|
#define DATA \
|
||||||
|
(&(fs->fses->fses.data[fs->ndx]))
|
||||||
|
|
||||||
|
LUA_EXPORT_STR(DATA, dir_name);
|
||||||
|
LUA_EXPORT_STR(DATA, dev_name);
|
||||||
|
LUA_EXPORT_STR(DATA, type_name);
|
||||||
|
LUA_EXPORT_STR(DATA, sys_type_name);
|
||||||
|
LUA_EXPORT_STR(DATA, options);
|
||||||
|
#if 0
|
||||||
|
/* valgrind says: Conditional jump or move depends on uninitialised value
|
||||||
|
* looks like sigar isn't initializing it */
|
||||||
|
LUA_EXPORT_INT(DATA, flags);
|
||||||
|
#endif
|
||||||
|
#undef DATA
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int lua_sigar_fs_get_usage(lua_State *L) {
|
||||||
|
lua_sigar_fs_t *fs = (lua_sigar_fs_t *)luaL_checkudata(L, 1, "sigar_fs");
|
||||||
|
const char *dir_name = fs->fses->fses.data[fs->ndx].dir_name;
|
||||||
|
sigar_file_system_usage_t usage;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
if (SIGAR_OK != (err = sigar_file_system_usage_get(fs->fses->sigar, dir_name, &usage))) {
|
||||||
|
lua_pushnil(L);
|
||||||
|
lua_pushstring(L, strerror(err));
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
lua_newtable(L);
|
||||||
|
#define DATA \
|
||||||
|
(&(usage))
|
||||||
|
|
||||||
|
LUA_EXPORT_INT(DATA, total);
|
||||||
|
LUA_EXPORT_INT(DATA, free);
|
||||||
|
LUA_EXPORT_INT(DATA, used);
|
||||||
|
LUA_EXPORT_INT(DATA, avail);
|
||||||
|
LUA_EXPORT_INT(DATA, files);
|
||||||
|
LUA_EXPORT_INT(DATA, free_files);
|
||||||
|
#undef DATA
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int lua_sigar_fses_get_fs(lua_State *L) {
|
||||||
|
lua_sigar_fses_t *fses = (lua_sigar_fses_t *)luaL_checkudata(L, 1, "sigar_fses");
|
||||||
|
lua_sigar_fs_t *fs;
|
||||||
|
int ndx = luaL_checkint(L, 2);
|
||||||
|
|
||||||
|
if (ndx - 1 < 0 ||
|
||||||
|
ndx - 1 >= fses->fses.number) {
|
||||||
|
luaL_error(L, ".fses[%d] out of range: 1..%d", ndx, fses->fses.number);
|
||||||
|
}
|
||||||
|
|
||||||
|
fs = lua_newuserdata(L, sizeof(*fs));
|
||||||
|
fs->ndx = ndx - 1;
|
||||||
|
fs->fses = fses;
|
||||||
|
fses->ref_count++;
|
||||||
|
if (0 != luaL_newmetatable(L, "sigar_fs")) {
|
||||||
|
lua_newtable(L);
|
||||||
|
lua_pushcfunction(L, lua_sigar_fs_get_info);
|
||||||
|
lua_setfield(L, -2, "info");
|
||||||
|
lua_pushcfunction(L, lua_sigar_fs_get_usage);
|
||||||
|
lua_setfield(L, -2, "usage");
|
||||||
|
lua_setfield(L, -2, "__index");
|
||||||
|
lua_pushcfunction(L, lua_sigar_fs_gc);
|
||||||
|
lua_setfield(L, -2, "__gc");
|
||||||
|
}
|
||||||
|
lua_setmetatable(L, -2);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int lua_sigar_fses_get(lua_State *L) {
|
||||||
|
sigar_t *s = *(sigar_t **)luaL_checkudata(L, 1, "sigar");
|
||||||
|
lua_sigar_fses_t *fses;
|
||||||
|
|
||||||
|
fses = lua_newuserdata(L, sizeof(lua_sigar_fses_t));
|
||||||
|
fses->sigar = s;
|
||||||
|
sigar_file_system_list_get(s, &(fses->fses));
|
||||||
|
fses->ref_count = 1;
|
||||||
|
if (0 != luaL_newmetatable(L, "sigar_fses")) {
|
||||||
|
lua_pushcfunction(L, lua_sigar_fses_len);
|
||||||
|
lua_setfield(L, -2, "__len");
|
||||||
|
lua_pushcfunction(L, lua_sigar_fses_get_fs);
|
||||||
|
lua_setfield(L, -2, "__index");
|
||||||
|
lua_pushcfunction(L, lua_sigar_fses_gc);
|
||||||
|
lua_setfield(L, -2, "__gc");
|
||||||
|
}
|
||||||
|
lua_setmetatable(L, -2);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,62 @@
|
||||||
|
/**
|
||||||
|
* Copyright (c) 2009, Sun Microsystems Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
* are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
* - Neither the name of Sun Microsystems Inc. nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||||
|
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||||
|
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||||
|
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
#include <lua.h>
|
||||||
|
#include <lauxlib.h>
|
||||||
|
#include <lualib.h>
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "sigar.h"
|
||||||
|
#include "lua-sigar.h"
|
||||||
|
|
||||||
|
int lua_sigar_mem_get(lua_State *L) {
|
||||||
|
sigar_t *s = *(sigar_t **)luaL_checkudata(L, 1, "sigar");
|
||||||
|
sigar_mem_t mem;
|
||||||
|
|
||||||
|
sigar_mem_get(s, &mem);
|
||||||
|
|
||||||
|
lua_newtable(L);
|
||||||
|
#define DATA \
|
||||||
|
(&(mem))
|
||||||
|
|
||||||
|
LUA_EXPORT_INT(DATA, ram);
|
||||||
|
LUA_EXPORT_INT(DATA, total);
|
||||||
|
LUA_EXPORT_INT(DATA, used);
|
||||||
|
LUA_EXPORT_INT(DATA, free);
|
||||||
|
LUA_EXPORT_INT(DATA, actual_used);
|
||||||
|
LUA_EXPORT_INT(DATA, actual_free);
|
||||||
|
LUA_EXPORT_DOUBLE(DATA, used_percent);
|
||||||
|
LUA_EXPORT_DOUBLE(DATA, free_percent);
|
||||||
|
|
||||||
|
#undef DATA
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,206 @@
|
||||||
|
/**
|
||||||
|
* Copyright (c) 2009, Sun Microsystems Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
* are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
* - Neither the name of Sun Microsystems Inc. nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||||
|
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||||
|
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||||
|
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
#include <lua.h>
|
||||||
|
#include <lauxlib.h>
|
||||||
|
#include <lualib.h>
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "sigar.h"
|
||||||
|
#include "lua-sigar.h"
|
||||||
|
|
||||||
|
/* network interfaces */
|
||||||
|
typedef struct {
|
||||||
|
sigar_net_interface_list_t netifs;
|
||||||
|
|
||||||
|
sigar_t *sigar;
|
||||||
|
|
||||||
|
int ref_count;
|
||||||
|
} lua_sigar_netifs_t;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
lua_sigar_netifs_t *netifs;
|
||||||
|
|
||||||
|
int ndx;
|
||||||
|
} lua_sigar_netif_t;
|
||||||
|
|
||||||
|
static int lua_sigar_netifs_free(lua_State *L, lua_sigar_netifs_t *netifs) {
|
||||||
|
if (--netifs->ref_count == 0) {
|
||||||
|
sigar_net_interface_list_destroy(netifs->sigar, &(netifs->netifs));
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int lua_sigar_netifs_gc(lua_State *L) {
|
||||||
|
lua_sigar_netifs_t *netifs = (lua_sigar_netifs_t *)luaL_checkudata(L, 1, "sigar_netifs");
|
||||||
|
|
||||||
|
lua_sigar_netifs_free(L, netifs);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int lua_sigar_netifs_len(lua_State *L) {
|
||||||
|
lua_sigar_netifs_t *netifs = (lua_sigar_netifs_t *)luaL_checkudata(L, 1, "sigar_netifs");
|
||||||
|
|
||||||
|
lua_pushinteger(L, netifs->netifs.number);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int lua_sigar_netif_gc(lua_State *L) {
|
||||||
|
lua_sigar_netif_t *netif = (lua_sigar_netif_t *)luaL_checkudata(L, 1, "sigar_netif");
|
||||||
|
|
||||||
|
lua_sigar_netifs_free(L, netif->netifs);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int lua_sigar_netif_get_info(lua_State *L) {
|
||||||
|
lua_sigar_netif_t *netif = (lua_sigar_netif_t *)luaL_checkudata(L, 1, "sigar_netif");
|
||||||
|
int err;
|
||||||
|
const char *if_name = netif->netifs->netifs.data[netif->ndx];
|
||||||
|
sigar_net_interface_config_t usage;
|
||||||
|
|
||||||
|
if (SIGAR_OK != (err = sigar_net_interface_config_get(netif->netifs->sigar, if_name, &usage))) {
|
||||||
|
lua_pushnil(L);
|
||||||
|
lua_pushstring(L, strerror(err));
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
lua_newtable(L);
|
||||||
|
#define DATA \
|
||||||
|
(&(usage))
|
||||||
|
|
||||||
|
LUA_EXPORT_STR(DATA, name);
|
||||||
|
LUA_EXPORT_STR(DATA, type);
|
||||||
|
LUA_EXPORT_ADDRESS(DATA, hwaddr);
|
||||||
|
LUA_EXPORT_ADDRESS(DATA, address);
|
||||||
|
LUA_EXPORT_ADDRESS(DATA, destination);
|
||||||
|
LUA_EXPORT_ADDRESS(DATA, broadcast);
|
||||||
|
LUA_EXPORT_ADDRESS(DATA, netmask);
|
||||||
|
LUA_EXPORT_INT(DATA, flags);
|
||||||
|
LUA_EXPORT_INT(DATA, mtu);
|
||||||
|
LUA_EXPORT_INT(DATA, metric);
|
||||||
|
#undef DATA
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static int lua_sigar_netif_get_usage(lua_State *L) {
|
||||||
|
lua_sigar_netif_t *netif = (lua_sigar_netif_t *)luaL_checkudata(L, 1, "sigar_netif");
|
||||||
|
int err;
|
||||||
|
const char *if_name = netif->netifs->netifs.data[netif->ndx];
|
||||||
|
sigar_net_interface_stat_t usage;
|
||||||
|
|
||||||
|
if (SIGAR_OK != (err = sigar_net_interface_stat_get(netif->netifs->sigar, if_name, &usage))) {
|
||||||
|
lua_pushnil(L);
|
||||||
|
lua_pushstring(L, strerror(err));
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
lua_newtable(L);
|
||||||
|
#define DATA \
|
||||||
|
(&(usage))
|
||||||
|
|
||||||
|
LUA_EXPORT_INT(DATA, rx_packets);
|
||||||
|
LUA_EXPORT_INT(DATA, rx_bytes);
|
||||||
|
LUA_EXPORT_INT(DATA, rx_errors);
|
||||||
|
LUA_EXPORT_INT(DATA, rx_overruns);
|
||||||
|
LUA_EXPORT_INT(DATA, rx_dropped);
|
||||||
|
LUA_EXPORT_INT(DATA, rx_frame);
|
||||||
|
|
||||||
|
LUA_EXPORT_INT(DATA, tx_packets);
|
||||||
|
LUA_EXPORT_INT(DATA, tx_bytes);
|
||||||
|
LUA_EXPORT_INT(DATA, tx_errors);
|
||||||
|
LUA_EXPORT_INT(DATA, tx_overruns);
|
||||||
|
LUA_EXPORT_INT(DATA, tx_dropped);
|
||||||
|
LUA_EXPORT_INT(DATA, tx_collisions);
|
||||||
|
LUA_EXPORT_INT(DATA, tx_carrier);
|
||||||
|
LUA_EXPORT_INT(DATA, speed);
|
||||||
|
#undef DATA
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int lua_sigar_netifs_get_netif(lua_State *L) {
|
||||||
|
lua_sigar_netifs_t *netifs = (lua_sigar_netifs_t *)luaL_checkudata(L, 1, "sigar_netifs");
|
||||||
|
lua_sigar_netif_t *netif;
|
||||||
|
int ndx = luaL_checkint(L, 2);
|
||||||
|
|
||||||
|
if (ndx - 1 < 0 ||
|
||||||
|
ndx - 1 >= netifs->netifs.number) {
|
||||||
|
luaL_error(L, ".netifs[%d] out of range: 1..%d", ndx, netifs->netifs.number);
|
||||||
|
}
|
||||||
|
|
||||||
|
netif = lua_newuserdata(L, sizeof(*netif));
|
||||||
|
netif->ndx = ndx - 1;
|
||||||
|
netif->netifs = netifs;
|
||||||
|
netifs->ref_count++;
|
||||||
|
if (0 != luaL_newmetatable(L, "sigar_netif")) {
|
||||||
|
lua_newtable(L);
|
||||||
|
lua_pushcfunction(L, lua_sigar_netif_get_info);
|
||||||
|
lua_setfield(L, -2, "info");
|
||||||
|
lua_pushcfunction(L, lua_sigar_netif_get_usage);
|
||||||
|
lua_setfield(L, -2, "usage");
|
||||||
|
lua_setfield(L, -2, "__index");
|
||||||
|
lua_pushcfunction(L, lua_sigar_netif_gc);
|
||||||
|
lua_setfield(L, -2, "__gc");
|
||||||
|
}
|
||||||
|
lua_setmetatable(L, -2);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int lua_sigar_netifs_get(lua_State *L) {
|
||||||
|
sigar_t *s = *(sigar_t **)luaL_checkudata(L, 1, "sigar");
|
||||||
|
lua_sigar_netifs_t *netifs;
|
||||||
|
|
||||||
|
netifs = lua_newuserdata(L, sizeof(lua_sigar_netifs_t));
|
||||||
|
netifs->sigar = s;
|
||||||
|
sigar_net_interface_list_get(s, &(netifs->netifs));
|
||||||
|
netifs->ref_count = 1;
|
||||||
|
if (0 != luaL_newmetatable(L, "sigar_netifs")) {
|
||||||
|
lua_pushcfunction(L, lua_sigar_netifs_len);
|
||||||
|
lua_setfield(L, -2, "__len");
|
||||||
|
lua_pushcfunction(L, lua_sigar_netifs_get_netif);
|
||||||
|
lua_setfield(L, -2, "__index");
|
||||||
|
lua_pushcfunction(L, lua_sigar_netifs_gc);
|
||||||
|
lua_setfield(L, -2, "__gc");
|
||||||
|
}
|
||||||
|
lua_setmetatable(L, -2);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,246 @@
|
||||||
|
/**
|
||||||
|
* Copyright (c) 2009, Sun Microsystems Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
* are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
* - Neither the name of Sun Microsystems Inc. nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||||
|
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||||
|
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||||
|
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
#include <lua.h>
|
||||||
|
#include <lauxlib.h>
|
||||||
|
#include <lualib.h>
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "sigar.h"
|
||||||
|
#include "lua-sigar.h"
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
sigar_proc_list_t procs;
|
||||||
|
|
||||||
|
sigar_t *sigar;
|
||||||
|
} lua_sigar_procs_t;
|
||||||
|
|
||||||
|
static int lua_sigar_procs_gc(lua_State *L) {
|
||||||
|
lua_sigar_procs_t *procs = (lua_sigar_procs_t *)luaL_checkudata(L, 1, "sigar_procs");
|
||||||
|
|
||||||
|
sigar_proc_list_destroy(procs->sigar, &(procs->procs));
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int lua_sigar_procs_len(lua_State *L) {
|
||||||
|
lua_sigar_procs_t *procs = (lua_sigar_procs_t *)luaL_checkudata(L, 1, "sigar_procs");
|
||||||
|
|
||||||
|
lua_pushinteger(L, procs->procs.number);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int lua_sigar_procs_get_pid(lua_State *L) {
|
||||||
|
lua_sigar_procs_t *procs = (lua_sigar_procs_t *)luaL_checkudata(L, 1, "sigar_procs");
|
||||||
|
int ndx = luaL_checkint(L, 2);
|
||||||
|
|
||||||
|
if (ndx - 1 < 0 ||
|
||||||
|
ndx - 1 >= procs->procs.number) {
|
||||||
|
luaL_error(L, ".procs[%d] out of range: 1..%d", ndx, procs->procs.number);
|
||||||
|
}
|
||||||
|
|
||||||
|
lua_pushinteger(L, procs->procs.data[ndx - 1]);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int lua_sigar_procs_get(lua_State *L) {
|
||||||
|
sigar_t *s = *(sigar_t **)luaL_checkudata(L, 1, "sigar");
|
||||||
|
lua_sigar_procs_t *procs;
|
||||||
|
|
||||||
|
procs = lua_newuserdata(L, sizeof(lua_sigar_procs_t));
|
||||||
|
procs->sigar = s;
|
||||||
|
sigar_proc_list_get(s, &(procs->procs));
|
||||||
|
if (0 != luaL_newmetatable(L, "sigar_procs")) {
|
||||||
|
lua_pushcfunction(L, lua_sigar_procs_len);
|
||||||
|
lua_setfield(L, -2, "__len");
|
||||||
|
lua_pushcfunction(L, lua_sigar_procs_get_pid);
|
||||||
|
lua_setfield(L, -2, "__index");
|
||||||
|
lua_pushcfunction(L, lua_sigar_procs_gc);
|
||||||
|
lua_setfield(L, -2, "__gc");
|
||||||
|
}
|
||||||
|
lua_setmetatable(L, -2);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
sigar_pid_t pid;
|
||||||
|
|
||||||
|
sigar_t *sigar;
|
||||||
|
} lua_sigar_proc_t;
|
||||||
|
|
||||||
|
static int lua_sigar_proc_gc(lua_State *L) {
|
||||||
|
lua_sigar_proc_t *proc = (lua_sigar_proc_t *)luaL_checkudata(L, 1, "sigar_proc");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int lua_sigar_proc_get_mem(lua_State *L) {
|
||||||
|
lua_sigar_proc_t *proc = (lua_sigar_proc_t *)luaL_checkudata(L, 1, "sigar_proc");
|
||||||
|
sigar_proc_mem_t mem;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
if (SIGAR_OK != (err = sigar_proc_mem_get(proc->sigar, proc->pid, &mem))) {
|
||||||
|
lua_pushnil(L);
|
||||||
|
lua_pushstring(L, strerror(err));
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
lua_newtable(L);
|
||||||
|
#define DATA \
|
||||||
|
(&(mem))
|
||||||
|
|
||||||
|
LUA_EXPORT_INT(DATA, size);
|
||||||
|
LUA_EXPORT_INT(DATA, resident);
|
||||||
|
LUA_EXPORT_INT(DATA, share);
|
||||||
|
LUA_EXPORT_INT(DATA, major_faults);
|
||||||
|
LUA_EXPORT_INT(DATA, minor_faults);
|
||||||
|
LUA_EXPORT_INT(DATA, page_faults);
|
||||||
|
|
||||||
|
#undef DATA
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int lua_sigar_proc_get_time(lua_State *L) {
|
||||||
|
lua_sigar_proc_t *proc = (lua_sigar_proc_t *)luaL_checkudata(L, 1, "sigar_proc");
|
||||||
|
sigar_proc_time_t t;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
if (SIGAR_OK != (err = sigar_proc_time_get(proc->sigar, proc->pid, &t))) {
|
||||||
|
lua_pushnil(L);
|
||||||
|
lua_pushstring(L, strerror(err));
|
||||||
|
return 2;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
lua_newtable(L);
|
||||||
|
#define DATA \
|
||||||
|
(&(t))
|
||||||
|
|
||||||
|
LUA_EXPORT_INT(DATA, start_time);
|
||||||
|
LUA_EXPORT_INT(DATA, user);
|
||||||
|
LUA_EXPORT_INT(DATA, sys);
|
||||||
|
LUA_EXPORT_INT(DATA, total);
|
||||||
|
|
||||||
|
#undef DATA
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int lua_sigar_proc_get_state(lua_State *L) {
|
||||||
|
lua_sigar_proc_t *proc = (lua_sigar_proc_t *)luaL_checkudata(L, 1, "sigar_proc");
|
||||||
|
sigar_proc_state_t state;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
if (SIGAR_OK != (err = sigar_proc_state_get(proc->sigar, proc->pid, &state))) {
|
||||||
|
lua_pushnil(L);
|
||||||
|
lua_pushstring(L, strerror(err));
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
lua_newtable(L);
|
||||||
|
#define DATA \
|
||||||
|
(&(state))
|
||||||
|
|
||||||
|
LUA_EXPORT_STR(DATA, name);
|
||||||
|
LUA_EXPORT_INT(DATA, ppid);
|
||||||
|
LUA_EXPORT_INT(DATA, tty);
|
||||||
|
LUA_EXPORT_INT(DATA, priority);
|
||||||
|
LUA_EXPORT_INT(DATA, nice);
|
||||||
|
LUA_EXPORT_INT(DATA, processor);
|
||||||
|
LUA_EXPORT_INT(DATA, threads);
|
||||||
|
|
||||||
|
#undef DATA
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int lua_sigar_proc_get_exe(lua_State *L) {
|
||||||
|
lua_sigar_proc_t *proc = (lua_sigar_proc_t *)luaL_checkudata(L, 1, "sigar_proc");
|
||||||
|
sigar_proc_exe_t t;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
if (SIGAR_OK != (err = sigar_proc_exe_get(proc->sigar, proc->pid, &t))) {
|
||||||
|
lua_pushnil(L);
|
||||||
|
lua_pushstring(L, strerror(err));
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
lua_newtable(L);
|
||||||
|
#define DATA \
|
||||||
|
(&(t))
|
||||||
|
|
||||||
|
LUA_EXPORT_STR(DATA, name);
|
||||||
|
LUA_EXPORT_STR(DATA, cwd);
|
||||||
|
LUA_EXPORT_STR(DATA, root);
|
||||||
|
|
||||||
|
#undef DATA
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int lua_sigar_proc_get(lua_State *L) {
|
||||||
|
sigar_t *s = *(sigar_t **)luaL_checkudata(L, 1, "sigar");
|
||||||
|
sigar_pid_t pid = luaL_checknumber(L, 2);
|
||||||
|
lua_sigar_proc_t *proc;
|
||||||
|
|
||||||
|
proc = lua_newuserdata(L, sizeof(lua_sigar_proc_t));
|
||||||
|
proc->sigar = s;
|
||||||
|
proc->pid = pid;
|
||||||
|
if (0 != luaL_newmetatable(L, "sigar_proc")) {
|
||||||
|
lua_newtable(L);
|
||||||
|
lua_pushcfunction(L, lua_sigar_proc_get_mem);
|
||||||
|
lua_setfield(L, -2, "mem");
|
||||||
|
lua_pushcfunction(L, lua_sigar_proc_get_time);
|
||||||
|
lua_setfield(L, -2, "time");
|
||||||
|
lua_pushcfunction(L, lua_sigar_proc_get_exe);
|
||||||
|
lua_setfield(L, -2, "exe");
|
||||||
|
lua_pushcfunction(L, lua_sigar_proc_get_state);
|
||||||
|
lua_setfield(L, -2, "state");
|
||||||
|
lua_setfield(L, -2, "__index");
|
||||||
|
lua_pushcfunction(L, lua_sigar_proc_gc);
|
||||||
|
lua_setfield(L, -2, "__gc");
|
||||||
|
}
|
||||||
|
lua_setmetatable(L, -2);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int lua_sigar_pid_get(lua_State *L) {
|
||||||
|
sigar_t *s = *(sigar_t **)luaL_checkudata(L, 1, "sigar");
|
||||||
|
|
||||||
|
lua_pushnumber(L, sigar_pid_get(s));
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,59 @@
|
||||||
|
/**
|
||||||
|
* Copyright (c) 2009, Sun Microsystems Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
* are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
* - Neither the name of Sun Microsystems Inc. nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||||
|
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||||
|
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||||
|
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
#include <lua.h>
|
||||||
|
#include <lauxlib.h>
|
||||||
|
#include <lualib.h>
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "sigar.h"
|
||||||
|
#include "lua-sigar.h"
|
||||||
|
|
||||||
|
int lua_sigar_swap_get(lua_State *L) {
|
||||||
|
sigar_t *s = *(sigar_t **)luaL_checkudata(L, 1, "sigar");
|
||||||
|
sigar_swap_t swap;
|
||||||
|
|
||||||
|
sigar_swap_get(s, &swap);
|
||||||
|
|
||||||
|
lua_newtable(L);
|
||||||
|
#define DATA \
|
||||||
|
(&(swap))
|
||||||
|
|
||||||
|
LUA_EXPORT_INT(DATA, total);
|
||||||
|
LUA_EXPORT_INT(DATA, used);
|
||||||
|
LUA_EXPORT_INT(DATA, free);
|
||||||
|
LUA_EXPORT_INT(DATA, page_in);
|
||||||
|
LUA_EXPORT_INT(DATA, page_out);
|
||||||
|
|
||||||
|
#undef DATA
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,65 @@
|
||||||
|
/**
|
||||||
|
* Copyright (c) 2009, Sun Microsystems Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
* are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
* - Neither the name of Sun Microsystems Inc. nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||||
|
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||||
|
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||||
|
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
#include <lua.h>
|
||||||
|
#include <lauxlib.h>
|
||||||
|
#include <lualib.h>
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "sigar.h"
|
||||||
|
#include "lua-sigar.h"
|
||||||
|
|
||||||
|
int lua_sigar_sysinfo_get(lua_State *L) {
|
||||||
|
sigar_t *s = *(sigar_t **)luaL_checkudata(L, 1, "sigar");
|
||||||
|
sigar_sys_info_t sysinfo;
|
||||||
|
|
||||||
|
sigar_sys_info_get(s, &sysinfo);
|
||||||
|
|
||||||
|
lua_newtable(L);
|
||||||
|
#define DATA \
|
||||||
|
(&(sysinfo))
|
||||||
|
|
||||||
|
LUA_EXPORT_STR(DATA, name);
|
||||||
|
LUA_EXPORT_STR(DATA, version);
|
||||||
|
LUA_EXPORT_STR(DATA, arch);
|
||||||
|
LUA_EXPORT_STR(DATA, machine);
|
||||||
|
LUA_EXPORT_STR(DATA, description);
|
||||||
|
LUA_EXPORT_STR(DATA, patch_level);
|
||||||
|
LUA_EXPORT_STR(DATA, vendor);
|
||||||
|
LUA_EXPORT_STR(DATA, vendor_version);
|
||||||
|
LUA_EXPORT_STR(DATA, vendor_name);
|
||||||
|
LUA_EXPORT_STR(DATA, vendor_code_name);
|
||||||
|
|
||||||
|
#undef DATA
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,153 @@
|
||||||
|
--[[
|
||||||
|
-- Copyright (c) 2009, Sun Microsystems Inc.
|
||||||
|
-- All rights reserved.
|
||||||
|
--
|
||||||
|
-- Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
-- are permitted provided that the following conditions are met:
|
||||||
|
--
|
||||||
|
-- * Redistributions of source code must retain the above copyright notice,
|
||||||
|
-- this list of conditions and the following disclaimer.
|
||||||
|
-- * Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
-- this list of conditions and the following disclaimer in the documentation
|
||||||
|
-- and/or other materials provided with the distribution.
|
||||||
|
-- * Neither the name of Sun Microsystems Inc. nor the names of its contributors
|
||||||
|
-- may be used to endorse or promote products derived from this software
|
||||||
|
-- without specific prior written permission.
|
||||||
|
--
|
||||||
|
-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
-- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
-- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
-- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
-- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
-- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
-- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||||
|
-- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
-- WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||||
|
-- OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||||
|
-- EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
--]]
|
||||||
|
local sigar = assert(require("sigar"))
|
||||||
|
|
||||||
|
-- test if the GC is called nicely
|
||||||
|
local s = assert(sigar.new())
|
||||||
|
s = nil
|
||||||
|
|
||||||
|
function print_table(t)
|
||||||
|
for k, v in pairs(t) do
|
||||||
|
print((" %s: %s"):format(k, v))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local s = sigar.new()
|
||||||
|
|
||||||
|
print("-- cpus")
|
||||||
|
local cpus = s:cpus()
|
||||||
|
|
||||||
|
for i = 1, #cpus do
|
||||||
|
local cpu = cpus[i]
|
||||||
|
print(i)
|
||||||
|
print(" info")
|
||||||
|
local info = cpu:info()
|
||||||
|
print_table(info)
|
||||||
|
local data = cpu:data()
|
||||||
|
print(" data")
|
||||||
|
print_table(data)
|
||||||
|
end
|
||||||
|
|
||||||
|
print("-- mem")
|
||||||
|
print_table(s:mem())
|
||||||
|
print("-- swap")
|
||||||
|
print_table(s:swap())
|
||||||
|
|
||||||
|
print("-- procs")
|
||||||
|
local procs = s:procs()
|
||||||
|
|
||||||
|
for i = 1, #procs do
|
||||||
|
local pid = procs[i]
|
||||||
|
local proc = s:proc(pid) -- get the data ... but don't use it
|
||||||
|
|
||||||
|
if pid == s:pid() then
|
||||||
|
print(pid)
|
||||||
|
print(" mem")
|
||||||
|
local mem, msg = proc:mem()
|
||||||
|
if mem then print_table(mem) else print(" -- no mem info: " .. msg) end
|
||||||
|
print(" time")
|
||||||
|
local t, msg = proc:time()
|
||||||
|
if t then print_table(t) else print(" -- no time info: " .. msg) end
|
||||||
|
print(" state")
|
||||||
|
local t, msg = proc:state()
|
||||||
|
if t then print_table(t) else print(" -- no state info: " .. msg) end
|
||||||
|
print(" exe")
|
||||||
|
local t, msg = proc:exe()
|
||||||
|
if t then print_table(t) else print(" -- no exe info: " .. msg) end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
print("-- filesystems")
|
||||||
|
local fses = s:filesystems()
|
||||||
|
|
||||||
|
for i = 1, #fses do
|
||||||
|
local fs = fses[i]
|
||||||
|
|
||||||
|
print(i)
|
||||||
|
print(" info")
|
||||||
|
local info = fs:info()
|
||||||
|
if info then print_table(info) else print(" -- no fs info") end
|
||||||
|
print(" usage")
|
||||||
|
local usage = fs:usage()
|
||||||
|
if usage then print_table(usage) else print(" -- no fs usage") end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
print("-- disks")
|
||||||
|
local disks = s:disks()
|
||||||
|
|
||||||
|
for i = 1, #disks do
|
||||||
|
local disk = disks[i]
|
||||||
|
|
||||||
|
print(" usage")
|
||||||
|
local usage, msg = disk:usage()
|
||||||
|
if usage then print_table(usage) else print(" -- no disk usage: " .. msg) end
|
||||||
|
end
|
||||||
|
|
||||||
|
---
|
||||||
|
-- try to specify a device that is known, but not listed by the fs-list
|
||||||
|
local disk = s:disk("/dev/disk1")
|
||||||
|
if disk then
|
||||||
|
print(disk:name())
|
||||||
|
print(" usage")
|
||||||
|
local usage, msg = disk:usage()
|
||||||
|
if usage then print_table(usage) else print(" -- no disk usage: " .. msg) end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
print("-- who")
|
||||||
|
local who = s:who()
|
||||||
|
|
||||||
|
for i = 1, #who do
|
||||||
|
local w = who[i]
|
||||||
|
|
||||||
|
print(" usage")
|
||||||
|
local usage, msg = w
|
||||||
|
if usage then print_table(usage) else print(" -- no who usage: " .. msg) end
|
||||||
|
end
|
||||||
|
|
||||||
|
print("-- netifs")
|
||||||
|
local netifs = s:netifs()
|
||||||
|
|
||||||
|
for i = 1, #netifs do
|
||||||
|
local netif = netifs[i]
|
||||||
|
|
||||||
|
print(" info")
|
||||||
|
local usage, msg = netif:info()
|
||||||
|
if usage then print_table(usage) else print(" -- no netif info: " .. msg) end
|
||||||
|
print(" usage")
|
||||||
|
local usage, msg = netif:usage()
|
||||||
|
if usage then print_table(usage) else print(" -- no netif usage: " .. msg) end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
print("-- version")
|
||||||
|
print_table(s:version())
|
||||||
|
print("-- sysinfo")
|
||||||
|
print_table(s:sysinfo())
|
|
@ -0,0 +1,65 @@
|
||||||
|
/**
|
||||||
|
* Copyright (c) 2009, Sun Microsystems Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
* are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
* - Neither the name of Sun Microsystems Inc. nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||||
|
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||||
|
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||||
|
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
#include <lua.h>
|
||||||
|
#include <lauxlib.h>
|
||||||
|
#include <lualib.h>
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "sigar.h"
|
||||||
|
#include "lua-sigar.h"
|
||||||
|
|
||||||
|
int lua_sigar_version_get(lua_State *L) {
|
||||||
|
sigar_t *s = *(sigar_t **)luaL_checkudata(L, 1, "sigar");
|
||||||
|
sigar_version_t *version;
|
||||||
|
|
||||||
|
version = sigar_version_get();
|
||||||
|
|
||||||
|
lua_newtable(L);
|
||||||
|
#define DATA \
|
||||||
|
(version)
|
||||||
|
|
||||||
|
LUA_EXPORT_STR(DATA, build_date);
|
||||||
|
LUA_EXPORT_STR(DATA, scm_revision);
|
||||||
|
LUA_EXPORT_STR(DATA, version);
|
||||||
|
LUA_EXPORT_STR(DATA, archname);
|
||||||
|
LUA_EXPORT_STR(DATA, archlib);
|
||||||
|
LUA_EXPORT_STR(DATA, binname);
|
||||||
|
LUA_EXPORT_STR(DATA, description);
|
||||||
|
LUA_EXPORT_INT(DATA, major);
|
||||||
|
LUA_EXPORT_INT(DATA, minor);
|
||||||
|
LUA_EXPORT_INT(DATA, maint);
|
||||||
|
LUA_EXPORT_INT(DATA, build);
|
||||||
|
|
||||||
|
#undef DATA
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,103 @@
|
||||||
|
/**
|
||||||
|
* Copyright (c) 2009, Sun Microsystems Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
* are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
* - Neither the name of Sun Microsystems Inc. nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||||
|
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||||
|
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||||
|
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
#include <lua.h>
|
||||||
|
#include <lauxlib.h>
|
||||||
|
#include <lualib.h>
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "sigar.h"
|
||||||
|
#include "lua-sigar.h"
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
sigar_who_list_t who;
|
||||||
|
|
||||||
|
sigar_t *sigar;
|
||||||
|
} lua_sigar_who_t;
|
||||||
|
|
||||||
|
static int lua_sigar_who_gc(lua_State *L) {
|
||||||
|
lua_sigar_who_t *who = (lua_sigar_who_t *)luaL_checkudata(L, 1, "sigar_who");
|
||||||
|
|
||||||
|
sigar_who_list_destroy(who->sigar, &(who->who));
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int lua_sigar_who_len(lua_State *L) {
|
||||||
|
lua_sigar_who_t *who = (lua_sigar_who_t *)luaL_checkudata(L, 1, "sigar_who");
|
||||||
|
|
||||||
|
lua_pushinteger(L, who->who.number);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int lua_sigar_who_get_who(lua_State *L) {
|
||||||
|
lua_sigar_who_t *who = (lua_sigar_who_t *)luaL_checkudata(L, 1, "sigar_who");
|
||||||
|
int ndx = luaL_checkint(L, 2);
|
||||||
|
|
||||||
|
if (ndx - 1 < 0 ||
|
||||||
|
ndx - 1 >= who->who.number) {
|
||||||
|
luaL_error(L, ".who[%d] out of range: 1..%d", ndx, who->who.number);
|
||||||
|
}
|
||||||
|
|
||||||
|
lua_newtable(L);
|
||||||
|
#define DATA \
|
||||||
|
(&(who->who.data[ndx - 1]))
|
||||||
|
|
||||||
|
LUA_EXPORT_STR(DATA, user);
|
||||||
|
LUA_EXPORT_STR(DATA, device);
|
||||||
|
LUA_EXPORT_STR(DATA, host);
|
||||||
|
LUA_EXPORT_INT(DATA, time);
|
||||||
|
#undef DATA
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int lua_sigar_who_get(lua_State *L) {
|
||||||
|
sigar_t *s = *(sigar_t **)luaL_checkudata(L, 1, "sigar");
|
||||||
|
lua_sigar_who_t *who;
|
||||||
|
|
||||||
|
who = lua_newuserdata(L, sizeof(lua_sigar_who_t));
|
||||||
|
who->sigar = s;
|
||||||
|
sigar_who_list_get(s, &(who->who));
|
||||||
|
if (0 != luaL_newmetatable(L, "sigar_who")) {
|
||||||
|
lua_pushcfunction(L, lua_sigar_who_len);
|
||||||
|
lua_setfield(L, -2, "__len");
|
||||||
|
lua_pushcfunction(L, lua_sigar_who_get_who);
|
||||||
|
lua_setfield(L, -2, "__index");
|
||||||
|
lua_pushcfunction(L, lua_sigar_who_gc);
|
||||||
|
lua_setfield(L, -2, "__gc");
|
||||||
|
}
|
||||||
|
lua_setmetatable(L, -2);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,185 @@
|
||||||
|
/**
|
||||||
|
* Copyright (c) 2009, Sun Microsystems Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
* are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
* - Neither the name of Sun Microsystems Inc. nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||||
|
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||||
|
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||||
|
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
#include <lua.h>
|
||||||
|
#include <lauxlib.h>
|
||||||
|
#include <lualib.h>
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "sigar.h"
|
||||||
|
#include "lua-sigar.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* push the converted sigar_net_address_t as string on the stack
|
||||||
|
*/
|
||||||
|
int lua_sigar_push_address(lua_State *L, sigar_net_address_t *addr) {
|
||||||
|
char s[24 + 1]; /* AF_LINK is 2 * 8 + 7 colons = 23
|
||||||
|
AF_INET6 is 4 * 4 + 3 colons = 17
|
||||||
|
AF_INET is 4 * 3 + 3 dots = 15
|
||||||
|
*/
|
||||||
|
size_t s_have = sizeof(s) - 1;
|
||||||
|
size_t s_need;
|
||||||
|
|
||||||
|
switch (addr->family) {
|
||||||
|
case SIGAR_AF_UNSPEC:
|
||||||
|
lua_pushnil(L);
|
||||||
|
return 1;
|
||||||
|
case SIGAR_AF_INET:
|
||||||
|
lua_pushfstring(L, "%d.%d.%d.%d",
|
||||||
|
(addr->addr.in >> 0) & 0xff,
|
||||||
|
(addr->addr.in >> 8) & 0xff,
|
||||||
|
(addr->addr.in >> 16) & 0xff,
|
||||||
|
(addr->addr.in >> 24) & 0xff);
|
||||||
|
return 1;
|
||||||
|
case SIGAR_AF_INET6:
|
||||||
|
s_need = snprintf(s, s_have, "%4x:%4x:%4x:%4x",
|
||||||
|
(addr->addr.in6[0]),
|
||||||
|
(addr->addr.in6[1]),
|
||||||
|
(addr->addr.in6[2]),
|
||||||
|
(addr->addr.in6[3]));
|
||||||
|
|
||||||
|
if (s_need > s_have) {
|
||||||
|
/* string is truncated, but written to s */
|
||||||
|
luaL_error(L, "can't convert INET6 address string, not enough memory: %d need, %d available",
|
||||||
|
s_need, s_have);
|
||||||
|
}
|
||||||
|
lua_pushstring(L, s);
|
||||||
|
return 1;
|
||||||
|
case SIGAR_AF_LINK:
|
||||||
|
s_need = snprintf(s, s_have, "%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x",
|
||||||
|
addr->addr.mac[0],
|
||||||
|
addr->addr.mac[1],
|
||||||
|
addr->addr.mac[2],
|
||||||
|
addr->addr.mac[3],
|
||||||
|
addr->addr.mac[4],
|
||||||
|
addr->addr.mac[5],
|
||||||
|
addr->addr.mac[6],
|
||||||
|
addr->addr.mac[7]);
|
||||||
|
|
||||||
|
if (s_need > s_have) {
|
||||||
|
/* string is truncated, but written to s */
|
||||||
|
luaL_error(L, "can't convert MAC address string, not enough memory: %d need, %d available",
|
||||||
|
s_need, s_have);
|
||||||
|
}
|
||||||
|
lua_pushstring(L, s);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int lua_sigar_free(lua_State *L) {
|
||||||
|
sigar_t *s = *(sigar_t **)luaL_checkudata(L, 1, "sigar");
|
||||||
|
|
||||||
|
sigar_close(s);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int lua_sigar_new(lua_State *L) {
|
||||||
|
sigar_t **_s;
|
||||||
|
sigar_t *s;
|
||||||
|
|
||||||
|
if (SIGAR_OK != sigar_open(&s)) {
|
||||||
|
luaL_error(L, "sigar_open() failed");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
_s = lua_newuserdata(L, sizeof(sigar_t *));
|
||||||
|
*_s = s;
|
||||||
|
|
||||||
|
if (0 != luaL_newmetatable(L, "sigar")) {
|
||||||
|
lua_newtable(L);
|
||||||
|
lua_pushcfunction(L, lua_sigar_cpus_get);
|
||||||
|
lua_setfield(L, -2, "cpus");
|
||||||
|
lua_pushcfunction(L, lua_sigar_procs_get);
|
||||||
|
lua_setfield(L, -2, "procs");
|
||||||
|
lua_pushcfunction(L, lua_sigar_fses_get);
|
||||||
|
lua_setfield(L, -2, "filesystems");
|
||||||
|
lua_pushcfunction(L, lua_sigar_disks_get);
|
||||||
|
lua_setfield(L, -2, "disks");
|
||||||
|
lua_pushcfunction(L, lua_sigar_disk_get);
|
||||||
|
lua_setfield(L, -2, "disk");
|
||||||
|
lua_pushcfunction(L, lua_sigar_who_get);
|
||||||
|
lua_setfield(L, -2, "who");
|
||||||
|
lua_pushcfunction(L, lua_sigar_netifs_get);
|
||||||
|
lua_setfield(L, -2, "netifs");
|
||||||
|
lua_pushcfunction(L, lua_sigar_proc_get);
|
||||||
|
lua_setfield(L, -2, "proc");
|
||||||
|
lua_pushcfunction(L, lua_sigar_pid_get);
|
||||||
|
lua_setfield(L, -2, "pid");
|
||||||
|
lua_pushcfunction(L, lua_sigar_mem_get);
|
||||||
|
lua_setfield(L, -2, "mem");
|
||||||
|
lua_pushcfunction(L, lua_sigar_swap_get);
|
||||||
|
lua_setfield(L, -2, "swap");
|
||||||
|
lua_pushcfunction(L, lua_sigar_version_get);
|
||||||
|
lua_setfield(L, -2, "version");
|
||||||
|
lua_pushcfunction(L, lua_sigar_sysinfo_get);
|
||||||
|
lua_setfield(L, -2, "sysinfo");
|
||||||
|
lua_setfield(L, -2, "__index");
|
||||||
|
lua_pushcfunction(L, lua_sigar_free);
|
||||||
|
lua_setfield(L, -2, "__gc");
|
||||||
|
}
|
||||||
|
lua_setmetatable(L, -2);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Assumes the table is on top of the stack.
|
||||||
|
*/
|
||||||
|
static void set_info (lua_State *L) {
|
||||||
|
lua_pushliteral (L, "_COPYRIGHT");
|
||||||
|
lua_pushliteral (L, "Copyright (c) 2009 Sun Microsystems, Inc.");
|
||||||
|
lua_settable (L, -3);
|
||||||
|
lua_pushliteral (L, "_DESCRIPTION");
|
||||||
|
lua_pushliteral (L, "sigar.*");
|
||||||
|
lua_settable (L, -3);
|
||||||
|
lua_pushliteral (L, "_VERSION");
|
||||||
|
lua_pushliteral (L, "LuaSigar 0.1");
|
||||||
|
lua_settable (L, -3);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static const struct luaL_reg sigarlib[] = {
|
||||||
|
{"new", lua_sigar_new},
|
||||||
|
{NULL, NULL}
|
||||||
|
};
|
||||||
|
|
||||||
|
#if defined(_WIN32)
|
||||||
|
# define LUAEXT_API __declspec(dllexport)
|
||||||
|
#else
|
||||||
|
# define LUAEXT_API extern
|
||||||
|
#endif
|
||||||
|
|
||||||
|
LUAEXT_API int luaopen_sigar (lua_State *L) {
|
||||||
|
luaL_register (L, "sigar", sigarlib);
|
||||||
|
set_info (L);
|
||||||
|
return 1;
|
||||||
|
}
|
Loading…
Reference in New Issue