-
Notifications
You must be signed in to change notification settings - Fork 1k
/
Copy pathPgSQL_Logger.hpp
98 lines (92 loc) · 2.52 KB
/
PgSQL_Logger.hpp
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
#ifndef __CLASS_PGSQL_LOGGER_H
#define __CLASS_PGSQL_LOGGER_H
#include "proxysql.h"
#include "cpp.h"
#define PROXYSQL_LOGGER_PTHREAD_MUTEX
class PgSQL_Event {
private:
uint32_t thread_id;
char *username;
char *schemaname;
size_t username_len;
size_t schemaname_len;
uint64_t start_time;
uint64_t end_time;
uint64_t query_digest;
char *query_ptr;
size_t query_len;
char *server;
char *client;
size_t server_len;
size_t client_len;
//uint64_t total_length;
unsigned char buf[10];
enum log_event_type et;
uint64_t hid;
char *extra_info;
bool have_affected_rows;
bool have_rows_sent;
uint64_t affected_rows;
uint64_t last_insert_id;
uint64_t rows_sent;
uint32_t client_stmt_id;
public:
PgSQL_Event(log_event_type _et, uint32_t _thread_id, char * _username, char * _schemaname , uint64_t _start_time , uint64_t _end_time , uint64_t _query_digest, char *_client, size_t _client_len);
uint64_t write(std::fstream *f, PgSQL_Session *sess);
uint64_t write_query_format_1(std::fstream *f);
uint64_t write_query_format_2_json(std::fstream *f);
void write_auth(std::fstream *f, PgSQL_Session *sess);
void set_client_stmt_id(uint32_t client_stmt_id);
void set_query(const char *ptr, int len);
void set_server(int _hid, const char *ptr, int len);
void set_extra_info(char *);
void set_affected_rows(uint64_t ar, uint64_t lid);
void set_rows_sent(uint64_t rs);
};
class PgSQL_Logger {
private:
struct {
bool enabled;
char *base_filename;
char *datadir;
unsigned int log_file_id;
unsigned int max_log_file_size;
std::fstream *logfile;
} events;
struct {
bool enabled;
char *base_filename;
char *datadir;
unsigned int log_file_id;
unsigned int max_log_file_size;
std::fstream *logfile;
} audit;
#ifdef PROXYSQL_LOGGER_PTHREAD_MUTEX
pthread_mutex_t wmutex;
#else
rwlock_t rwlock;
#endif
void events_close_log_unlocked();
void events_open_log_unlocked();
void audit_close_log_unlocked();
void audit_open_log_unlocked();
unsigned int events_find_next_id();
unsigned int audit_find_next_id();
public:
PgSQL_Logger();
~PgSQL_Logger();
void print_version();
void flush_log();
void events_flush_log_unlocked();
void audit_flush_log_unlocked();
void events_set_datadir(char *);
void events_set_base_filename();
void audit_set_datadir(char *);
void audit_set_base_filename();
void log_request(PgSQL_Session *, PgSQL_Data_Stream *);
void log_audit_entry(log_event_type, PgSQL_Session *, PgSQL_Data_Stream *, char *e = NULL);
void flush();
void wrlock();
void wrunlock();
};
#endif /* __CLASS_PGSQL_LOGGER_H */