Skip to content

What it is

GitHub answers most questions about the present and almost none about the past.

The traffic API serves fourteen days and forgets. The activity feed keeps the last three hundred events, whatever their dates. Read notifications disappear within weeks. Job logs are deleted after ninety days. The star list will tell you when each star was given, but only if you ask before the list gets long enough to be expensive to walk. None of it is archived anywhere unless you archive it.

ghchronicle sweeps those surfaces on a schedule and writes every observation as a point stamped with the date the thing actually happened, so a year from now the question “how fast were we merging in July” still has an answer.

Terminal window
ghchronicle -config config.yaml

It is one Go binary with no dependencies beyond a YAML parser, and it pushes to every store it supports, so it runs wherever it can reach them: a server, a container, a scheduled workflow.

WordWhat it means here
familyOne collector, named in the configuration: actions, stars, issues. There are 34
groupA named set of families, for switching a whole area on or off: ci, security, audience. There are 8
measurementOne kind of row in the store, named gh_*: gh_star, gh_workflow_run. There are 91
pointOne row: a measurement, its tags, its fields and the date the thing happened
sweepOne pass over the families that are due, which is what the process does on a loop
backfillA run with -backfill, which walks the history instead of the increment

ghchronicle -groups prints the groups with their families, and ghchronicle -config config.yaml -list prints the repositories a sweep would cover.