Mostrando las entradas con la etiqueta python3. Mostrar todas las entradas
Mostrando las entradas con la etiqueta python3. Mostrar todas las entradas

2025-05-14

pingmon update

Hace un tiempo hice un script para monitorear mi conexión a internet usando ping

Le hice algunos cambios menores, y ahora muestra datos aunque no haya llenado toda la ventana.

Esta es la última versión

#!/usr/bin/env python3

import subprocess
import sys
import re

SEQ_NUMBER_RE = re.compile(r".*icmp_seq=(\d+) ttl.*")

def report(probes, count):
  if len(probes) < count:
    count = len(probes)
  return str ( count - sum(probes[-count:]) ) 

def monitor(ip):
  probes = []
  ping = subprocess.Popen(["ping", ip], stdout=subprocess.PIPE)
  stdout = ping.stdout

  stdout.readline() # Ignore first line
  line_count = 0
  last_seq_number = 0
  while True:
    line_count +=1
    line = stdout.readline().decode()
    try:
      seq_number = int( SEQ_NUMBER_RE.match(line).group(1))
    except Exception:
      print( "!!! Failed while parsing line " + line )
      seq_number = last_seq_number
    probes.extend([0] * (seq_number - last_seq_number - 1))
    probes.append(1)
    print( "(%s) 10:%s 100:%s 1000:%s 10000:%s" % (
      line_count, report(probes, 10), report(probes, 100), report(probes, 1000), report(probes, 10000)
    ) )

    probes = probes[-10000:] # Keep memory usage bounded
    last_seq_number = seq_number

def main(argv):
  monitor(argv[1])

if __name__ == '__main__':
  main(sys.argv)

2021-03-03

pingmon en python3

Hace un tiempo hice un scriptcito en python para monitorear la conexión de red usando ping. Hoy quise usarlo de nuevo y descubrí que no anda en python3, así que lo adapté. Solo necesitaba 2 pequeños cambios:

  • print es python3 es una función, así que tuve que agregar unos paréntesis.
  • sys.stdout.readline() en python 3 devuelve un montón de bytes (en vez de un string) así que agregué .encode() para transformarlo en string

Dejo acá abajo la versión nueva:

#!/usr/bin/env python3

import subprocess
import sys
import re

SEQ_NUMBER_RE = re.compile(".*icmp_seq=(\d+) ttl.*")

def report(probes, count):
  if len(probes) < count:
    return "N/A"
  return str ( count - sum(probes[-count:]) )

def monitor(ip):
  probes = []
  ping = subprocess.Popen(["ping", ip], stdout=subprocess.PIPE)
  stdout = ping.stdout

  stdout.readline() # Ignore first line
  line_count = 0
  last_seq_number = 0
  while True:
    line_count +=1
    seq_number = int( SEQ_NUMBER_RE.match(stdout.readline().decode()).group(1))
    probes.extend([0] * (seq_number - last_seq_number - 1))
    probes.append(1)
    print( "(%s) 10:%s 100:%s 1000:%s" % (
      line_count, report(probes, 10), report(probes, 100), report(probes, 1000)
    ) )

    probes = probes[-1000:] # Keep memory usage bounded
    last_seq_number = seq_number

def main(argv):
  monitor(argv[1])

if __name__ == '__main__':
  main(sys.argv)

 

Happy hacking,
Aureliano

2019-06-04

Nuevos features de slowbreak

Estuve laburando en slowbreak, mi biblioteca para conectarse a servers de las bolsas de todo el mundo, y tiene algunas mejoras. Acá se las cuento:

  • Utilidades para leer y escribir valores. En el protocolo fix, y slowbreak, el valor de un campo es una tira de bytes. Para hacer más fácil la lectura y escritura de mensajes agregué métodos al módulo message para transformar esos bytes en valores de python. Son estos:
    • message.from_bool/ message.to_bool para leer y escribir booleanos. En fix el valor true se expresa con esta tira de bytes: b'Y'
    • message.from_int/ message.to_int para leer y escribir enteros.
    • message.from_decimal/ message.to_decimal para leer y escribir instancias de decimal.Decimal. Esto es particularmente importante para manejar los precios de las securities con las que operamos.
    • message.from_str(s, encoding='ascii')/ message.to_str(v, encoding='ascii') para leer y escribir strings. En python3 no podemos tratar a los strings como listas de bytes, así que estos métodos se hacen más importantes. Una cosa a notar es que por default usa 'ascii' como encoding. Eso hace que para la mayoría de las cosas ande de una. Si se conectan a un server que manda caracteres fuera del rango, tienen que consultar la documentación sobre el encoding soportado, ya que no está en la especificación de fix (AFAIK).
    • message.timestamp genera los timestamps en el formato adecuado para fix (tal como se usan en los tags 52 y 60). Sin parámetro genera el timestamp actual (GMT). También recibe un objeto datetime si quieren generar un timestamp de otro momento.
  • Confidencialidad de passwords. Los métodos __repr__ y pprint() de message.Message esconden el valor del tag 554 (password). Eso hace que los logs generados por slowbreak no contengan el password utilizado para conectarse al server.
  • Soporte de nombres para las apps. Las apps tienen el parámetro opcional name para darles nombre, que después se puede usar en el método app_by_name para buscar una aplicación hija con el nombre buscado. Esto hace más fácil trabajar con stacks grandes de aplicaciones.
  • Grupos sin limitación de tags. Ahora slowbreak puede parsear grupos aún cuando no sabemos cuáles son todos los tags que pueden ir incluídos. Solo se requiere el counting_tag y el start_tag. Para indicar este modo, pasen el objeto message.AllInclusive en vez de la lista de tags aceptados.
Como siempre, pueden hacer pip install slowbreak para usarlo. Todas las mejoras están en el último release.

¿Querés conectarte a servers de las bolsas del mundo? Puedo ayudarte. Podés contratarme como consultor y te ayudo a usar slowbreak para operar programáticamente.

2018-11-12

Slowbreak, haciendo una aplicación

Acabo de publicar el tercer video tutorial de slowbreak, donde explico cómo hacer una aplicación que responde a los mensajes que envía el server (AKA: acceptor).

Este tutorial anda con la última versión. Como siempre, para usar slowbreak hacé "pip install slowbreak".



2018-11-08

Segundo tutorial de slowbreak, cómo hacer mensajes de FIX

Update: Saqué al toque la versión 0.0.5, que incluye los ejemplos cuando corrés pip install

Acabo de publicar el segundo tutorial de slowbreak, que explica cómo hacer mensajes fix usando la biblioteca.


También acabo de publicar una nueva versión de slowbreak (la 0.0.4) con soporte para conectarse a servers fix 4.x. Este tutorial anda con la última versión. Como siempre, para usar slowbreak hacé "pip install slowbreak".

2018-11-03

Primer tutorial de slowbreak en video

Acabo de terminar mi primer video-tutorial de slowbreak. Ahí muestro cómo hacemos para conectarnos a un server, usando como server el ejemplo más simple de server que se puede hacer en slowbreak.


También acabo de publicar una nueva versión de slowbreak (la 0.0.3) con soporte para hacer servers (AKA, Acceptors). Este tutorial anda con la última versión. Como siempre, para usar slowbreak hacé "pip install slowbreak".

¡Hasta la próxima!