Přeskočit na obsah

Tato stránka byla automaticky přeložena z angličtiny, jediného jazyka, ve kterém se tento web píše. Číst originál.

HTTP API: served

Zda nasazení servíruje commit, který mělo: identita buildu, kterou web servíruje, čtená zvenčí tak, jak ji čte návštěvník, posuzovaná podle obsažení commitu a zaznamenaná tak, aby ji pozdější čtenář mohl posoudit znovu. Prochází jen `served`; web, který nebyl dostupný, identita, kterou nešlo přečíst, build z necommitnutého stromu a servírovaný commit, který tento klon nemá, jsou každý nezodpovězená otázka, nikdy ne ano. Pozorování sahá na síť a je příkazem důvěryhodného příkazového řádku; čtení zaznamenaného stavu je čtení na každém povrchu.

Vykresleno z docs/generated/openapi.json, který spustitelný soubor generuje ze svého registru schopností a CI jej odmítne, je-li zastaralý. Surový dokument je na /openapi.json; běžící server servíruje stejný dokument na vlastní /openapi.json a Swagger UI na /swagger.

served

Zda nasazení servíruje commit, který mělo: identita buildu, kterou web servíruje, čtená zvenčí tak, jak ji čte návštěvník, posuzovaná podle obsažení commitu a zaznamenaná tak, aby ji pozdější čtenář mohl posoudit znovu. Prochází jen `served`; web, který nebyl dostupný, identita, kterou nešlo přečíst, build z necommitnutého stromu a servírovaný commit, který tento klon nemá, jsou každý nezodpovězená otázka, nikdy ne ano. Pozorování sahá na síť a je příkazem důvěryhodného příkazového řádku; čtení zaznamenaného stavu je čtení na každém povrchu.

GET /api/v1/served served.show

Co každý deployment naposledy obsluhoval

Nejnovější zaznamenané pozorování každého nasazení, znovu posouzené vůči commitu (HEAD, pokud není pojmenován jiný). Záznam dál dokazuje každý commit, který jeho servírovaný build obsahuje, a přestane dokazovat ve chvíli, kdy dotazovaný commit mezi nimi není; záznam, který nic nepřijal, nedokazuje nic. Nepoužívá síť a nic nezapisuje.

  • query
  • behaviorally_verified
  • vyžaduje se měření výkonu
  • cache vypnuta
  • nástroj MCP majordomus_served
  • Zdroj MCP {"name": "served", "uri": "majordomus://served"}
  • $ served show

Parametry dotazu

názevtyppovinnépopispříklady
commit string ne Commit, proti kterému se každý záznam znovu posuzuje, jakákoli revize, kterou git rozliší; bez hodnoty `HEAD`. pages-against-head: "HEAD"
nasazení string ne Pouze toto nasazení. pages-against-head: "pages"

Vyzkoušejte

Port je ten, který server zalogoval; 8741 je ten, o který žádá jako první. Hodnoty jsou první příklad operace.

curl -s "http://127.0.0.1:8741/api/v1/served?commit=HEAD&deployment=pages"

Testováno v apps/majordomus-cli/tests/http_serve.rs, který přehrává routu s těmito hodnotami proti serveru na skutečném socketu.

Odpovědi

statustělovýznam
200 ServedStanding Co každé nasazení naposledy obsluhovalo: výsledek.
400 ErrorBody invalid_input: Vstup neodpovídá schématu: parametr špatného typu, neznámý parametr nebo hodnota, kterou schopnost odmítne.
404 ErrorBody not_found: Vstup pojmenovává něco, co repozitář nemá.
500 ErrorBody internal: Schopnost selhala z vlastního důvodu; zpráva ho pojmenovává.
výchozí ErrorBody Jakékoli jiné selhání, které transport hlásí: 405 method_not_allowed pro jinou metodu na této cestě, 400 invalid_input pro tělo, které není objektem JSON.

Schémata

Komponenty, které používají jen operace tohoto tagu. Každý řádek je pole daného typu, jeho doc komentář je popis; typ vlastněný jinou stránkou na ni odkazuje.

