Changeset 84d6f13ffc15b3f1bb50df2ac835b56f70179b3e
- Timestamp:
- 02/03/09 01:29:49 (4 years ago)
- git-parent:
- Files:
-
- src/eventer/eventer.h (modified) (1 diff)
- src/eventer/eventer_impl.c (modified) (4 diffs)
- src/eventer/eventer_jobq.c (modified) (5 diffs)
- src/eventer/eventer_jobq.h (modified) (3 diffs)
- src/modules/Makefile.in (modified) (2 diffs)
- src/modules/selfcheck.c (added)
- src/modules/selfcheck.xml (added)
- src/noit_check.c (modified) (1 diff)
- src/noit_check.h (modified) (1 diff)
- src/noit_console.c (modified) (1 diff)
- src/noit_defines.h (modified) (1 diff)
- src/noit_livestream_listener.c (modified) (1 diff)
- src/utils/noit_log.c (modified) (5 diffs)
- src/utils/noit_log.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
src/eventer/eventer.h
r04aaf95 r84d6f13 113 113 API_EXPORT(eventer_t) eventer_remove_recurrent(eventer_t e); 114 114 API_EXPORT(void) eventer_add_recurrent(eventer_t e); 115 API_EXPORT(int) eventer_get_epoch(struct timeval *epoch); 115 116 116 117 #endif src/eventer/eventer_impl.c
r4c963d7 r84d6f13 9 9 #include <pthread.h> 10 10 #include <assert.h> 11 12 static struct timeval *eventer_impl_epoch = NULL; 11 13 12 14 #ifdef HAVE_KQUEUE … … 62 64 } 63 65 66 int eventer_get_epoch(struct timeval *epoch) { 67 if(!eventer_impl_epoch) return -1; 68 memcpy(epoch, eventer_impl_epoch, sizeof(*epoch)); 69 return 0; 70 } 71 64 72 int eventer_impl_init() { 65 73 int i; 66 74 eventer_t e; 75 76 eventer_impl_epoch = malloc(sizeof(struct timeval)); 77 gettimeofday(eventer_impl_epoch, NULL); 67 78 68 79 eventer_err = noit_log_stream_find("error/eventer"); … … 72 83 73 84 eventer_ssl_init(); 74 eventer_jobq_init(&__global_backq );85 eventer_jobq_init(&__global_backq, "default_back_queue"); 75 86 e = eventer_alloc(); 76 87 e->mask = EVENTER_RECURRENT; … … 81 92 eventer_add_recurrent(e); 82 93 83 eventer_jobq_init(&__default_jobq );94 eventer_jobq_init(&__default_jobq, "default_queue"); 84 95 __default_jobq.backq = &__global_backq; 85 96 for(i=0; i<__default_queue_threads; i++) src/eventer/eventer_jobq.c
r28f06c3 r84d6f13 20 20 static pthread_key_t threads_jobq; 21 21 static sigset_t alarm_mask; 22 static noit_hash_table all_queues = NOIT_HASH_EMPTY; 23 pthread_mutex_t all_queues_lock; 22 24 23 25 static void … … 38 40 39 41 int 40 eventer_jobq_init(eventer_jobq_t *jobq ) {42 eventer_jobq_init(eventer_jobq_t *jobq, const char *queue_name) { 41 43 pthread_mutexattr_t mutexattr; 42 44 … … 61 63 return -1; 62 64 } 65 if(pthread_mutex_init(&all_queues_lock, NULL)) { 66 noitL(noit_error, "Cannot initialize all_queues mutex: %s\n", 67 strerror(errno)); 68 return -1; 69 } 63 70 } 64 71 65 72 memset(jobq, 0, sizeof(*jobq)); 73 jobq->queue_name = strdup(queue_name); 66 74 if(pthread_mutexattr_init(&mutexattr) != 0) { 67 75 noitL(noit_error, "Cannot initialize lock attributes\n"); … … 87 95 return -1; 88 96 } 97 pthread_mutex_lock(&all_queues_lock); 98 if(noit_hash_store(&all_queues, jobq->queue_name, strlen(jobq->queue_name), 99 jobq) == 0) { 100 noitL(noit_error, "Duplicate queue name!\n"); 101 pthread_mutex_unlock(&all_queues_lock); 102 return -1; 103 } 104 pthread_mutex_unlock(&all_queues_lock); 89 105 return 0; 90 106 } … … 268 284 eventer_jobq_enqueue(jobq, job); 269 285 } 270 286 void eventer_jobq_process_each(void (*func)(eventer_jobq_t *, void *), 287 void *closure) { 288 const char *key; 289 int klen; 290 eventer_jobq_t *jobq; 291 noit_hash_iter iter = NOIT_HASH_ITER_ZERO; 292 293 pthread_mutex_lock(&all_queues_lock); 294 while(noit_hash_next(&all_queues, &iter, &key, &klen, (void **)&jobq)) { 295 func(jobq, closure); 296 } 297 pthread_mutex_unlock(&all_queues_lock); 298 } src/eventer/eventer_jobq.h
r3b3b432 r84d6f13 35 35 36 36 typedef struct _eventer_jobq_t { 37 const char *queue_name; 37 38 pthread_mutex_t lock; 38 39 sem_t semaphore; … … 45 46 } eventer_jobq_t; 46 47 47 int eventer_jobq_init(eventer_jobq_t *jobq );48 int eventer_jobq_init(eventer_jobq_t *jobq, const char *queue_name); 48 49 void eventer_jobq_enqueue(eventer_jobq_t *jobq, eventer_job_t *job); 49 50 eventer_job_t *eventer_jobq_dequeue(eventer_jobq_t *jobq); … … 57 58 void eventer_jobq_decrease_concurrency(eventer_jobq_t *jobq); 58 59 void *eventer_jobq_consumer(eventer_jobq_t *jobq); 60 void eventer_jobq_process_each(void (*func)(eventer_jobq_t *, void *), void *); 59 61 60 62 #endif src/modules/Makefile.in
rd5f3933 r84d6f13 25 25 26 26 MODULES=ping_icmp.@MODULEEXT@ http.@MODULEEXT@ postgres.@MODULEEXT@ \ 27 lua.@MODULEEXT@ dns.@MODULEEXT@ \27 lua.@MODULEEXT@ dns.@MODULEEXT@ selfcheck.@MODULEEXT@ \ 28 28 @BUILD_MODULES@ 29 29 … … 32 32 .xml.xmlh: 33 33 @$(XML2H) `echo $< | sed -e 's/\.xml$$//;'`_xml_description < $< > $@ 34 35 selfcheck.lo: selfcheck.xmlh 34 36 35 37 lua.@MODULEEXT@: lua.lo lua_noit.lo src/noit_check.c
r5d557e7 r84d6f13 344 344 noit_poller_reload(NULL); 345 345 } 346 347 int 348 noit_poller_check_count() { 349 return polls_by_name.size; 350 }; 351 352 int 353 noit_poller_transient_check_count() { 354 return watchlist.size; 355 }; 346 356 347 357 noit_check_t * src/noit_check.h
r7180374 r84d6f13 122 122 123 123 API_EXPORT(void) noit_poller_init(); 124 API_EXPORT(int) noit_poller_check_count(); 125 API_EXPORT(int) noit_poller_transient_check_count(); 124 126 API_EXPORT(void) noit_poller_reload(const char *xpath); /* NULL for all */ 125 127 API_EXPORT(void) noit_poller_process_checks(const char *xpath); src/noit_console.c
rdf2e1eb r84d6f13 451 451 noit_console_logio_write, 452 452 noit_console_logio_close, 453 NULL 453 454 }; 454 455 src/noit_defines.h
r5a9b91b r84d6f13 74 74 #define HAVE_IPv6 75 75 76 static inline int noit_build_version(char *buff, int len) { 77 const char *v = NOIT_HEADURL; 78 const char *start, *end, *ns; 79 if(NULL != (start = strstr(v, "reconnoiter/"))) { 80 start += strlen("reconnoiter/"); 81 if(NULL != (end = strstr(start, "/src"))) { 82 ns = strchr(start, '/'); /* necessarily non-NULL */ 83 ns++; 84 if(!strncmp(start, "trunk/", 6)) 85 return snprintf(buff, len, "trunk.%s", NOIT_SVNVERSION); 86 if(!strncmp(start, "branches/", 9)) 87 return snprintf(buff, len, "b_%.*s.%s", end - ns, ns, NOIT_SVNVERSION); 88 if(!strncmp(start, "tags/", 5)) 89 return snprintf(buff, len, "%.*s.%s", end - ns, ns, NOIT_SVNVERSION); 90 } 91 } 92 return snprintf(buff, len, "unknown.%s", NOIT_SVNVERSION); 93 } 94 76 95 #endif src/noit_livestream_listener.c
re7c26b4 r84d6f13 105 105 noit_livestream_logio_write, 106 106 noit_livestream_logio_close, 107 NULL 107 108 }; 108 109 src/utils/noit_log.c
rc8af4b3 r84d6f13 61 61 return close(fd); 62 62 } 63 static size_t 64 posix_logio_size(noit_log_stream_t ls) { 65 int fd; 66 struct stat sb; 67 fd = (int)ls->op_ctx; 68 if(fstat(fd, &sb) == 0) { 69 return (size_t)sb.st_size; 70 } 71 return -1; 72 } 63 73 static logops_t posix_logio_ops = { 64 74 posix_logio_open, … … 66 76 posix_logio_write, 67 77 posix_logio_close, 78 posix_logio_size 68 79 }; 69 80 … … 135 146 return 0; 136 147 } 148 static size_t 149 jlog_logio_size(noit_log_stream_t ls) { 150 if(!ls->op_ctx) return -1; 151 return jlog_raw_size((jlog_ctx *)ls->op_ctx); 152 } 137 153 static logops_t jlog_logio_ops = { 138 154 jlog_logio_open, … … 140 156 jlog_logio_write, 141 157 jlog_logio_close, 158 jlog_logio_size 142 159 }; 143 160 … … 297 314 noit_log_stream_close(noit_log_stream_t ls) { 298 315 if(ls->ops) ls->ops->closeop(ls); 316 } 317 318 size_t 319 noit_log_stream_size(noit_log_stream_t ls) { 320 if(ls->ops && ls->ops->sizeop) return ls->ops->sizeop(ls); 321 return -1; 299 322 } 300 323 src/utils/noit_log.h
rc8af4b3 r84d6f13 22 22 int (*writeop)(struct _noit_log_stream *, const void *, size_t); 23 23 int (*closeop)(struct _noit_log_stream *); 24 size_t (*sizeop)(struct _noit_log_stream *); 24 25 } logops_t; 25 26 … … 58 59 API_EXPORT(void) noit_log_stream_reopen(noit_log_stream_t ls); 59 60 API_EXPORT(void) noit_log_stream_close(noit_log_stream_t ls); 61 API_EXPORT(size_t) noit_log_stream_size(noit_log_stream_t ls); 60 62 API_EXPORT(void) noit_log_stream_free(noit_log_stream_t ls); 61 63 API_EXPORT(int) noit_vlog(noit_log_stream_t ls, struct timeval *,
