Simple logging en python.

Tras muchas idas y venidas con la gestión de logs en python, he llegado a este tutorial de python que resume bastante bien la gestión más básica que se puede hacer en una aplicación con los logs:
En mi caso, los requisitos son:
– El log se guarda en fichero.
– El fichero debe rotar.
– Desde cualquier clase del workspace se puede acceder al log

import logging
import logging.handlers as handlers
 
# Se le puede poner cualquier nombre

logger = logging.getLogger(‘mi_app_name’)
logger.setLevel(logging.INFO)


#Log handler to file:
logHandler = handlers.RotatingFileHandler(‘mi_archivo_salida.log’, maxBytes=1000, backupCount=2)
logHandler.setLevel(logging.INFO)
# output format
formatter = logging.Formatter(‘%(asctime)s – %(name)s – %(levelname)s – %(message)s’)
logHandler.setFormatter(formatter)


logger.addHandler(logHandler)


# Comprobar que todos los logs van al mismo fichero:
logger.info(“Primer mensaje al log de tipo INFO”)
logger.error(“Primer mensaje al log de tipo ERROR”)
En cada clase que se vaya a usar el log, se instancia en el init, y luego se usa como un atributo de la clase:

class ejemplo:
“”” Clase de ejemplo para ver el log “””


def __init__(self):
“””Inicializa el objeto “””
self.logger = logging.getLogger(‘mi_app_name’) # Configurar el log.
 
     def metodo1. (self):
“”” Metodo 1 “””

self.logger.info(‘Mensaje de ejemplo 1’)

 
 
Para saber mucho más sobre los logs en python: https://docs.python.org/3/howto/logging-cookbook.html

Despliegue Apache Hadoop sobre Debian

Despliegue de Apache hadoop sobre Debian con un nodo único.

Esta guía particulariza la instalación sobre un servidor Debian, actualizando las rutas y valores que en la guía original de Hadoop, es necesario cambiar para que funcione.

Instalación de paquetes previos

 sudo apt-get install -y ssh rsync