BuildIdentity

object
Identita buildu, kterou nasazení poskytuje, tak daleko, jak se na ni tento modul spoléhá. Ostatní pole poskytovaného dokumentu se ignorují, ne odmítají: dokument píše jiný program a pole, které přidá, není poškození.

use majordomus_cli::served::BuildIdentity;
let id = BuildIdentity {
    commit: "a".repeat(40),
    dirty: false,
    source_version: Some("0.7.0".into()),
    source_hash: None,
};
// what is judged is the commit and whether the tree it was built from was committed
assert_eq!(id.commit.len(), 40);
assert!(!id.dirty);
vlastnosttyppovinnépopis
commit string ano Celý commit, ze kterého byl servírovaný build vytvořen.
špinavé boolean ano Zda strom, z něhož byl sestaven, měl necommitnuté změny. Špinavý build jmenuje commit, kterému se nerovná, takže žádný commit nedokazuje.
source_version string | null ne Verze, kterou sestavení uvádí, pokud nějakou uvádí.
source_hash string | null ne Otisk kanonických vstupů webu, pokud ho sestavení uvádí.

Používá Observation

DeploymentStanding

object
Nejnovější záznam jednoho nasazení a co dokazuje o dotazovaném commitu. Nese se obojí: zaznamenané posouzení je to, co bylo viděno, now je to, co stále dokazuje.

use majordomus_cli::capability::builtin::served::DeploymentStanding;
use majordomus_cli::served::ServedVerdict;
let json = r#"{"deployment":"pages","observation":{"schema":"majordomus.served-observation/v1",
  "deployment":"pages","url":"https://majordomus.dev/build.json",
  "expected":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","verdict":"served",
  "reason":"the deployment serves aaaaaaaaaaaa","at":"1970-01-01T00:00:00Z"},
  "now":{"verdict":"stale","reason":"it does not contain bbbbbbbbbbbb"}}"#;
let s: DeploymentStanding = serde_json::from_str(json).unwrap();
// seen as served, and no longer proving the commit asked about
assert_eq!(s.observation.judgement.verdict, ServedVerdict::Served);
assert_eq!(s.now.verdict, ServedVerdict::Stale);
vlastnosttyppovinnépopis
nasazení string ano Název nasazení.
pozorování Observation → Observation ano Jeho nejnovější záznam.
nyní Judgement → Judgement ano Ten záznam znovu posouzený vůči commitu, na který se ptáme. To, ne zaznamenaný úsudek, je to, podle čeho čtenář jedná.

Používá ServedStanding

Posouzení

object
Posouzení jedné poskytované identity proti jednomu očekávanému commitu, s důvodem. Důvod putuje s verdiktem, aby každý povrch mohl říct proč, aniž by jej odvozoval znovu.

use majordomus_cli::served::{judge, Fetched, Judgement, ServedVerdict};
let j: Judgement = judge(&Err(Fetched::Unreachable("timeout".into())), &"a".repeat(40), &fake());
assert_eq!(j.verdict, ServedVerdict::Unreachable);
assert!(j.reason.contains("timeout"));
#### use majordomus_cli::served::Ancestry;
#### struct N; impl Ancestry for N {
####     fn has(&self, _: &str) -> Option<bool> { Some(true) }
####     fn contains(&self, _: &str, _: &str) -> Option<bool> { Some(true) }
#### }
#### fn fake() -> impl Ancestry { N }
vlastnosttyppovinnépopis
verdikt ServedVerdict → ServedVerdict ano Verdikt.
důvod string ano Proč, v jednom řádku, podle kterého lze jednat.

Používá DeploymentStanding

Pozorování

object
Jedno pozorování jednoho nasazení, tak jak bylo zaznamenáno: na co se ptalo, co bylo servírováno, co bylo posouzeno a kdy. Vše potřebné k jeho opětovnému posouzení je v záznamu, což umožňuje Observation::rejudge odpovídat bez zkoumání.

