All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pete Zaitcev <zaitcev@redhat.com>
To: Jeff Garzik <jeff@garzik.org>
Cc: Project Hail List <hail-devel@vger.kernel.org>
Subject: [Patch 1/7] tabled: make two dump displays uniform
Date: Thu, 1 Apr 2010 19:51:09 -0600	[thread overview]
Message-ID: <20100401195109.01aa6b6a@redhat.com> (raw)

> From: Jeff Garzik <jgarzik@pobox.com>
> Subject: Re: Tabled issues
> Date: Mon, 29 Mar 2010 15:32:33 -0400

> I asserted that the standard stats dump facility must dump
> all available statistics.  That does not exclude other methods
> of stat(us) dumping.  Your patch added new stats to the HTML-pretty
> version of output, but failed to add the new stats to the standard
> stat dump facility.

Your wish is my command.

Signed-off-by: Pete Zaitcev <zaitcev@redhat.com>

---
 server/replica.c |   28 +++++++++++++++++++++++++
 server/server.c  |   47 ++++++++++++++++++++++++++++++++++--------
 server/status.c  |   22 +------------------
 server/storage.c |   50 +++++++++++++++++++++++++++++++++++++++++----
 server/tabled.h  |    3 ++
 5 files changed, 117 insertions(+), 33 deletions(-)

commit 6bba495d750dcc7ebe63938b91d4bb22740879fe
Author: Pete Zaitcev <zaitcev@yahoo.com>
Date:   Thu Apr 1 18:58:08 2010 -0600

    Make signal+applog and HTTP displays uniform.

diff --git a/server/replica.c b/server/replica.c
index abdd647..e774824 100644
--- a/server/replica.c
+++ b/server/replica.c
@@ -871,6 +871,34 @@ void rep_start()
 	kscan_enabled = true;
 }
 
+void rep_stats()
+{
+	bool running;
+	unsigned long kcnt;
+	time_t last;
+
+	applog(LOG_INFO, "REP: Jobs: queued %d active %d done %d",
+	       queue.njobs, active.njobs, done.njobs);
+
+	g_mutex_lock(kscan_mutex);
+	running = kscan_running;
+	last = kscan_last;
+	kcnt = kscan_cnt;
+	g_mutex_unlock(kscan_mutex);
+
+	if (running) {
+		applog(LOG_INFO, "REP: run Active started %lu scanned %lu",
+		      (long) last, kcnt);
+	} else {
+		if (last)
+			applog(LOG_INFO,
+			       "REP: run Done started %lu scanned %lu",
+			       (long) last, kcnt);
+		else
+			applog(LOG_INFO, "REP: run None");
+	}
+}
+
 bool rep_status(struct client *cli, GList *content)
 {
 	time_t now;
diff --git a/server/server.c b/server/server.c
index e0d785c..72db151 100644
--- a/server/server.c
+++ b/server/server.c
@@ -370,21 +370,50 @@ static void stats_signal(int signo)
 	write(tabled_srv.ev_pipe[1], &cmd, 1);
 }
 
