class SincronizadorDeConfiguracionDeRutaSalienteEnAsterisk( AbstractConfiguracionAsterisk): def _obtener_generador_family(self): generador = RutaSalienteFamily() return generador def __init__(self): super(SincronizadorDeConfiguracionDeRutaSalienteEnAsterisk).__init__() self.generador_rutas_en_asterisk_conf = RutasSalientesConfigCreator() self.reload_asterisk_config = AsteriskConfigReloader() def _generar_y_recargar_archivos_conf_asterisk(self, family_member_exclude=None): proceso_ok = True mensaje_error = "" try: self.generador_rutas_en_asterisk_conf.create_config_asterisk( ruta_exclude=family_member_exclude) except Exception as e: msg = _( "SincronizadorDeConfiguracionDeRutaSalienteEnAsterisk: error {0} al" .format(e)) + _("intentar create_config_asterisk()") logger.exception(msg) proceso_ok = False mensaje_error += _("Hubo un inconveniente al crear el archivo de " "configuracion de rutas de Asterisk. ") if not proceso_ok: raise (RestablecerConfiguracionTelefonicaError(mensaje_error)) else: self.reload_asterisk_config.reload_asterisk()
class ActivacionQueueService(object): """ Sincronizador de configuracion de Campaña / Queue """ def __init__(self): self.queues_config_creator = QueuesCreator() self.reload_asterisk_config = AsteriskConfigReloader() self.asterisk_database = CampanaFamily() def _generar_y_recargar_configuracion_asterisk(self): proceso_ok = True mensaje_error = "" try: self.queues_config_creator.create_dialplan() except Exception: logger.exception( _("ActivacionQueueService: error al " "intentar queues_config_creator()")) proceso_ok = False mensaje_error += (_("Hubo un inconveniente al crear el archivo de " "configuracion del queues de Asterisk. ")) if not proceso_ok: raise (RestablecerDialplanError(mensaje_error)) else: self.reload_asterisk_config.reload_asterisk() self.asterisk_database.regenerar_families() def activar(self): self._generar_y_recargar_configuracion_asterisk()
def delete(self, request, *args, **kwargs): # Borro el archivo de la carpeta de asterisk musica = self.get_object() audio_file_asterisk = AudioConfigFile(musica) audio_file_asterisk.delete_asterisk() if musica.audio_original: if os.path.isfile(musica.audio_original.path): os.remove(musica.audio_original.path) if musica.audio_asterisk: if os.path.isfile(musica.audio_asterisk.path): os.remove(musica.audio_asterisk.path) # Si esta musica es la última que había en la playlist: if musica.playlist.musicas.count() == 1: # "Reinicio" el mudulo de musiconhold en Asterisk reloader = AsteriskConfigReloader() reloader.reload_asterisk() super(MusicaDeEsperaDeleteView, self).delete(request, *args, **kwargs) message = (_('Musica de Espera eliminada con éxito')) messages.add_message( self.request, messages.SUCCESS, message, ) return redirect(self.get_success_url())
class ActivacionAgenteService(object): """Este servicio regenera y recarga los archivos de configuracion para los agentes""" def __init__(self): self.sip_config_creator = SipConfigCreator() self.config_file = SipConfigFile() self.reload_asterisk_config = AsteriskConfigReloader() self.asterisk_database = AgenteFamily() def _generar_y_recargar_configuracion_asterisk(self): proceso_ok = True mensaje_error = "" try: self.sip_config_creator.create_config_sip() except Exception as e: msg = _("Error {0}: ActivacionAgenteService: error al ".format( e.message) + "intentar create_config_sip()") logger.exception(msg) proceso_ok = False mensaje_error += _("Hubo un inconveniente al crear el archivo de " "configuracion del config sip de Asterisk. ") if not proceso_ok: raise (RestablecerConfigSipError(mensaje_error)) else: self.config_file.copy_asterisk() self.reload_asterisk_config.reload_asterisk() self.asterisk_database.regenerar_families() def activar(self): self._generar_y_recargar_configuracion_asterisk()
def __init__(self): # Sincroniza Queues de Campañas self.queues_config_creator = QueuesCreator() # Sincroniza Sip De Agentes self.sip_config_creator = SipConfigCreator() # Sincroniza Modelos de Configuracion Telefonica self.sincronizador_config_telefonica = SincronizadorDeConfiguracionTelefonicaEnAsterisk( ) # Sincroniza en AstDB las que faltan en el Sincronizador de Configuracion Telefonica self.asterisk_database = RegenerarAsteriskFamilysOML() self.playlist_config_creator = PlaylistsConfigCreator() # Llama al comando que reinicia Asterisk self.reload_asterisk_config = AsteriskConfigReloader() # parámetros de script que desloguea agentes inactivos self.tareas_programadas_ids = [ 'asterisk_logout_script', 'queue_log_clean_job', 'actualizar_reportes_de_entrantes_job', 'actualizar_reporte_supervisores', 'actualizar_reporte_dia_actual_agentes', 'actualizar_reportes_salientes', 'actualizar_reportes_dialers' ] self.TIEMPO_CHEQUEO_CONTACTOS_INACTIVOS = 2 self.TIEMPO_ACTUALIZAR_REPORTES_LLAMADAS_ENTRANTES = 1 self.TIEMPO_ACTUALIZAR_REPORTE_SUPERVISORES = 5 self.TIEMPO_ACTUALIZAR_DASHBOARD_AGENTES = 1 self.TIEMPO_ACTUALIZAR_REPORTES_LLAMADAS_SALIENTES = 1 self.TIEMPO_ACTUALIZAR_REPORTES_LLAMADAS_DIALERS = 1
def __init__(self): self.generador_trunk_en_astdb = TrunkFamily() self.generador_trunk_sip_en_asterisk_conf = SipTrunksConfigCreator() self.config_trunk_file = SipTrunksConfigFile() self.generador_trunks_registration_en_asterisk_conf = SipRegistrationsConfigCreator( ) self.config_trunk_registration_file = SipRegistrationsConfigFile() self.reload_asterisk_config = AsteriskConfigReloader()
def handle(self, *args, **options): try: # self._actualizar_archivos_kamailio() self._actualizar_template_asterisk_oml_manager() self._actualizar_template_asterisk_oml_sip_general() # regeneramos asterisk con la nueva configuracion asterisk_reloader = AsteriskConfigReloader() asterisk_reloader.reload_asterisk() except Exception as e: logging.error('Fallo del comando: {0}'.format(e.message))
def form_valid(self, form): form.save() self._procesar_archivo_de_audio(form) # Si esta musica es la primera que se agrega a la playlist: if self.playlist.musicas.count() == 1: # "Reinicio" el mudulo de musiconhold en Asterisk reloader = AsteriskConfigReloader() reloader.reload_asterisk() return super(MusicaDeEsperaCreateView, self).form_valid(form)
def __init__(self): # Sincroniza Queues de Campañas self.queues_config_creator = QueuesCreator() self.config_queues_file = QueuesConfigFile() # Sincroniza Sip De Agentes self.sip_config_creator = SipConfigCreator() self.config_sip_file = SipConfigFile() # Sincroniza Modelos de Configuracion Telefonica self.sincronizador_config_telefonica = SincronizadorDeConfiguracionTelefonicaEnAsterisk() # Sincroniza en AstDB las que faltan en el Sincronizador de Configuracion Telefonica self.asterisk_database = RegenerarAsteriskFamilysOML() # Llama al comando que reinicia Asterisk self.reload_asterisk_config = AsteriskConfigReloader() # parámetros de script que desloguea agentes inactivos self.tareas_programadas_ids = ['asterisk_logout_script', 'queue_log_clean_job'] self.TIEMPO_CHEQUEO_CONTACTOS_INACTIVOS = 2
class SincronizadorDeConfiguracionTroncalSipEnAsterisk(object): def __init__(self): self.generador_trunk_en_astdb = TrunkFamily() self.generador_trunk_sip_en_asterisk_conf = SipTrunksConfigCreator() self.generador_trunks_registration_en_asterisk_conf = SipRegistrationsConfigCreator( ) self.reload_asterisk_config = AsteriskConfigReloader() def _generar_y_recargar_archivos_conf_asterisk(self, trunk_exclude=None): proceso_ok = True mensaje_error = "" try: self.generador_trunk_sip_en_asterisk_conf.create_config_asterisk( trunk_exclude=trunk_exclude) except Exception as e: msg = _( "SincronizadorDeConfiguracionTroncalSipEnAsterisk: error {0} al " .format(e)) + _("intentar create_config_asterisk()") logger.exception(msg) proceso_ok = False mensaje_error += _("Hubo un inconveniente al crear el archivo de " "configuracion de trunks de Asterisk. ") try: self.generador_trunks_registration_en_asterisk_conf.create_config_asterisk( trunk_exclude=trunk_exclude) except Exception as e: msg = _( "SincronizadorDeConfiguracionTroncalSipEnAsterisk: error {0} al " .format(e)) + _("intentar create_config_asterisk()") logger.exception(msg) proceso_ok = False mensaje_error += _( "Hubo un inconveniente al crear el archivo de " "configuracion de trunks registration de Asterisk. ") if not proceso_ok: raise (RestablecerConfiguracionTelefonicaError(mensaje_error)) else: self.reload_asterisk_config.reload_asterisk() def _generar_e_insertar_en_astdb(self, trunk): mensaje_error = "" try: if trunk is None: self.generador_trunk_en_astdb.regenerar_families() else: self.generador_trunk_en_astdb.regenerar_family(trunk) except Exception as e: msg = _( "SincronizadorDeConfiguracionTroncalSipEnAsterisk: error {0} al " .format(e)) + _("intentar regenerar_familys_rutas()") logger.exception(msg) mensaje_error += _( "Hubo un inconveniente al insertar los registros del troncal en " "la base de datos de Asterisk. ") raise (RestablecerConfiguracionTelefonicaError(mensaje_error)) def _eliminar_trunk_en_astdb(self, trunk): mensaje_error = "" try: self.generador_trunk_en_astdb.delete_family(trunk) except Exception as e: msg = _( "SincronizadorDeConfiguracionTroncalSipEnAsterisk: error {0} al " .format(e)) + _("intentar delete_family_trunk()") logger.exception(msg) mensaje_error += _( "Hubo un inconveniente al eliminar los registros de los troncales" " en la base de datos de Asterisk. ") raise (RestablecerConfiguracionTelefonicaError(mensaje_error)) def regenerar_troncales(self, trunk=None): self._generar_y_recargar_archivos_conf_asterisk() self._generar_e_insertar_en_astdb(trunk) def eliminar_troncal_y_regenerar_asterisk(self, trunk): self._generar_y_recargar_archivos_conf_asterisk(trunk_exclude=trunk) self._eliminar_trunk_en_astdb(trunk)
def __init__(self): super(SincronizadorDeConfiguracionDeRutaSalienteEnAsterisk).__init__() self.generador_rutas_en_asterisk_conf = RutasSalientesConfigCreator() self.reload_asterisk_config = AsteriskConfigReloader()
def __init__(self): self.generador_rutas_en_astdb = RutaSalienteFamily() self.generador_rutas_en_asterisk_conf = RutasSalientesConfigCreator() self.config_rutas_file = RutasSalientesConfigFile() self.reload_asterisk_config = AsteriskConfigReloader()
class SincronizadorDeConfiguracionDeRutaSalienteEnAsterisk(object): def __init__(self): self.generador_rutas_en_astdb = RutaSalienteFamily() self.generador_rutas_en_asterisk_conf = RutasSalientesConfigCreator() self.config_rutas_file = RutasSalientesConfigFile() self.reload_asterisk_config = AsteriskConfigReloader() def _generar_y_recargar_archivos_conf_asterisk(self, ruta_exclude=None): proceso_ok = True mensaje_error = "" try: self.generador_rutas_en_asterisk_conf.create_config_asterisk( ruta_exclude=ruta_exclude) except Exception as e: msg = _( "SincronizadorDeConfiguracionDeRutaSalienteEnAsterisk: error {0} al" .format(e.message)) + _("intentar create_config_asterisk()") logger.exception(msg) proceso_ok = False mensaje_error += _("Hubo un inconveniente al crear el archivo de " "configuracion de rutas de Asterisk. ") if not proceso_ok: raise (RestablecerConfiguracionTelefonicaError(mensaje_error)) else: self.config_rutas_file.copy_asterisk() self.reload_asterisk_config.reload_asterisk() def _generar_e_insertar_en_astdb(self, ruta): mensaje_error = "" try: if ruta is None: self.generador_rutas_en_astdb.regenerar_families() else: self.generador_rutas_en_astdb.regenerar_family(ruta) except Exception as e: msg = _( "SincronizadorDeConfiguracionDeRutaSalienteEnAsterisk: error {0} al " .format(e.message)) + _("intentar regenerar_familys_rutas()") logger.exception(msg) mensaje_error += _( "Hubo un inconveniente al insertar los registros de las rutas en " "la base de datos de Asterisk. ") raise (RestablecerConfiguracionTelefonicaError(mensaje_error)) def _eliminar_ruta_en_astdb(self, ruta): mensaje_error = "" try: self.generador_rutas_en_astdb.delete_family(ruta) except Exception as e: msg = _( "SincronizadorDeConfiguracionDeRutaSalienteEnAsterisk: error {0} al " .format(e.message)) + _("intentar delete_family_ruta()") logger.exception(msg) mensaje_error += _( "Hubo un inconveniente al eliminar los registros de las rutas en " "la base de datos de Asterisk. ") raise (RestablecerConfiguracionTelefonicaError(mensaje_error)) def _regenerar_troncales_ruta_en_astdb(self, ruta): mensaje_error = "" try: self.generador_rutas_en_astdb.regenerar_family_trunk_ruta(ruta) except Exception as e: msg = ( "SincronizadorDeConfiguracionDeRutaSalienteEnAsterisk: error {0} al " .format(e.message)) + _("intentar delete_family_ruta()") logger.exception(msg) mensaje_error += _( "Hubo un inconveniente al eliminar los registros de las rutas en " "la base de datos de Asterisk. ") raise (RestablecerConfiguracionTelefonicaError(mensaje_error)) def regenerar_rutas_salientes(self, ruta=None): """regenera la ruta saliente pasada por parametro y si la ruta es none regenera todas las rutas salientes """ self._generar_y_recargar_archivos_conf_asterisk() self._generar_e_insertar_en_astdb(ruta) def eliminar_ruta_y_regenerar_asterisk(self, ruta): self._generar_y_recargar_archivos_conf_asterisk(ruta_exclude=ruta) self._eliminar_ruta_en_astdb(ruta) def regenerar_troncales_en_ruta_asterisk(self, ruta): self._regenerar_troncales_ruta_en_astdb(ruta)
class RegeneracionAsteriskService(object): def __init__(self): # Sincroniza Queues de Campañas self.queues_config_creator = QueuesCreator() # Sincroniza Sip De Agentes self.sip_config_creator = SipConfigCreator() # Sincroniza Modelos de Configuracion Telefonica self.sincronizador_config_telefonica = SincronizadorDeConfiguracionTelefonicaEnAsterisk( ) # Sincroniza en AstDB las que faltan en el Sincronizador de Configuracion Telefonica self.asterisk_database = RegenerarAsteriskFamilysOML() self.playlist_config_creator = PlaylistsConfigCreator() # Llama al comando que reinicia Asterisk self.reload_asterisk_config = AsteriskConfigReloader() # parámetros de script que desloguea agentes inactivos self.tareas_programadas_ids = [ 'asterisk_logout_script', 'queue_log_clean_job', 'actualizar_reportes_de_entrantes_job', 'actualizar_reporte_supervisores', 'actualizar_reporte_dia_actual_agentes', 'actualizar_reportes_salientes', 'actualizar_reportes_dialers' ] self.TIEMPO_CHEQUEO_CONTACTOS_INACTIVOS = 2 self.TIEMPO_ACTUALIZAR_REPORTES_LLAMADAS_ENTRANTES = 1 self.TIEMPO_ACTUALIZAR_REPORTE_SUPERVISORES = 5 self.TIEMPO_ACTUALIZAR_DASHBOARD_AGENTES = 1 self.TIEMPO_ACTUALIZAR_REPORTES_LLAMADAS_SALIENTES = 1 self.TIEMPO_ACTUALIZAR_REPORTES_LLAMADAS_DIALERS = 1 def _generar_y_recargar_configuracion_asterisk(self): proceso_ok = True mensaje_error = "" try: self.queues_config_creator.create_dialplan() except Exception: logger.exception( _("ActivacionQueueService: error al " "intentar queues_config_creator()")) proceso_ok = False mensaje_error += _("Hubo un inconveniente al crear el archivo de " "configuracion del queues de Asterisk. ") try: self.sip_config_creator.create_config_sip() except Exception: logger.exception( _("ActivacionAgenteService: error al " "intentar create_config_sip()")) proceso_ok = False mensaje_error += _("Hubo un inconveniente al crear el archivo de " "configuracion del config sip de Asterisk. ") try: self.playlist_config_creator.create_config_asterisk() except Exception: logger.exception( _("PlaylistsConfigCreator: error al " "intentar create_config_sip()")) proceso_ok = False mensaje_error += _("Hubo un inconveniente al crear el archivo de " "configuracion Playlists (MOH) en Asterisk. ") if not proceso_ok: raise (RestablecerDialplanError(mensaje_error)) else: self.sincronizador_config_telefonica.sincronizar_en_asterisk() self.asterisk_database.regenerar_asterisk() self.reload_asterisk_config.reload_asterisk() def _generar_tarea_script_logout_agentes_inactivos(self): """Adiciona una tarea programada que llama al script de que desloguea agentes inactivos """ # conectar con cron crontab = CronTab(user=getpass.getuser()) ruta_source_envars = 'source /etc/profile.d/omnileads_envars.sh;' ruta_python_virtualenv = os.path.join(sys.prefix, 'bin/python3') ruta_script_logout = os.path.join( settings.INSTALL_PREFIX, 'ominicontacto/manage.py logout_unavailable_agents') # adicionar nuevo cron job para esta tarea si no existe anteriormente job = crontab.find_comment(self.tareas_programadas_ids[0]) crontab.remove_all(comment=self.tareas_programadas_ids[0]) if list(job) == []: job = crontab.new(command='{0} {1} {2}'.format( ruta_source_envars, ruta_python_virtualenv, ruta_script_logout), comment=self.tareas_programadas_ids[0]) # adicionar tiempo de periodicidad al cron job job.minute.every(self.TIEMPO_CHEQUEO_CONTACTOS_INACTIVOS) crontab.write_to_user(user=getpass.getuser()) def _generar_tarea_limpieza_diaria_queuelog(self): """Adiciona una tarea programada para limpiar la tabla queue_log diariamente """ # conectar con cron crontab = CronTab(user=getpass.getuser()) ruta_psql = os.popen('which psql').read()[:-1] # adicionar nuevo cron job para esta tarea si no existe anteriormente job = crontab.find_comment(self.tareas_programadas_ids[1]) crontab.remove_all(comment=self.tareas_programadas_ids[1]) if list(job) == []: postgres_user = settings.POSTGRES_USER postgres_host = settings.POSTGRES_HOST postgres_database = settings.POSTGRES_DATABASE postgres_password = '******'.format( os.getenv('PGPASSWORD')) job = crontab.new( command= '{0} {1} -U {2} -h {3} -d {4} -c \'DELETE FROM queue_log\''. format(postgres_password, ruta_psql, postgres_user, postgres_host, postgres_database), comment=self.tareas_programadas_ids[1]) # adicionar tiempo de periodicidad al cron job job.hour.on(2) crontab.write_to_user(user=getpass.getuser()) def _generar_tarea_script_actualizar_reportes_llamadas_entrantes(self): """Adiciona una tarea programada que llama al script de que calcula reportes de llamadas entrantes """ # conectar con cron crontab = CronTab(user=getpass.getuser()) ruta_source_envars = 'source /etc/profile.d/omnileads_envars.sh;' ruta_python_virtualenv = os.path.join(sys.prefix, 'bin/python3') ruta_script_logout = os.path.join( settings.INSTALL_PREFIX, 'ominicontacto/manage.py actualizar_reportes_llamadas_entrantes') # adicionar nuevo cron job para esta tarea si no existe anteriormente job = crontab.find_comment(self.tareas_programadas_ids[2]) crontab.remove_all(comment=self.tareas_programadas_ids[2]) if list(job) == []: job = crontab.new(command='{0} {1} {2}'.format( ruta_source_envars, ruta_python_virtualenv, ruta_script_logout), comment=self.tareas_programadas_ids[2]) # adicionar tiempo de periodicidad al cron job job.minute.every( self.TIEMPO_ACTUALIZAR_REPORTES_LLAMADAS_ENTRANTES) crontab.write_to_user(user=getpass.getuser()) def _generar_tarea_script_actualizar_reporte_datos_supervisores(self): """Adiciona una tarea programada que llama al script de que calcula el reportes los agentes y campanas asociados a cada supervisor """ # conectar con cron crontab = CronTab(user=getpass.getuser()) ruta_source_envars = 'source /etc/profile.d/omnileads_envars.sh;' ruta_python_virtualenv = os.path.join(sys.prefix, 'bin/python3') ruta_script = os.path.join( settings.INSTALL_PREFIX, 'ominicontacto/manage.py actualizar_reporte_supervisores') # adicionar nuevo cron job para esta tarea si no existe anteriormente job = crontab.find_comment(self.tareas_programadas_ids[3]) crontab.remove_all(comment=self.tareas_programadas_ids[3]) if list(job) == []: job = crontab.new(command='{0} {1} {2}'.format( ruta_source_envars, ruta_python_virtualenv, ruta_script), comment=self.tareas_programadas_ids[3]) # adicionar tiempo de periodicidad al cron job job.minute.every(self.TIEMPO_ACTUALIZAR_REPORTE_SUPERVISORES) crontab.write_to_user(user=getpass.getuser()) def _generar_tarea_script_actualizar_reporte_agentes_dia_actual(self): """Adiciona una tarea programada que llama al script de que calcula el reportes los agentes y campanas asociados a cada supervisor """ # conectar con cron crontab = CronTab(user=getpass.getuser()) ruta_source_envars = 'source /etc/profile.d/omnileads_envars.sh;' ruta_python_virtualenv = os.path.join(sys.prefix, 'bin/python3') ruta_script = os.path.join( settings.INSTALL_PREFIX, 'ominicontacto/manage.py actualizar_reporte_dia_actual_agentes') # adicionar nuevo cron job para esta tarea si no existe anteriormente job = crontab.find_comment(self.tareas_programadas_ids[4]) crontab.remove_all(comment=self.tareas_programadas_ids[4]) if list(job) == []: job = crontab.new(command='{0} {1} {2}'.format( ruta_source_envars, ruta_python_virtualenv, ruta_script), comment=self.tareas_programadas_ids[4]) # adicionar tiempo de periodicidad al cron job job.minute.every(self.TIEMPO_ACTUALIZAR_DASHBOARD_AGENTES) crontab.write_to_user(user=getpass.getuser()) def _generar_tarea_script_actualizar_reportes_llamadas_salientes(self): """Adiciona una tarea programada que llama al script de que calcula reportes de llamadas salientes """ # conectar con cron crontab = CronTab(user=getpass.getuser()) ruta_source_envars = 'source /etc/profile.d/omnileads_envars.sh;' ruta_python_virtualenv = os.path.join(sys.prefix, 'bin/python3') ruta_script_logout = os.path.join( settings.INSTALL_PREFIX, 'ominicontacto/manage.py actualizar_reportes_llamadas_salientes') # adicionar nuevo cron job para esta tarea si no existe anteriormente job = crontab.find_comment(self.tareas_programadas_ids[5]) crontab.remove_all(comment=self.tareas_programadas_ids[5]) if list(job) == []: job = crontab.new(command='{0} {1} {2}'.format( ruta_source_envars, ruta_python_virtualenv, ruta_script_logout), comment=self.tareas_programadas_ids[5]) # adicionar tiempo de periodicidad al cron job job.minute.every( self.TIEMPO_ACTUALIZAR_REPORTES_LLAMADAS_SALIENTES) crontab.write_to_user(user=getpass.getuser()) def _generar_tarea_script_actualizar_reportes_llamadas_dialers(self): """Adiciona una tarea programada que llama al script de que calcula reportes de llamadas dialers """ # conectar con cron crontab = CronTab(user=getpass.getuser()) ruta_source_envars = 'source /etc/profile.d/omnileads_envars.sh;' ruta_python_virtualenv = os.path.join(sys.prefix, 'bin/python3') ruta_script_logout = os.path.join( settings.INSTALL_PREFIX, 'ominicontacto/manage.py actualizar_reportes_llamadas_dialers') # adicionar nuevo cron job para esta tarea si no existe anteriormente job = crontab.find_comment(self.tareas_programadas_ids[6]) crontab.remove_all(comment=self.tareas_programadas_ids[6]) if list(job) == []: job = crontab.new(command='{0} {1} {2}'.format( ruta_source_envars, ruta_python_virtualenv, ruta_script_logout), comment=self.tareas_programadas_ids[6]) # adicionar tiempo de periodicidad al cron job job.minute.every(self.TIEMPO_ACTUALIZAR_REPORTES_LLAMADAS_DIALERS) crontab.write_to_user(user=getpass.getuser()) def _reenviar_archivos_playlist_asterisk(self): playlists = Playlist.objects.all() for playlist in playlists: musica_espera_list = MusicaDeEspera.objects.filter( playlist=playlist.pk) print(list(musica_espera_list)) for musica in musica_espera_list: audio_file_asterisk = AudioConfigFile(musica) audio_file_asterisk.copy_asterisk() def _reenviar_paquetes_idioma(self): ASTERISK_SOUNDS_URL = 'https://downloads.asterisk.org/pub/telephony/sounds/' audios_asterisk_conf_list = AudiosAsteriskConf.objects.filter( esta_instalado=True) print("Descargando paquete de idiomas instalados....") for audio_conf in audios_asterisk_conf_list: language = audio_conf.paquete_idioma filename = 'asterisk-core-sounds-{0}-wav-current.tar.gz'.format( language) url = ASTERISK_SOUNDS_URL + filename response = requests.get(url, stream=True) filename_full_path = os.path.join(tempfile.gettempdir(), filename) handle = open(filename_full_path, "wb") for chunk in response.iter_content(chunk_size=512): if chunk: handle.write(chunk) handle.close() print(f' {language}...') __, nombre_archivo = os.path.split(filename_full_path) sound_tar_data = Path(filename_full_path).read_bytes() res = base64.b64encode(sound_tar_data) res = res.decode('utf-8') redis_stream = RedisStreams() content = { 'archivo': nombre_archivo, 'type': 'ASTERISK_SOUNDS', 'action': 'COPY', 'language': language, 'content': res } redis_stream.write_stream('asterisk_conf_updater', json.dumps(content)) print('Completada descarga de paquetes de idioma') def regenerar(self): self._generar_y_recargar_configuracion_asterisk() self._reenviar_archivos_playlist_asterisk() self._reenviar_paquetes_idioma() self._generar_tarea_script_logout_agentes_inactivos() self._generar_tarea_limpieza_diaria_queuelog() self._generar_tarea_script_actualizar_reportes_llamadas_entrantes() self._generar_tarea_script_actualizar_reportes_llamadas_salientes() self._generar_tarea_script_actualizar_reportes_llamadas_dialers() self._generar_tarea_script_actualizar_reporte_datos_supervisores() self._generar_tarea_script_actualizar_reporte_agentes_dia_actual()
def __init__(self): self.queues_config_creator = QueuesCreator() self.reload_asterisk_config = AsteriskConfigReloader() self.asterisk_database = CampanaFamily()
class RegeneracionAsteriskService(object): def __init__(self): # Sincroniza Queues de Campañas self.queues_config_creator = QueuesCreator() self.config_queues_file = QueuesConfigFile() # Sincroniza Sip De Agentes self.sip_config_creator = SipConfigCreator() self.config_sip_file = SipConfigFile() # Sincroniza Modelos de Configuracion Telefonica self.sincronizador_config_telefonica = SincronizadorDeConfiguracionTelefonicaEnAsterisk() # Sincroniza en AstDB las que faltan en el Sincronizador de Configuracion Telefonica self.asterisk_database = RegenerarAsteriskFamilysOML() # Llama al comando que reinicia Asterisk self.reload_asterisk_config = AsteriskConfigReloader() # parámetros de script que desloguea agentes inactivos self.tareas_programadas_ids = ['asterisk_logout_script', 'queue_log_clean_job'] self.TIEMPO_CHEQUEO_CONTACTOS_INACTIVOS = 2 def _generar_y_recargar_configuracion_asterisk(self): proceso_ok = True mensaje_error = "" try: self.queues_config_creator.create_dialplan() except Exception: logger.exception(_("ActivacionQueueService: error al " "intentar queues_config_creator()")) proceso_ok = False mensaje_error += _("Hubo un inconveniente al crear el archivo de " "configuracion del queues de Asterisk. ") try: self.sip_config_creator.create_config_sip() except Exception: logger.exception(_("ActivacionAgenteService: error al " "intentar create_config_sip()")) proceso_ok = False mensaje_error += _("Hubo un inconveniente al crear el archivo de " "configuracion del config sip de Asterisk. ") if not proceso_ok: raise(RestablecerDialplanError(mensaje_error)) else: self.config_queues_file.copy_asterisk() self.config_sip_file.copy_asterisk() self.sincronizador_config_telefonica.sincronizar_en_asterisk() self.asterisk_database.regenerar_asterisk() self.reload_asterisk_config.reload_asterisk() def _generar_tarea_script_logout_agentes_inactivos(self): """Adiciona una tarea programada que llama al script de que desloguea agentes inactivos """ # conectar con cron crontab = CronTab(user=getpass.getuser()) ruta_python_virtualenv = os.path.join(sys.prefix, 'bin/python') ruta_script_logout = os.path.join(settings.INSTALL_PREFIX, 'bin/omni-asterisk-logout.py') # adicionar nuevo cron job para esta tarea si no existe anteriormente job = crontab.find_comment(self.tareas_programadas_ids[0]) if list(job) == []: install_prefix = 'INSTALL_PREFIX={0}'.format(settings.INSTALL_PREFIX) ami_user = '******'.format(settings.AMI_USER) ami_password = '******'.format(settings.AMI_PASSWORD) asterisk_hostname = 'ASTERISK_HOSTNAME={0}'.format(settings.ASTERISK_HOSTNAME) job = crontab.new( command='{0} {1} {2} {3} {4} {5}'.format( install_prefix, ami_user, ami_password, asterisk_hostname, ruta_python_virtualenv, ruta_script_logout), comment=self.tareas_programadas_ids[0]) # adicionar tiempo de print()eriodicidad al cron job job.minute.every(self.TIEMPO_CHEQUEO_CONTACTOS_INACTIVOS) crontab.write_to_user(user=getpass.getuser()) def _generar_tarea_limpieza_diaria_queuelog(self): """Adiciona una tarea programada para limpiar la tabla queue_log diariamente """ # conectar con cron crontab = CronTab(user=getpass.getuser()) ruta_psql = os.popen('which psql').read()[:-1] # adicionar nuevo cron job para esta tarea si no existe anteriormente job = crontab.find_comment(self.tareas_programadas_ids[1]) if list(job) == []: postgres_user = settings.POSTGRES_USER postgres_host = settings.POSTGRES_HOST postgres_database = settings.POSTGRES_DATABASE postgres_password = '******'.format(os.getenv('PGPASSWORD')) job = crontab.new( command='{0} {1} -U {2} -h {3} -d {4} -c \'DELETE FROM queue_log\''.format( postgres_password, ruta_psql, postgres_user, postgres_host, postgres_database), comment=self.tareas_programadas_ids[1]) # adicionar tiempo de print()eriodicidad al cron job job.hour.on(2) crontab.write_to_user(user=getpass.getuser()) def regenerar(self): self._generar_y_recargar_configuracion_asterisk() self._generar_tarea_script_logout_agentes_inactivos() self._generar_tarea_limpieza_diaria_queuelog()
def __init__(self): self.sip_config_creator = SipConfigCreator() self.reload_asterisk_config = AsteriskConfigReloader() self.asterisk_database = AgenteFamily()
class RegeneracionAsteriskService(object): def __init__(self): # Sincroniza Queues de Campañas self.queues_config_creator = QueuesCreator() # Sincroniza Sip De Agentes self.sip_config_creator = SipConfigCreator() # Sincroniza Modelos de Configuracion Telefonica self.sincronizador_config_telefonica = SincronizadorDeConfiguracionTelefonicaEnAsterisk( ) # Sincroniza en AstDB las que faltan en el Sincronizador de Configuracion Telefonica self.asterisk_database = RegenerarAsteriskFamilysOML() self.playlist_config_creator = PlaylistsConfigCreator() # Llama al comando que reinicia Asterisk self.reload_asterisk_config = AsteriskConfigReloader() # parámetros de script que desloguea agentes inactivos self.tareas_programadas_ids = [ 'asterisk_logout_script', 'queue_log_clean_job', 'actualizar_reportes_de_entrantes_job', 'actualizar_reporte_supervisores' ] self.TIEMPO_CHEQUEO_CONTACTOS_INACTIVOS = 2 self.TIEMPO_ACTUALIZAR_REPORTES_LLAMADAS_ENTRANTES = 1 self.TIEMPO_ACTUALIZAR_REPORTE_SUPERVISORES = 5 def _generar_y_recargar_configuracion_asterisk(self): proceso_ok = True mensaje_error = "" try: self.queues_config_creator.create_dialplan() except Exception: logger.exception( _("ActivacionQueueService: error al " "intentar queues_config_creator()")) proceso_ok = False mensaje_error += _("Hubo un inconveniente al crear el archivo de " "configuracion del queues de Asterisk. ") try: self.sip_config_creator.create_config_sip() except Exception: logger.exception( _("ActivacionAgenteService: error al " "intentar create_config_sip()")) proceso_ok = False mensaje_error += _("Hubo un inconveniente al crear el archivo de " "configuracion del config sip de Asterisk. ") try: self.playlist_config_creator.create_config_asterisk() except Exception: logger.exception( _("PlaylistsConfigCreator: error al " "intentar create_config_sip()")) proceso_ok = False mensaje_error += _("Hubo un inconveniente al crear el archivo de " "configuracion Playlists (MOH) en Asterisk. ") if not proceso_ok: raise (RestablecerDialplanError(mensaje_error)) else: self.sincronizador_config_telefonica.sincronizar_en_asterisk() self.asterisk_database.regenerar_asterisk() self.reload_asterisk_config.reload_asterisk() def _generar_tarea_script_logout_agentes_inactivos(self): """Adiciona una tarea programada que llama al script de que desloguea agentes inactivos """ # conectar con cron crontab = CronTab(user=getpass.getuser()) ruta_source_envars = 'source /etc/profile.d/omnileads_envars.sh;' ruta_python_virtualenv = os.path.join(sys.prefix, 'bin/python3') ruta_script_logout = os.path.join( settings.INSTALL_PREFIX, 'ominicontacto/manage.py logout_unavailable_agents') # adicionar nuevo cron job para esta tarea si no existe anteriormente job = crontab.find_comment(self.tareas_programadas_ids[0]) crontab.remove_all(comment=self.tareas_programadas_ids[0]) if list(job) == []: job = crontab.new(command='{0} {1} {2}'.format( ruta_source_envars, ruta_python_virtualenv, ruta_script_logout), comment=self.tareas_programadas_ids[0]) # adicionar tiempo de periodicidad al cron job job.minute.every(self.TIEMPO_CHEQUEO_CONTACTOS_INACTIVOS) crontab.write_to_user(user=getpass.getuser()) def _generar_tarea_limpieza_diaria_queuelog(self): """Adiciona una tarea programada para limpiar la tabla queue_log diariamente """ # conectar con cron crontab = CronTab(user=getpass.getuser()) ruta_psql = os.popen('which psql').read()[:-1] # adicionar nuevo cron job para esta tarea si no existe anteriormente job = crontab.find_comment(self.tareas_programadas_ids[1]) crontab.remove_all(comment=self.tareas_programadas_ids[1]) if list(job) == []: postgres_user = settings.POSTGRES_USER postgres_host = settings.POSTGRES_HOST postgres_database = settings.POSTGRES_DATABASE postgres_password = '******'.format( os.getenv('PGPASSWORD')) job = crontab.new( command= '{0} {1} -U {2} -h {3} -d {4} -c \'DELETE FROM queue_log\''. format(postgres_password, ruta_psql, postgres_user, postgres_host, postgres_database), comment=self.tareas_programadas_ids[1]) # adicionar tiempo de periodicidad al cron job job.hour.on(2) crontab.write_to_user(user=getpass.getuser()) def _generar_tarea_script_actualizar_reportes_llamadas_entrantes(self): """Adiciona una tarea programada que llama al script de que calcula reportes de llamadas entrantes """ # conectar con cron crontab = CronTab(user=getpass.getuser()) ruta_source_envars = 'source /etc/profile.d/omnileads_envars.sh;' ruta_python_virtualenv = os.path.join(sys.prefix, 'bin/python3') ruta_script_logout = os.path.join( settings.INSTALL_PREFIX, 'ominicontacto/manage.py actualizar_reportes_llamadas_entrantes') # adicionar nuevo cron job para esta tarea si no existe anteriormente job = crontab.find_comment(self.tareas_programadas_ids[2]) crontab.remove_all(comment=self.tareas_programadas_ids[2]) if list(job) == []: job = crontab.new(command='{0} {1} {2}'.format( ruta_source_envars, ruta_python_virtualenv, ruta_script_logout), comment=self.tareas_programadas_ids[2]) # adicionar tiempo de periodicidad al cron job job.minute.every( self.TIEMPO_ACTUALIZAR_REPORTES_LLAMADAS_ENTRANTES) crontab.write_to_user(user=getpass.getuser()) def _generar_tarea_script_actualizar_reporte_datos_supervisores(self): """Adiciona una tarea programada que llama al script de que calcula el reportes los agentes y campanas asociados a cada supervisor """ # conectar con cron crontab = CronTab(user=getpass.getuser()) ruta_source_envars = 'source /etc/profile.d/omnileads_envars.sh;' ruta_python_virtualenv = os.path.join(sys.prefix, 'bin/python3') ruta_script = os.path.join( settings.INSTALL_PREFIX, 'ominicontacto/manage.py actualizar_reporte_supervisores') # adicionar nuevo cron job para esta tarea si no existe anteriormente job = crontab.find_comment(self.tareas_programadas_ids[3]) crontab.remove_all(comment=self.tareas_programadas_ids[3]) if list(job) == []: job = crontab.new(command='{0} {1} {2}'.format( ruta_source_envars, ruta_python_virtualenv, ruta_script), comment=self.tareas_programadas_ids[2]) # adicionar tiempo de periodicidad al cron job job.minute.every(self.TIEMPO_ACTUALIZAR_REPORTE_SUPERVISORES) crontab.write_to_user(user=getpass.getuser()) def regenerar(self): self._generar_y_recargar_configuracion_asterisk() self._generar_tarea_script_logout_agentes_inactivos() self._generar_tarea_limpieza_diaria_queuelog() self._generar_tarea_script_actualizar_reportes_llamadas_entrantes() self._generar_tarea_script_actualizar_reporte_datos_supervisores()