use majordomus_cli::served::{observe, Fetch, Fetched, GitAncestry, Observation, OBSERVATION_SCHEMA};
use std::{path::Path, time::SystemTime};
struct None_;
impl Fetch for None_ {
    fn fetch(&self, _: &str) -> Fetched { Fetched::Unreachable("no route".into()) }
}
let git = GitAncestry { root: Path::new(env!("CARGO_MANIFEST_DIR")) };
let o: Observation = observe("pages", "https://s", "build.json", &"a".repeat(40), &None_,
                              &git, SystemTime::UNIX_EPOCH);
assert_eq!(o.schema, OBSERVATION_SCHEMA);
assert_eq!(o.url, "https://s/build.json");
assert_eq!(o.at, "1970-01-01T00:00:00Z");
vlastnosttyppovinnépopis
schema string ano Vždy OBSERVATION_SCHEMA.
nasazení string ano Které nasazení: jméno, pod kterým je volající pozoroval (pages, nebo id objektu nasazení).
url string ano Sondované identity URL.
očekáváno string ano Očekávaný commit, plný.
served BuildIdentity | null → BuildIdentity ne Co bylo servírováno, když byla přijata identita buildu.
verdikt ServedVerdict → ServedVerdict ano Verdikt.
důvod string ano Proč, v jednom řádku, podle kterého lze jednat.
v string ano Kdy, RFC 3339 UTC.

Používá DeploymentStanding

ServedStanding

object
Stav každého nasazení vůči jednomu commitu: odpověď, kterou dává served.show na příkazové řádce, přes HTTP a klientovi MCP, z jedné derivace.

use majordomus_cli::capability::builtin::served::{standing, ServedStanding};
use majordomus_cli::served::{Ancestry, OBSERVATIONS_PATH};
#### struct A; impl Ancestry for A {
####     fn has(&self, _: &str) -> Option<bool> { Some(true) }
####     fn contains(&self, _: &str, _: &str) -> Option<bool> { Some(true) } }
let dir = tempfile::tempdir().unwrap();
let s: ServedStanding = standing(dir.path(), &"a".repeat(40), None, &A);
assert_eq!(s.observations, OBSERVATIONS_PATH);
assert!(s.deployments.is_empty(), "nothing observed yet");
assert_eq!(s.unreadable, 0);
vlastnosttyppovinnépopis
očekáváno string ano Úplný commit, proti kterému byl každý záznam znovu posouzen.
pozorování string ano Soubor lokální pro checkout, z něhož byly záznamy přečteny.
nečitelné integer (uint) ano Řádky tohoto souboru, které nebyly čitelnými pozorováními.
nasazení pole DeploymentStanding → DeploymentStanding ano Jedna položka na pozorované nasazení, v pořadí podle názvu.

Používá served.show

ServedVerdict

"served" | "stale" | "unreachable" | "malformed" | "dirty" | "undecided"
Co pozorování říká o očekávaném commitu. Důkazem je jen ServedVerdict::Served; ostatních pět je každé jiným důvodem, proč otázka nebyla zodpovězena ano.

use majordomus_cli::served::ServedVerdict;
// a measured no and an unanswered question are never spelled the same
assert!(ServedVerdict::Served.passes());
assert_eq!(ServedVerdict::Stale.exit_code(), 10);
assert_eq!(ServedVerdict::Unreachable.exit_code(), 12);
  • servedObsluhovaný build je očekávaný commit nebo ho obsahuje. Jediný vyhovující verdikt.
  • staleObsluhovaný build neobsahuje očekávaný commit: nasazení zaostává.
  • unreachableNic se nepřijalo. Nasazení se neměřilo.
  • malformedNěco bylo přijato a není to identita sestavení.
  • dirtyServírované sestavení vzniklo z necommitnutého stromu, takže neprokazuje žádný commit.
  • undecidedServírovaný commit není v tomto klonu, nebo se git nepodařilo dotázat; zahrnutí zůstává nerozhodnuté. Stažení vzdáleného repozitáře to obvykle změní na odpověď.

Používá Judgement Observation

Prohledává názvy a popisy všech stránek, které tento web publikuje.