X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=innduct.git;a=blobdiff_plain;f=cli.c;h=963153918ae6ddc532969bb40668f3eec4f96ae3;hp=05e4827c55db6afbd9d3d2be91409af7dc990c0c;hb=95666dd4a955dd57f623ce896fea56813ab822bd;hpb=f4aee95c41a0d6231d115386b8fbb23f6b8e349a diff --git a/cli.c b/cli.c index 05e4827..9631539 100644 --- 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 + * + * 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 . + * + * (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"); +}