summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremie Koenig <jk@jk.fr.eu.org>2010-08-21 19:18:59 +0000
committerJeremie Koenig <jk@jk.fr.eu.org>2010-08-30 14:29:50 +0200
commitefb8515465dcb03526a35bf87b549cac97bbab8c (patch)
tree5fb8d05a9926eddf7fb67b4d1b2261e4c876a71d
parent2717c43bca6f920c4d3b0909c33bf3c1f76a70a9 (diff)
Add loadavg
* rootdir.c: Add the root file "loadavg".
-rw-r--r--rootdir.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/rootdir.c b/rootdir.c
index fb48b93..0985b63 100644
--- a/rootdir.c
+++ b/rootdir.c
@@ -108,6 +108,28 @@ rootdir_gc_stat (void *hook, void **contents, size_t *contents_len)
return *contents_len >= 0 ? 0 : ENOMEM;
}
+static error_t
+rootdir_gc_loadavg (void *hook, void **contents, size_t *contents_len)
+{
+ host_load_info_data_t hli;
+ mach_msg_type_number_t cnt;
+ error_t err;
+
+ cnt = HOST_LOAD_INFO_COUNT;
+ err = host_info (mach_host_self (), HOST_LOAD_INFO, (host_info_t) &hli, &cnt);
+ if (err)
+ return err;
+
+ assert (cnt == HOST_LOAD_INFO_COUNT);
+ *contents_len = asprintf ((char **) contents,
+ "%.2f %.2f %.2f 1/0 0\n",
+ hli.avenrun[0] / (double) LOAD_SCALE,
+ hli.avenrun[1] / (double) LOAD_SCALE,
+ hli.avenrun[2] / (double) LOAD_SCALE);
+
+ return *contents_len >= 0 ? 0 : ENOMEM;
+}
+
static struct node *
rootdir_file_make_node (void *dir_hook, void *entry_hook)
{
@@ -139,6 +161,14 @@ static struct procfs_dir_entry rootdir_entries[] = {
.cleanup_contents = procfs_cleanup_contents_with_free,
},
},
+ {
+ .name = "loadavg",
+ .make_node = rootdir_file_make_node,
+ .hook = & (struct procfs_node_ops) {
+ .get_contents = rootdir_gc_loadavg,
+ .cleanup_contents = procfs_cleanup_contents_with_free,
+ },
+ },
{}
};