summaryrefslogtreecommitdiffstats
path: root/common/elapi/providers/file/file_provider.h
blob: f5e6753dfb801306a42c407210cf3fd5999fb664 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
/*
    ELAPI

    Header file used internally by the "file" provider.

    Copyright (C) Dmitri Pal <dpal@redhat.com> 2009

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#ifndef ELAPI_FILE_PROVIDER_H
#define ELAPI_FILE_PROVIDER_H

#include <stdint.h>

#include "elapi_sink.h"

/* Common configuration parameters */
#define FILE_OUTNAME        "filename"
#define FILE_KEEPOPEN       "keepopen"
#define FILE_OUTMODE        "outmode"
#define FILE_FIELDSET       "set"
#define FILE_FORMAT         "format"
#define FILE_FLUSH          "fsyncmode"


/* Max supported mode */
/* NOTE: Increase this value when you add a new mode.
 * If it ever gets to 10 the logic in the
 * function that builds the set needs to change.
 */
#define FILE_MAXMODE        5
/* Modes: */
#define FILE_MODE_CSV       0
#define FILE_MODE_FORMAT    1
#define FILE_MODE_HTML      2
#define FILE_MODE_XML       3
#define FILE_MODE_JSON      4
#define FILE_MODE_KVP       5


/* FIXME: Should it be a compile time switch? */
#define FILE_SUFFIX ".log"
#define FILE_SET_END '@'

/* Field set collection */
#define FILE_FIELDSET_COL   "set"
#define FILE_FIELDSET_CLASS  21000

/* Special file name - stderr is handled differently */
#define FILE_STDERR "stderr"

/* Structure that holds internal configuration of the file
 * provider.
 */
struct file_prvdr_cfg {
    char *filename;                 /* File name */
    uint32_t ownfile;               /* Do I own the file handle? */
    uint32_t keepopen;              /* Do we need to keep file open */
    int32_t fsyncmode;              /* How frequently data is fsynced */
    uint32_t outmode;               /* Output mode */
    struct collection_item *set;    /* Field set without leftovers symbol */
    uint32_t use_leftovers;         /* Was there a leftover symbol */
    uint32_t jam_leftovers;         /* leftovers should be serialized into one field */
    uint32_t mode_leftovers;        /* Format for the leftover fields */
    void *main_fmt_cfg;             /* Configuration data for the main format */
    void *lo_fmt_cfg;               /* Configuration data for leftovers format */
    /* FIXME add other config data strutures here */

    /* FIXME: Rotation rules ? */
};


/* File context */
struct file_prvdr_ctx {
    struct file_prvdr_cfg config; /* Configuration */
    int outfile;                  /* File handle */
    uint32_t smode;               /* Sink's synch mode */
    /* FIXME - other things go here */
};

/* File init function */
int file_init(void **priv_ctx,
              const char *name,
              struct collection_item *ini_config,
              const char *appname);

/* File close function */
void file_close(void **priv_ctx);

/* File submit function */
int file_submit(void *priv_ctx, struct collection_item *event);

/* This is the equivalent of the get info function */
void file_ability(struct sink_cpb *cpb_block);

#endif