about summary refs log tree commit homepage
path: root/mgmt.c
diff options
context:
space:
mode:
Diffstat (limited to 'mgmt.c')
-rw-r--r--mgmt.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/mgmt.c b/mgmt.c
index 2fbef74..839a919 100644
--- a/mgmt.c
+++ b/mgmt.c
@@ -3,6 +3,7 @@
  * License: GPLv3 or later (see COPYING for details)
  */
 #include "cmogstored.h"
+#include "trace.h"
 #include "mgmt.h"
 #include "digest.h"
 #include "ioprio.h"
@@ -205,6 +206,7 @@ parse:
                         return mgmt->wbuf ? MOG_NEXT_WAIT_WR : MOG_NEXT_ACTIVE;
                 }
         } else if (r == 0) { /* client shut down */
+                TRACE(CMOGSTORED_MGMT_RDCLOSE(mfd, buf_len));
                 return MOG_NEXT_CLOSE;
         } else {
                 switch (errno) {
@@ -215,8 +217,11 @@ parse:
                 case EINTR: goto reread;
                 case ECONNRESET:
                 case ENOTCONN:
+                        /* these errors are too common to log, normally */
+                        TRACE(CMOGSTORED_MGMT_RDERR(mfd, buf_len, errno));
                         return MOG_NEXT_CLOSE;
                 default:
+                        TRACE(CMOGSTORED_MGMT_RDERR(mfd, buf_len, errno));
                         syslog(LOG_NOTICE, "mgmt client died: %m");
                         return MOG_NEXT_CLOSE;
                 }
@@ -268,6 +273,19 @@ void mog_mgmt_quit_step(struct mog_fd *mfd)
         }
 }
 
+/* stringify the address for tracers */
+static MOG_NOINLINE void
+trace_mgmt_accepted(struct mog_fd *mfd, struct sockaddr *sa, socklen_t salen)
+{
+#ifdef HAVE_SYSTEMTAP
+        struct mog_ni ni;
+        int rc = mog_nameinfo(sa, salen, &ni);
+        const char *host = rc == 0 ? ni.ni_host : gai_strerror(rc);
+
+        TRACE(CMOGSTORED_MGMT_ACCEPTED(mfd->fd, host, ni.ni_serv));
+#endif /* !HAVE_SYSTEMTAP */
+}
+
 /* called immediately after accept(), this initializes the mfd (once) */
 void mog_mgmt_post_accept(int fd, struct mog_svc *svc,
                         struct sockaddr *sa, socklen_t salen)
@@ -275,6 +293,9 @@ void mog_mgmt_post_accept(int fd, struct mog_svc *svc,
         struct mog_fd *mfd = mog_fd_init(fd, MOG_FD_TYPE_MGMT);
         struct mog_mgmt *mgmt = &mfd->as.mgmt;
 
+        if (TRACE_ENABLED(CMOGSTORED_MGMT_ACCEPTED))
+                trace_mgmt_accepted(mfd, sa, salen);
+
         mog_mgmt_init(mgmt, svc);
         mog_idleq_add(svc->queue, mfd, MOG_QEV_RD);
 }