src/modules/logwatch_source.c
author Tero Marttila <terom@fixme.fi>
Tue, 07 Apr 2009 21:09:25 +0300
changeset 119 64f50072db9e
child 127 94e6c3b4230f
permissions -rw-r--r--
add logwatch module, that can already open FIFOs
119
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
#include "logwatch.h"
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
#include "../log.h"
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
#include <stdlib.h>
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
void logwatch_source_on_line (char *line, void *arg)
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
{
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     8
    struct logwatch_source *source = arg;
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    10
    log_info("%s", line);
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    11
}
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    12
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    13
void logwatch_source_on_error (struct error_info *err, void *arg)
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    14
{
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
    struct logwatch_source *source = arg;
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
    
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
    log_error("%s", error_msg(err));
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
}
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
static const struct line_proto_callbacks lp_callbacks = {
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
    .on_line    = logwatch_source_on_line,
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
    .on_error   = logwatch_source_on_error,
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    23
};
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
/**
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    26
 * Initialize with the given sock
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
 */
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
err_t logwatch_source_init (struct logwatch_source *source, struct logwatch *ctx, struct sock_stream *stream, struct error_info *err)
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
{
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
    source->ctx = ctx;
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
    
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
    // create the lp to wrap the sock
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
    if (line_proto_create(&source->lp, stream, LOGWATCH_SOURCE_LINE_MAX, &lp_callbacks, source, err))
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
        goto error;
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
    // add to logwatch_sources
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    37
    TAILQ_INSERT_TAIL(&ctx->sources, source, logwatch_sources);
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
    
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
    // ok
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    40
    return SUCCESS;
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    41
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    42
error:    
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    43
    return ERROR_CODE(err);
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
}
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    45
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    46
struct logwatch_source* logwatch_open_fifo (struct logwatch *ctx, const char *path, struct error_info *err)
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    47
{
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    48
    struct logwatch_source *source;
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    49
    struct sock_stream *stream = NULL;
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    50
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    51
    // alloc
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    52
    if ((source = calloc(1, sizeof(*source))) == NULL)
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    53
        JUMP_SET_ERROR(err, ERR_CALLOC);
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    54
    
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    55
    // open
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    56
    if (fifo_open_read(&stream, path, err))
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    57
        goto error;
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    58
        
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    59
    // init
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    60
    if (logwatch_source_init(source, ctx, stream, err))
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    61
        goto error;
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    62
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    63
    // ok
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    64
    return source;
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    65
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    66
error:    
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    67
    // cleanup
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    68
    if (stream)
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    69
        sock_stream_release(stream);
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    70
    
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    71
    if (source)
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    72
        free(source);
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    73
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    74
    return NULL;
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    75
}
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    76
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    77
void logwatch_source_destroy (struct logwatch_source *source)
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    78
{
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    79
    // release the line_proto
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    80
    if (source->lp)
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    81
        line_proto_release(source->lp);
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    82
        
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    83
    // remove from the list
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    84
    TAILQ_REMOVE(&source->ctx->sources, source, logwatch_sources);
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    85
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    86
    free(source);
64f50072db9e add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    87
}