Hace algunos meses tuve la necesidad de asegurar que el campo de cdr UNIQUEID fuera unico en verdad, ya que se puso en marcha un proyecto con 6 Asterisk los cuales comparten la misma base de datos de CDR y temian que pudiera darse el caso de que se repitieran, entonces me pidieron agregar un identificador a cada uniqueid el cual indicara a que servidor pertenecia.
Despues de estar googleando por varios dias y no encontrar una respuesta clara decidi meterle mano a los archivos de compilacion de Asterisk y hoy despues de 8 meses de estar en operacion no he tenido ningun problema con este cambio, es por eso que lo comparto por si alguien necesitara hacer lo mismo.
Para empezar hay que editar el archivo channel.c ubicado en la carpeta donde se a descomprimido el tarball de Asterisk,yo lo descomprimi en:
/usr/src/asterisk/
El archivo channel.c se encuentra en:
/usr/src/asterisk/asterisk-1.6.X.X/main/
Editamos el archivo con:
nano channel.c
Ahora debemos buscar la linea siguiente:
ast_string_field_build(tmp, uniqueid, "%li.%d", (long) time(NULL),
Y la modificaremos por:
ast_string_field_build(tmp, uniqueid, "1-%li.%d", (long) time(NULL),
Tambien debemos modificar esta linea:
ast_string_field_build(tmp, uniqueid, "%s-%li.%d", ast_config_AST_SYSTEM_NAME,
Por:
ast_string_field_build(tmp, uniqueid, "%s-1-%li.%d", ast_config_AST_SYSTEM_NAME,
Si observamos detenidamente solo hemos agregado 1-, este sera el identificador de mi server 1.
Esto nos dara como resultado un Uniqueid de la siguiente manera:
1-123456789.123
En resumen nuestros cambios quedan de la siguiente forma:
if (ast_strlen_zero(ast_config_AST_SYSTEM_NAME)) {
ast_string_field_build(tmp, uniqueid, "1-%li.%d", (long) time(NULL),
ast_atomic_fetchadd_int(&uniqueint, 1));
} else {
ast_string_field_build(tmp, uniqueid, "%s-1-%li.%d", ast_config_AST_SYSTEM_NAME,
(long) time(NULL), ast_atomic_fetchadd_int(&uniqueint, 1));
}
Al terminar de editar este archivo sera necesario recompilar Asterisk:
./configure
make
make install
Si se tenian instalado Asterisk Addons tambien sera necesario recompilarlo:
./configure
make
make install
Espero les sea de ayuda.
Despues de estar googleando por varios dias y no encontrar una respuesta clara decidi meterle mano a los archivos de compilacion de Asterisk y hoy despues de 8 meses de estar en operacion no he tenido ningun problema con este cambio, es por eso que lo comparto por si alguien necesitara hacer lo mismo.
Para empezar hay que editar el archivo channel.c ubicado en la carpeta donde se a descomprimido el tarball de Asterisk,yo lo descomprimi en:
/usr/src/asterisk/
El archivo channel.c se encuentra en:
/usr/src/asterisk/asterisk-1.6.X.X/main/
Editamos el archivo con:
nano channel.c
Ahora debemos buscar la linea siguiente:
ast_string_field_build(tmp, uniqueid, "%li.%d", (long) time(NULL),
Y la modificaremos por:
ast_string_field_build(tmp, uniqueid, "1-%li.%d", (long) time(NULL),
Tambien debemos modificar esta linea:
ast_string_field_build(tmp, uniqueid, "%s-%li.%d", ast_config_AST_SYSTEM_NAME,
Por:
ast_string_field_build(tmp, uniqueid, "%s-1-%li.%d", ast_config_AST_SYSTEM_NAME,
Si observamos detenidamente solo hemos agregado 1-, este sera el identificador de mi server 1.
Esto nos dara como resultado un Uniqueid de la siguiente manera:
1-123456789.123
En resumen nuestros cambios quedan de la siguiente forma:
if (ast_strlen_zero(ast_config_AST_SYSTEM_NAME)) {
ast_string_field_build(tmp, uniqueid, "1-%li.%d", (long) time(NULL),
ast_atomic_fetchadd_int(&uniqueint, 1));
} else {
ast_string_field_build(tmp, uniqueid, "%s-1-%li.%d", ast_config_AST_SYSTEM_NAME,
(long) time(NULL), ast_atomic_fetchadd_int(&uniqueint, 1));
}
Al terminar de editar este archivo sera necesario recompilar Asterisk:
./configure
make
make install
Si se tenian instalado Asterisk Addons tambien sera necesario recompilarlo:
./configure
make
make install
Espero les sea de ayuda.
Comentario