Pregunta

Por mi trabajo, a veces tengo que lidiar con los archivos de registro de un protocolo binario (los ficheros log contienen hexdumps de los mensajes). Quiero escribir un script en Perl que pueda interpretar los datos binarios para mí y para imprimir el contenido en un formato muy amigable.

Tengo un (legible por máquina) Descripción de los mensajes de protocolo en un formato propietario y (en su mayoría) que he descubierto la manera de analizar ese formato (las partes que puedo "t totalmente entiendo no están relacionados a mi objetivo, por lo que Sólo puede ignorarlas), por lo que puede convertir la descripción en una estructura de datos para su uso en mi guión.

Debido a la descripción del protocolo sólo raramente cambia, parece un desperdicio de volver a analizar la descripción del protocolo cada vez que quiero analizar un archivo de registro, pero por otro lado, si la descripción que hace el cambio o si accidentalmente tirado toda mi pre -parsed forma de la descripción, entonces me gustaría que mi script para activar automáticamente un re-análisis de la descripción.
¿Cuál es la mejor manera de darse cuenta de esto?

¿Fue útil?

Solución

Si se asume que la descripción del protocolo vidas en un archivo accesible a la secuencia de comandos, tienen una función para leer en los datos analizados, que almacena en caché los resultados evalúan de archivo intermedio. La lógica es muy simple, pero los pasos se ven muy prolijo desde que traté de escribir la especificación completa -. En realidad debería tener <10 líneas de código Perl

  1. Comprobar si existe el archivo intermedio. Si no lo hace (o no se puede leer), salte al paso de análisis patentada (# 4)

  2. Si se puede leer en el archivo de caché intermedia, leído en el campo "protocolo de descripción de marca de tiempo" (descrito más adelante). A continuación, averiguar la hora de modificación del archivo "descripción del protocolo" a través de stat() y comparar. Si la hora de modificación del archivo "descripción del protocolo" es marca de tiempo almacenado> = del archivo de caché, salte al paso de análisis patentada (# 4)

  3. lo demás (por ejemplo, el tiempo de archivo "descripción del protocolo" es

  4. Si necesita re-análisis sintáctico, debido a la lógica en el # 1 o # 2, leído en el archivo "descripción del protocolo", analizarlo en su estructura de datos.

  5. A continuación, crear un hash con 2 llaves: "protocol_description_timestamp" (con el valor siendo el tiempo de modificación de archivo de descripción de protocolo derivado de llamada stat) y "datos" segunda clave, con el valor siendo una referencia para los datos Estructura que sólo se produce como resultado del análisis sintáctico.

  6. A continuación, guarde esa estructura de datos en el archivo de caché intermedia usando Storable o Data::Dumper o cualquier otro método de su elección para el almacenamiento de datos structires Perl.

Otros consejos

Se puede utilizar un Makefile para esto. Hacer que la estructura de datos que utiliza un objetivo Makefile que depende de la descripción del protocolo. Cuando avisos Hacer que el protocolo se ha actualizado más recientemente que la secuencia de comandos, se ejecutará los comandos que especifique para recrear sus datos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top