-#define X(stat) \
-	applog(LOG_INFO, "STAT %s %lu", #stat, tabled_srv.stats.stat)
-
 static void stats_dump(void)
 {
-	X(poll);
-	X(event);
-	X(tcp_accept);
-	X(opt_write);
-	applog(LOG_INFO, "State: TDB %s",
+	applog(LOG_INFO, "STATE: TDB %s",
 	    state_name_tdb[tabled_srv.state_tdb]);
+	applog(LOG_INFO,
+	       "STATS: poll %lu event %lu tcp_accept %lu opt_write %lu",
+	       tabled_srv.stats.poll,
+	       tabled_srv.stats.event,
+	       tabled_srv.stats.tcp_accept,
+	       tabled_srv.stats.opt_write);
 	stor_stats();
+	rep_stats();
 }
 
-#undef X
+bool stat_status(struct client *cli, GList *content)
+{
+	char *str;
+
+	/*
+	 * The loadavg is system dependent, we'll figure it out later.
+	 * On Linux, applications read from /proc/loadavg.
+	 */
+	if (asprintf(&str,
+		     "<h1>Status</h1>"
+		     "<p>Host %s port %s</p>\r\n",
+		     tabled_srv.ourhost, tabled_srv.port) < 0)
+		return false;
+	content = g_list_append(content, str);
+	if (asprintf(&str,
+		     "<p>State: TDB %s</p>\r\n",
+		     state_name_tdb[tabled_srv.state_tdb]) < 0)
+		return false;
+	content = g_list_append(content, str);
+	if (asprintf(&str,
+		     "<p>Stats: "
+		     "poll %lu event %lu tcp_accept %lu opt_write %lu</p>\r\n",
+		     tabled_srv.stats.poll,
+		     tabled_srv.stats.event,
+		     tabled_srv.stats.tcp_accept,
+		     tabled_srv.stats.opt_write) < 0)
+		return false;
+	content = g_list_append(content, str);
+	return true;
+}
 
 static bool cli_write_free(struct client *cli, struct client_write *tmp,
 			   bool done)
diff --git a/server/status.c b/server/status.c
index bb67ac9..2029c09 100644
--- a/server/status.c
+++ b/server/status.c
@@ -114,25 +114,6 @@ out:
 	return false;
 }
 
-static bool stat_status(struct client *cli, GList *content)
-{
-	char *str;
-
-	/*
-	 * The loadavg is system dependent, we'll figure it out later.
-	 * On Linux, applications read from /proc/loadavg.
-	 */
-	if (asprintf(&str,
-		     "<h1>Status</h1>"
-		     "<p>Host %s port %s</p>\r\n"
-		     "<p>Stats: poll %lu event %lu</p>\r\n",
-		     tabled_srv.ourhost, tabled_srv.port,
-		     tabled_srv.stats.poll, tabled_srv.stats.event) < 0)
-		return false;
-	content = g_list_append(content, str);
-	return true;
-}
-
 static bool stat_root(struct client *cli)
 {
 	GList *content = NULL;
@@ -149,7 +130,8 @@ static bool stat_root(struct client *cli)
 
 	if (!stat_status(cli, content))
 		goto out_err;
-
+	if (!stor_status(cli, content))
+		goto out_err;
 	if (!rep_status(cli, content))
 		goto out_err;
 
diff --git a/server/storage.c b/server/storage.c
index 913ef33..7dab625 100644
--- a/server/storage.c
+++ b/server/storage.c
@@ -533,11 +533,53 @@ void stor_stats()
 	g_mutex_lock(tabled_srv.bigmutex);
 	now = time(NULL);
 	list_for_each_entry(sn, &tabled_srv.all_stor, all_link) {
-		applog(LOG_INFO, "SN nid %u %s last %lu (+ %ld) ref %d name %s",
-		       sn->id, sn->up? "up": "down",
-		       (long) sn->last_up, (long) (now - sn->last_up),
-		       sn->ref, sn->hostname);
+		if (sn->last_up) {
+			applog(LOG_INFO,
+			       "SN: nid %u %s ref %d name %s last %lu (+ %ld)",
+			       sn->id, sn->up? "up": "down",
+			       sn->ref, sn->hostname,
+			       (long) sn->last_up, (long) (now - sn->last_up));
+		} else {
+			applog(LOG_INFO,
+			       "SN: nid %u %s ref %d name %s",
+			       sn->id, sn->up? "up": "down",
+			       sn->ref, sn->hostname);
+		}
 	}
 	g_mutex_unlock(tabled_srv.bigmutex);
 }
 
+bool stor_status(struct client *cli, GList *content)
+{
+	struct storage_node *sn;
+	static char tag_down[] =
+		"<span style=\"background-color:red\">down</span>";
+	time_t now;
+	char *str;
+	int rc;
+
+	g_mutex_lock(tabled_srv.bigmutex);
+	now = time(NULL);
+	list_for_each_entry(sn, &tabled_srv.all_stor, all_link) {
+		if (sn->last_up) {
+			rc = asprintf(&str,
+				     "SN: nid %u %s ref %d name %s"
+				     " last %lu (+ %ld)<br />\r\n",
+				     sn->id, sn->up? "up": tag_down,
+				     sn->ref, sn->hostname,
+				     (long) sn->last_up,
+				     (long) (now - sn->last_up));
+		} else {
+			rc = asprintf(&str,
+				     "SN: nid %u %s ref %d name %s<br />\r\n",
+				     sn->id, sn->up? "up": tag_down,
+				     sn->ref, sn->hostname);
+		}
+		if (rc < 0)
+			break;
+		content = g_list_append(content, str);
+	}
+	g_mutex_unlock(tabled_srv.bigmutex);
+	return true;
+}
+
diff --git a/server/tabled.h b/server/tabled.h
index 72bf20d..b4f51ed 100644
--- a/server/tabled.h
+++ b/server/tabled.h
@@ -315,6 +315,7 @@ extern void req_sign(struct http_req *req, const char *bucket, const char *key,
 extern int debugging;
 extern struct server tabled_srv;
 extern struct compiled_pat patterns[];
+extern bool stat_status(struct client *cli, GList *content);
 extern bool cli_err(struct client *cli, enum errcode code);
 extern bool cli_err_write(struct client *cli, char *hdr, char *content);
 extern bool cli_resp_xml(struct client *cli, int http_status, GList *content);
@@ -357,6 +358,7 @@ extern void stor_add_node(uint32_t nid, const char *hostname,
 			  const char *portstr, struct geo *locp);
 extern int stor_node_check(struct storage_node *stn);
 extern void stor_stats(void);
+extern bool stor_status(struct client *cli, GList *content);
 
 /* storparse.c */
 extern void stor_parse(char *fname, const char *text, size_t len);
@@ -364,6 +366,7 @@ extern void stor_parse(char *fname, const char *text, size_t len);
 /* replica.c */
 extern void rep_init(struct event_base *ev_base);
 extern void rep_start(void);
+extern void rep_stats(void);
 extern bool rep_status(struct client *cli, GList *content);
 
 #endif /* __TABLED_H__ */

             reply	other threads:[~2010-04-02  1:51 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-04-02  1:51 Pete Zaitcev [this message]
2010-04-02 17:27 ` [Patch 1/7] tabled: make two dump displays uniform Jeff Garzik
2010-04-02 18:23   ` Pete Zaitcev
2010-04-06 16:57 ` Jeff Garzik
2010-04-06 18:29   ` Pete Zaitcev

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20100401195109.01aa6b6a@redhat.com \
    --to=zaitcev@redhat.com \
    --cc=hail-devel@vger.kernel.org \
    --cc=jeff@garzik.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.