Zum Hauptinhalt springen

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:

ArtWerBenannt durch
jobEin Job-Token von Forgejo ActionsDas Repository des Jobs, <owner>/<repo>. run_ids listet die Actions-Läufe, die die Version abgerufen haben
robotEin Registry-RobotDer Name des Robots. login enthält seinen Bot-Benutzer
botEin anderer System-Bot von fremforgeSein Login
userDas Token oder die Sitzung einer PersonIhr Login
anonymousEine Anfrage ohne ZugangsdatenNichts

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. source ist advisory_index.
  • Versionen deiner eigenen Registry-Pakete tragen die offenen Befunde dieser Paketdatei, dieselben Befunde, die die Paketrichtlinie liest. Verworfene und behobene Befunde werden weggelassen. source ist package_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.

FilterBedeutung
daysWie viele UTC-Tage zurück, heute eingeschlossen: 1 bis 730, Standard 30
vulnerabletrue (Standard) für Versionen mit offener Advisory; false für jede abgerufene Version
min_severitylow, medium, high oder critical
ecosystemDer Pakettyp: npm, pypi, maven, nuget, go, container, …
originregistry (deine eigenen Pakete) oder proxy (der Abhängigkeits-Proxy)
nameEin Paketname, exakt
consumer_kindjob, robot, bot, user oder anonymous
consumerEin Repository (owner/name), ein Robot-Name oder ein Login
run_idEine 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.