mirror of
https://github.com/jrbrtsn/ban2fail
synced 2024-06-16 03:48:03 +00:00
Optimizations
This commit is contained in:
parent
b27b6e40f8
commit
3a0f2216dc
41
ban2fail.c
41
ban2fail.c
@ -87,7 +87,7 @@ struct Global G= {
|
|||||||
.version= {
|
.version= {
|
||||||
.major= 0,
|
.major= 0,
|
||||||
.minor= 12,
|
.minor= 12,
|
||||||
.patch= 4
|
.patch= 5
|
||||||
},
|
},
|
||||||
|
|
||||||
.bitTuples.flags= GlobalFlagBitTuples
|
.bitTuples.flags= GlobalFlagBitTuples
|
||||||
@ -166,7 +166,8 @@ main(int argc, char **argv)
|
|||||||
PTRVEC_constructor(&S.toBlock_vec, N_ADDRESSES_HINT);
|
PTRVEC_constructor(&S.toBlock_vec, N_ADDRESSES_HINT);
|
||||||
PTRVEC_constructor(&S.toUnblock_vec, N_ADDRESSES_HINT);
|
PTRVEC_constructor(&S.toUnblock_vec, N_ADDRESSES_HINT);
|
||||||
|
|
||||||
{ /*=== Parse command line arguments ===*/
|
/* Parse command line arguments */
|
||||||
|
{ /*==================================================================*/
|
||||||
int c, errflg= 0;
|
int c, errflg= 0;
|
||||||
extern char *optarg;
|
extern char *optarg;
|
||||||
extern int optind, optopt;
|
extern int optind, optopt;
|
||||||
@ -263,7 +264,8 @@ main(int argc, char **argv)
|
|||||||
goto abort;
|
goto abort;
|
||||||
}
|
}
|
||||||
|
|
||||||
{ /*============== Read the configuration file ==============*/
|
/* Read the configuration file */
|
||||||
|
{ /*=========================================================*/
|
||||||
if(!CFGMAP_file_constructor(&S.cfgmap, confFile)) {
|
if(!CFGMAP_file_constructor(&S.cfgmap, confFile)) {
|
||||||
eprintf("ERROR: failed to read configuration from \"%s\"", confFile);
|
eprintf("ERROR: failed to read configuration from \"%s\"", confFile);
|
||||||
goto abort;
|
goto abort;
|
||||||
@ -272,10 +274,10 @@ main(int argc, char **argv)
|
|||||||
/* Just leave the S.cfgmap in place, so all the value strings
|
/* Just leave the S.cfgmap in place, so all the value strings
|
||||||
* don't need to be copied.
|
* don't need to be copied.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
{ /*============== Obtain a lock on our lockfile ==============*/
|
/* Obtain a file lock to protect cache files */
|
||||||
|
{ /*===========================================================*/
|
||||||
/* Make sure the file exists by open()'ing */
|
/* Make sure the file exists by open()'ing */
|
||||||
lock_fd= open(G.lockPath, O_CREAT|O_WRONLY|O_CLOEXEC, 0640);
|
lock_fd= open(G.lockPath, O_CREAT|O_WRONLY|O_CLOEXEC, 0640);
|
||||||
if(-1 == lock_fd) {
|
if(-1 == lock_fd) {
|
||||||
@ -304,8 +306,8 @@ main(int argc, char **argv)
|
|||||||
#endif
|
#endif
|
||||||
assert(G.listing_fh);
|
assert(G.listing_fh);
|
||||||
|
|
||||||
|
/* Open our cache, instance file-specific LOGTYPE objects */
|
||||||
{ /*============== Open our cache, instantiate LOGTYPE objects ==============*/
|
{ /*=============================================================*/
|
||||||
|
|
||||||
/* Make the directory if needed */
|
/* Make the directory if needed */
|
||||||
if(access(G.cacheDir, F_OK)) {
|
if(access(G.cacheDir, F_OK)) {
|
||||||
@ -324,7 +326,8 @@ main(int argc, char **argv)
|
|||||||
fflush(G.listing_fh);
|
fflush(G.listing_fh);
|
||||||
}
|
}
|
||||||
|
|
||||||
{ /*============== Implement configuration ==============*/
|
/* Implement configuration */
|
||||||
|
{ /*-----------------------------------------------------*/
|
||||||
|
|
||||||
if(configure(&S.cfgmap, NULL)) {
|
if(configure(&S.cfgmap, NULL)) {
|
||||||
eprintf("ERROR: failed to realize configuration in \"%s\"", confFile);
|
eprintf("ERROR: failed to realize configuration in \"%s\"", confFile);
|
||||||
@ -340,15 +343,17 @@ main(int argc, char **argv)
|
|||||||
* don't need to be copied.
|
* don't need to be copied.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
}
|
} /* End implement configuration */
|
||||||
|
|
||||||
|
/*----------------- Print logfile names short circuiting --------------*/
|
||||||
if(G.flags & GLB_PRINT_LOGFILE_NAMES_FLG) {
|
if(G.flags & GLB_PRINT_LOGFILE_NAMES_FLG) {
|
||||||
/* Shortcut any further processing or reporting */
|
/* Shortcut any further processing or reporting */
|
||||||
rtn= 0;
|
rtn= 0;
|
||||||
goto abort;
|
goto abort;
|
||||||
}
|
}
|
||||||
|
|
||||||
{ /* Check cache for logType directories not in our current map */
|
/* Check cache for logType directories not in our current map, and remove them */
|
||||||
|
{ /*---------------------------------------------------------------------*/
|
||||||
DIR *dir= ez_opendir(G.cacheDir);
|
DIR *dir= ez_opendir(G.cacheDir);
|
||||||
struct dirent *entry;
|
struct dirent *entry;
|
||||||
|
|
||||||
@ -371,13 +376,16 @@ main(int argc, char **argv)
|
|||||||
|
|
||||||
}
|
}
|
||||||
ez_closedir(dir);
|
ez_closedir(dir);
|
||||||
}
|
} /* End of cache management */
|
||||||
|
|
||||||
/* We're done with disk I/O, so release lock */
|
/* We're done with disk I/O, so release lock */
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
flock(lock_fd, LOCK_UN);
|
flock(lock_fd, LOCK_UN);
|
||||||
ez_close(lock_fd);
|
ez_close(lock_fd);
|
||||||
lock_fd= -1;
|
lock_fd= -1;
|
||||||
|
|
||||||
|
/* Processing only for long listings */
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
if(G.flags & GLB_LONG_LISTING_FLG) {
|
if(G.flags & GLB_LONG_LISTING_FLG) {
|
||||||
MAP map;
|
MAP map;
|
||||||
MAP_constructor(&map, N_ADDRESSES_HINT/BUCKET_DEPTH_HINT, BUCKET_DEPTH_HINT);
|
MAP_constructor(&map, N_ADDRESSES_HINT/BUCKET_DEPTH_HINT, BUCKET_DEPTH_HINT);
|
||||||
@ -402,9 +410,12 @@ main(int argc, char **argv)
|
|||||||
MAP_clearAndDestroy(&map, (void*(*)(void*))LOGENTRY_destructor);
|
MAP_clearAndDestroy(&map, (void*(*)(void*))LOGENTRY_destructor);
|
||||||
MAP_destructor(&map);
|
MAP_destructor(&map);
|
||||||
}
|
}
|
||||||
}
|
} /* End of cache and logfile-specific LOGENTRY objects */
|
||||||
|
|
||||||
{ /******* Now get a map of LOGENTRY objects that have combined counts ****/
|
/* Now get a map of LOGENTRY objects that have combined counts.
|
||||||
|
* Perform all remaining processing and reporting.
|
||||||
|
*/
|
||||||
|
{ /*=======================================================================*/
|
||||||
|
|
||||||
/* List by address. Make a addr_map of LOGENTRY objects with composite counts */
|
/* List by address. Make a addr_map of LOGENTRY objects with composite counts */
|
||||||
MAP_visitAllEntries(&G.logType_map, (int(*)(void*,void*))LOGTYPE_map_addr, &S.addr2logEntry_map);
|
MAP_visitAllEntries(&G.logType_map, (int(*)(void*,void*))LOGTYPE_map_addr, &S.addr2logEntry_map);
|
||||||
@ -427,9 +438,11 @@ main(int argc, char **argv)
|
|||||||
ez_fprintf(G.listing_fh, "Performing DNS lookups for up to %d seconds ...\n", DFLT_DNS_PAUSE_SEC);
|
ez_fprintf(G.listing_fh, "Performing DNS lookups for up to %d seconds ...\n", DFLT_DNS_PAUSE_SEC);
|
||||||
fflush(G.listing_fh);
|
fflush(G.listing_fh);
|
||||||
|
|
||||||
|
int64_t begin_ms= clock_gettime_ms(CLOCK_REALTIME);
|
||||||
int rc= PDNS_lookup(S.lePtrArr, nItems, DFLT_DNS_PAUSE_SEC*1000);
|
int rc= PDNS_lookup(S.lePtrArr, nItems, DFLT_DNS_PAUSE_SEC*1000);
|
||||||
assert(-1 != rc);
|
assert(-1 != rc);
|
||||||
ez_fprintf(G.listing_fh, "\t==> Completed %d of %u lookups\n", rc, nItems);
|
int64_t ms= clock_gettime_ms(CLOCK_REALTIME) - begin_ms;
|
||||||
|
ez_fprintf(G.listing_fh, "\t==> Completed %d of %u lookups in %.1f seconds\n", rc, nItems, (double)ms/1000.);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Process each LOGENTRY item */
|
/* Process each LOGENTRY item */
|
||||||
|
@ -41,7 +41,7 @@
|
|||||||
|
|
||||||
/* How long to wait for reverse DNS lookups before bailing out */
|
/* How long to wait for reverse DNS lookups before bailing out */
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
# define DFLT_DNS_PAUSE_SEC 10
|
# define DFLT_DNS_PAUSE_SEC 60
|
||||||
#else
|
#else
|
||||||
# define DFLT_DNS_PAUSE_SEC 60
|
# define DFLT_DNS_PAUSE_SEC 60
|
||||||
#endif
|
#endif
|
||||||
|
22
pdns.c
22
pdns.c
@ -58,22 +58,22 @@ struct workerMsg {
|
|||||||
static const char* addrinfo2addr(const struct addrinfo *ai);
|
static const char* addrinfo2addr(const struct addrinfo *ai);
|
||||||
static int addrinfo_is_match(const struct addrinfo *ai, const char *addr);
|
static int addrinfo_is_match(const struct addrinfo *ai, const char *addr);
|
||||||
static int mgr_check_inbox_f(void *data, int signo);
|
static int mgr_check_inbox_f(void *data, int signo);
|
||||||
|
static int join_f(void *data, int signo);
|
||||||
|
static unsigned nThreads_joined(void);
|
||||||
|
static int print_addrinfo(struct addrinfo *ai, FILE *fh);
|
||||||
|
static int shutdown_f(void *data);
|
||||||
|
static void stop_remaining_workers(void);
|
||||||
|
static int timeout_f(void *data);
|
||||||
static int worker_check_inbox_f(void *vp_ndx, int signo);
|
static int worker_check_inbox_f(void *vp_ndx, int signo);
|
||||||
static void* worker_main (void *data);
|
static void* worker_main (void *data);
|
||||||
static int worker_exit_f(void *data, int signo);
|
static int worker_exit_f(void *data, int signo);
|
||||||
static int join_f(void *data, int signo);
|
|
||||||
static int print_addrinfo(struct addrinfo *ai, FILE *fh);
|
|
||||||
static void stop_remaining_workers(void);
|
|
||||||
static int timeout_f(void *data);
|
|
||||||
static int shutdown_f(void *data);
|
|
||||||
static unsigned nThreads_joined(void);
|
|
||||||
|
|
||||||
/*============================================================*/
|
/*============================================================*/
|
||||||
/*=========== Static data ====================================*/
|
/*=========== Static data ====================================*/
|
||||||
/*============================================================*/
|
/*============================================================*/
|
||||||
static struct {
|
static struct {
|
||||||
|
|
||||||
enum {
|
volatile enum {
|
||||||
EXIT_FLG= 1<<0,
|
EXIT_FLG= 1<<0,
|
||||||
ORPHAN_FLG= 1<<1
|
ORPHAN_FLG= 1<<1
|
||||||
} flags;
|
} flags;
|
||||||
@ -95,7 +95,7 @@ static struct {
|
|||||||
/* One of these for each worker thread */
|
/* One of these for each worker thread */
|
||||||
struct worker {
|
struct worker {
|
||||||
|
|
||||||
int is_joined;
|
volatile int is_joined;
|
||||||
|
|
||||||
pthread_t tid;
|
pthread_t tid;
|
||||||
MSGQUEUE inbox;
|
MSGQUEUE inbox;
|
||||||
@ -195,9 +195,9 @@ abort:
|
|||||||
|
|
||||||
static int
|
static int
|
||||||
mgr_check_inbox_f(void *data, int signo)
|
mgr_check_inbox_f(void *data, int signo)
|
||||||
/*********************************************************
|
/**************************************************************************
|
||||||
* Parent was prompted to check the inbox to see which
|
* Manager was prompted by a worker to check the inbox and see which worker is
|
||||||
* worker is ready for another task.
|
* ready for another task.
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
int rtn= -1;
|
int rtn= -1;
|
||||||
|
Loading…
Reference in New Issue
Block a user