summaryrefslogtreecommitdiffstats
path: root/src/fluent-bit/plugins/out_oracle_log_analytics/oci_logan.h
blob: 7cc9e75f4a193899634af3faffe73ab9c108c54f (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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */

/*  Fluent Bit
 *  ==========
 *  Copyright (C) 2015-2023 The Fluent Bit Authors
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */


#ifndef FLB_OUT_OCI_LOGAN_H
#define FLB_OUT_OCI_LOGAN_H

#define FLB_OCI_LOG_ENTITY_ID_KEY "oci_la_entity_id"
#define FLB_OCI_LOG_ENTITY_ID_KEY_SIZE sizeof(FLB_OCI_LOG_ENTITY_ID_KEY) - 1

#define FLB_OCI_LOG_ENTITY_TYPE_KEY "oci_la_entity_type"
#define FLB_OCI_LOG_ENTITY_TYPE_KEY_SIZE sizeof(FLB_OCI_LOG_ENTITY_TYPE_KEY) - 1

#define FLB_OCI_LOG_GROUP_ID_KEY "oci_la_log_group_id"
#define FLB_OCI_LOG_GROUP_ID_KEY_SIZE sizeof(FLB_OCI_LOG_GROUP_ID_KEY) - 1

#define FLB_OCI_LOG_SET_ID_KEY "oci_la_log_set_id"
#define FLB_OCI_LOG_SET_ID_KEY_SIZE sizeof(FLB_OCI_LOG_SET_ID_KEY) - 1

#define FLB_OCI_LOG_SOURCE_NAME_KEY "oci_la_log_source_name"
#define FLB_OCI_LOG_SOURCE_NAME_KEY_SIZE sizeof(FLB_OCI_LOG_SOURCE_NAME_KEY) - 1

#define FLB_OCI_LOG_PATH_KEY "oci_la_log_path"
#define FLB_OCI_LOG_PATH_KEY_SIZE sizeof(FLB_OCI_LOG_PATH_KEY) - 1

#define FLB_OCI_METADATA_KEY "oci_la_metadata"
#define FLB_OCI_METADATA_KEY_SIZE sizeof(FLB_OCI_METADATA_KEY) - 1

#define FLB_OCI_GLOBAL_METADATA_KEY "oci_la_global_metadata"
#define FLB_OCI_GLOBAL_METADATA_KEY_SIZE sizeof(FLB_OCI_GLOBAL_METADATA_KEY) - 1

#define FLB_OCI_LOG_EVENTS  "logEvents"
#define FLB_OCI_LOG_EVENTS_SIZE sizeof(FLB_OCI_LOG_EVENTS)-1

#define FLB_OCI_LOG_RECORDS  "logRecords"
#define FLB_OCI_LOG_RECORDS_SIZE sizeof(FLB_OCI_LOG_RECORDS)-1

#define FLB_OCI_LOG_GROUP_ID "logGroupId"
#define FLB_OCI_LOG_GROUP_ID_SIZE sizeof(FLB_OCI_LOG_GROUP_ID)-1

#define FLB_OCI_ENTITY_TYPE "entityType"
#define FLB_OCI_ENTITY_TYPE_SIZE sizeof(FLB_OCI_ENTITY_TYPE) - 1

#define FLB_OCI_LOG_SET "logSet"
#define FLB_OCI_LOG_SET_SIZE sizeof(FLB_OCI_LOG_SET)-1

#define FLB_OCI_LOG_METADATA "metadata"
#define FLB_OCI_LOG_METADATA_SIZE sizeof(FLB_OCI_LOG_METADATA)-1

#define FLB_OCI_ENTITY_ID "entityId"
#define FLB_OCI_ENTITY_ID_SIZE sizeof(FLB_OCI_ENTITY_ID)-1

#define FLB_OCI_LOG_SOURCE_NAME "logSourceName"
#define FLB_OCI_LOG_SOURCE_NAME_SIZE sizeof(FLB_OCI_LOG_SOURCE_NAME)-1

#define FLB_OCI_LOG_PATH "logPath"
#define FLB_OCI_LOG_PATH_SIZE sizeof(FLB_OCI_LOG_PATH)-1

#define FLB_OCI_META_PREFIX "metadata_"
#define FLB_OCI_META_PREFIX_SIZE sizeof(FLB_OCI_META_PREFIX)-1

#define FLB_OCI_MATCH_PREFIX "oci_match_"
#define FLB_OCI_MATCH_PREFIX_SIZE sizeof(FLB_OCI_MATCH_PREFIX)-1

#ifdef FLB_HAVE_REGEX
#define FLB_OCI_MATCH_REGEX_PREFIX "oci_match_regex_"
#define FLB_OCI_MATCH_REGEX_PREFIX_SIZE sizeof(FLB_OCI_MATCH_REGEX_PREFIX)-1
#endif

/* Params */
#define FLB_OCI_PARAM_SKIP_HTTP_POST "skip_http_post"
#define FLB_OCI_PARAM_URI "uri"
#define FLB_OCI_PARAM_ENABLE_TRACE_OUTPUT "enable_trace"
#define FLB_OCI_PARAM_TRACE_OUTPUT_PATH "trace_file_path"
#define FLB_OCI_PARAM_TRACE_OUTPUT_FILE "trace_file_name"
#define FLB_OCI_PARAM_COLLECT_TIME_FIELD "collect_time_field_name"

#define FLB_OCI_PARAM_USE_RAW_RECORD "use_raw_record"
#define FLB_OCI_PARAM_USE_RAW_RECORD_SIZE sizeof(FLB_OCI_PARAM_USE_RAW_RECORD)-1

#define FLB_OCI_PARAM_INCLUDE_COLLECT_TIME "include_collect_time"
#define FLB_OCI_PARAM_INCLUDE_COLLECT_TIME_SIZE sizeof(FLB_OCI_PARAM_INCLUDE_COLLECT_TIME)-1

#define FLB_OCI_MATCH_ID_MAX 1000 // TO avoid too large memory allocation

#define FLB_OCI_DEFAULT_COLLECT_TIME       "oci_collect_time"
#define FLB_OCI_DEFAULT_COLLECT_TIME_SIZE sizeof(FLB_OCI_DEFAULT_COLLECT_TIME)-1

/* Http Header */
#define FLB_OCI_HEADER_REQUEST_TARGET           "(request-target)"
#define FLB_OCI_HEADER_USER_AGENT                      "User-Agent"
#define FLB_OCI_HEADER_USER_AGENT_VAL                  "Fluent-Bit"
#define FLB_OCI_HEADER_CONTENT_TYPE                    "content-type"
#define FLB_OCI_HEADER_CONTENT_TYPE_VAL                "application/octet-stream"
#define FLB_OCI_HEADER_X_CONTENT_SHA256                "x-content-sha256"
#define FLB_OCI_HEADER_CONTENT_LENGTH                  "content-length"
#define FLB_OCI_HEADER_HOST                            "host"
#define FLB_OCI_HEADER_DATE                            "date"
#define FLB_OCI_HEADER_AUTH                            "Authorization"
#define FLB_OCI_PAYLOAD_TYPE                           "payloadType"


/* For OCI signing */
#define FLB_OCI_PARAM_TENANCY     "tenancy"
#define FLB_OCI_PARAM_USER        "user"
#define FLB_OCI_PARAM_KEY_FINGERPRINT     "fingerprint"
#define FLB_OCI_PARAM_KEY_FILE     "key_file"
#define FLB_OCI_PARAM_REGION  "region"
#define FLB_OCI_PARAM_KEY_FILE_PASSPHRASE "key_file_passphrase"

#define FLB_OCI_SIGN_SIGNATURE_VERSION   "Signature version=\"1\""
#define FLB_OCI_SIGN_KEYID   "keyId"
#define FLB_OCI_SIGN_ALGORITHM   "algorithm=\"rsa-sha256\""

#define FLB_OCI_SIGN_HEADERS     "headers=\"" \
    FLB_OCI_HEADER_REQUEST_TARGET " " \
    FLB_OCI_HEADER_HOST " " \
    FLB_OCI_HEADER_DATE " " \
    FLB_OCI_HEADER_X_CONTENT_SHA256 " " \
    FLB_OCI_HEADER_CONTENT_TYPE " " \
    FLB_OCI_HEADER_CONTENT_LENGTH "\""

#define FLB_OCI_SIGN_SIGNATURE   "signature"

/* For error response */
#define FLB_OCI_ERROR_RESPONSE_CODE     "code"
#define FLB_OCI_ERROR_RESPONSE_MESSAGE  "message"

#define FLB_OCI_ERROR_CODE_RELATED_RESOURCE_NOT_FOUND      "RelatedResourceNotAuthorizedOrNotFound"
#define FLB_OCI_ERROR_CODE_NOT_AUTHENTICATED               "NotAuthenticated"
#define FLB_OCI_ERROR_CODE_NOT_AUTHENTICATEDORNOTFOUND     "NotAuthorizedOrNotFound"
#define FLB_OCI_ERROR_CODE_INCORRECTSTATE                  "IncorrectState"
#define FLB_OCI_ERROR_CODE_NOT_AUTH_OR_RESOURCE_EXIST      "NotAuthorizedOrResourceAlreadyExists"
#define FLB_OCI_ERROR_CODE_TOO_MANY_REQUESTS               "TooManyRequests"
#define FLB_OCI_ERROR_CODE_INTERNAL_SERVER_ERROR           "InternalServerError"

#include <fluent-bit/flb_upstream.h>
#include <fluent-bit/flb_sds.h>
#include <fluent-bit/flb_record_accessor.h>
#include <fluent-bit/flb_hash_table.h>
#include <monkey/mk_core/mk_list.h>

struct metadata_obj {
    flb_sds_t key;
    flb_sds_t val;
    struct mk_list _head;

};

struct flb_oci_error_response
{
  flb_sds_t code;
  flb_sds_t message;
};

struct flb_oci_logan {
    flb_sds_t namespace;
    flb_sds_t config_file_location;
    flb_sds_t profile_name;
    int oci_config_in_record;
    flb_sds_t uri;

    struct flb_upstream *u;
    flb_sds_t proxy;
    char *proxy_host;
    int proxy_port;

    // oci_la_* configs
    flb_sds_t oci_la_entity_id;

    flb_sds_t oci_la_entity_type;

    flb_sds_t oci_la_log_source_name;

    flb_sds_t oci_la_log_path;

    flb_sds_t oci_la_log_group_id;

    flb_sds_t oci_la_log_set_id;

    struct mk_list *oci_la_global_metadata;
    struct mk_list global_metadata_fields;
    struct mk_list *oci_la_metadata;
    struct mk_list log_event_metadata_fields;

  // config_file
    flb_sds_t user;
    flb_sds_t region;
    flb_sds_t tenancy;
    flb_sds_t key_fingerprint;
    flb_sds_t key_file;
    /* For OCI signing */
    flb_sds_t key_id; // tenancy/user/key_fingerprint
    flb_sds_t private_key;

    struct flb_output_instance *ins;

};
#endif