summaryrefslogtreecommitdiff
path: root/vswitchd
diff options
context:
space:
mode:
authorBen Pfaff <blp@nicira.com>2012-07-18 10:51:02 -0700
committerBen Pfaff <blp@nicira.com>2012-07-18 10:51:02 -0700
commit57c8677b511908b3120df3cbf44244423cfefc34 (patch)
tree1770ef8c0a4335de9244315e94f59c20b8b3c855 /vswitchd
parent51c82a49d58daebe289e045fe44009d59b1f9236 (diff)
downloadopenvswitch-57c8677b511908b3120df3cbf44244423cfefc34.tar.gz
system-stats: Use "smap" instead of "shash".
"smap" is now the appropriate data structure for a string-to-string map. Also changes ovsdb_datum_from_shash() into ovsdb_datum_from_smap() since system-stats related code was the only client. Signed-off-by: Ben Pfaff <blp@nicira.com>
Diffstat (limited to 'vswitchd')
-rw-r--r--vswitchd/bridge.c6
-rw-r--r--vswitchd/system-stats.c58
-rw-r--r--vswitchd/system-stats.h6
3 files changed, 34 insertions, 36 deletions
diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c
index fa835e732..41ad5928c 100644
--- a/vswitchd/bridge.c
+++ b/vswitchd/bridge.c
@@ -1875,14 +1875,14 @@ static void
refresh_system_stats(const struct ovsrec_open_vswitch *cfg)
{
struct ovsdb_datum datum;
- struct shash stats;
+ struct smap stats;
- shash_init(&stats);
+ smap_init(&stats);
if (enable_system_stats(cfg)) {
get_system_stats(&stats);
}
- ovsdb_datum_from_shash(&datum, &stats);
+ ovsdb_datum_from_smap(&datum, &stats);
ovsdb_idl_txn_write(&cfg->header_, &ovsrec_open_vswitch_col_statistics,
&datum);
}
diff --git a/vswitchd/system-stats.c b/vswitchd/system-stats.c
index cecd8f482..4dc2723c2 100644
--- a/vswitchd/system-stats.c
+++ b/vswitchd/system-stats.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010 Nicira, Inc.
+/* Copyright (c) 2010, 2012 Nicira, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -15,6 +15,8 @@
#include <config.h>
+#include "system-stats.h"
+
#include <assert.h>
#include <ctype.h>
#include <dirent.h>
@@ -34,7 +36,7 @@
#include "dirs.h"
#include "dynamic-string.h"
#include "shash.h"
-#include "system-stats.h"
+#include "smap.h"
#include "timeval.h"
#include "vlog.h"
@@ -52,24 +54,23 @@ VLOG_DEFINE_THIS_MODULE(system_stats);
#endif
static void
-get_cpu_cores(struct shash *stats)
+get_cpu_cores(struct smap *stats)
{
long int n_cores = sysconf(_SC_NPROCESSORS_ONLN);
if (n_cores > 0) {
- shash_add(stats, "cpu", xasprintf("%ld", n_cores));
+ smap_add_format(stats, "cpu", "%ld", n_cores);
}
}
static void
-get_load_average(struct shash *stats OVS_UNUSED)
+get_load_average(struct smap *stats OVS_UNUSED)
{
#if HAVE_GETLOADAVG
double loadavg[3];
if (getloadavg(loadavg, 3) == 3) {
- shash_add(stats, "load_average",
- xasprintf("%.2f,%.2f,%.2f",
- loadavg[0], loadavg[1], loadavg[2]));
+ smap_add_format(stats, "load_average", "%.2f,%.2f,%.2f",
+ loadavg[0], loadavg[1], loadavg[2]);
}
#endif
}
@@ -90,7 +91,7 @@ get_page_size(void)
}
static void
-get_memory_stats(struct shash *stats)
+get_memory_stats(struct smap *stats)
{
if (!LINUX) {
unsigned int pagesize = get_page_size();
@@ -108,7 +109,7 @@ get_memory_stats(struct shash *stats)
mem_total = phys_pages * (pagesize / 1024);
mem_used = (phys_pages - avphys_pages) * (pagesize / 1024);
- shash_add(stats, "memory", xasprintf("%d,%d", mem_total, mem_used));
+ smap_add_format(stats, "memory", "%d,%d", mem_total, mem_used);
} else {
static const char file_name[] = "/proc/meminfo";
int mem_used, mem_cache, swap_used;
@@ -152,9 +153,8 @@ get_memory_stats(struct shash *stats)
mem_used = mem_total - mem_free;
mem_cache = buffers + cached;
swap_used = swap_total - swap_free;
- shash_add(stats, "memory",
- xasprintf("%d,%d,%d,%d,%d", mem_total, mem_used, mem_cache,
- swap_total, swap_used));
+ smap_add_format(stats, "memory", "%d,%d,%d,%d,%d",
+ mem_total, mem_used, mem_cache, swap_total, swap_used);
}
}
@@ -385,7 +385,7 @@ get_process_info(pid_t pid, struct process_info *pinfo)
}
static void
-get_process_stats(struct shash *stats)
+get_process_stats(struct smap *stats)
{
struct dirent *de;
DIR *dir;
@@ -398,9 +398,9 @@ get_process_stats(struct shash *stats)
while ((de = readdir(dir)) != NULL) {
struct process_info pinfo;
- char *key, *value;
char *file_name;
char *extension;
+ char *key;
pid_t pid;
#ifdef _DIRENT_HAVE_D_TYPE
@@ -423,27 +423,23 @@ get_process_stats(struct shash *stats)
key = xasprintf("process_%.*s",
(int) (extension - de->d_name), de->d_name);
- if (shash_find(stats, key)) {
- free(key);
- continue;
- }
-
- if (LINUX && get_process_info(pid, &pinfo)) {
- value = xasprintf("%lu,%lu,%lld,%d,%lld,%lld",
- pinfo.vsz, pinfo.rss, pinfo.cputime,
- pinfo.crashes, pinfo.booted, pinfo.uptime);
- } else {
- value = xstrdup("");
+ if (!smap_get(stats, key)) {
+ if (LINUX && get_process_info(pid, &pinfo)) {
+ smap_add_format(stats, key, "%lu,%lu,%lld,%d,%lld,%lld",
+ pinfo.vsz, pinfo.rss, pinfo.cputime,
+ pinfo.crashes, pinfo.booted, pinfo.uptime);
+ } else {
+ smap_add(stats, key, "");
+ }
}
-
- shash_add_nocopy(stats, key, value);
+ free(key);
}
closedir(dir);
}
static void
-get_filesys_stats(struct shash *stats OVS_UNUSED)
+get_filesys_stats(struct smap *stats OVS_UNUSED)
{
#if HAVE_SETMNTENT && HAVE_STATVFS
static const char file_name[] = "/etc/mtab";
@@ -489,14 +485,14 @@ get_filesys_stats(struct shash *stats OVS_UNUSED)
endmntent(stream);
if (s.length) {
- shash_add(stats, "file_systems", ds_steal_cstr(&s));
+ smap_add(stats, "file_systems", ds_cstr(&s));
}
ds_destroy(&s);
#endif /* HAVE_SETMNTENT && HAVE_STATVFS */
}
void
-get_system_stats(struct shash *stats)
+get_system_stats(struct smap *stats)
{
get_cpu_cores(stats);
get_load_average(stats);
diff --git a/vswitchd/system-stats.h b/vswitchd/system-stats.h
index ac4a65e3c..9f965c632 100644
--- a/vswitchd/system-stats.h
+++ b/vswitchd/system-stats.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010 Nicira, Inc.
+/* Copyright (c) 2010, 2012 Nicira, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,8 @@
#ifndef VSWITCHD_SYSTEM_STATS
#define VSWITCHD_SYSTEM_STATS 1
-void get_system_stats(struct shash *);
+struct smap;
+
+void get_system_stats(struct smap *);
#endif /* vswitchd/system-stats.h */