def test_generar_dialplan_entrante_ivr_breakout(self): ivr = IVRFactory() destino_ivr = DestinoEntrante.crear_nodo_ruta_entrante(ivr) self.queue_entrante.ivr_breakdown = destino_ivr creator = QueuesCreator() dialplan = creator._generar_dialplan_entrantes(self.campana_entrante) self.assertIn('context=sub-oml-module-ivrbreakout', dialplan)
def test_generar_dialplan_entrante_default(self): creator = QueuesCreator() dialplan = creator._generar_dialplan_entrantes(self.campana_entrante) self.assertIn('announce-holdtime=no', dialplan) self.assertIn('queue-callswaiting=queue-callswaiting', dialplan) self.assertIn('queue-thereare=queue-thereare', dialplan) self.assertIn('queue-youarenext=queue-youarenext', dialplan)
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 __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): # 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 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 test_generar_dialplan_entrante_posicion_de_anuncios(self): self.queue_entrante.announce_position = True creator = QueuesCreator() dialplan = creator._generar_dialplan_entrantes(self.campana_entrante) self.assertIn('announce-position=yes', dialplan)
def test_generar_dialplan_entrante_posicion_de_anuncios_default(self): creator = QueuesCreator() dialplan = creator._generar_dialplan_entrantes(self.campana_entrante) self.assertIn('announce-position=no', dialplan)
def test_generar_dialplan_announce_holdtime_activated_once(self): self.queue_entrante.announce_holdtime = 'once' creator = QueuesCreator() dialplan = creator._generar_dialplan_entrantes(self.campana_entrante) self.assertIn('announce-holdtime=once', dialplan)
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() # 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()
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()