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__ */
next 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).