#include <sys/param.h>
#include <executor/spi.h>
+#ifdef PG_MODULE_MAGIC
+PG_MODULE_MAGIC;
+#endif
+
+#define BIGINT_LEN 20
+#define INTEGER_LEN 10
+
+#ifdef __linux__
#if 0
#include <linux/proc_fs.h>
#else
#define PROC_SUPER_MAGIC 0x9fa0
#endif
-#ifdef PG_MODULE_MAGIC
-PG_MODULE_MAGIC;
-#endif
-
#define PROCFS "/proc"
-#define BIGINT_LEN 20
-#define INTEGER_LEN 10
-
#define GET_NEXT_VALUE(p, q, value, length, msg, delim) \
if ((q = strchr(p, delim)) == NULL) \
{ \
value[length] = '\0'; \
p = q + 1;
-Datum pg_cputime(PG_FUNCTION_ARGS);
static inline char *skip_token(const char *);
+static inline char *
+skip_token(const char *p)
+{
+ while (isspace(*p))
+ p++;
+ while (*p && !isspace(*p))
+ p++;
+ return (char *) p;
+}
+#endif /* __linux__ */
+
+Datum pg_cputime(PG_FUNCTION_ARGS);
+
PG_FUNCTION_INFO_V1(pg_cputime);
Datum pg_cputime(PG_FUNCTION_ARGS)
TupleDesc tupdesc;
AttInMetadata *attinmeta;
+#ifdef __linux__
struct statfs sb;
int fd;
int len;
char buffer[4096];
char *p;
char *q;
+#endif /* __linux__ */
enum loadavg {i_user, i_nice, i_system, i_idle, i_iowait};
char **values = NULL;
+ values = (char **) palloc(5 * sizeof(char *));
+ values[i_user] = (char *) palloc((BIGINT_LEN + 1) * sizeof(char));
+ values[i_nice] = (char *) palloc((BIGINT_LEN + 1) * sizeof(char));
+ values[i_system] = (char *) palloc((BIGINT_LEN + 1) * sizeof(char));
+ values[i_idle] = (char *) palloc((BIGINT_LEN + 1) * sizeof(char));
+ values[i_iowait] = (char *) palloc((BIGINT_LEN + 1) * sizeof(char));
+
+#ifdef __linux__
/*
* Sanity check, make sure we read the pid information that we're
* asking for.
buffer[len] = '\0';
elog(DEBUG5, "pg_cputime: %s", buffer);
- values = (char **) palloc(5 * sizeof(char *));
- values[i_user] = (char *) palloc((BIGINT_LEN + 1) * sizeof(char));
- values[i_nice] = (char *) palloc((BIGINT_LEN + 1) * sizeof(char));
- values[i_system] = (char *) palloc((BIGINT_LEN + 1) * sizeof(char));
- values[i_idle] = (char *) palloc((BIGINT_LEN + 1) * sizeof(char));
- values[i_iowait] = (char *) palloc((BIGINT_LEN + 1) * sizeof(char));
-
p = buffer;
p = skip_token(p); /* skip cpu */
GET_NEXT_VALUE(p, q, values[i_iowait], length, "iowait not found",
' ');
elog(DEBUG5, "pg_cputime: iowait = %s", values[i_iowait]);
+#endif /* __linux__ */
/* build a tuple */
tuple = BuildTupleFromCStrings(attinmeta, values);
SRF_RETURN_DONE(funcctx);
}
}
-
-static inline char *
-skip_token(const char *p)
-{
- while (isspace(*p))
- p++;
- while (*p && !isspace(*p))
- p++;
- return (char *) p;
-}
#include <sys/param.h>
#include <executor/spi.h>
+#ifdef __linux__
#if 0
#include <linux/proc_fs.h>
#else
#define PROC_SUPER_MAGIC 0x9fa0
#endif
-#ifdef PG_MODULE_MAGIC
-PG_MODULE_MAGIC;
-#endif
-
#define PROCFS "/proc"
-#define FLOAT_LEN 20
-#define INTEGER_LEN 10
-
#define GET_NEXT_VALUE(p, q, value, length, msg, delim) \
if ((q = strchr(p, delim)) == NULL) \
{ \
value[length] = '\0'; \
p = q + 1;
-Datum pg_loadavg(PG_FUNCTION_ARGS);
static inline char *skip_token(const char *);
+static inline char *
+skip_token(const char *p)
+{
+ while (isspace(*p))
+ p++;
+ while (*p && !isspace(*p))
+ p++;
+ return (char *) p;
+}
+#endif /* __linux__ */
+
+#ifdef PG_MODULE_MAGIC
+PG_MODULE_MAGIC;
+#endif
+
+#define FLOAT_LEN 20
+#define INTEGER_LEN 10
+
+Datum pg_loadavg(PG_FUNCTION_ARGS);
+
PG_FUNCTION_INFO_V1(pg_loadavg);
Datum pg_loadavg(PG_FUNCTION_ARGS)
TupleDesc tupdesc;
AttInMetadata *attinmeta;
+#ifdef __linux__
struct statfs sb;
int fd;
int len;
char buffer[4096];
char *p;
char *q;
+#endif /* __linux__ */
enum loadavg {i_load1, i_load5, i_load15, i_last_pid};
char **values = NULL;
+ values = (char **) palloc(4 * sizeof(char *));
+ values[i_load1] = (char *) palloc((FLOAT_LEN + 1) * sizeof(char));
+ values[i_load5] = (char *) palloc((FLOAT_LEN + 1) * sizeof(char));
+ values[i_load15] = (char *) palloc((FLOAT_LEN + 1) * sizeof(char));
+ values[i_last_pid] = (char *) palloc((INTEGER_LEN + 1) * sizeof(char));
+
+#ifdef __linux__
/*
* Sanity check, make sure we read the pid information that we're
* asking for.
buffer[len] = '\0';
elog(DEBUG5, "pg_loadavg: %s", buffer);
- values = (char **) palloc(4 * sizeof(char *));
- values[i_load1] = (char *) palloc((FLOAT_LEN + 1) * sizeof(char));
- values[i_load5] = (char *) palloc((FLOAT_LEN + 1) * sizeof(char));
- values[i_load15] = (char *) palloc((FLOAT_LEN + 1) * sizeof(char));
- values[i_last_pid] = (char *) palloc((INTEGER_LEN + 1) * sizeof(char));
-
p = buffer;
/* load1 */
}
elog(DEBUG5, "pg_loadavg: last_pid = %s",
values[i_last_pid]);
+#endif /* __linux__ */
/* build a tuple */
tuple = BuildTupleFromCStrings(attinmeta, values);
SRF_RETURN_DONE(funcctx);
}
}
-
-static inline char *
-skip_token(const char *p)
-{
- while (isspace(*p))
- p++;
- while (*p && !isspace(*p))
- p++;
- return (char *) p;
-}
#include <sys/param.h>
#include <executor/spi.h>
-#if 0
-#include <linux/proc_fs.h>
-#else
-#define PROC_SUPER_MAGIC 0x9fa0
-#endif
-
#ifdef PG_MODULE_MAGIC
PG_MODULE_MAGIC;
#endif
-#define PROCFS "/proc"
-
#define BIGINT_LEN 20
#define INTEGER_LEN 10
+#ifdef __linux__
+#define PROCFS "/proc"
+
+#if 0
+#include <linux/proc_fs.h>
+#else
+#define PROC_SUPER_MAGIC 0x9fa0
+#endif
+
#define GET_NEXT_VALUE(p, q, value, length, msg, delim) \
if ((q = strchr(p, delim)) == NULL) \
{ \
value[length] = '\0'; \
p = q + 1;
-Datum pg_memusage(PG_FUNCTION_ARGS);
static inline char *skip_token(const char *);
+static inline char *
+skip_token(const char *p)
+{
+ while (isspace(*p))
+ p++;
+ while (*p && !isspace(*p))
+ p++;
+ return (char *) p;
+}
+
+#endif /* __linux__ */
+
+Datum pg_memusage(PG_FUNCTION_ARGS);
+
PG_FUNCTION_INFO_V1(pg_memusage);
Datum pg_memusage(PG_FUNCTION_ARGS)
TupleDesc tupdesc;
AttInMetadata *attinmeta;
+#ifdef __linux__
struct statfs sb;
int fd;
int len;
char buffer[4096];
char *p;
char *q;
+#endif /* __linux__ */
enum loadavg {i_memused, i_memfree, i_memshared, i_membuffers,
i_memcached, i_swapused, i_swapfree, i_swapcached};
char **values = NULL;
+ values = (char **) palloc(8 * sizeof(char *));
+ values[i_memused] = (char *) palloc((BIGINT_LEN + 1) * sizeof(char));
+ values[i_memfree] = (char *) palloc((BIGINT_LEN + 1) * sizeof(char));
+ values[i_memshared] = (char *) palloc((BIGINT_LEN + 1) * sizeof(char));
+ values[i_membuffers] =
+ (char *) palloc((BIGINT_LEN + 1) * sizeof(char));
+ values[i_memcached] = (char *) palloc((BIGINT_LEN + 1) * sizeof(char));
+ values[i_swapused] = (char *) palloc((BIGINT_LEN + 1) * sizeof(char));
+ values[i_swapfree] = (char *) palloc((BIGINT_LEN + 1) * sizeof(char));
+ values[i_swapcached] =
+ (char *) palloc((BIGINT_LEN + 1) * sizeof(char));
+
+#ifdef __linux__
/*
* Sanity check, make sure we read the pid information that we're
* asking for.
buffer[len] = '\0';
elog(DEBUG5, "pg_memusage: %s", buffer);
- values = (char **) palloc(8 * sizeof(char *));
- values[i_memused] = (char *) palloc((BIGINT_LEN + 1) * sizeof(char));
- values[i_memfree] = (char *) palloc((BIGINT_LEN + 1) * sizeof(char));
- values[i_memshared] = (char *) palloc((BIGINT_LEN + 1) * sizeof(char));
- values[i_membuffers] =
- (char *) palloc((BIGINT_LEN + 1) * sizeof(char));
- values[i_memcached] = (char *) palloc((BIGINT_LEN + 1) * sizeof(char));
- values[i_swapused] = (char *) palloc((BIGINT_LEN + 1) * sizeof(char));
- values[i_swapfree] = (char *) palloc((BIGINT_LEN + 1) * sizeof(char));
- values[i_swapcached] =
- (char *) palloc((BIGINT_LEN + 1) * sizeof(char));
-
p = buffer - 1;
values[i_memshared][0] = '0';
}
p = strchr(p, '\n');
}
+#endif /* __linux__ */
/* build a tuple */
tuple = BuildTupleFromCStrings(attinmeta, values);
SRF_RETURN_DONE(funcctx);
}
}
-
-static inline char *
-skip_token(const char *p)
-{
- while (isspace(*p))
- p++;
- while (*p && !isspace(*p))
- p++;
- return (char *) p;
-}