Splitting ProxySQL_Admin

v2.x_pg_PrepStmtBase_240714
Rene Cannao 2 years ago
parent a3193ad1dd
commit a1fd4af1a6

@ -0,0 +1,150 @@
#ifndef ADMIN_IFACES_H
#define ADMIN_IFACES_H
#define MAX_IFACES 8
#define MAX_ADMIN_LISTENERS 16
typedef struct _main_args {
int nfds;
struct pollfd *fds;
int *callback_func;
volatile int *shutdown;
} main_args;
typedef struct _ifaces_desc_t {
char **mysql_ifaces;
char **pgsql_ifaces;
char **telnet_admin_ifaces;
char **telnet_stats_ifaces;
} ifaces_desc_t;
class ifaces_desc {
public:
PtrArray *ifaces;
ifaces_desc() {
ifaces=new PtrArray();
}
bool add(const char *iface) {
for (unsigned int i=0; i<ifaces->len; i++) {
if (strcmp((const char *)ifaces->index(i),iface)==0) {
return false;
}
}
ifaces->add(strdup(iface));
return true;
}
~ifaces_desc() {
while(ifaces->len) {
char *d=(char *)ifaces->remove_index_fast(0);
free(d);
}
delete ifaces;
}
};
class admin_main_loop_listeners {
private:
int version;
#ifdef PA_PTHREAD_MUTEX
pthread_rwlock_t rwlock;
#else
rwlock_t rwlock;
#endif
char ** reset_ifaces(char **ifaces) {
int i;
if (ifaces) {
for (i=0; i<MAX_IFACES; i++) {
if (ifaces[i]) free(ifaces[i]);
}
} else {
ifaces=(char **)malloc(sizeof(char *)*MAX_IFACES);
}
for (i=0; i<MAX_IFACES; i++) {
ifaces[i]=NULL;
}
return ifaces;
}
public:
int nfds;
struct pollfd *fds;
int *callback_func;
int get_version() { return version; }
void wrlock() {
#ifdef PA_PTHREAD_MUTEX
pthread_rwlock_wrlock(&rwlock);
#else
spin_wrlock(&rwlock);
#endif
}
void wrunlock() {
#ifdef PA_PTHREAD_MUTEX
pthread_rwlock_unlock(&rwlock);
#else
spin_wrunlock(&rwlock);
#endif
}
ifaces_desc *ifaces_mysql;
ifaces_desc *ifaces_pgsql;
ifaces_desc *ifaces_telnet_admin;
ifaces_desc *ifaces_telnet_stats;
ifaces_desc_t descriptor_new;
admin_main_loop_listeners() {
#ifdef PA_PTHREAD_MUTEX
pthread_rwlock_init(&rwlock, NULL);
#else
spinlock_rwlock_init(&rwlock);
#endif
ifaces_mysql=new ifaces_desc();
ifaces_pgsql=new ifaces_desc();
ifaces_telnet_admin=new ifaces_desc();
ifaces_telnet_stats=new ifaces_desc();
version=0;
descriptor_new.mysql_ifaces=NULL;
descriptor_new.pgsql_ifaces=NULL;
descriptor_new.telnet_admin_ifaces=NULL;
descriptor_new.telnet_stats_ifaces=NULL;
}
void update_ifaces(char *list, ifaces_desc **ifd) {
wrlock();
delete *ifd;
*ifd=new ifaces_desc();
int i=0;
tokenizer_t tok;
tokenizer( &tok, list, ";", TOKENIZER_NO_EMPTIES );
const char* token;
for ( token = tokenize( &tok ) ; token && i < MAX_IFACES ; token = tokenize( &tok ) ) {
(*ifd)->add(token);
i++;
}
free_tokenizer( &tok );
version++;
wrunlock();
}
bool update_ifaces(char *list, char ***_ifaces) {
wrlock();
int i;
char **ifaces=*_ifaces;
tokenizer_t tok;
tokenizer( &tok, list, ";", TOKENIZER_NO_EMPTIES );
const char* token;
ifaces=reset_ifaces(ifaces);
i=0;
for ( token = tokenize( &tok ) ; token && i < MAX_IFACES ; token = tokenize( &tok ) ) {
ifaces[i]=(char *)malloc(strlen(token)+1);
strcpy(ifaces[i],token);
i++;
}
free_tokenizer( &tok );
version++;
wrunlock();
return true;
}
};
#endif // ADMIN_IFACES_H

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -142,6 +142,7 @@ _OBJ_CXX := ProxySQL_GloVars.oo network.oo debug.oo configfile.oo Query_Cache.oo
GTID_Server_Data.oo MyHGC.oo MySrvConnList.oo MySrvList.oo MySrvC.oo \
MySQL_encode.oo MySQL_ResultSet.oo \
ProxySQL_Admin_Tests.oo ProxySQL_Admin_Tests2.oo ProxySQL_Admin_Scheduler.oo ProxySQL_Admin_Disk_Upgrade.oo ProxySQL_Admin_Stats.oo \
Admin_Handler.oo Admin_FlushVariables.oo Admin_Bootstrap.oo \
Base_Session.oo Base_Thread.oo \
proxysql_find_charset.oo ProxySQL_Poll.oo sha256crypt.oo PgSQL_Protocol.oo PgSQL_Thread.oo Client_Session.oo PgSQL_Data_Stream.oo PgSQL_Session.oo PgSQL_Variables.oo PgSQL_HostGroups_Manager.oo PgSQL_Connection.oo PgSQL_Backend.oo PgSQL_Logger.oo PgSQL_Authentication.oo PgSQL_Error_Helper.oo

File diff suppressed because it is too large Load Diff

@ -25,8 +25,8 @@
} while (rc!=SQLITE_DONE);\
} while (0)
extern bool proxysql_mysql_paused;
extern bool proxysql_pgsql_paused;
extern bool admin_proxysql_mysql_paused;
extern bool admin_proxysql_pgsql_paused;
extern MySQL_Authentication *GloMyAuth;
extern MySQL_LDAP_Authentication *GloMyLdapAuth;
extern Query_Cache *GloQC;
@ -50,11 +50,11 @@ void ProxySQL_Admin::p_update_metrics() {
this->p_update_stmt_metrics();
// updated mysql_listener_paused
int st = ( proxysql_mysql_paused == true ? 1 : 0);
int st = ( admin_proxysql_mysql_paused == true ? 1 : 0);
this->metrics.p_gauge_array[p_admin_gauge::mysql_listener_paused]->Set(st);
// updated pgsql_listener_paused
st = (proxysql_pgsql_paused == true ? 1 : 0);
st = ( admin_proxysql_pgsql_paused == true ? 1 : 0);
this->metrics.p_gauge_array[p_admin_gauge::pgsql_listener_paused]->Set(st);
}
@ -556,7 +556,7 @@ void ProxySQL_Admin::stats___mysql_global() {
}
{
vn=(char *)"mysql_listener_paused";
sprintf(bu, "%s", ( proxysql_mysql_paused==true ? "true" : "false") );
sprintf(bu, "%s", ( admin_proxysql_mysql_paused==true ? "true" : "false") );
query=(char *)malloc(strlen(a)+strlen(vn)+strlen(bu)+16);
sprintf(query,a,vn,bu);
statsdb->execute(query);

Loading…
Cancel
Save