--- res_config_mysql.c.ORIGINAL 2005-11-28 01:15:41.000000000 +0100 +++ res_config_mysql.c 2005-12-02 10:05:07.000000000 +0100 @@ -57,6 +57,7 @@ AST_MUTEX_DEFINE_STATIC(mysql_lock); #define RES_CONFIG_MYSQL_CONF "res_mysql.conf" MYSQL mysql; +MYSQL mysql2; static char dbhost[50]; static char dbuser[50]; static char dbpass[50]; @@ -66,8 +67,18 @@ static int connected; static time_t connect_time; +static char dbhost2[50]; +static char dbuser2[50]; +static char dbpass2[50]; +static char dbsock2[50]; +static int dbport2; +static int connected2; +static time_t connect_time2; + static int parse_config(void); -static int mysql_reconnect(const char *database); +static int mysql_reconnect(const char *database, int action); +/* if action==1 => READ if action==2 => WRITE */ + static int realtime_mysql_status(int fd, int argc, char **argv); STANDARD_LOCAL_USER; @@ -96,7 +107,7 @@ struct ast_variable *var=NULL, *prev=NULL; if(!table) { - ast_log(LOG_WARNING, "MySQL RealTime: No table specified.\n"); + ast_log(LOG_WARNING, "MySQL RealTime READ: No table specified.\n"); return NULL; } @@ -104,7 +115,7 @@ newparam = va_arg(ap, const char *); newval = va_arg(ap, const char *); if(!newparam || !newval) { - ast_log(LOG_WARNING, "MySQL RealTime: Realtime retrieval requires at least 1 parameter and 1 value to search on.\n"); + ast_log(LOG_WARNING, "MySQL RealTime READ: Realtime retrieval requires at least 1 parameter and 1 value to search on.\n"); mysql_close(&mysql); return NULL; } @@ -122,19 +133,19 @@ } va_end(ap); - ast_log(LOG_DEBUG, "MySQL RealTime: Retrieve SQL: %s\n", sql); + ast_log(LOG_DEBUG, "MySQL RealTime READ: Retrieve SQL: %s\n", sql); /* We now have our complete statement; Lets connect to the server and execute it. */ ast_mutex_lock(&mysql_lock); - if(!mysql_reconnect(database)) { + if(!mysql_reconnect(database,1)) { ast_mutex_unlock(&mysql_lock); return NULL; } if(mysql_real_query(&mysql, sql, strlen(sql))) { - ast_log(LOG_WARNING, "MySQL RealTime: Failed to query database. Check debug for more info.\n"); - ast_log(LOG_DEBUG, "MySQL RealTime: Query: %s\n", sql); - ast_log(LOG_DEBUG, "MySQL RealTime: Query Failed because: %s\n", mysql_error(&mysql)); + ast_log(LOG_WARNING, "MySQL RealTime READ: Failed to query database. Check debug for more info.\n"); + ast_log(LOG_DEBUG, "MySQL RealTime READ: Query: %s\n", sql); + ast_log(LOG_DEBUG, "MySQL RealTime READ: Query Failed because: %s\n", mysql_error(&mysql)); ast_mutex_unlock(&mysql_lock); return NULL; } @@ -162,7 +173,7 @@ } } } else { - ast_log(LOG_WARNING, "MySQL RealTime: Could not find any rows in table %s.\n", table); + ast_log(LOG_WARNING, "MySQL RealTime READ: Could not find any rows in table %s.\n", table); } ast_mutex_unlock(&mysql_lock); @@ -198,7 +209,7 @@ cfg = ast_config_new(); if (!cfg) { /* If I can't alloc memory at this point, why bother doing anything else? */ - ast_log(LOG_WARNING, "Out of memory!\n"); + ast_log(LOG_WARNING, "READ: Out of memory!\n"); return NULL; } @@ -206,7 +217,7 @@ newparam = va_arg(ap, const char *); newval = va_arg(ap, const char *); if(!newparam || !newval) { - ast_log(LOG_WARNING, "MySQL RealTime: Realtime retrieval requires at least 1 parameter and 1 value to search on.\n"); + ast_log(LOG_WARNING, "MySQL RealTime READ: Realtime retrieval requires at least 1 parameter and 1 value to search on.\n"); mysql_close(&mysql); return NULL; } @@ -234,19 +245,19 @@ va_end(ap); - ast_log(LOG_DEBUG, "MySQL RealTime: Retrieve SQL: %s\n", sql); + ast_log(LOG_DEBUG, "MySQL RealTime READ: Retrieve SQL: %s\n", sql); /* We now have our complete statement; Lets connect to the server and execute it. */ ast_mutex_lock(&mysql_lock); - if(!mysql_reconnect(database)) { + if(!mysql_reconnect(database,1)) { ast_mutex_unlock(&mysql_lock); return NULL; } if(mysql_real_query(&mysql, sql, strlen(sql))) { - ast_log(LOG_WARNING, "MySQL RealTime: Failed to query database. Check debug for more info.\n"); - ast_log(LOG_DEBUG, "MySQL RealTime: Query: %s\n", sql); - ast_log(LOG_DEBUG, "MySQL RealTime: Query Failed because: %s\n", mysql_error(&mysql)); + ast_log(LOG_WARNING, "MySQL RealTime READ: Failed to query database. Check debug for more info.\n"); + ast_log(LOG_DEBUG, "MySQL RealTime READ: Query: %s\n", sql); + ast_log(LOG_DEBUG, "MySQL RealTime READ: Query Failed because: %s\n", mysql_error(&mysql)); ast_mutex_unlock(&mysql_lock); return NULL; } @@ -259,7 +270,7 @@ var = NULL; cat = ast_category_new(""); if(!cat) { - ast_log(LOG_WARNING, "Out of memory!\n"); + ast_log(LOG_WARNING, "READ: Out of memory!\n"); continue; } for(i = 0; i < numFields; i++) { @@ -278,7 +289,7 @@ ast_category_append(cfg, cat); } } else { - ast_log(LOG_WARNING, "MySQL RealTime: Could not find any rows in table %s.\n", table); + ast_log(LOG_WARNING, "MySQL RealTime READ: Could not find any rows in table %s.\n", table); } ast_mutex_unlock(&mysql_lock); @@ -294,7 +305,7 @@ const char *newparam, *newval; if(!table) { - ast_log(LOG_WARNING, "MySQL RealTime: No table specified.\n"); + ast_log(LOG_WARNING, "MySQL RealTime WRITE: No table specified.\n"); return -1; } @@ -302,8 +313,8 @@ newparam = va_arg(ap, const char *); newval = va_arg(ap, const char *); if(!newparam || !newval) { - ast_log(LOG_WARNING, "MySQL RealTime: Realtime retrieval requires at least 1 parameter and 1 value to search on.\n"); - mysql_close(&mysql); + ast_log(LOG_WARNING, "MySQL RealTime WRITE: Realtime retrieval requires at least 1 parameter and 1 value to search on.\n"); + mysql_close(&mysql2); return -1; } @@ -318,27 +329,27 @@ va_end(ap); snprintf(sql + strlen(sql), sizeof(sql) - strlen(sql), " WHERE %s = '%s'", keyfield, lookup); - ast_log(LOG_DEBUG,"MySQL RealTime: Update SQL: %s\n", sql); + ast_log(LOG_DEBUG,"MySQL RealTime WRITE: Update SQL: %s\n", sql); /* We now have our complete statement; Lets connect to the server and execute it. */ - ast_mutex_lock(&mysql_lock); - if(!mysql_reconnect(database)) { + ast_mutex_lock(&mysql_lock); + if(!mysql_reconnect(database,2)) { ast_mutex_unlock(&mysql_lock); return -1; } - if(mysql_real_query(&mysql, sql, strlen(sql))) { - ast_log(LOG_WARNING, "MySQL RealTime: Failed to query database. Check debug for more info.\n"); - ast_log(LOG_DEBUG, "MySQL RealTime: Query: %s\n", sql); - ast_log(LOG_DEBUG, "MySQL RealTime: Query Failed because: %s\n", mysql_error(&mysql)); - ast_mutex_unlock(&mysql_lock); + if(mysql_real_query(&mysql2, sql, strlen(sql))) { + ast_log(LOG_WARNING, "MySQL RealTime WRITE: Failed to query database. Check debug for more info.\n"); + ast_log(LOG_DEBUG, "MySQL RealTime WRITE: Query: %s\n", sql); + ast_log(LOG_DEBUG, "MySQL RealTime WRITE: Query Failed because: %s\n", mysql_error(&mysql2)); + ast_mutex_unlock(&mysql_lock); return -1; } - numrows = mysql_affected_rows(&mysql); - ast_mutex_unlock(&mysql_lock); + numrows = mysql_affected_rows(&mysql2); + ast_mutex_unlock(&mysql_lock); - ast_log(LOG_DEBUG,"MySQL RealTime: Updated %llu rows on table: %s\n", numrows, table); + ast_log(LOG_DEBUG,"MySQL RealTime WRITE: Updated %llu rows on table: %s\n", numrows, table); /* From http://dev.mysql.com/doc/mysql/en/mysql-affected-rows.html * An integer greater than zero indicates the number of rows affected @@ -379,19 +390,20 @@ /* We now have our complete statement; Lets connect to the server and execute it. */ ast_mutex_lock(&mysql_lock); - if(!mysql_reconnect(database)) { + if(!mysql_reconnect(database,1)) { ast_mutex_unlock(&mysql_lock); return NULL; } if(mysql_real_query(&mysql, sql, strlen(sql))) { - ast_log(LOG_WARNING, "MySQL RealTime: Failed to query database. Check debug for more info.\n"); - ast_log(LOG_DEBUG, "MySQL RealTime: Query: %s\n", sql); - ast_log(LOG_DEBUG, "MySQL RealTime: Query Failed because: %s\n", mysql_error(&mysql)); + ast_log(LOG_WARNING, "MySQL RealTime READ: Failed to query database. Check debug for more info.\n"); + ast_log(LOG_DEBUG, "MySQL RealTime READ: Query: %s\n", sql); + ast_log(LOG_DEBUG, "MySQL RealTime READ: Query Failed because: %s\n", mysql_error(&mysql)); ast_mutex_unlock(&mysql_lock); return NULL; } + if((result = mysql_store_result(&mysql))) { num_rows = mysql_num_rows(result); ast_log(LOG_DEBUG, "MySQL RealTime: Found %llu rows.\n", num_rows); @@ -443,12 +455,17 @@ int load_module (void) { parse_config(); + ast_log(LOG_DEBUG, "MySQL RealTime READi LIOC debug.\n"); ast_mutex_lock(&mysql_lock); - if(!mysql_reconnect(NULL)) { - ast_log(LOG_WARNING, "MySQL RealTime: Couldn't establish connection. Check debug.\n"); - ast_log(LOG_DEBUG, "MySQL RealTime: Cannot Connect: %s\n", mysql_error(&mysql)); + if(!mysql_reconnect(NULL,1)) { + ast_log(LOG_WARNING, "MySQL RealTime READ: Couldn't establish connection. Check debug.\n"); + ast_log(LOG_DEBUG, "MySQL RealTime READ: Cannot Connect: %s\n", mysql_error(&mysql)); + } + if(!mysql_reconnect(NULL,2)) { + ast_log(LOG_WARNING, "MySQL RealTime WRITE: Couldn't establish connection. Check debug.\n"); + ast_log(LOG_DEBUG, "MySQL RealTime WRITE: Cannot Connect: %s\n", mysql_error(&mysql2)); } ast_config_engine_register(&mysql_engine); @@ -468,12 +485,14 @@ ast_mutex_lock(&mysql_lock); mysql_close(&mysql); + mysql_close(&mysql2); ast_cli_unregister(&cli_realtime_mysql_status); ast_config_engine_deregister(&mysql_engine); if(option_verbose) { ast_verbose("MySQL RealTime unloaded.\n"); } + ast_log(LOG_DEBUG, "MySQL RealTime READi LIOC debug222 reload.\n"); STANDARD_HANGUP_LOCALUSERS; /* Unlock so something else can destroy the lock. */ @@ -488,12 +507,19 @@ ast_mutex_lock(&mysql_lock); mysql_close(&mysql); + mysql_close(&mysql2); connected = 0; + connected2 = 0; parse_config(); - if(!mysql_reconnect(NULL)) { - ast_log(LOG_WARNING, "MySQL RealTime: Couldn't establish connection. Check debug.\n"); - ast_log(LOG_DEBUG, "MySQL RealTime: Cannot Connect: %s\n", mysql_error(&mysql)); + if(!mysql_reconnect(NULL,1)) { + ast_log(LOG_WARNING, "MySQL RealTime READ: Couldn't establish connection. Check debug.\n"); + ast_log(LOG_DEBUG, "MySQL RealTime READ: Cannot Connect: %s\n", mysql_error(&mysql)); + } + + if(!mysql_reconnect(NULL,2)) { + ast_log(LOG_WARNING, "MySQL RealTime WRITE: Couldn't establish connection. Check debug.\n"); + ast_log(LOG_DEBUG, "MySQL RealTime WRITE: Cannot Connect: %s\n", mysql_error(&mysql2)); } ast_verbose(VERBOSE_PREFIX_2 "MySQL RealTime reloaded.\n"); @@ -512,58 +538,97 @@ config = ast_config_load(RES_CONFIG_MYSQL_CONF); if(config) { - if(!(s=ast_variable_retrieve(config, "general", "dbuser"))) { - ast_log(LOG_WARNING, "MySQL RealTime: No database user found, using 'asterisk' as default.\n"); + if(!(s=ast_variable_retrieve(config, "general", "dbuser-read"))) { + ast_log(LOG_WARNING, "MySQL RealTime: No database read user found, using 'asterisk' as default.\n"); strncpy(dbuser, "asterisk", sizeof(dbuser) - 1); } else { strncpy(dbuser, s, sizeof(dbuser) - 1); } + if(!(s=ast_variable_retrieve(config, "general", "dbuser-write"))) { + ast_log(LOG_WARNING, "MySQL RealTime: No database write user found, using 'asterisk' as default.\n"); + strncpy(dbuser2, "asterisk", sizeof(dbuser2) - 1); + } else { + strncpy(dbuser2, s, sizeof(dbuser2) - 1); + } - if(!(s=ast_variable_retrieve(config, "general", "dbpass"))) { - ast_log(LOG_WARNING, "MySQL RealTime: No database password found, using 'asterisk' as default.\n"); + if(!(s=ast_variable_retrieve(config, "general", "dbpass-read"))) { + ast_log(LOG_WARNING, "MySQL RealTime: No database read password found, using 'asterisk' as default.\n"); strncpy(dbpass, "asterisk", sizeof(dbpass) - 1); } else { strncpy(dbpass, s, sizeof(dbpass) - 1); } + if(!(s=ast_variable_retrieve(config, "general", "dbpass-write"))) { + ast_log(LOG_WARNING, "MySQL RealTime: No database write password found, using 'asterisk' as default.\n"); + strncpy(dbpass2, "asterisk", sizeof(dbpass2) - 1); + } else { + strncpy(dbpass2, s, sizeof(dbpass2) - 1); + } - if(!(s=ast_variable_retrieve(config, "general", "dbhost"))) { - ast_log(LOG_WARNING, "MySQL RealTime: No database host found, using localhost via socket.\n"); + if(!(s=ast_variable_retrieve(config, "general", "dbhost-read"))) { + ast_log(LOG_WARNING, "MySQL RealTime: No database read host found, using localhost via socket.\n"); dbhost[0] = '\0'; } else { strncpy(dbhost, s, sizeof(dbhost) - 1); } + if(!(s=ast_variable_retrieve(config, "general", "dbhost-write"))) { + ast_log(LOG_WARNING, "MySQL RealTime: No database write host found, using localhost via socket.\n"); + dbhost2[0] = '\0'; + } else { + strncpy(dbhost2, s, sizeof(dbhost2) - 1); + } - if(!(s=ast_variable_retrieve(config, "general", "dbname"))) { + if(!(s=ast_variable_retrieve(config, "general", "dbname"))) { ast_log(LOG_WARNING, "MySQL RealTime: No database name found, using 'asterisk' as default.\n"); strncpy(dbname, "asterisk", sizeof(dbname) - 1); } else { strncpy(dbname, s, sizeof(dbname) - 1); } - if(!(s=ast_variable_retrieve(config, "general", "dbport"))) { - ast_log(LOG_WARNING, "MySQL RealTime: No database port found, using 3306 as default.\n"); + if(!(s=ast_variable_retrieve(config, "general", "dbport-read"))) { + ast_log(LOG_WARNING, "MySQL RealTime: No database read port found, using 3306 as default.\n"); dbport = 3306; } else { dbport = atoi(s); } + if(!(s=ast_variable_retrieve(config, "general", "dbport-write"))) { + ast_log(LOG_WARNING, "MySQL RealTime: No database port found, using 3306 as default.\n"); + dbport2 = 3306; + } else { + dbport2 = atoi(s); + } - if(dbhost && !(s=ast_variable_retrieve(config, "general", "dbsock"))) { - ast_log(LOG_WARNING, "MySQL RealTime: No database socket found, using '/tmp/mysql.sock' as default.\n"); + if(dbhost && !(s=ast_variable_retrieve(config, "general", "dbsock-read"))) { + ast_log(LOG_WARNING, "MySQL RealTime: No database read socket found, using '/tmp/mysql.sock' as default.\n"); strncpy(dbsock, "/tmp/mysql.sock", sizeof(dbsock) - 1); } else { strncpy(dbsock, s, sizeof(dbsock) - 1); } + if(dbhost2 && !(s=ast_variable_retrieve(config, "general", "dbsock-write"))) { + ast_log(LOG_WARNING, "MySQL RealTime: No database write socket found, using '/tmp/mysql.sock' as default.\n"); + strncpy(dbsock2, "/tmp/mysql2.sock", sizeof(dbsock2) - 1); + } else { + strncpy(dbsock2, s, sizeof(dbsock2) - 1); + } } ast_config_destroy(config); if(dbhost) { - ast_log(LOG_DEBUG, "MySQL RealTime Host: %s\n", dbhost); - ast_log(LOG_DEBUG, "MySQL RealTime Port: %i\n", dbport); + ast_log(LOG_DEBUG, "MySQL RealTime READ Host: %s\n", dbhost); + ast_log(LOG_DEBUG, "MySQL RealTime READ Port: %i\n", dbport); } else { - ast_log(LOG_DEBUG, "MySQL RealTime Socket: %s\n", dbsock); + ast_log(LOG_DEBUG, "MySQL RealTime READ Socket: %s\n", dbsock); } - ast_log(LOG_DEBUG, "MySQL RealTime User: %s\n", dbuser); - ast_log(LOG_DEBUG, "MySQL RealTime Password: %s\n", dbpass); + ast_log(LOG_DEBUG, "MySQL RealTime READ User: %s\n", dbuser); + ast_log(LOG_DEBUG, "MySQL RealTime READ Password: %s\n", dbpass); + if(dbhost2) { + ast_log(LOG_DEBUG, "MySQL RealTime WRITE Host: %s\n", dbhost2); + ast_log(LOG_DEBUG, "MySQL RealTime WRITE Port: %i\n", dbport2); + } else { + ast_log(LOG_DEBUG, "MySQL RealTime WRITE Socket: %s\n", dbsock2); + } + ast_log(LOG_DEBUG, "MySQL RealTime WRITE User: %s\n", dbuser2); + ast_log(LOG_DEBUG, "MySQL RealTime WRITE Password: %s\n", dbpass2); + return 1; } @@ -589,7 +654,7 @@ return ASTERISK_GPL_KEY; } -static int mysql_reconnect(const char *database) +static int mysql_reconnect(const char *database, int status) { char my_database[50]; @@ -597,65 +662,116 @@ ast_copy_string(my_database, dbname, sizeof(my_database)); else ast_copy_string(my_database, database, sizeof(my_database)); - /* mutex lock should have been locked before calling this function. */ - - if((!connected) && (dbhost || dbsock) && dbuser && dbpass && my_database) { + if(status==1){ /*READ*/ + ast_log(LOG_DEBUG, "MySQL RealTime READ CJK: WE RECONNECT\n"); + if(connected!=1) { + ast_log(LOG_DEBUG, "MySQL RealTime READ CJK: WE ARE NOTE CONNECTED\n"); if(!mysql_init(&mysql)) { - ast_log(LOG_WARNING, "MySQL RealTime: Insufficient memory to allocate MySQL resource.\n"); + ast_log(LOG_WARNING, "MySQL RealTime READ: Insufficient memory to allocate MySQL resource.\n"); connected = 0; return 0; } if(mysql_real_connect(&mysql, dbhost, dbuser, dbpass, my_database, dbport, dbsock, 0)) { - ast_log(LOG_DEBUG, "MySQL RealTime: Successfully connected to database.\n"); + ast_log(LOG_DEBUG, "MySQL RealTime READ: Successfully connected to database.\n"); connected = 1; connect_time = time(NULL); return 1; } else { - ast_log(LOG_ERROR, "MySQL RealTime: Failed to connect database server %s on %s. Check debug for more info.\n", dbname, dbhost); - ast_log(LOG_DEBUG, "MySQL RealTime: Cannot Connect: %s\n", mysql_error(&mysql)); + ast_log(LOG_ERROR, "MySQL RealTime READ: Failed to connect database server %s on %s. Check debug for more info.\n", dbname, dbhost); + ast_log(LOG_DEBUG, "MySQL RealTime READ: Cannot Connect: %s\n", mysql_error(&mysql)); connected = 0; return 0; } } else { + ast_log(LOG_DEBUG, "MySQL RealTime READ CJK: WE ARE CONNECTED\n"); if(mysql_ping(&mysql) != 0) { connected = 0; - ast_log(LOG_ERROR, "MySQL RealTime: Failed to reconnect. Check debug for more info.\n"); - ast_log(LOG_DEBUG, "MySQL RealTime: Server Error: %s\n", mysql_error(&mysql)); + mysql_close(&mysql); + ast_log(LOG_ERROR, "MySQL RealTime READ: Failed to reconnect. Check debug for more info.\n"); + ast_log(LOG_DEBUG, "MySQL RealTime READ: Server Error: %s\n", mysql_error(&mysql)); + return 0; + } + if(mysql_select_db(&mysql, my_database) != 0) { + ast_log(LOG_WARNING, "MySQL RealTime READ: Unable to select database: %s. Still Connected.\n", my_database); + ast_log(LOG_DEBUG, "MySQL RealTime READ: Database Select Failed: %s\n", mysql_error(&mysql)); + mysql_close(&mysql); + connected = 0; return 0; } connected = 1; - - if(mysql_select_db(&mysql, my_database) != 0) { - ast_log(LOG_WARNING, "MySQL RealTime: Unable to select database: %s. Still Connected.\n", my_database); - ast_log(LOG_DEBUG, "MySQL RealTime: Database Select Failed: %s\n", mysql_error(&mysql)); + ast_log(LOG_DEBUG, "MySQL RealTime READ: Everything is fine.\n"); + return 1; + } + } + if(status==2){ /*WRITE*/ + ast_log(LOG_DEBUG, "MySQL RealTime WRITE CJK: WE RECONNECT\n"); + if(connected2!=1) { + ast_log(LOG_DEBUG, "MySQL RealTime WRITE CJK: WE ARE NOT CONNECTED\n"); + if(!mysql_init(&mysql2)) { + ast_log(LOG_WARNING, "MySQL RealTime WRITE: Insufficient memory to allocate MySQL resource.\n"); + connected2 = 0; + return 0; + } + if(mysql_real_connect(&mysql2, dbhost2, dbuser2, dbpass2, my_database, dbport2, dbsock2, 0)) { + ast_log(LOG_DEBUG, "MySQL RealTime WRITE: Successfully connected to database.\n"); + connected2 = 1; + connect_time2 = time(NULL); + return 1; + } else { + ast_log(LOG_ERROR, "MySQL RealTime WRITE: Failed to connect database server %s on %s. Check debug for more info.\n", dbname, dbhost2); + ast_log(LOG_DEBUG, "MySQL RealTime WRITE: Cannot Connect: %s\n", mysql_error(&mysql2)); + connected2 = 0; + return 0; + } + } else { + ast_log(LOG_DEBUG, "MySQL RealTime WRITE CJK: WE ARE CONNECTED\n"); + if(mysql_ping(&mysql2) != 0) { + connected2 = 0; + mysql_close(&mysql2); + ast_log(LOG_ERROR, "MySQL RealTime WRITE: Failed to reconnect. Check debug for more info.\n"); + ast_log(LOG_DEBUG, "MySQL RealTime WRITE: Server Error: %s\n", mysql_error(&mysql2)); + return 0; + } + if(mysql_select_db(&mysql2, my_database) != 0) { + ast_log(LOG_WARNING, "MySQL RealTime WRITE: Unable to select database: %s. Still Connected.\n", my_database); + ast_log(LOG_DEBUG, "MySQL RealTime WRITE: Database Select Failed: %s\n", mysql_error(&mysql2)); + mysql_close(&mysql2); + connected2 = 0; return 0; } - ast_log(LOG_DEBUG, "MySQL RealTime: Everything is fine.\n"); + connected2 = 1; + ast_log(LOG_DEBUG, "MySQL RealTime WRITE: Everything is fine.\n"); return 1; } + } + } static int realtime_mysql_status(int fd, int argc, char **argv) { char status[256], status2[100] = ""; + char status3[256], status4[100] = ""; int ctime = time(NULL) - connect_time; + int ctime2 = time(NULL) - connect_time2; + int connect_status; + int connect_status2; - if(mysql_reconnect(NULL)) { + if(mysql_reconnect(NULL,1)) { + connect_status=1; if(dbhost) { - snprintf(status, 255, "Connected to %s@%s, port %d", dbname, dbhost, dbport); + snprintf(status, 255, "READ: Connected to %s@%s, port %d", dbname, dbhost, dbport); } else if(dbsock) { - snprintf(status, 255, "Connected to %s on socket file %s", dbname, dbsock); + snprintf(status, 255, "READ: Connected to %s on socket file %s", dbname, dbsock); } else { - snprintf(status, 255, "Connected to %s@%s", dbname, dbhost); + snprintf(status, 255, "READ: Connected to %s@%s", dbname, dbhost); } if(dbuser && *dbuser) { snprintf(status2, 99, " with username %s", dbuser); } - if (ctime > 31536000) { ast_cli(fd, "%s%s for %d years, %d days, %d hours, %d minutes, %d seconds.\n", status, status2, ctime / 31536000, (ctime % 31536000) / 86400, (ctime % 86400) / 3600, (ctime % 3600) / 60, ctime % 60); } else if (ctime > 86400) { @@ -667,9 +783,33 @@ } else { ast_cli(fd, "%s%s for %d seconds.\n", status, status2, ctime); } + } + + if(mysql_reconnect(NULL,2)) { + connect_status2=1; + if(dbhost2) { + snprintf(status3, 255, "WRITE: Connected to %s@%s, port %d", dbname, dbhost2, dbport2); + } else if(dbsock2) { + snprintf(status3, 255, "WRITE: Connected to %s on socket file %s", dbname, dbsock2); + } else { + snprintf(status3, 255, "WRITE: Connected to %s@%s", dbname, dbhost2); + } - return RESULT_SUCCESS; - } else { - return RESULT_FAILURE; + if(dbuser2 && *dbuser2) { + snprintf(status4, 99, " with username %s", dbuser2); + } + if (ctime2 > 31536000) { + ast_cli(fd, "%s%s for %d years, %d days, %d hours, %d minutes, %d seconds.\n", status3, status4, ctime2 / 31536000, (ctime2 % 31536000) / 86400, (ctime2 % 86400) / 3600, (ctime2 % 3600) / 60, ctime2 % 60); + } else if (ctime2 > 86400) { + ast_cli(fd, "%s%s for %d days, %d hours, %d minutes, %d seconds.\n", status3, status4, ctime2 / 86400, (ctime2 % 86400) / 3600, (ctime2 % 3600) / 60, ctime2 % 60); + } else if (ctime2 > 3600) { + ast_cli(fd, "%s%s for %d hours, %d minutes, %d seconds.\n", status3, status4, ctime2 / 3600, (ctime2 % 3600) / 60, ctime2 % 60); + } else if (ctime2 > 60) { + ast_cli(fd, "%s%s for %d minutes, %d seconds.\n", status3, status4, ctime2 / 60, ctime2 % 60); + } else { + ast_cli(fd, "%s%s for %d seconds.\n", status3, status4, ctime2); + } } + + if(connect_status==1 && connect_status2==1) return RESULT_SUCCESS; else return RESULT_FAILURE; }