diff options
-rw-r--r-- | configure.ac | 18 | ||||
-rw-r--r-- | src/graph.c | 1 | ||||
-rw-r--r-- | src/html.gram.y | 34 | ||||
-rw-r--r-- | src/html.lex.l | 10 | ||||
-rw-r--r-- | src/log.c | 16 | ||||
-rw-r--r-- | src/main.c | 77 | ||||
-rw-r--r-- | src/readconfig.c | 32 | ||||
-rw-r--r-- | src/report.c | 40 | ||||
-rw-r--r-- | src/stat.c | 65 | ||||
-rw-r--r-- | src/tagr.h | 5 |
10 files changed, 167 insertions, 131 deletions
diff --git a/configure.ac b/configure.ac index a622998..70e0c79 100644 --- a/configure.ac +++ b/configure.ac @@ -73,8 +73,26 @@ AC_CHECK_HEADERS(gdbm.h, AC_CHECK_LIB([gdbm], [gdbm_open], , [AC_MSG_ERROR([libgdbm not found])]) + +## Default syslog facility +LOG_FACILITY="LOG_DAEMON" + +AC_ARG_VAR([LOG_FACILITY], + [Default syslog facility]) +if test -n "$LOG_FACILITY"; then + logfacility=`echo $LOG_FACILITY | tr a-z A-Z` + case $logfacility in + USER|DAEMON|AUTH|AUTHPRIV|MAIL|CRON|LOCAL[[0-7]]) + LOG_FACILITY=LOG_$logfacility;; + LOG_USER|LOG_DAEMON|LOG_AUTH|LOG_AUTHPRIV|LOG_MAIL|LOG_CRON|LOG_LOCAL[[0-7]]) + LOG_FACILITY=$logfacility;; + *) AC_MSG_ERROR([Invalid value of LOG_FACILITY]);; + esac +fi +AC_DEFINE_UNQUOTED([LOG_FACILITY],$LOG_FACILITY, + [Default syslog facility.]) AC_CONFIG_FILES([Makefile gnu/Makefile grecs/Makefile diff --git a/src/graph.c b/src/graph.c index bfd00cb..1464e8b 100644 --- a/src/graph.c +++ b/src/graph.c @@ -53,8 +53,9 @@ int graph_ysize = 100; int graph_h_margin[2] = { 100, 14 }; int graph_v_margin[2] = { 14, 35 }; +/* FIXME: I18N?? */ char *rate_unit = "Bytes per Second"; #define make_color_index(g, ar) \ gdImageColorAllocate (g, (ar)[0], (ar)[1], (ar)[2]) diff --git a/src/html.gram.y b/src/html.gram.y index fae64ff..e488494 100644 --- a/src/html.gram.y +++ b/src/html.gram.y @@ -112,9 +112,9 @@ expr : value || $3.type == unspecified_value) init_value (&$$, unspecified_value, NULL); else if ($1.type != $3.type) { - yyerror ("type mismatch in addition"); + yyerror (_("type mismatch in addition")); init_value (&$$, unspecified_value, NULL); } else { @@ -144,14 +144,14 @@ expr : value || $3.type == unspecified_value) init_value (&$$, unspecified_value, NULL); else if ($1.type != $3.type) { - yyerror ("type mismatch in subtraction"); + yyerror (_("type mismatch in subtraction")); init_value (&$$, unspecified_value, NULL); } else if ($1.type == string_value) { - yyerror ("subtraction not defined for strings"); + yyerror (_("subtraction not defined for strings")); init_value (&$$, unspecified_value, NULL); } else { @@ -166,14 +166,14 @@ expr : value || $3.type == unspecified_value) init_value (&$$, unspecified_value, NULL); else if ($1.type != $3.type) { - yyerror ("type mismatch in multiplication"); + yyerror (_("type mismatch in multiplication")); init_value (&$$, unspecified_value, NULL); } else if ($1.type == string_value) { - yyerror ("multiplication not defined for strings"); + yyerror (_("multiplication not defined for strings")); init_value (&$$, unspecified_value, NULL); } else { @@ -188,19 +188,19 @@ expr : value || $3.type == unspecified_value) init_value (&$$, unspecified_value, NULL); else if ($1.type != $3.type) { - yyerror ("type mismatch in division"); + yyerror (_("type mismatch in division")); init_value (&$$, unspecified_value, NULL); } else if ($1.type == string_value) { - yyerror ("division not defined for strings"); + yyerror (_("division not defined for strings")); init_value (&$$, unspecified_value, NULL); } else if (fabs ($3.v.number) < 1.0e-5) { - yyerror ("division by zero"); + yyerror (_("division by zero")); init_value (&$$, unspecified_value, NULL); } else { @@ -214,9 +214,9 @@ expr : value if ($2.type == unspecified_value) init_value (&$$, unspecified_value, NULL); else if ($2.type == string_value) { - yyerror ("unary minus not defined for strings"); + yyerror (_("unary minus not defined for strings")); init_value (&$$, unspecified_value, NULL); } else { @@ -229,9 +229,9 @@ expr : value if ($2.type == unspecified_value) init_value (&$$, unspecified_value, NULL); else if ($2.type == string_value) { - yyerror ("unary plus not defined for strings"); + yyerror (_("unary plus not defined for strings")); init_value (&$$, unspecified_value, NULL); } else { @@ -272,9 +272,9 @@ create_html (pp_tab_t *tab, char *file, char *dest) tmp_file = fopen (tmp_file_name, "w"); if (!tmp_file) { - logmsg (L_ERR, "cannot open output file `%s': %s", + logmsg (L_ERR, _("cannot open output file `%s': %s"), file, strerror (errno)); html_close (); return 1; } @@ -285,16 +285,16 @@ create_html (pp_tab_t *tab, char *file, char *dest) if (rc == 0) { if (unlink (dest) && errno != ENOENT) { - logmsg (L_ERR, "cannot unlink file `%s': %s", + logmsg (L_ERR, _("cannot unlink file `%s': %s"), dest, strerror (errno)); rc = 1; } if (rename (tmp_file_name, dest)) { - logmsg (L_ERR, "cannot rename `%s' to `%s': %s", + logmsg (L_ERR, _("cannot rename `%s' to `%s': %s"), tmp_file_name, dest, strerror (errno)); rc = 1; } @@ -493,18 +493,18 @@ read_symtab (pp_tab_t **tab, const char *name) p = buf; cmd = *p++; if (*p != ' ' || !(isascii (*++p) && isalpha (*p))) { - logmsg (L_ERR, "%s:%u: invalid input: %s", + logmsg (L_ERR, _("%s:%u: invalid input: %s"), name, line, buf); status = 1; break; } var = p; p = strchr (var, ' '); if (!p) { - logmsg (L_ERR, "%s:%u: invalid input: %s", + logmsg (L_ERR, _("%s:%u: invalid input: %s"), name, line, buf); status = 1; break; } @@ -522,9 +522,9 @@ read_symtab (pp_tab_t **tab, const char *name) char *p; double num = strtod (value, &p); if (*p) { - logmsg (L_ERR, "%s:%u: invalid numeric value: %s", + logmsg (L_ERR, _("%s:%u: invalid numeric value: %s"), name, line, value); status = 1; } else @@ -532,9 +532,9 @@ read_symtab (pp_tab_t **tab, const char *name) } break; default: - logmsg (L_NOTICE, "%s:%u: ignoring unknown command %#03o", + logmsg (L_NOTICE, _("%s:%u: ignoring unknown command %#03o"), name, line, cmd); } } free (buf); diff --git a/src/html.lex.l b/src/html.lex.l index 931bfc1..0e0d423 100644 --- a/src/html.lex.l +++ b/src/html.lex.l @@ -42,18 +42,18 @@ N [0-9]+ } \${NAME} { if (find_value (yytext+1, &yylval.value)) { - yyerror ("unknown identifier"); + yyerror (_("unknown identifier")); init_value (&yylval.value, unspecified_value, NULL); } return IDENT; } \$\({NAME}\) { yytext[yyleng-1] = 0; if (find_value (yytext+2, &yylval.value)) { - yyerror ("unknown identifier"); + yyerror (_("unknown identifier")); init_value (&yylval.value, unspecified_value, NULL); } return IDENT; } @@ -61,9 +61,9 @@ N [0-9]+ char *p = strchr (yytext, ':'); *p = 0; if (find_value (yytext+2, &yylval.value)) { - yyerror ("unknown identifier"); + yyerror (_("unknown identifier")); init_value (&yylval.value, unspecified_value, NULL); } else { @@ -76,9 +76,9 @@ N [0-9]+ char *p = strchr (yytext, ':'); *p++ = 0; if (find_value (yytext+2, &val)) { - yyerror ("unknown identifier"); + yyerror (_("unknown identifier")); init_value (&yylval.value, unspecified_value, NULL); } else { @@ -129,9 +129,9 @@ html_open (char *file) { yyin = fopen (file, "r"); if (!yyin) { - logmsg (L_ERR, "cannot open input file `%s': %s", + logmsg (L_ERR, _("cannot open input file `%s': %s"), file, strerror (errno)); return 1; } html_input_file = file; @@ -28,9 +28,9 @@ #include <syslog.h> #include <argp.h> #include <tagr.h> -int log_facility = LOGFACILITY; +int log_facility = LOG_FACILITY; char *log_tag; int log_print_severity; /* FIXME: not used */ void @@ -50,23 +50,23 @@ int syslog_level[] = { LOG_CRIT, }; char *level_str[] = { - "debug", - "info", - "notice", - "warning", - "error", - "CRITICAL", + N_("debug"), + N_("info"), + N_("notice"), + N_("warning"), + N_("error"), + N_("CRITICAL"), }; void vlogmsg (int level, const char *fmt, va_list ap) { if (grecs_log_to_stderr) { - fprintf (stderr, "%s: %s: ", log_tag, level_str[level]); + fprintf (stderr, "%s: %s: ", log_tag, gettext (level_str[level])); vfprintf (stderr, fmt, ap); fprintf (stderr, "\n"); } else @@ -79,10 +79,10 @@ static char *check_mode = 0; static char *user_option = NULL; static char *html_template_option = NULL; const char *program_version = "tagr (" PACKAGE_STRING ")"; -static char doc[] = "tagr -- traffic analyzer and grapher"; -static char args_doc[] = ""; +static char doc[] = N_("tagr -- traffic analyzer and grapher"); +static char args_doc[] = "[FILES or DIRS...]"; enum { OPT_IMPORT = 256, OPT_TEST_TEMPLATE, @@ -111,9 +111,9 @@ static struct argp_option options[] = { {"import", OPT_IMPORT, NULL, 0, N_("import old (mrtg-style) log files from DIR (or the basedir, if not given)"), GRID+1 }, {"read", OPT_READ, NULL, 0, - N_("read statistics from the given file or standard input") }, + N_("read statistics from given FILEs or standard input") }, {"rebuild", 'b', NULL, 0, N_("rebuild graphs using existing statistics"), GRID+1}, {"list", 'l', NULL, 0, N_("list contents of the rate database"), GRID+1}, {"show-defaults", OPT_SHOW_DEFAULTS, NULL, 0, @@ -186,14 +186,14 @@ static struct argp_option options[] = { static void show_defaults () { - printf ("Configuration file: %s\n", TAGR_CONFIGFILE); - printf ("Page template file: %s\n", TAGR_TEMPLATE); - printf ("PID file: %s\n", TAGR_PIDFILE); - printf ("DB file name: %s\n", TAGR_DBNAME); - printf ("DB file permissions: %#o\n", TAGR_DBMODE); - printf ("Syslog facility number: %d\n", LOGFACILITY); + printf (_("Configuration file: %s\n"), TAGR_CONFIGFILE); + printf (_("Page template file: %s\n"), TAGR_TEMPLATE); + printf (_("PID file: %s\n"), TAGR_PIDFILE); + printf (_("DB file name: %s\n"), TAGR_DBNAME); + printf (_("DB file permissions: %#o\n"), TAGR_DBMODE); + printf (_("Syslog facility number: %d\n"), LOG_FACILITY); } static void add_check_mode (int c) @@ -334,9 +334,9 @@ change_privs (uid_t uid, gid_t gid) /* Reset group permissions */ emptygidset[0] = gid ? gid : getegid (); if (geteuid () == 0 && setgroups (1, emptygidset)) { - logmsg (L_ERR, "setgroups(1, %lu) failed: %s", + logmsg (L_ERR, _("setgroups(1, %lu) failed: %s"), (u_long) emptygidset[0], strerror (errno)); rc = 1; } @@ -344,27 +344,28 @@ change_privs (uid_t uid, gid_t gid) be reset first */ #if defined(HAVE_SETEGID) if ((rc = setegid (gid)) < 0) - logmsg (L_ERR, "setegid(%lu) failed: %s", (u_long) gid, strerror (errno)); + logmsg (L_ERR, _("setegid(%lu) failed: %s"), + (u_long) gid, strerror (errno)); #elif defined(HAVE_SETREGID) if ((rc = setregid (gid, gid)) < 0) - logmsg (L_ERR, "setregid(%lu,%lu) failed: %s", + logmsg (L_ERR, _("setregid(%lu,%lu) failed: %s"), (u_long) gid, (u_long) gid, strerror (errno)); #elif defined(HAVE_SETRESGID) if ((rc = setresgid (gid, gid, gid)) < 0) - logmsg (L_ERR, "setresgid(%lu,%lu,%lu) failed: %s", + logmsg (L_ERR, _("setresgid(%lu,%lu,%lu) failed: %s"), (u_long) gid, (u_long) gid, (u_long) gid, strerror (errno)); #endif if (rc == 0 && gid != 0) { if ((rc = setgid (gid)) < 0 && getegid () != gid) - logmsg (L_ERR, "setgid(%lu) failed: %s", + logmsg (L_ERR, _("setgid(%lu) failed: %s"), (u_long) gid, strerror (errno)); if (rc == 0 && getegid () != gid) { - logmsg (L_ERR, "cannot set effective gid to %lu: %s", + logmsg (L_ERR, _("cannot set effective gid to %lu: %s"), (u_long) gid, strerror (errno)); rc = 1; } } @@ -384,24 +385,24 @@ change_privs (uid_t uid, gid_t gid) { if (setreuid (uid, -1) < 0) { logmsg (L_ERR, - "setreuid(%lu,-1) failed: %s", + _("setreuid(%lu,-1) failed: %s"), (u_long) uid, strerror (errno)); rc = 1; } if (setuid (uid) < 0) { logmsg (L_ERR, - "second setuid(%lu) failed: %s", + _("second setuid(%lu) failed: %s"), (u_long) uid, strerror (errno)); rc = 1; } } else #endif { - logmsg (L_ERR, "setuid(%lu) failed: %s", + logmsg (L_ERR, _("setuid(%lu) failed: %s"), (u_long) uid, strerror (errno)); rc = 1; } } @@ -411,14 +412,14 @@ change_privs (uid_t uid, gid_t gid) euid = geteuid (); if (uid != 0 && setuid (0) == 0) { - logmsg (L_ERR, "seteuid(0) succeeded when it should not"); + logmsg (L_ERR, _("seteuid(0) succeeded when it should not")); rc = 1; } else if (uid != euid && setuid (euid) == 0) { - logmsg (L_ERR, "cannot drop non-root setuid privileges"); + logmsg (L_ERR, _("cannot drop non-root setuid privileges")); rc = 1; } } return rc; @@ -433,9 +434,9 @@ change_user () return; if (getuid () == 0) { - logmsg (L_NOTICE, "not a superuser: ignoring the `user' statement"); + logmsg (L_NOTICE, _("not a superuser: ignoring the `user' statement")); return; } pwd = getpwnam (user); @@ -461,18 +462,19 @@ decode_buffer () reply->n_addr = ntohl (reply->n_addr); if (reply->n_addr > MAXADDR) { - logmsg (L_NOTICE, "got invalid packet: n_addr = %d", reply->n_addr); + logmsg (L_NOTICE, _("got invalid packet: n_addr = %d"), + reply->n_addr); return; } reply->timestamp = ntohl (reply->timestamp); if (verbose_level) { char tbuf[sizeof("2009-04-01 00:00:00")]; strftime (tbuf, sizeof tbuf, "%Y-%m-%d %H:%M:%S", gmtime (&reply->timestamp)); - logmsg (L_INFO, "Received packet: %d %lu - %s", reply->n_addr, + logmsg (L_INFO, _("Received packet: %d %lu - %s"), reply->n_addr, (unsigned long) reply->timestamp, tbuf); } sp = reply->stat; @@ -482,9 +484,9 @@ decode_buffer () pid_t pid = fork (); if (pid > 0) return; else if (pid < 0) - logmsg (L_ERR, "can't fork: %s", strerror (errno)); + logmsg (L_ERR, _("cannot fork: %s"), strerror (errno)); else { signal (SIGHUP, SIG_IGN); signal (SIGCHLD, SIG_IGN); @@ -496,9 +498,9 @@ decode_buffer () for (i = 0; i < reply->n_addr; i++, sp++) { sp->in = ntohl (sp->in); sp->out = ntohl (sp->out); - verbose (1, "Monitor %s: %lu %lu", sp->name, sp->in, sp->out); + verbose (1, _("Monitor %s: %lu %lu"), sp->name, sp->in, sp->out); report (sp, reply->timestamp); } close_db (); @@ -524,12 +526,13 @@ read_input (const char *name) else { fp = fopen (name, "r"); if (!fp) - die (EX_OSERR, "cannot open file `%s': %s", name, strerror (errno)); + die (EX_OSERR, _("cannot open file `%s': %s"), + name, strerror (errno)); } - verbose (2, "Reading `%s'", name); + verbose (2, _("Reading `%s'"), name); open_db (TAGR_DB_WR); while (getline (&buf, &bufsize, fp) > 0) { @@ -546,20 +549,20 @@ read_input (const char *name) i = 0; while (*p && !isspace (*p)) { if (i > MAX_NAME_LENGTH) - die (EX_DATAERR, "%s:%lu: ID too long", name, line); + die (EX_DATAERR, _("%s:%lu: ID too long"), name, line); st.name[i++] = *p++; } st.name[i] = 0; if (sscanf (p, " %lu %lu %lu\n", &t, &st.in, &st.out) != 3) - die (EX_DATAERR, "%s:%lu: invalid input line", name, line); + die (EX_DATAERR, _("%s:%lu: invalid input line"), name, line); report (&st, t); } fclose (fp); close_db (); - verbose (2, "Finished reading `%s'", name); + verbose (2, _("Finished reading `%s'"), name); } int get_port (char *str) @@ -574,9 +577,9 @@ get_port (char *str) if (s) pn = s->s_port; else { - logmsg (L_ERR, "no such service: %s", str); + logmsg (L_ERR, _("no such service: %s"), str); return 0; } } return pn; @@ -593,17 +596,17 @@ enum command command; RETSIGTYPE sig_quit (int sig) { - logmsg (L_INFO, "exiting on signal %d", sig); + logmsg (L_INFO, _("exiting on signal %d"), sig); unlink (pidfile); exit (0); } RETSIGTYPE sig_fatal (int sig) { - logmsg (L_ERR, "FATAL: exiting on signal %d", sig); + logmsg (L_ERR, _("FATAL: exiting on signal %d"), sig); unlink (pidfile); exit (EX_UNAVAILABLE); } @@ -715,9 +718,9 @@ tagr_restart (char **argv) #define CHECK_USAGE(cond, opt, mode_opt) \ do \ if (cond) \ - die (EX_USAGE, "%s is meaningless with %s", opt, mode_opt); \ + die (EX_USAGE, _("%s is meaningless with %s"), opt, mode_opt); \ while (0) #define CHECK_OPTION(opt, optname) \ do \ @@ -772,9 +775,9 @@ main (int argc, char **argv) argc -= index; argv += index; if (argc != 0 && !(list_option || import_option)) - die (EX_USAGE, "Too many arguments"); + die (EX_USAGE, _("Too many arguments")); if (readconfig ()) exit (EX_CONFIG); @@ -894,18 +897,18 @@ main (int argc, char **argv) { FILE *fp; if (daemon (0, 0)) - die (EX_OSERR, "cannot become daemon: %s", strerror (errno)); + die (EX_OSERR, _("cannot become daemon: %s"), strerror (errno)); if ((fp = fopen (pidfile, "w")) != NULL) { fprintf (fp, "%lu\n", (unsigned long) getpid ()); fclose (fp); } else { - logmsg (L_ERR, "can't write pid file %s: %s", + logmsg (L_ERR, _("cannot write pid file %s: %s"), pidfile, strerror (errno)); } } diff --git a/src/readconfig.c b/src/readconfig.c index e60d335..e4e4e83 100644 --- a/src/readconfig.c +++ b/src/readconfig.c @@ -380,40 +380,44 @@ static struct grecs_keyword tagr_kw[] = { NULL, NULL, log_kw }, { "rate-units", NULL, N_("Name of rate units"), grecs_type_string, &rate_unit }, - { "number-suffixes", N_("suffixes"), NULL /* FIXME */, + { "number-suffixes", N_("suffixes"), + N_("Not implemented") /* FIXME */, grecs_type_string, NULL, 0, cb_number_suffixes }, { "transparent", NULL, N_("Transparent graphs"), grecs_type_bool, &transparent_option }, - { "percent", NULL, NULL /* FIXME: descr */, + { "percent", NULL, + N_("Draw in/out percent graph (not implemented)"), /* FIXME */ grecs_type_bool, &percent_option }, - { "zero-unknown", NULL, NULL /* FIXME: descr */, + { "zero-unknown", NULL, + N_("Zero-out missing samples (not implemented)") /* FIXME */, grecs_type_bool, &zero_unknown_option }, - { "fill-incoming", NULL, NULL /* FIXME: descr */, + { "fill-incoming", NULL, N_("Fill incoming graph"), grecs_type_bool, &fill_incoming_option }, { "color-background", NULL, N_("Set background color"), grecs_type_int, color_background, 0, cb_color }, - { "color-light", NULL, NULL /* FIXME: descr */, + { "color-light", NULL, N_("`Light' color (for the border)"), grecs_type_int, color_light, 0, cb_color }, - { "color-dark", NULL, NULL /* FIXME: descr */, + { "color-dark", NULL, N_("`Dark' color (for the border)"), grecs_type_int, color_dark, 0, cb_color }, - { "color-major", NULL, NULL /* FIXME: descr */, + { "color-major", NULL, + N_("`Major' color (boundaries, max. values, zero mark, etc.)"), grecs_type_int, color_major, 0, cb_color }, - { "color-in", NULL, NULL /* FIXME: descr */, + { "color-in", NULL, N_("Color for the input graph"), grecs_type_int, color_in, 0, cb_color }, - { "color-out", NULL, NULL /* FIXME: descr */, + { "color-out", NULL, N_("Color for the output graph"), grecs_type_int, color_out, 0, cb_color }, - { "color-grid", NULL, NULL /* FIXME: descr */, + { "color-percent", NULL, N_("Color for the i/o percent graph"), + grecs_type_int, color_percent, 0, cb_color }, + { "color-grid", NULL, N_("Grid and axes color"), grecs_type_int, color_grid, 0, cb_color }, - { "color-in-max", NULL, NULL /* FIXME: descr */, + { "color-in-max", NULL, N_("Not implemented") /* FIXME */, grecs_type_int, color_in_max, 0, cb_color }, - { "color-out-max", NULL, NULL /* FIXME: descr */, + { "color-out-max", NULL, N_("Not implemented") /* FIXME */, grecs_type_int, color_out_max, 0, cb_color }, - { "color-percent", NULL, NULL /* FIXME: descr */, - grecs_type_int, color_percent, 0, cb_color }, /* FIXME */ { NULL } }; diff --git a/src/report.c b/src/report.c index ed8a34d..ed3a81b 100644 --- a/src/report.c +++ b/src/report.c @@ -52,9 +52,9 @@ open_db (int flag) flag == TAGR_DB_WR ? GDBM_WRCREAT : GDBM_READER, TAGR_DBMODE, tagr_db_report); if (dbf == NULL) { - logmsg (L_ERR, "Cannot open database %s: %s", + logmsg (L_ERR, _("cannot open database %s: %s"), dbname, gdbm_strerror (gdbm_errno)); exit (1); } } @@ -90,12 +90,13 @@ _read_db (datum key, struct traffic_record **tr) datum content; content = gdbm_fetch (dbf, key); if (content.dptr == NULL) - logmsg (L_NOTICE, "Record for %*.*s not found", key.dsize, key.dsize, key.dptr); + logmsg (L_NOTICE, _("record for %*.*s not found"), + key.dsize, key.dsize, key.dptr); else if (content.dsize != sizeof **tr) { - logmsg (L_ERR, "Wrong record size for %*.*s: %lu", + logmsg (L_ERR, _("wrong record size for %*.*s: %lu"), key.dsize, key.dsize, key.dptr, content.dsize); } else { @@ -103,9 +104,9 @@ _read_db (datum key, struct traffic_record **tr) tr_init (*tr); return; } - logmsg (L_NOTICE, "Creating record for %*.*s", + logmsg (L_NOTICE, _("creating record for %*.*s"), key.dsize, key.dsize, key.dptr); *tr = xmalloc (sizeof **tr); memset (*tr, 0, sizeof **tr); tr_init (*tr); @@ -135,9 +136,9 @@ write_db (struct monitor *mon, struct traffic_record *tr) content.dptr = (char *) tr; if (gdbm_store (dbf, key, content, GDBM_REPLACE)) { - logmsg (L_ERR, "Failed to write data for %s: %s", + logmsg (L_ERR, _("failed to write data for %s: %s"), mon->id, gdbm_strerror (gdbm_errno)); } } @@ -146,9 +147,11 @@ print_queue (const char *title, queue_t *q) { int i, count; count = queue_count (q); - printf ("%s (%d entries):\n", title, count); + printf (ngettext ("%s (%d entry):\n", "%s (%d entries):\n", + count), + title, count); for (i = count - 1; i >= 0; i--) { struct traffic_history *th = queue_get_ptr (q, i); printf("%d %g %g\n", count - i, th->inrate, th->outrate); @@ -174,22 +177,23 @@ print_tr (datum key, struct traffic_record *tr) tm = localtime (&tr->last.time); printf ("ID: %*.*s\n", key.dsize, key.dsize, key.dptr); strftime (buf, sizeof buf, "%c", tm); - printf ("Last sample: %lu (%s) %lu %lu\n", + printf (_("Last sample: %lu (%s) %lu %lu\n"), tr->last.time, buf, tr->last.in, tr->last.out); - printf ("Last rates: %g %g\n", tr->last_rates.inrate, tr->last_rates.outrate); - print_queue ("Daily rates", &tr->day_hist); + printf (_("Last rates: %g %g\n"), + tr->last_rates.inrate, tr->last_rates.outrate); + print_queue (_("Daily rates"), &tr->day_hist); - print_avg ("Weekly average", &tr->week_avg); - print_queue ("Weekly rates", &tr->week_hist); + print_avg (_("Weekly average"), &tr->week_avg); + print_queue (_("Weekly rates"), &tr->week_hist); - print_avg ("Monthly average", &tr->month_avg); - print_queue ("Monthly rates", &tr->month_hist); + print_avg (_("Monthly average"), &tr->month_avg); + print_queue (_("Monthly rates"), &tr->month_hist); - print_avg ("Yearly average", &tr->year_avg); - print_queue ("Yearly rates", &tr->year_hist); + print_avg (_("Yearly average"), &tr->year_avg); + print_queue (_("Yearly rates"), &tr->year_hist); } void list_db () @@ -231,9 +235,9 @@ report (Stat *stat, time_t timestamp) write_db (mon, tr); free (tr); } else - logmsg (L_WARNING, "%s not found in config", stat->name); + logmsg (L_WARNING, _("%s not found in config"), stat->name); } int update_monitor (datum key, time_t timestamp, int force) @@ -272,9 +276,9 @@ rebuild (int force) datum key; datum content; time_t now = time (NULL); - verbose (1, "rebuild initiated"); + verbose (1, _("rebuild initiated")); open_db (TAGR_DB_WR); key = gdbm_firstkey (dbf); while (key.dptr) { @@ -283,6 +287,6 @@ rebuild (int force) free (key.dptr); key = nextkey; } close_db (); - verbose (1, "rebuild finished"); + verbose (1, _("rebuild finished")); } @@ -44,9 +44,9 @@ interpolate (queue_t *q, if (now - last_time <= step) { th.inrate = inrate; th.outrate = outrate; - verbose (3, "Insert %lu %g %g", next, th.inrate, th.outrate); + verbose (3, _("insert %lu %g %g"), next, th.inrate, th.outrate); queue_put (q, &th); if (ovf) ovf (&th, tr, now); return; @@ -57,9 +57,9 @@ interpolate (queue_t *q, th.inrate = (inrate - last_rates->inrate) * (next - last_time) / interval + last_rates->inrate; th.outrate = (outrate - last_rates->outrate) * (next - last_time) / interval + last_rates->outrate; - verbose (3, "Insert %lu %g %g", next, th.inrate, th.outrate); + verbose (3, _("insert %lu %g %g"), next, th.inrate, th.outrate); queue_put (q, &th); if (ovf) ovf (&th, tr, now); } @@ -91,9 +91,9 @@ overflow (struct traffic_history *th, { struct traffic_history tmp; tmp.inrate = avg->inrate; tmp.outrate = avg->outrate; - verbose (3, "Insert %lu %g %g", now, tmp.inrate, tmp.outrate); + verbose (3, _("insert %lu %g %g"), now, tmp.inrate, tmp.outrate); queue_put (q, &tmp); } avg->inrate = avg->outrate = 0; @@ -107,30 +107,33 @@ overflow (struct traffic_history *th, int ovf_monthly (struct traffic_history *th, struct traffic_record *tr, time_t now) { - verbose (2, "begin overflow_monthly %lu %g %g", now, th->inrate, th->outrate); + verbose (2, _("begin overflow_monthly %lu %g %g"), + now, th->inrate, th->outrate); overflow (th, tr, now, NULL, &tr->year_avg, &tr->year_hist, YEAR_COUNT, YEAR_SAMPLE); - verbose (2, "end overflow_monthly"); + verbose (2, _("end overflow_monthly")); } int ovf_weekly (struct traffic_history *th, struct traffic_record *tr, time_t now) { - verbose (2, "begin overflow_weekly %lu %g %g", now, th->inrate, th->outrate); + verbose (2, _("begin overflow_weekly %lu %g %g"), + now, th->inrate, th->outrate); overflow (th, tr, now, ovf_monthly, &tr->month_avg, &tr->month_hist, MONTH_COUNT, MONTH_SAMPLE); - verbose (2, "end overflow_daily"); + verbose (2, _("end overflow_daily")); } int ovf_daily (struct traffic_history *th, struct traffic_record *tr, time_t now) { - verbose (2, "begin overflow_daily %lu %g %g", now, th->inrate, th->outrate); + verbose (2, _("begin overflow_daily %lu %g %g"), + now, th->inrate, th->outrate); overflow (th, tr, now, ovf_weekly, &tr->week_avg, &tr->week_hist, WEEK_COUNT, WEEK_SAMPLE); - verbose (2, "end overflow_daily"); + verbose (2, _("end overflow_daily")); } void update_stats (struct monitor *mon, struct traffic_sample *sample, @@ -143,9 +146,9 @@ update_stats (struct monitor *mon, struct traffic_sample *sample, interval = sample->time - tr->last.time; if (interval == 0) { - logmsg (L_ERR, "Ignoring zero interval"); + logmsg (L_ERR, _("ignoring zero interval")); return; } inrate = (double) sample->in / interval; outrate = (double) sample->out / interval; @@ -216,9 +219,9 @@ _convert (queue_t *q, ovf_t ovf, outrate = (double) hp->out; if (interval == 0) { - logmsg (L_ERR, "Ignoring zero interval"); + logmsg (L_ERR, _("ignoring zero interval")); break; } if (lastp) { @@ -251,48 +254,48 @@ _convert (queue_t *q, ovf_t ovf, static void convert_yearly (struct traffic_record *tr, struct traffic_sample *hp, size_t count) { - verbose (2, "begin convert_yearly"); + verbose (2, _("begin convert_yearly")); _convert (&tr->year_hist, NULL, tr, hp, count, YEAR_SAMPLE); compute_avg (&tr->year_avg, &tr->year_hist, &tr->last); - verbose (2, "end convert_yearly"); + verbose (2, _("end convert_yearly")); } static void convert_monthly (struct traffic_record *tr, struct traffic_sample *hp, size_t count) { - verbose (2, "begin convert_monthly"); + verbose (2, _("begin convert_monthly")); if (count > MONTH_COUNT+1) convert_yearly (tr, hp + MONTH_COUNT + 1, count - (MONTH_COUNT + 1)); _convert (&tr->month_hist, ovf_monthly, tr, hp, MONTH_COUNT + 1, MONTH_SAMPLE); compute_avg (&tr->month_avg, &tr->month_hist, &tr->last); - verbose (2, "end convert_monthly"); + verbose (2, _("end convert_monthly")); } static void convert_weekly (struct traffic_record *tr, struct traffic_sample *hp, size_t count) { - verbose (2, "begin convert_weekly"); + verbose (2, _("begin convert_weekly")); if (count > WEEK_COUNT+1) convert_monthly (tr, hp + WEEK_COUNT + 1, count - (WEEK_COUNT + 1)); _convert (&tr->week_hist, ovf_weekly, tr, hp, WEEK_COUNT + 1, WEEK_SAMPLE); compute_avg (&tr->week_avg, &tr->week_hist, &tr->last); - verbose (2, "end convert_weekly"); + verbose (2, _("end convert_weekly")); } static void convert_daily (struct traffic_record *tr, struct traffic_sample *hp, size_t count) { - verbose (2, "begin convert_daily"); + verbose (2, _("begin convert_daily")); if (count > DAY_COUNT+1) convert_weekly (tr, hp + DAY_COUNT + 1, count - (DAY_COUNT + 1)); _convert (&tr->day_hist, ovf_daily, tr, hp, DAY_COUNT + 1, DAY_SAMPLE); - verbose (2, "end convert_daily"); + verbose (2, _("end convert_daily")); } static void convert_stats (struct monitor *mon, struct traffic_sample *last, @@ -328,17 +331,17 @@ import_log (const char *name) fp = fopen (name, "r"); if (!fp) { - logmsg (L_ERR, "cannot open `%s': %s", name, strerror (errno)); + logmsg (L_ERR, _("cannot open `%s': %s"), name, strerror (errno)); return 1; } - verbose (2, "Importing %s", name); + verbose (2, _("importing %s"), name); if (fscanf (fp, "%ld %lu %lu\n", &last.time, &last.in, &last.out) != 3) { - logmsg (L_ERR, "%s:1: Unexpected number of fields", name); + logmsg (L_ERR, _("%s:1: unexpected number of fields"), name); fclose (fp); return 1; } cur = last.time; @@ -363,9 +366,9 @@ import_log (const char *name) hist.time = rd[0]; if (hist.time > cur) { - logmsg (L_WARNING, "%s:%lu: is corrupted", name, line); + logmsg (L_WARNING, _("%s:%lu: is corrupted"), name, line); break; } cur = hist.time; hist.in = rd[1]; @@ -398,9 +401,9 @@ import_log (const char *name) mon = find_monitor (base); if (!mon) { - logmsg (L_ERR, "cannot find monitor `%s'", base); + logmsg (L_ERR, _("cannot find monitor `%s'"), base); rc = 1; } else convert_stats (mon, &last, hp, count); @@ -415,12 +418,13 @@ import (const char *dirname) { size_t count = 0; struct stat st; - verbose (2, "Examining `%s'", dirname); + verbose (2, _("examining `%s'"), dirname); if (stat (dirname, &st)) - die (EX_OSERR, "cannot stat file `%s': %s", dirname, strerror (errno)); + die (EX_OSERR, _("cannot stat file `%s': %s"), + dirname, strerror (errno)); else if (S_ISREG (st.st_mode)) { open_db (TAGR_DB_WR); if (import_log (dirname) == 0) @@ -449,20 +453,21 @@ import (const char *dirname) close_db (); break; case GLOB_NOSPACE: - die (EX_UNAVAILABLE, "cannot scan directory: %s", strerror (ENOMEM)); + die (EX_UNAVAILABLE, _("cannot scan directory: %s"), + strerror (ENOMEM)); case GLOB_ABORTED: - die (EX_UNAVAILABLE, "scanning aborted"); |