chiark / gitweb /
Newline after show's full stop
[innduct.git] / cli.c
diff --git a/cli.c b/cli.c
index 05e4827c55db6afbd9d3d2be91409af7dc990c0c..963153918ae6ddc532969bb40668f3eec4f96ae3 100644 (file)
--- a/cli.c
+++ b/cli.c
@@ -1,3 +1,31 @@
+/*
+ *  innduct
+ *  tailing reliable realtime streaming feeder for inn
+ *  cli.c - command and control connections
+ *
+ *  Copyright (C) 2010 Ian Jackson <ijackson@chiark.greenend.org.uk>
+ * 
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ * 
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ * 
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ *  (I believe that when you compile and link this as part of the inn2
+ *  build, with the Makefile runes I have provided, all the libraries
+ *  and files which end up included in innduct are licence-compatible
+ *  with GPLv3.  If not then please let me know.  -Ian Jackson.)
+ */
+
+#include "innduct.h"
+
 /*========== command and control (CLI) connections ==========*/
 
 static int cli_master;
@@ -72,7 +100,10 @@ CCMD(stop) {
   abort();
 }
 
+CCMD(logstats) { showstats(); }
+
 CCMD(dump);
+CCMD(dumphere);
 
 /* messing with our head: */
 CCMD(period) { period(); }
@@ -84,8 +115,10 @@ static const CliCommand cli_commands[]= {
   { "h",             ccmd_help      },
   { "flush",         ccmd_flush     },
   { "stop",          ccmd_stop      },
+  { "logstats",      ccmd_logstats  },
   { "dump q",        ccmd_dump, 0,0 },
   { "dump a",        ccmd_dump, 0,1 },
+  { "show",          ccmd_dumphere  },
 
   { "p",             ccmd_period    },
 
@@ -169,7 +202,7 @@ static void cli_stdio_destroy(CliConn *cc) {
   free(cc);
 }
 
-static void cli_stdio(void) {
+void cli_stdio(void) {
   NEW_DECL(CliConn *,cc);
   cc->destroy= cli_stdio_destroy;
 
@@ -216,7 +249,7 @@ static void *cli_master_readable(oop_source *lp, int master,
     goto nocli;                                                        \
   }while(0)
 
-static void cli_init(void) {
+void cli_init(void) {
   union {
     struct sockaddr sa;
     struct sockaddr_un un;
@@ -298,17 +331,17 @@ static void dump_input_file(FILE *f, const CliCommand *c,
   free(dipf);
   
   if (ipf) {
-    DUMPV("%d", ipf->,readcount_ok);
-    DUMPV("%d", ipf->,readcount_blank);
-    DUMPV("%d", ipf->,readcount_err);
-    DUMPV("%d", ipf->,count_nooffer_missing);
+    DUMPV("%d", ipf->counts.,events[read_ok]);
+    DUMPV("%d", ipf->counts.,events[read_blank]);
+    DUMPV("%d", ipf->counts.,events[read_err]);
+    DUMPV("%d", ipf->counts.,events[nooffer_missing]);
   }
   fprintf(f,"\n");
   if (ipf) {
     ArtState state; const char *const *statename; 
     for (state=0, statename=artstate_names; *statename; state++,statename++) {
 #define RC_DUMP_FMT(x) " " #x "=%d"
-#define RC_DUMP_VAL(x) ,ipf->counts[state][RC_##x]
+#define RC_DUMP_VAL(x) ,ipf->counts.results[state][RC_##x]
       fprintf(f,"input %s counts %-11s"
              RESULT_COUNTS(RC_DUMP_FMT,RC_DUMP_FMT) "\n",
              wh, *statename
@@ -319,12 +352,8 @@ static void dump_input_file(FILE *f, const CliCommand *c,
   }
 }
 
-CCMD(dump) {
+static void dumpinfo(const CliCommand *c, FILE *f) {
   int i;
-  fprintf(cc->out, "dumping state to %s\n", path_dump);
-  FILE *f= fopen(path_dump, "w");
-  if (!f) { fprintf(cc->out, "failed: open: %s\n", strerror(errno)); return; }
-
   fprintf(f,"general");
   DUMPV("%s", sms_names,[sms]);
   DUMPV("%d", ,until_flush);
@@ -404,9 +433,20 @@ CCMD(dump) {
   DUMPV("%s", , path_dump);
   DUMPV("%s", , globpat_backlog);
   fprintf(f,"\n");
+}
 
+CCMD(dump) {
+  fprintf(cc->out, "dumping state to %s\n", path_dump);
+  FILE *f= fopen(path_dump, "w");
+  if (!f) { fprintf(cc->out, "failed: open: %s\n", strerror(errno)); return; }
+  dumpinfo(c,f);
   if (!!ferror(f) + !!fclose(f)) {
     fprintf(cc->out, "failed: write: %s\n", strerror(errno));
     return;
   }
 }
+
+CCMD(dumphere) {
+  dumpinfo(c,cc->out);
+  fprintf(cc->out, ".\n");
+}