Abgerufene Paketversionen
Ein Abhängigkeitsbefund sagt, dass eine Version irgendwo deklariert ist. Die Abrufstatistik sagt etwas anderes: welche Paketversionen tatsächlich heruntergeladen wurden, von welchem Abnehmer und wie kürzlich. Sie wird aus dem Registry-Zugriffslog gezählt und deckt daher deine eigenen Pakete in der fremforge-Registry ab sowie die Pakete, die deine Organisation über den Abhängigkeits-Proxy abruft, einschließlich Abrufen aus CI außerhalb von fremforge, die einen Registry-Robot verwenden.
Seit dem 2026-10-13 wird ein Download, den ein Forgejo-Actions-Job über den Abhängigkeits-Proxy macht und den der Proxy aus seinem Cache bedient, hier direkt gezählt und nicht als Ereignis im Zugriffslog gespeichert (siehe Registry-Zugriffslog). Die Abrufstatistik ist daher der Nachweis dieser Abrufe: pro UTC-Tag, Paketversion und Repository, mit den Läufen, die sie abgerufen haben.
Was als Abruf zählt
Ein Abruf ist ein erfolgreicher Download, der eine Version nennt: ein npm-Tarball, eine PyPI-Datei, ein Maven-Artefakt, ein NuGet-Paket, ein Go-Modul-Zip, eine generische oder sonstige Registry-Datei oder ein per Tag abgerufenes Container-Image. Nicht gezählt werden:
- Metadaten-Abfragen, etwa ein npm-Packument oder ein PyPI-Simple-Index;
- abgewiesene Anfragen;
- Downloads von Container-Layern, die nur einen Digest nennen.
Ein Download, den eine Richtlinie im Shadow-Modus abgewiesen hätte, aber durchgelassen hat, zählt als Abruf.
Abnehmer
Jeder Abruf wird dem Abnehmer zugeordnet, den das Zugriffslog erfasst hat:
| Art | Wer | Benannt durch |
|---|---|---|
job | Ein Job-Token von Forgejo Actions | Das Repository des Jobs, <owner>/<repo>. run_ids listet die Actions-Läufe, die die Version abgerufen haben |
robot | Ein Registry-Robot | Der Name des Robots. login enthält seinen Bot-Benutzer |
bot | Ein anderer System-Bot von fremforge | Sein Login |
user | Das Token oder die Sitzung einer Person | Ihr Login |
anonymous | Eine Anfrage ohne Zugangsdaten | Nichts |
Welche Advisories verknüpft werden
- Über den Abhängigkeits-Proxy abgerufene Versionen (npm, PyPI, Maven, NuGet
und Go) werden mit dem OSV-Advisory-Index abgeglichen, den die
Paketrichtlinie des Proxys auswertet.
Ausgewertet werden Versionsbereiche, nicht nur exakte Versionen.
sourceistadvisory_index. - Versionen deiner eigenen Registry-Pakete tragen die offenen Befunde dieser
Paketdatei, dieselben Befunde, die die Paketrichtlinie liest. Verworfene und
behobene Befunde werden weggelassen.
sourceistpackage_findings. - Container-Images werden gezählt, aber diese Liste zeigt für sie keine Advisories. Image-Befunde stehen auf den Seiten zum Image-Scanning.
In der Konsole
Öffne in der Org-Administration Sicherheit › Komponenten › Abgerufene Versionen. Die Seite listet dieselben Versionen wie die API, mit derselben Reihenfolge und denselben Filtern: Paketname, Zeitraum (heute oder die letzten 7, 30, 90 oder 365 Tage), Mindestschweregrad, Ökosystem, Quelle (deine eigene Registry oder der Abhängigkeits-Proxy), Abnehmertyp und Abnehmer. Hake Versionen ohne bekannten Hinweis einbeziehen an, um jede abgerufene Version zu sehen, nicht nur die verwundbaren. Jede Zeile zeigt den schlimmsten Schweregrad, bis zu drei Advisories mit einer korrigierten Version, die Zahl der Abrufe nach Abnehmertyp, die häufigsten Abnehmer und wann die Version zuletzt und zuerst abgerufen wurde. Die Zeile über der Tabelle sagt, bis wann Zugriffsereignisse gezählt wurden. Nächste Seite und Erste Seite blättern durch die Liste; CSV exportieren lädt jede passende Version mit den aktuellen Filtern herunter, in denselben Spalten wie das CSV der API.
Mit der API auslesen
Mit einem API-Token, das components:read oder findings:read trägt:
curl -sS -H "Authorization: Bearer $FFP_TOKEN" \
"https://frem.sh/_app/api/v1/orgs/acme/components/pulled?days=30&min_severity=high"Standardmäßig enthält die Liste nur verwundbare Versionen, die schwerwiegendsten
zuerst und dann die zuletzt abgerufenen. Jeder Eintrag hat die Version und ihre
purl, den schlimmsten severity, die advisories mit ihren korrigierten
Versionen, die Gesamtzahl pulls, die Abrufe pro Abnehmerart, first_seen_at
und last_seen_at sowie bis zu zehn consumers mit eigenen Zählern und
Zeitpunkten. Ein Abnehmer vom Typ job hat zusätzlich run_ids: bis zu 20
Actions-Lauf-IDs (GITHUB_RUN_ID), die die Version im Zeitraum abgerufen haben,
die neuesten zuerst.
| Filter | Bedeutung |
|---|---|
days | Wie viele UTC-Tage zurück, heute eingeschlossen: 1 bis 730, Standard 30 |
vulnerable | true (Standard) für Versionen mit offener Advisory; false für jede abgerufene Version |
min_severity | low, medium, high oder critical |
ecosystem | Der Pakettyp: npm, pypi, maven, nuget, go, container, … |
origin | registry (deine eigenen Pakete) oder proxy (der Abhängigkeits-Proxy) |
name | Ein Paketname, exakt |
consumer_kind | job, robot, bot, user oder anonymous |
consumer | Ein Repository (owner/name), ein Robot-Name oder ein Login |
run_id | Eine Actions-Lauf-ID (GITHUB_RUN_ID): nur die Versionen, die dieser Lauf abgerufen hat |
Um zu sehen, was ein Build abgerufen hat, übergib seine Lauf-ID mit vulnerable=false:
curl -sS -H "Authorization: Bearer $FFP_TOKEN" \
"https://frem.sh/_app/api/v1/orgs/acme/components/pulled?run_id=123456&vulnerable=false&days=7"Übergib den next_cursor einer Seite als cursor, um mit denselben Filtern die
nächste Seite zu erhalten, und höre auf, wenn er null ist. Eine Seite enthält
bis zu 500 Versionen (limit). Mit format=csv erhältst du jede passende
Version als CSV. Eine Abfrage, auf die mehr als 50.000 Versionen passen,
antwortet mit 413 too-many-rows; schränke sie ein. Die vollständige Struktur
steht in der API-Referenz.
Wie aktuell sie ist und wie lange sie aufbewahrt wird
Die Abrufstatistik wird jede Stunde aus dem Zugriffslog verdichtet.
window.rolled_up_to in der Antwort sagt, bis wann Zugriffsereignisse gezählt
wurden. CI-Downloads, die aus dem Cache des Abhängigkeits-Proxys bedient werden,
kommen hinzu, sobald sie eintreffen, ohne auf die stündliche Verdichtung zu
warten.
Die Abrufstatistik folgt der
Aufbewahrung von Nachweisen des
Zugriffslogs und wird vom selben täglichen Job gelöscht: Die Zählungen eines
Tages entfallen, sobald der neueste Download, den sie zählen, die Aufbewahrung
access_log überschritten hat, bei CI-Abrufen über den Abhängigkeits-Proxy die
Aufbewahrung access_log_ci. Solange ein Legal Hold besteht, wird nichts
gelöscht.
Im Datenexport
Jeder Datenexport enthält die Abrufstatistik als
metadata/pulled-versions.ndjson, eine Zeile pro UTC-Tag, Paketversion und
Abnehmer, also die Zeilen, die diese Seite aufsummiert. Siehe
Export-Schema. Die Advisories stehen nicht
in der Datei: Sie werden beim Lesen der Liste aus Advisory-Daten verknüpft, die
sich mit der Zeit ändern.
Grenzen
- Ein Abruf ist kein Deployment. Eine Version kann von einem Build abgerufen und nie ausgeliefert werden, oder einmal abgerufen und monatelang zwischengespeichert.
- Abrufe aus Caches außerhalb von fremforge sind nicht sichtbar. Gezählt werden nur Anfragen, die die fremforge-Registry oder den Abhängigkeits-Proxy erreichen.
- Teams werden nicht erfasst. Der Abruf eines Benutzers wird dem Benutzer zugeordnet.
- Lauf-IDs werden ab dem 2026-10-13 aufbewahrt. Pro UTC-Tag, Paketversion und Repository werden die 100 neuesten Läufe aufbewahrt; ein Repository, das mehr als 100 Builds am Tag ausführt, die dieselbe Version abrufen, behält die Zahl aller Abrufe, aber nur die IDs der 100 neuesten Läufe.
- Die Abrufstatistik erfasst nicht, welcher Job eines Laufs eine Version abgerufen hat, und auch nicht den genauen Zeitpunkt jedes Abrufs, nur den ersten und letzten des Tages.