Pollern kontrollerar registryt bara var POLL_INTERVAL (6 h som standard). Har man precis pushat en ny image eller vill se om en tagg har fått en ny digest, får man i dag vänta på nästa cykel. Lösningen är en knapp på service detail som kör samma kontroll direkt, men bara för den tjänsten.
Design
En knapp Check now bredvid Update / Make auto i templates/service.html. Den skickar POST /services/{id}/poll med csrf_token.
Requesten väntar på registryt och svarar med 303 till /services/{id}. Det är samma mönster som setMode/acceptRunning.
Kontrollen gör samma sak som en cykel, men bara för den här tjänsten:
reg.Digest (HEAD) på den följda repo:tag. Därefter record: SetAvailable med SourcePoll, SetLastTagDigest och SetPollError vid fel.
Om tjänsten står i auto startas ett jobb via startAuto (TriggerPoll). Samma spärrar gäller som för pollern: drift (ReasonDrifted), last_tag_digest och desired_ref.
Om taggen är tagver.Comparable hämtas tags/list för repot och SetNewer anropas.
Bara den här tjänsten får nya värden. Andra tjänster som följer samma repo:tag uppdateras först vid nästa cykel.
Knappen är inaktiverad med en tooltip när tjänsten har en SkipReason, alltså när den inte följer någon tagg, är byggd från källkod eller saknar digest. Det är samma mönster som AutoBlocked.
Tekniska noteringar
internal/master/poller/poller.go: Cycle (135–177) går igenom alla tjänster. record (348–373), suggest (387–407), startAuto (430–452) och syncNewer (284–345) arbetar redan per ref, per tjänst eller per repo. Lägg till en exporterad metod, t.ex. PollService(ctx, id), som återanvänder dem med en lista som bara innehåller en tjänst. Cycle ska inte byggas om.
syncNewer tar i dag hela tjänstelistan. Dela ut logiken för ett enda repo så att den kan anropas för en tjänst.
Cycle har ingen mutex. Om en manuell kontroll körs samtidigt som Run skriver båda samma värden, och update_jobs_one_active stoppar dubbla jobb. Därför behövs ingen låsning.
web-paketet får ett nytt interface på konsumentsidan (t.ex. web.Poller), och pollern skickas in från cmd/master/main.go (173–181).
Timeouts från pollern gäller även här: 30 s per digest, 60 s per tagglista.
Registryt kontaktas fortfarande bara med HEAD för manifest. tags/list är en GET men räknas inte som pull hos Docker Hub, så knappen påverkar inte rate limit.
Tester: tabelldrivna tester av PollService med falsk store/registry/jobs (auto/manual, drift, registryfel, SkipReason), och ett handlertest för routen (CSRF, 303, okänt id ger 404).
Scope
Ingår: knapp, route, PollService i pollern, tester, en rad i README.
Ingår inte: kontroll av alla tjänster från översikten, ett asynkront svar via SSE, rate limiting eller debounce på knappen, och att uppdatera andra tjänster med samma ref.
## Beskrivning
Pollern kontrollerar registryt bara var `POLL_INTERVAL` (6 h som standard). Har man precis pushat en ny image eller vill se om en tagg har fått en ny digest, får man i dag vänta på nästa cykel. Lösningen är en knapp på service detail som kör samma kontroll direkt, men bara för den tjänsten.
## Design
- En knapp **Check now** bredvid Update / Make auto i `templates/service.html`. Den skickar `POST /services/{id}/poll` med `csrf_token`.
- Requesten väntar på registryt och svarar med 303 till `/services/{id}`. Det är samma mönster som `setMode`/`acceptRunning`.
- Kontrollen gör samma sak som en cykel, men bara för den här tjänsten:
1. `reg.Digest` (HEAD) på den följda `repo:tag`. Därefter `record`: `SetAvailable` med `SourcePoll`, `SetLastTagDigest` och `SetPollError` vid fel.
2. Om tjänsten står i `auto` startas ett jobb via `startAuto` (`TriggerPoll`). Samma spärrar gäller som för pollern: drift (`ReasonDrifted`), `last_tag_digest` och `desired_ref`.
3. Om taggen är `tagver.Comparable` hämtas `tags/list` för repot och `SetNewer` anropas.
- Bara den här tjänsten får nya värden. Andra tjänster som följer samma `repo:tag` uppdateras först vid nästa cykel.
- Knappen är inaktiverad med en tooltip när tjänsten har en `SkipReason`, alltså när den inte följer någon tagg, är byggd från källkod eller saknar digest. Det är samma mönster som `AutoBlocked`.
## Tekniska noteringar
- `internal/master/poller/poller.go`: `Cycle` (135–177) går igenom alla tjänster. `record` (348–373), `suggest` (387–407), `startAuto` (430–452) och `syncNewer` (284–345) arbetar redan per ref, per tjänst eller per repo. Lägg till en exporterad metod, t.ex. `PollService(ctx, id)`, som återanvänder dem med en lista som bara innehåller en tjänst. `Cycle` ska inte byggas om.
- `syncNewer` tar i dag hela tjänstelistan. Dela ut logiken för ett enda repo så att den kan anropas för en tjänst.
- `Cycle` har ingen mutex. Om en manuell kontroll körs samtidigt som `Run` skriver båda samma värden, och `update_jobs_one_active` stoppar dubbla jobb. Därför behövs ingen låsning.
- `web`-paketet får ett nytt interface på konsumentsidan (t.ex. `web.Poller`), och pollern skickas in från `cmd/master/main.go` (173–181).
- Timeouts från pollern gäller även här: 30 s per digest, 60 s per tagglista.
- Registryt kontaktas fortfarande bara med HEAD för manifest. `tags/list` är en GET men räknas inte som pull hos Docker Hub, så knappen påverkar inte rate limit.
- Tester: tabelldrivna tester av `PollService` med falsk store/registry/jobs (auto/manual, drift, registryfel, `SkipReason`), och ett handlertest för routen (CSRF, 303, okänt id ger 404).
## Scope
**Ingår:** knapp, route, `PollService` i pollern, tester, en rad i README.
**Ingår inte:** kontroll av alla tjänster från översikten, ett asynkront svar via SSE, rate limiting eller debounce på knappen, och att uppdatera andra tjänster med samma ref.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Beskrivning
Pollern kontrollerar registryt bara var
POLL_INTERVAL(6 h som standard). Har man precis pushat en ny image eller vill se om en tagg har fått en ny digest, får man i dag vänta på nästa cykel. Lösningen är en knapp på service detail som kör samma kontroll direkt, men bara för den tjänsten.Design
templates/service.html. Den skickarPOST /services/{id}/pollmedcsrf_token./services/{id}. Det är samma mönster somsetMode/acceptRunning.reg.Digest(HEAD) på den följdarepo:tag. Därefterrecord:SetAvailablemedSourcePoll,SetLastTagDigestochSetPollErrorvid fel.autostartas ett jobb viastartAuto(TriggerPoll). Samma spärrar gäller som för pollern: drift (ReasonDrifted),last_tag_digestochdesired_ref.tagver.Comparablehämtastags/listför repot ochSetNeweranropas.repo:taguppdateras först vid nästa cykel.SkipReason, alltså när den inte följer någon tagg, är byggd från källkod eller saknar digest. Det är samma mönster somAutoBlocked.Tekniska noteringar
internal/master/poller/poller.go:Cycle(135–177) går igenom alla tjänster.record(348–373),suggest(387–407),startAuto(430–452) ochsyncNewer(284–345) arbetar redan per ref, per tjänst eller per repo. Lägg till en exporterad metod, t.ex.PollService(ctx, id), som återanvänder dem med en lista som bara innehåller en tjänst.Cycleska inte byggas om.syncNewertar i dag hela tjänstelistan. Dela ut logiken för ett enda repo så att den kan anropas för en tjänst.Cyclehar ingen mutex. Om en manuell kontroll körs samtidigt somRunskriver båda samma värden, ochupdate_jobs_one_activestoppar dubbla jobb. Därför behövs ingen låsning.web-paketet får ett nytt interface på konsumentsidan (t.ex.web.Poller), och pollern skickas in fråncmd/master/main.go(173–181).tags/listär en GET men räknas inte som pull hos Docker Hub, så knappen påverkar inte rate limit.PollServicemed falsk store/registry/jobs (auto/manual, drift, registryfel,SkipReason), och ett handlertest för routen (CSRF, 303, okänt id ger 404).Scope
Ingår: knapp, route,
PollServicei pollern, tester, en rad i README.Ingår inte: kontroll av alla tjänster från översikten, ett asynkront svar via SSE, rate limiting eller debounce på knappen, och att uppdatera andra tjänster med samma ref.