summaryrefslogtreecommitdiff
path: root/surveil
diff options
context:
space:
mode:
Diffstat (limited to 'surveil')
-rw-r--r--surveil/APKBUILD16
-rw-r--r--surveil/surveil/Makefile4
-rw-r--r--surveil/surveil/config.c12
-rw-r--r--surveil/surveil/main.c193
-rw-r--r--surveil/surveil/msg.c29
-rw-r--r--surveil/surveil/msg.h18
-rw-r--r--surveil/surveil/search.c4
7 files changed, 180 insertions, 96 deletions
diff --git a/surveil/APKBUILD b/surveil/APKBUILD
index 0b2d386..1f98457 100644
--- a/surveil/APKBUILD
+++ b/surveil/APKBUILD
@@ -1,8 +1,8 @@
# Contributor: John Vogel <jvogel4@stny.rr.com>
# Maintainer: John Vogel <jvogel4@stny.rr.com>
pkgname=surveil
-pkgver=0.2
-pkgrel=1
+pkgver=0.3
+pkgrel=0
pkgdesc="trach changes to remote files"
url="http://localhost/home/john/Code/surveil"
arch="all"
@@ -28,6 +28,8 @@ source="surveil/LICENSE
surveil/job.c
surveil/job.h
surveil/main.c
+ surveil/msg.c
+ surveil/msg.h
surveil/net.c
surveil/net.h
surveil/search.c
@@ -49,13 +51,13 @@ package() {
sha512sums="
9aa08e37eca237a54b10ac6a78a8e496641b7fdfa6a220e9d59f1db061cdf13165619ea4cda129e8d97afd9dfa4630f9d923df1c70a7f7a7e65dd7420b1329f0 LICENSE
-d2ea7eb831f22576fe7e81c6dea3e7d2c9e9fad1dae63f15926142aaa56ba26f6c55c8cf58edb3cd5be1641ae12fb38fdf0fdfc52ff419e16b0dac74fe8bb064 Makefile
+6fc81255dfdc1d8467793ad1a66f0919e8dab387fa7e115e1b30dfc00841c98722b00163b65c603c9227966018c606ecb8e4614c43f2cae02ba85bd43c8a1288 Makefile
a061db311e7ba7fcb29659eb584b0b530bdd69324966036f28046c2931ee63f23a07ed0e8c06b0aa6ff8619134e11f8ed4ba31a6d5717a6d67a53498651166bc NOTES
f6767772a8d024c156d2f5b6baf635c159ea2939ecdc25e1d4d55189d22f0bd00da6a0ab6ad7f02f38d01bbb5c564d7db743fcb81a8b4a1dd413cf21986b91f3 README.md
527f4f820488574bae8ab81ce3df11a95f3dc419ab6eef6d565d0a817ea2257f98c6b3152ded22521059b9999cf71f892dddc5d8f05180bd087aaa55168b3417 buf.c
999a896fa4c896414c21cd91bb9f954e45c71aed025e8d44df0c40914b839320b88dc6da9437818509c9145f0c5dc2034c9180c0cbb370f2ab5e17ece5d90b14 buf.h
e96e532a270e16962e3dd01df2ebb8347e06168e977f8f8a97bd480e31f7468daca8308ea7a675a44b4c3199bf658601272c5790fa97a0a7fa73995631dd4a97 common.h
-1c1906e1e11834ad4c6ad1bbd3fd4778352915c7f361678f72cd805924b238c9f75862aa2d9d86f0fb2fad959158aa87a0da83ef40b2d43f15a2942abedabcab config.c
+1189c0fdc5f26b8f488f5ba5eea507bfe6146dae342f8badd593625cc6ecbaf94561ce095c0e56ce60a8403be272b696f5e8fd9780e975c989b9db17e9a4d37f config.c
ac91e67d546dc8a2b66aae1a216bc271813c67a33a50eb3978e00834ef9ffd50afb16d88edbd61c1598a9484438f54f4a2bdbc73e444c5bd441f4c889d29172c config.h
c5a3819658879ea7a7d146c79615fc8f9925a8a90efe6946434b75a215fae84e7349fab751aa22521c03548909a810b23cd2cbfc12455c634eb3a5235d9175dc db.c
e2549a6caa1ec65f1753f44dfdfe4dd0c7baa5987be2ea13c1235b3f2388a79d5e89fda450a074120d5cd8d9cde596a89bb308c3f927ba08aab63cf357b7b140 db.h
@@ -66,10 +68,12 @@ bae7269e443ffa471d23079ad7ba206256ab71053f678ee89353e8bfa05ffbae1d7b964aa39eb5ba
5216eb767b1cd2b65923905f28a93637049e712055badcfc8cb999908e8d748d70284c9ebe67aa52b040d557544f44a83b52c108b926ae7945fc12a35621194d example.conf
39938dfd96c72993d8bddbc9a6d685ee18af1df61dac6039448630aa05283b63b14352594972c2ea8e96553a135234b01fe1334702ecada306bce25a717b27d6 job.c
4ea25eb9fb63df997cc3be98cd7ef0b0f2b9750504731566f39210ba7062877cd53842aea78f7c4fb418eef841f19081b50d287495d4012d80f1fe343c04fd83 job.h
-017fb0a24c056a3d4149bfd121ca34841ae55479e4eccce6c44f26bd39ca59acedad75c9eae065245428de790f76131f47de7c8d6873c501f614691e2b9c08e6 main.c
+58662d013624c729971a6d532780698c1be1218c3e886bd65d0b17da701b48cceba0b00d1368db9c1b6054a0537d09d5597d553723d81fcc344364ef079746ab main.c
+3c25f4f7c467df2da07033d1a6f2065caa0144341dd75922dd3608546ccc7a6193a25d01cf9344df57e5559c8ec49222e3c9f84ae8dc3deb2c3dd36cdb51cd28 msg.c
+460b99b401ec625b78f5e43c38578a4781cba475d0e14ace79bb38698139fee17a8d23933b0daeb208733c8b59c34e989f5dee4e758f8c062e1af085f96f3d5b msg.h
3da1034b59084528b78f9a9b07da271f3715d0109141913e44d8cbde8f2647569b7c425b7f60f541a9daeaf78f11cd5c8991dc163bf40d9c341ae3bb6aa0ce89 net.c
d5b2accdbf041d92f7b1874423d205a0cb9bdfcbf6a8dbbff99bd00d542ce318f5566e3634728b5b4ecedb0534be043f6a121adf4dd0c44fc5bac7cc6a34552e net.h
-97057c053c96adcf182f3eed1724621f17cce3376d1dcadfcc063c82da674a68fefe351a2833e0d3d867c506c82e7710a175c7e5c70e0cbe477b837b51c1b6b9 search.c
+aceb8093e5dab4c5d54c83dfd3589d339ab58ed35069697de9281f32e358e36a5bacf4892b474ba90159b99642547e56aabd11f84f1a5c5e44122ca93590eb1d search.c
795b356d875804b39576b99c155f4fa2a954ec7c8281029e6f2f43a88b3ab6535c50bee85d0105fa30cd08329286addc11a8207ee7d6450331d2ba952b5b949d search.h
c642b266fd3300f832cc597b02875c28ac9fb37fbc3975206b1ba665dbb64a3f8e15663d6299553b4915193c6ade418e346503f7499c7371be994c9cbd6a943e surveil.1
a7227dc9a91339bbf7aeed27f335f9d4cc6b277c07f7d29fe81c1942513b5d9bcb22f7c2ba6050d2504728ca8ad23392bdc9957a4f3412a0478b79b89966ded2 util.c
diff --git a/surveil/surveil/Makefile b/surveil/surveil/Makefile
index 8212189..bc8728c 100644
--- a/surveil/surveil/Makefile
+++ b/surveil/surveil/Makefile
@@ -14,8 +14,8 @@ MANDIR = $(PREFIX)/share/man
DOCDIR = $(PREFIX)/share/doc/surveil
BIN = surveil
-SRCS = buf.c config.c db.c dgst.c diff.c job.c main.c net.c search.c util.c
-HDRS = buf.h common.h config.h db.h dgst.h diff.h job.h net.h search.h util.h
+SRCS = buf.c config.c db.c dgst.c diff.c job.c main.c msg.c net.c search.c util.c
+HDRS = buf.h common.h config.h db.h dgst.h diff.h job.h msg.h net.h search.h util.h
OBJS = $(SRCS:.c=.o)
ifdef DEBUG
diff --git a/surveil/surveil/config.c b/surveil/surveil/config.c
index d42e69a..62f2236 100644
--- a/surveil/surveil/config.c
+++ b/surveil/surveil/config.c
@@ -133,12 +133,14 @@ struct config *config(char *cfgd, char *cfgf, char *datd, char *datf)
struct config *cfg;
cfg = NULL;
- configfile = datafile = NULL;
+ home = configfile = datafile = NULL;
- home = getuserhome();
- if (!home) {
- warnx("unable to determine home directory");
- return NULL;
+ if ((!cfgf && !cfgd) || (!datd && !datf)) {
+ home = getuserhome();
+ if (!home) {
+ warnx("unable to determine home directory");
+ return NULL;
+ }
}
if (cfgf) {
diff --git a/surveil/surveil/main.c b/surveil/surveil/main.c
index 54975e9..ee0e244 100644
--- a/surveil/surveil/main.c
+++ b/surveil/surveil/main.c
@@ -18,6 +18,7 @@
#include "job.h"
#include "db.h"
#include "diff.h"
+#include "msg.h"
#include "net.h"
#include "search.h"
#include "util.h"
@@ -126,14 +127,14 @@ void prune_data(struct config *cfg, struct tqh *jobs, int stale)
if (cfg->nspecified > 0) {
for (i = 0; i < cfg->nspecified; i++) {
- if (cfg->test) {
- printf("test: prune %s\n", cfg->specified[i]);
+ msgx(MSG_LVL_TEST, "purge '%s'\n'",
+ cfg->specified[i]);
+ if (cfg->test)
continue;
- }
- if (db_delete(cfg->specified[i]) == -1) {
- warnx("purging data for job '%s' failed",
+ if (db_delete(cfg->specified[i]) == -1)
+ msgx(MSG_LVL_NORMAL,
+ "purging data for job '%s' failed",
cfg->specified[i]);
- }
}
}
else {
@@ -149,12 +150,12 @@ void prune_data(struct config *cfg, struct tqh *jobs, int stale)
j = e->data;
if (jobs && stale && job_is_in_jobs(j->name, jobs))
continue;
- if (cfg->test) {
- printf("test: prune %s\n", j->name);
+ msgx(MSG_LVL_TEST, "prune '%s'", j->name);
+ if (cfg->test)
continue;
- }
if (db_delete(j->name) == -1) {
- warnx("pruning job '%s' data failed",
+ msgx(MSG_LVL_NORMAL,
+ "pruning job '%s' data failed",
j->name);
}
}
@@ -178,7 +179,7 @@ int main(int argc, char *argv[])
char *buf;
char *configdir, *configfile, *datadir, *datafile;
int eflag, hflag, pflag, Pflag, qflag, tflag, vflag;
- int res, c, ret = EXIT_FAILURE;
+ int res, c, ret = EXIT_SUCCESS;
size_t i;
dgstasc = prevdgstasc = NULL;
@@ -235,13 +236,13 @@ int main(int argc, char *argv[])
qflag = 0;
break;
case ':':
- fprintf(stderr,
- "Option -%c requires an operand\n", optopt);
+ msgx(MSG_LVL_NORMAL,
+ "Option -%c requires an operand", optopt);
eflag++;
break;
case '?':
- fprintf(stderr,
- "Unrecognized option '-%c'\n", optopt);
+ msgx(MSG_LVL_NORMAL,
+ "Unrecognized option '-%c'", optopt);
eflag++;
break;
default:
@@ -250,30 +251,37 @@ int main(int argc, char *argv[])
}
}
+ if (qflag != 0)
+ cur_msg_lvl = MSG_LVL_QUIET;
+ if (tflag != 0)
+ cur_msg_lvl = MSG_LVL_TEST;
+ if (vflag != 0)
+ cur_msg_lvl = vflag > 1 ? MSG_LVL_DEBUG : MSG_LVL_VERBOSE;
+
if (configdir && configfile) {
- warnx("-C and -c are mutually exclusive");
+ msgx(MSG_LVL_NORMAL, "-C and -c are mutually exclusive");
eflag++;
}
if (datadir && datafile) {
- warnx("-D and -d are mutually exclusive");
+ msgx(MSG_LVL_NORMAL, "-D and -d are mutually exclusive");
eflag++;
}
if (pflag && Pflag) {
- warnx("-P (purge) overrides -p (prune)");
+ msgx(MSG_LVL_NORMAL, "-P (purge) overrides -p (prune)");
pflag = 0;
}
- if (eflag) {
- hflag++;
+ if (eflag)
ret = EXIT_FAILURE;
- }
- if (hflag) {
- fprintf(stderr, "Usage: "
- "%s [-dhpPqtv] [-C dir|-c file] [-D dir|-d file] [job]...\n", progname);
- return ret;
- }
+ if (hflag || eflag) {
+ if (qflag == 0)
+ fprintf(stderr,
+ "Usage: %s [-dhpPqtv] [-C dir|-c file] "
+ "[-D dir|-d file] [job]...\n", progname);
+ return ret;
+ }
cfg = config(configdir, configfile, datadir, datafile);
if (cfg == NULL)
@@ -295,11 +303,12 @@ int main(int argc, char *argv[])
jobs = ctx.jobs = tq_new();
ret = ini_parse(cfg->configfile, chandler, &ctx);
if (ret < 0 ) {
- warn("failed reading %s", cfg->configfile);
+ msg(MSG_LVL_NORMAL, "failed reading %s", cfg->configfile);
goto main_done;
}
else if (ret != 0) {
- warnx("ini_parse(%s) failed at line %d", cfg->configfile, ret);
+ msgx(MSG_LVL_NORMAL, "ini_parse(%s) failed at line %d",
+ cfg->configfile, ret);
goto main_done;
}
@@ -308,15 +317,23 @@ int main(int argc, char *argv[])
if (pflag) {
if (cfg->nspecified > 0) {
- warnx("-p ignored when jobs are specified");
+ msgx(MSG_LVL_NORMAL,
+ "-p ignored when jobs are specified");
cfg->prune = 0;
}
else if (config_global(cfg, "prune", "on") == -1) {
- warnx("failed to set prune setting");
+ msgx(MSG_LVL_NORMAL, "failed to set prune setting");
goto main_fail;
}
}
+ if (qflag != 0)
+ cfg->quiet = qflag;
+ if (tflag != 0)
+ cfg->test = tflag;
+ if (vflag != 0)
+ cfg->verbose = vflag;
+
if (db_init(cfg->datafile) == -1)
goto main_done;
@@ -336,18 +353,12 @@ int main(int argc, char *argv[])
}
}
if (!exists) {
- warnx("job '%s' not found", cfg->specified[i]);
+ msgx(MSG_LVL_NORMAL, "job '%s' not found",
+ cfg->specified[i]);
goto main_done;
}
}
- if (qflag != 0)
- cfg->quiet = qflag;
- if (tflag != 0)
- cfg->test = tflag;
- if (vflag != 0)
- cfg->verbose = vflag;
-
if (cfg->prune)
prune_data(cfg, jobs, 1);
@@ -359,18 +370,20 @@ int main(int argc, char *argv[])
dgstasc = prevdgstasc = NULL;
j = (struct job *)e->data;
- if (tflag)
- printf("test: job '%s'\n", j->name);
+ if (cur_msg_lvl >= MSG_LVL_DEBUG)
+ printf("job '%s' start\n", j->name);
/* Do some sanity checks. */
if (!j->url) {
- warnx("job %s: missing url", j->name);
+ msgx(MSG_LVL_NORMAL, "job %s: missing url", j->name);
eflag++;
}
if (!j->dtype)
j->dtype = DEFAULT_DIGEST;
if (!digest_is_provided(j->dtype)) {
- warnx("job %s: digest %s not provided\n", j->name, j->dtype);
+ msgx(MSG_LVL_NORMAL,
+ "job %s: digest %s not provided\n",
+ j->name, j->dtype);
eflag++;
}
@@ -378,98 +391,118 @@ int main(int argc, char *argv[])
continue;
if (run_job(j) == -1) {
- warnx("job %s failed", j->name);
+ msgx(MSG_LVL_NORMAL, "job %s failed", j->name);
continue;
}
- if (cfg->test) {
- printf("%s: output:\n%s\n", j->name, j->buf);
- continue;
- }
+ if (cur_msg_lvl >= MSG_LVL_TEST)
+ printf("job '%s': output:\n%s", j->name, j->buf);
res = db_find(j->name, &prev);
if (res == -1) {
- warnx("internal db error");
+ msgx(MSG_LVL_NORMAL, "internal db error");
eflag++;
goto main_fail;
}
if (res == 0) {
- if (db_insert(j) == -1) {
- warnx("db_insert(%s) failed", j->name);
+ if (cfg->test == 0 && db_insert(j) == -1) {
+ msgx(MSG_LVL_NORMAL, "db_insert(%s) failed",
+ j->name);
eflag++;
goto main_fail;
}
continue;
}
if (res == 1 && !prev) {
- warnx("db_find(%s) returned FOUND in database, but return value not set");
+ msgx(MSG_LVL_NORMAL,
+ "db_find(%s) returned FOUND in database, "
+ "but return value not set");
eflag++;
goto main_fail;
}
if (!j->buf) {
- warnx("data for job %s missing", j->name);
+ msgx(MSG_LVL_NORMAL, "data for job %s missing",
+ j->name);
eflag++;
goto main_fail;
}
if (!prev->buf) {
- warnx("data for job %s previous run missing", prev->name);
+ msgx(MSG_LVL_NORMAL,
+ "data for job %s previous run missing",
+ prev->name);
eflag++;
goto main_fail;
}
- dgst = calcdgst(j->dtype ? j->dtype : DEFAULT_DIGEST, j->buf, j->bufsz, &dlen);
+ dgst = calcdgst(j->dtype ? j->dtype : DEFAULT_DIGEST,
+ j->buf, j->bufsz, &dlen);
if (!dgst) {
- warnx("failed to derive digest for job %s new data", j->name);
+ msgx(MSG_LVL_NORMAL,
+ "failed to derive digest for job %s new data",
+ j->name);
eflag++;
goto main_fail;
}
- prevdgst = calcdgst(j->dtype ? j->dtype : DEFAULT_DIGEST, prev->buf, prev->bufsz, &prevdlen);
+ prevdgst = calcdgst(j->dtype ? j->dtype : DEFAULT_DIGEST,
+ prev->buf, prev->bufsz, &prevdlen);
if (!dgst) {
- warnx("failed to derive digest for job %s old data", prev->name);
+ msgx(MSG_LVL_NORMAL,
+ "failed to derive digest for job %s old data",
+ prev->name);
eflag++;
goto main_fail;
}
if (dlen != prevdlen) {
- warnx("digest lengths for old and new data don't match for job %s", j->name);
+ msgx(MSG_LVL_NORMAL,
+ "digest lengths for old and new data don't "
+ "match for job %s", j->name);
eflag++;
goto main_fail;
}
if (memcmp(dgst, prevdgst, dlen) == 0) {
- if (cfg->verbose > 0)
- warnx("%s: no change", j->name);
+ if (cur_msg_lvl >= MSG_LVL_TEST)
+ printf("job '%s': no change\n\n", j->name);
goto loop_done;
}
dgstasc = dgst2asc(dgst, dlen);
prevdgstasc = dgst2asc(prevdgst, prevdlen);
- if (strftime(lasttime, sizeof(lasttime), "%c", gmtime(&prev->date)) == 0 ||
- strftime(thistime, sizeof(thistime), "%c", gmtime(&j->date)) == 0)
- warnx("failed to format date strings");
- if (cfg->verbose || cfg->test) {
- printf("%s (%s):\n%s: %s\n%s: %s\n\n",
- j->name, j->url, lasttime, prevdgstasc, thistime, dgstasc);
+ if (strftime(lasttime, sizeof(lasttime), "%c",
+ gmtime(&prev->date)) == 0) {
+ msgx(MSG_LVL_NORMAL, "failed to format previous date");
+ snprintf(lasttime, sizeof(lasttime), "%ld", prev->date);
}
- if (db_update(j) == -1) {
- warnx("db_update(%s) failed", j->name);
+ if (strftime(thistime, sizeof(thistime), "%c",
+ gmtime(&j->date)) == 0) {
+ msgx(MSG_LVL_NORMAL, "failed to format this date");
+ snprintf(thistime, sizeof(thistime), "%ld", j->date);
+ }
+
+ msgx(MSG_LVL_TEST, "%s (%s):\n%s: %s\n%s: %s",
+ j->name, j->url, lasttime,prevdgstasc,
+ thistime, dgstasc);
+
+ if (cfg->test == 0 && db_update(j) == -1) {
+ msgx(MSG_LVL_NORMAL, "db_update(%s) failed", j->name);
eflag++;
}
- if (!cfg->quiet || cfg->verbose || cfg->test) {
- buf = get_diff(prev->buf, prev->bufsz, j->buf, j->bufsz);
- if (buf == NULL) {
- warnx("failed to get diff with last run for job '%s'", j->name);
- eflag++;
- }
- else {
- printf("job %s:\n", j->name);
- printf("prev_dgst=%s\n", prevdgstasc);
- printf("new_dgst=%s\n", dgstasc);
- printf("job: %s\n--- last\n+++ this\n%s", j->name, buf);
- }
+ buf = get_diff(prev->buf, prev->bufsz, j->buf, j->bufsz);
+ if (buf == NULL) {
+ msgx(MSG_LVL_NORMAL, "job '%s': diff failed", j->name);
+ eflag++;
+ }
+ else if (cfg->quiet == 0) {
+ printf("job: %s:\n", j->name);
+ if (cfg->verbose > 0)
+ printf("previous digest: %s\n"
+ "this digest: %s\n",
+ prevdgstasc, dgstasc);
+ printf("--- last\n+++ this\n%s\n\n", buf);
}
loop_done:
diff --git a/surveil/surveil/msg.c b/surveil/surveil/msg.c
new file mode 100644
index 0000000..420e4b4
--- /dev/null
+++ b/surveil/surveil/msg.c
@@ -0,0 +1,29 @@
+/* vim: set ts=4 sw=4 ai: */
+#include <stdarg.h>
+#include <err.h>
+
+#include "msg.h"
+
+enum msg_level cur_msg_lvl = MSG_LVL_NORMAL;
+
+void msg(enum msg_level lvl, const char *fmt, ...)
+{
+ va_list ap;
+
+ if (cur_msg_lvl >= lvl) {
+ va_start(ap, fmt);
+ vwarn(fmt, ap);
+ va_end(ap);
+ }
+}
+
+void msgx(enum msg_level lvl, const char *fmt, ...)
+{
+ va_list ap;
+
+ if (cur_msg_lvl >= lvl) {
+ va_start(ap, fmt);
+ vwarnx(fmt, ap);
+ va_end(ap);
+ }
+}
diff --git a/surveil/surveil/msg.h b/surveil/surveil/msg.h
new file mode 100644
index 0000000..8f84e17
--- /dev/null
+++ b/surveil/surveil/msg.h
@@ -0,0 +1,18 @@
+/* vim: set ts=4 sw=4 ai: */
+#ifndef SURVEIL_MSG_H
+#define SURVEIL_MSG_H
+
+enum msg_level {
+ MSG_LVL_QUIET = 0,
+ MSG_LVL_NORMAL = 1,
+ MSG_LVL_TEST = 2,
+ MSG_LVL_VERBOSE = 3,
+ MSG_LVL_DEBUG = 4
+};
+
+extern enum msg_level cur_msg_lvl;
+
+void msg(enum msg_level, const char *, ...);
+void msgx(enum msg_level, const char *, ...);
+
+#endif/*!SURVEIL_MSG_H*/
diff --git a/surveil/surveil/search.c b/surveil/surveil/search.c
index 351df25..38245ba 100644
--- a/surveil/surveil/search.c
+++ b/surveil/surveil/search.c
@@ -196,9 +196,7 @@ ssize_t get_matches(char **buf, struct tqh *s)
}
}
- if (buf_addchr(&b, '\n') == -1 ||
- buf_addchr(&b, '\0') == -1 ||
- b.len > b.size)
+ if (buf_addchr(&b, '\0') == -1 || b.len > b.size)
goto get_matches_fail;
*buf = b.ptr;