ghchronicle
Cada una lleva la fecha en que ocurrió la cosa, que es lo que hace que una pregunta sobre julio pasado siga teniendo respuesta.
Qué es
GitHub responde la mayoría de las preguntas sobre el presente y casi ninguna sobre el pasado. La API de tráfico sirve catorce días y olvida. El feed de actividad guarda los últimos trescientos eventos, sean de cuando sean. Las notificaciones leídas desaparecen. Los logs de los jobs se borran a los noventa días.
ghchronicle recorre esas superficies con una cadencia y escribe cada observación como un punto fechado, en la base de datos que ya tengas. Un binario de Go, sin más dependencia que un analizador de YAML.
Para quién es
- Para quien ya tenga una base de datos de series temporales y un Grafana
- Para quien mantenga proyectos y quiera conservar tráfico y estrellas más allá de la ventana de GitHub
- Para equipos que quieran tiempos de fusión, carga de revisión y coste de CI como historia y no como un número que se reinicia
- Para quien quiera sacar sus datos de GitHub antes de que GitHub los descarte
Qué no es
- No es un servicio alojado: corre en tu máquina, con tu token
- No sustituye a GitHub Insights, que responde sobre el ahora
- No recupera lo que GitHub ya ha descartado: empieza el día que lo ejecutas
- No es un generador de insignias, aunque sepa dibujar una
Cómo se usa
Tres pasos, y la primera pasada aterriza en tu base de datos.
Instalar
Un binario, una release o la imagen de contenedor.
go install github.com/jmrplens/ghchronicle/cmd/ghchronicle@latestConfigurar
La configuración mínima que hace algo. Cada ${VAR} se lee del entorno, así que este fichero no guarda secretos.
github: token: ${GITHUB_TOKEN}targets: user: your-loginsinks: influxdb: url: http://localhost:8181 bucket: githubRecoger
Lo que aterriza en la base de datos. Fíjate en las marcas de tiempo: la estrella está fechada en 2024, no hoy, porque es cuando se dio.
gh_star,repo=parser,user=someone starred=1i 1731590400000000000gh_traffic,repo=parser,kind=views count=142i,uniques=61i 1757376000000000000gh_pull_request,repo=parser,number=318,state=MERGED churn=214i,seconds_to_merge=5820i 1757462400000000000Cómo está hecho
Cuatro ideas, y la segunda es de la que se derivan las demás.
Recorrer
Cada familia de métricas tiene su cadencia, porque se mueven a velocidades muy distintas: las ejecuciones de workflows cada cuarto de hora, el calendario de contribuciones cada doce.
Fechar
Un punto lleva el momento en que ocurrió la cosa, no el momento en que se recogió. Eso es lo que hace que volver a recoger converja en lugar de acumular copias.
Enviar por push
Aquí nada se recoge por scrape. Envía por push a InfluxDB, PostgreSQL, Graphite, Elasticsearch, Prometheus, OpenTelemetry, Loki, Telegraf, un fichero o cualquier cosa a la que llegue Telegraf, así que corre donde pueda alcanzarlos.
Dibujar
Una especificación de dashboard, renderizada una vez por almacén. Los mismos paneles con la base de datos que elijas, y donde un almacén no puede responder con honestidad, el panel lo dice.