Instalación de los paquetes propios de Apache Hadoop 2.9 (versión estable:

wget http://apache.uvigo.es/hadoop/common/stable/hadoop-2.9.0.tar.gz ;
# Descomprimir:
tar -xvzf hadoop-2.9.0.tar.gz ;
# Moverlo a /usr/bin
sudo mv hadoop-2.9.0 /usr/bin/hadoop-2.9.0 ;
# Creo un enlace, para no tener que buscar las rutas:
sudo ln -s /usr/bin/hadoop-2.9.0/bin/hadoop /usr/bin/hadoop

Configuración del entorno

Cambiar en la configuración, la ruta donde tengamos en nuestro sistema java.

whereis java; 
medit /usr/bin/hadoop-2.9.0/etc/hadoop/hadoop-env.sh
# set to the root of your Java installation
 export JAVA_HOME=/usr/bin/java

Iniciar Hadoop

Al haber creado ya un enlace durante la instalación, es suficiente con invocar hadoop de la siguiente manera:

hadoop

Desinstalación

rm -rf /usr/bin/hadoop-2.9.0
rm -rf /usr/bin/hadoop

Más información: https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/SingleCluster.html

Editar pdf multipágina en linux / Debian con master pdf editor

Descarga de paquetes

Descarga de paquete .deb de Master PDf editor

Instalación a través de dpkg:

dpkg -i master-pdf-editor-4.3.10_qt5.amd64.deb

Dependencias:

Requiere tener una versión de librerías QT 5.4.1 o superior.

Python: Encoding latin-1 utf-8

#!/usr/bin/python
# coding: latin-1

If script is stored in utf-8, a u character has to appear before any utf-8 strings, as in following example:

#!/usr/bin/python
# coding: utf-8

(....)

ws.write_string ("B6",u'Ñéñººª')

For cygwin users, python should be manually pointed at windows python available.

 ln -s  /cygdrive/c/Python27/python.exe /usr/bin/python

If encoding is not set up:

$ python fmyscript.py
  File "fmyscript.py", line 20
SyntaxError: Non-ASCII character '\xc3' in file ficha_conecta.py on line 20, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

To learn more about encoding: https://www.python.org/dev/peps/pep-0263/

 

 

Python: problemas con tildes, ñ, acentos, etc.

#!/usr/bin/python
# coding: latin-1

Si elegimos usar UTF-8, en todas las cadenas que vayan a tener un carácter especial se debe especificar una U delante de la cadena:

#!/usr/bin/python
# coding: utf-8

(....)

ws.write_string ("B6",u'Ñéñººª')

Si el script va a ejecutarse desde cygwin, es necesario apuntar /usr/bin/python a la versión del sistema:

 ln -s  /cygdrive/c/Python27/python.exe /usr/bin/python

Si en los scripts de python, no está bien especificado el tipo de caracteres de los fuentes, ante cualquier carácter especial del castellano aparece el siguiente error:

$ python fmyscript.py
  File "fmyscript.py", line 20
SyntaxError: Non-ASCII character '\xc3' in file ficha_conecta.py on line 20, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

Para saber más:  https://www.python.org/dev/peps/pep-0263/

Python 2.7. Instlar pypdfocr en windows

Si al instalar pypdfocr en windows 7, da un error de compilación

$ pip2.exe  install pypdfocr

(...)
Installing collected packages: PyYAML, argh, pathtools, watchdog, httplib2, oauth2, evernote, pypdfocr
  Running setup.py install for PyYAML: started
    Running setup.py install for PyYAML: finished with status 'error'
    Complete output from command c:\python27\python.exe -u -c "import setuptools, tokenize;__file__='c:\\cygwin\\tmp\\pip-build-k7lz4j\\PyYAML\\setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record c:\cygwin\tmp\pip-nggirp-record\install-record.txt --single-version-externally-managed --compile:
    running install
    running build
    running build_py
    creating build
    creating build\lib.win32-2.7
    creating build\lib.win32-2.7\yaml
    copying lib\yaml\composer.py -> build\lib.win32-2.7\yaml
    copying lib\yaml\constructor.py -> build\lib.win32-2.7\yaml
    copying lib\yaml\cyaml.py -> build\lib.win32-2.7\yaml
    copying lib\yaml\dumper.py -> build\lib.win32-2.7\yaml
    copying lib\yaml\emitter.py -> build\lib.win32-2.7\yaml
    copying lib\yaml\error.py -> build\lib.win32-2.7\yaml
    copying lib\yaml\events.py -> build\lib.win32-2.7\yaml
    copying lib\yaml\loader.py -> build\lib.win32-2.7\yaml
    copying lib\yaml\nodes.py -> build\lib.win32-2.7\yaml
    copying lib\yaml\parser.py -> build\lib.win32-2.7\yaml
    copying lib\yaml\reader.py -> build\lib.win32-2.7\yaml
    copying lib\yaml\representer.py -> build\lib.win32-2.7\yaml
    copying lib\yaml\resolver.py -> build\lib.win32-2.7\yaml
    copying lib\yaml\scanner.py -> build\lib.win32-2.7\yaml
    copying lib\yaml\serializer.py -> build\lib.win32-2.7\yaml
    copying lib\yaml\tokens.py -> build\lib.win32-2.7\yaml
    copying lib\yaml\__init__.py -> build\lib.win32-2.7\yaml
    running build_ext
    creating build\temp.win32-2.7
    creating build\temp.win32-2.7\Release
    checking if libyaml is compilable
    error: [Error 2] El sistema no puede encontrar el archivo especificado

    ----------------------------------------
Command "c:\python27\python.exe -u -c "import setuptools, tokenize;__file__='c:\\cygwin\\tmp\\pip-build-k7lz4j\\PyYAML\\setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record c:\cygwin\tmp\pip-nggirp-record\install-record.txt --single-version-externally-managed --compile" failed with error code 1 in c:\cygwin\tmp\pip-build-k7lz4j\PyYAML\

Es necesario instalar tal y como comentan en stackoverflow vc  para windows :

Microsoft Visual C++ Compiler for Python 2.7

Una vez instalado, vc for Python, debe estar accesible desde el path. Desde command :

cmd_python_pypdfocr

vmware powercli: tareas programadas

Para ejecutar un script de powercli mediante el programador de tareas, es necesario prepararlo para poder ser invocado desde powershell.

El script debe comenzar invocando el snapin de vmware:

add-pssnapin VMware.VimAutomation.Core

Antes de pasar a una tarea programada, recomendamos probar el script invocandolo a través de powershell:

powershell.exe c:\myscript.ps1

Tarea programada en windows

Herramientas administrativas > Programador de tareas

vmware_powercli_tarea_programada001

Tarea básica: Hora y fecha de comienzo.

vmware_powercli_tarea_programada002

Acción: Iniciar un programa
vmware_powercli_tarea_programada003Poner ruta de powershell y del script de powercli completa:

C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe

 

powercli_tarea_programada_64bits

Windows 10: Utilidades de directorio activo

Para poder usar las utilidades de exploración del directorio activo en windows 7 y windows 10, es necesario activar RSAT ( Remote Server Administration Tools) a través de Programas y características.

rsat_windows_dominio_01

Panel de control > Programas > Programas y características > Activar o desactivar las características de windows.

rsat_windows_dominio_02Habilitamos Remote Server Administration Tools > Feature Administration Tools > AD DS and AD LDS Tools > AD DS Tools

rsat_windows_dominio_03

A través de la consola mmc (mmc.exe) añadimos el complemento de Usuarios y equipos de active directory.

rsat_windows_dominio_04

 

vmware: migración “La operación no se permite en el estado actual”

En un cluster con DRS activado (en modo agresivo) al mover una máquina da como error “La operación no se permite en el estado actual”.
vmware_esx_error_migracion001

El error sale tanto por el interfaz, como en powercli

$vm | move-VM -Datastore  $datastore -Destination $vmhost

Al analizar el propio host, su definición de vmotion aparece como “no”.

 

 

Sin embargo, el host tiene una licencia enterprise que permiten los movimientos en máquina virtual.

vmware_esx_error_migracion002

Paso 1: Reinicio en vcenter del servicio de licencias
vcenter:~ # /etc/init.d/vmware-cis-license restart
Stopping VMware CIS License Service...
Stopped VMware CIS License Service.
Starting VMware CIS License Service...
Waiting for VMware CIS License Service..................
running: PID:4108
Paso 2: Desconexión y conexión del host.

Al desconectar y conectar de nuevo el host, verifica la información de licencias y recupera la posibilidad de vmotion.

Vmware vcenter migration. The operation is not allowed in the current state .

Despite having DRS enabled on our vmware cluster, we are unable to migrate virtual machines.

Every migration ends with the following error:

The operation is not allowed in the current state .
vmware_esx_error_migracion001

Thist issue occurs not only when using powercli, but also when manually trying to migrate:

$vm | move-VM -Datastore  $datastore -Destination $vmhost

If you check the host configuration (summary tab),  vmotion state is set as “No”, though  Host license is Enterprise plus.

vmware_esx_error_migracion002

Step 1: Restart licencse service in vcenter
vcenter:~ # /etc/init.d/vmware-cis-license restart
Stopping VMware CIS License Service...
Stopped VMware CIS License Service.
Starting VMware CIS License Service...
Waiting for VMware CIS License Service..................
running: PID:4108
Step 2: Disconnect and reconnect host.

When a disconnection and reconnection is performed, licence information is read, and vmotion host configuration will be re-enabled.