mirror of
git://git.code.sf.net/p/dhcpd-pools/code
synced 2025-12-16 07:47:00 +00:00
output: unify time stamp creations
Use iso time stamp in both mustach and html outputs. Effectively this is a removal of libc langinfo D_T_FMT format, that pulled a lot of gnulib stuff to project almost unnecessarily. Signed-off-by: Sami Kerola <kerolasa@iki.fi>
This commit is contained in:
parent
ff3d9523e6
commit
6d737a7607
6 changed files with 36 additions and 67 deletions
|
|
@ -29,9 +29,7 @@ gnulib_modules="
|
||||||
getopt-gnu
|
getopt-gnu
|
||||||
inet_pton
|
inet_pton
|
||||||
isnan
|
isnan
|
||||||
langinfo
|
|
||||||
netinet_in
|
netinet_in
|
||||||
nl_langinfo
|
|
||||||
nstrftime
|
nstrftime
|
||||||
progname
|
progname
|
||||||
quote
|
quote
|
||||||
|
|
|
||||||
16
lib/.gitignore
vendored
16
lib/.gitignore
vendored
|
|
@ -1,11 +1,6 @@
|
||||||
/*.lo
|
/*.lo
|
||||||
/*.o
|
|
||||||
/.deps/
|
|
||||||
/.gitignore~
|
|
||||||
/.libs/
|
/.libs/
|
||||||
/Makefile
|
|
||||||
/Makefile.am
|
/Makefile.am
|
||||||
/Makefile.in
|
|
||||||
/_Noreturn.h
|
/_Noreturn.h
|
||||||
/alloca.h
|
/alloca.h
|
||||||
/alloca.in.h
|
/alloca.in.h
|
||||||
|
|
@ -71,7 +66,6 @@
|
||||||
/getprogname.c
|
/getprogname.c
|
||||||
/getprogname.h
|
/getprogname.h
|
||||||
/gettext.h
|
/gettext.h
|
||||||
/gettimeofday.c
|
|
||||||
/hard-locale.c
|
/hard-locale.c
|
||||||
/hard-locale.h
|
/hard-locale.h
|
||||||
/inet_pton.c
|
/inet_pton.c
|
||||||
|
|
@ -81,16 +75,11 @@
|
||||||
/isnanf.c
|
/isnanf.c
|
||||||
/isnanl.c
|
/isnanl.c
|
||||||
/itold.c
|
/itold.c
|
||||||
/langinfo.h
|
|
||||||
/langinfo.in.h
|
|
||||||
/libdhcpd_pools.la
|
/libdhcpd_pools.la
|
||||||
/limits.h
|
/limits.h
|
||||||
/limits.in.h
|
/limits.in.h
|
||||||
/localcharset.c
|
/localcharset.c
|
||||||
/localcharset.h
|
/localcharset.h
|
||||||
/locale.h
|
|
||||||
/locale.in.h
|
|
||||||
/localeconv.c
|
|
||||||
/localtime-buffer.c
|
/localtime-buffer.c
|
||||||
/localtime-buffer.h
|
/localtime-buffer.h
|
||||||
/lseek.c
|
/lseek.c
|
||||||
|
|
@ -113,7 +102,6 @@
|
||||||
/msvc-nothrow.c
|
/msvc-nothrow.c
|
||||||
/msvc-nothrow.h
|
/msvc-nothrow.h
|
||||||
/netinet_in.in.h
|
/netinet_in.in.h
|
||||||
/nl_langinfo.c
|
|
||||||
/nstrftime.c
|
/nstrftime.c
|
||||||
/pathmax.h
|
/pathmax.h
|
||||||
/progname.c
|
/progname.c
|
||||||
|
|
@ -133,7 +121,6 @@
|
||||||
/stdalign.in.h
|
/stdalign.in.h
|
||||||
/stdbool.in.h
|
/stdbool.in.h
|
||||||
/stddef.in.h
|
/stddef.in.h
|
||||||
/stdint.h
|
|
||||||
/stdint.in.h
|
/stdint.in.h
|
||||||
/stdio-impl.h
|
/stdio-impl.h
|
||||||
/stdio.h
|
/stdio.h
|
||||||
|
|
@ -147,7 +134,6 @@
|
||||||
/strerror-override.c
|
/strerror-override.c
|
||||||
/strerror-override.h
|
/strerror-override.h
|
||||||
/strerror.c
|
/strerror.c
|
||||||
/strftime.c
|
|
||||||
/strftime.h
|
/strftime.h
|
||||||
/string.h
|
/string.h
|
||||||
/string.in.h
|
/string.in.h
|
||||||
|
|
@ -156,13 +142,11 @@
|
||||||
/strtod.c
|
/strtod.c
|
||||||
/sys/socket.h
|
/sys/socket.h
|
||||||
/sys/stat.h
|
/sys/stat.h
|
||||||
/sys/time.h
|
|
||||||
/sys/types.h
|
/sys/types.h
|
||||||
/sys/uio.h
|
/sys/uio.h
|
||||||
/sys_socket.c
|
/sys_socket.c
|
||||||
/sys_socket.in.h
|
/sys_socket.in.h
|
||||||
/sys_stat.in.h
|
/sys_stat.in.h
|
||||||
/sys_time.in.h
|
|
||||||
/sys_types.in.h
|
/sys_types.in.h
|
||||||
/sys_uio.in.h
|
/sys_uio.in.h
|
||||||
/time-internal.h
|
/time-internal.h
|
||||||
|
|
|
||||||
|
|
@ -277,6 +277,7 @@ extern int parse_color_mode(const char *restrict optarg);
|
||||||
extern double strtod_or_err(const char *restrict str, const char *restrict errmesg);
|
extern double strtod_or_err(const char *restrict str, const char *restrict errmesg);
|
||||||
extern void __attribute__ ((noreturn)) print_version(void);
|
extern void __attribute__ ((noreturn)) print_version(void);
|
||||||
extern void __attribute__ ((noreturn)) usage(int status);
|
extern void __attribute__ ((noreturn)) usage(int status);
|
||||||
|
extern void dp_time_tool(FILE *file, const char *path, int epoch);
|
||||||
|
|
||||||
extern int (*parse_ipaddr) (struct conf_t *state, const char *restrict src,
|
extern int (*parse_ipaddr) (struct conf_t *state, const char *restrict src,
|
||||||
union ipaddr_t *restrict dst);
|
union ipaddr_t *restrict dst);
|
||||||
|
|
|
||||||
|
|
@ -45,14 +45,12 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <time.h>
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#include "close-stream.h"
|
#include "close-stream.h"
|
||||||
#include "dhcpd-pools.h"
|
#include "dhcpd-pools.h"
|
||||||
#include "error.h"
|
#include "error.h"
|
||||||
#include "mustach.h"
|
#include "mustach.h"
|
||||||
#include "strftime.h"
|
|
||||||
#include "xalloc.h"
|
#include "xalloc.h"
|
||||||
|
|
||||||
/*! \struct expl
|
/*! \struct expl
|
||||||
|
|
@ -69,35 +67,6 @@ struct expl {
|
||||||
static int must_enter(void *closure, const char *name);
|
static int must_enter(void *closure, const char *name);
|
||||||
static int must_leave(void *closure);
|
static int must_leave(void *closure);
|
||||||
|
|
||||||
static void dp_time_tool(FILE *file, const char *path, int epoch)
|
|
||||||
{
|
|
||||||
time_t t;
|
|
||||||
|
|
||||||
/* a file or now */
|
|
||||||
if (path) {
|
|
||||||
struct stat st;
|
|
||||||
|
|
||||||
stat(path, &st);
|
|
||||||
t = st.st_mtime;
|
|
||||||
} else
|
|
||||||
t = time(NULL);
|
|
||||||
/* epoc or iso time stamp */
|
|
||||||
if (epoch)
|
|
||||||
fprintf(file, "%ld", t);
|
|
||||||
else {
|
|
||||||
char time_stamp[64];
|
|
||||||
struct tm tm;
|
|
||||||
int len;
|
|
||||||
|
|
||||||
localtime_r(&t, &tm);
|
|
||||||
len = snprintf(time_stamp, sizeof(time_stamp), "%4d-%.2d-%.2dT%02d:%02d:%02d",
|
|
||||||
tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,
|
|
||||||
tm.tm_hour, tm.tm_min, tm.tm_sec);
|
|
||||||
strftime(time_stamp + len, sizeof(time_stamp) - len, "%z", &tm);
|
|
||||||
fprintf(file, "%s", time_stamp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*! \brief Template base level tag parser and printer. */
|
/*! \brief Template base level tag parser and printer. */
|
||||||
static int must_put_base(void *closure, const char *name, int escape
|
static int must_put_base(void *closure, const char *name, int escape
|
||||||
__attribute__ ((unused)), FILE *file)
|
__attribute__ ((unused)), FILE *file)
|
||||||
|
|
|
||||||
32
src/other.c
32
src/other.c
|
|
@ -47,6 +47,8 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <time.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#include "error.h"
|
#include "error.h"
|
||||||
|
|
@ -544,6 +546,36 @@ void clean_up(struct conf_t *state)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*! \brief Print a time stamp of a path or now to output file. */
|
||||||
|
void dp_time_tool(FILE *file, const char *path, int epoch)
|
||||||
|
{
|
||||||
|
time_t t;
|
||||||
|
|
||||||
|
/* a file or now */
|
||||||
|
if (path) {
|
||||||
|
struct stat st;
|
||||||
|
|
||||||
|
stat(path, &st);
|
||||||
|
t = st.st_mtime;
|
||||||
|
} else
|
||||||
|
t = time(NULL);
|
||||||
|
/* epoc or iso time stamp */
|
||||||
|
if (epoch)
|
||||||
|
fprintf(file, "%ld", t);
|
||||||
|
else {
|
||||||
|
char time_stamp[64];
|
||||||
|
struct tm tm;
|
||||||
|
int len;
|
||||||
|
|
||||||
|
localtime_r(&t, &tm);
|
||||||
|
len = snprintf(time_stamp, sizeof(time_stamp), "%4d-%.2d-%.2dT%02d:%02d:%02d",
|
||||||
|
tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,
|
||||||
|
tm.tm_hour, tm.tm_min, tm.tm_sec);
|
||||||
|
strftime(time_stamp + len, sizeof(time_stamp) - len, "%z", &tm);
|
||||||
|
fprintf(file, "%s", time_stamp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*! \brief A version printing. */
|
/*! \brief A version printing. */
|
||||||
void __attribute__ ((__noreturn__)) print_version(void)
|
void __attribute__ ((__noreturn__)) print_version(void)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
21
src/output.c
21
src/output.c
|
|
@ -609,22 +609,6 @@ static int output_json(struct conf_t *state, const int print_mac_addreses)
|
||||||
*/
|
*/
|
||||||
static void html_header(struct conf_t *state, FILE *restrict f)
|
static void html_header(struct conf_t *state, FILE *restrict f)
|
||||||
{
|
{
|
||||||
char outstr[200];
|
|
||||||
struct tm *tmp, result;
|
|
||||||
|
|
||||||
struct stat statbuf;
|
|
||||||
|
|
||||||
stat(state->dhcpdlease_file, &statbuf);
|
|
||||||
|
|
||||||
tmp = localtime_r(&statbuf.st_mtime, &result);
|
|
||||||
if (tmp == NULL) {
|
|
||||||
error(EXIT_FAILURE, errno, "html_header: localtime");
|
|
||||||
}
|
|
||||||
setlocale(LC_CTYPE, "");
|
|
||||||
setlocale(LC_NUMERIC, "");
|
|
||||||
if (strftime(outstr, sizeof(outstr), nl_langinfo(D_T_FMT), &result) == 0) {
|
|
||||||
error(EXIT_FAILURE, 0, "html_header: strftime returned 0");
|
|
||||||
}
|
|
||||||
fprintf(f, "<!DOCTYPE html>\n");
|
fprintf(f, "<!DOCTYPE html>\n");
|
||||||
fprintf(f, "<html>\n");
|
fprintf(f, "<html>\n");
|
||||||
fprintf(f, "<head>\n");
|
fprintf(f, "<head>\n");
|
||||||
|
|
@ -641,8 +625,9 @@ static void html_header(struct conf_t *state, FILE *restrict f)
|
||||||
fprintf(f, "<body>\n");
|
fprintf(f, "<body>\n");
|
||||||
fprintf(f, "<div class=\"container\">\n");
|
fprintf(f, "<div class=\"container\">\n");
|
||||||
fprintf(f, "<h2>ISC DHCPD status</h2>\n");
|
fprintf(f, "<h2>ISC DHCPD status</h2>\n");
|
||||||
fprintf(f, "<small>File %s was last modified at %s</small><hr />\n", state->dhcpdlease_file,
|
fprintf(f, "<small>File %s was last modified at ", state->dhcpdlease_file);
|
||||||
outstr);
|
dp_time_tool(f, state->dhcpdlease_file, 0);
|
||||||
|
fprintf(f, "</small><hr />\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
/*! \brief Footer for full html output format.
|
/*! \brief Footer for full html output format.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue