Skip to content

Commit

Permalink
Add GitHub CI app info to /summary
Browse files Browse the repository at this point in the history
  • Loading branch information
fajpunk committed Jul 9, 2024
1 parent 6e37b80 commit 30e57b3
Show file tree
Hide file tree
Showing 4 changed files with 128 additions and 5 deletions.
17 changes: 13 additions & 4 deletions src/mobu/handlers/external.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,13 @@

from ..config import config
from ..dependencies.context import RequestContext, context_dependency
from ..dependencies.github import maybe_ci_manager_dependency
from ..models.flock import FlockConfig, FlockData, FlockSummary
from ..models.index import Index
from ..models.monkey import MonkeyData
from ..models.solitary import SolitaryConfig, SolitaryResult
from ..models.summary import CombinedSummary
from ..services.github_ci.ci_manager import CiManager

external_router = APIRouter(route_class=SlackRouteErrorHandler)
"""FastAPI router for all external handlers."""
Expand Down Expand Up @@ -239,10 +242,16 @@ async def put_run(
@external_router.get(
"/summary",
response_class=FormattedJSONResponse,
response_model=list[FlockSummary],
summary="Summary of statistics for all flocks",
response_model=CombinedSummary,
summary="Summary of all app state",
)
async def get_summary(
context: Annotated[RequestContext, Depends(context_dependency)],
) -> list[FlockSummary]:
return context.manager.summarize_flocks()
ci_manager: Annotated[
CiManager | None, Depends(maybe_ci_manager_dependency)
],
) -> CombinedSummary:
return CombinedSummary(
flocks=context.manager.summarize_flocks(),
ci_manager=ci_manager.summarize() if ci_manager else None,
)
97 changes: 97 additions & 0 deletions src/mobu/models/ci_manager.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
"""Models for CiManager."""

from pydantic import BaseModel, Field, HttpUrl

from .user import User

__all__ = [
"CiJobSummary",
"CiManagerSummary",
"CiWorkerSummary",
]


class CiJobSummary(BaseModel):
"""Information about a job."""

commit_url: HttpUrl = Field(
...,
title="Commit URL",
description="GitHub URL to the commit being worked on",
examples=[
(
"https://github.com/lsst-sqre/mobu/commit/"
"dd534286bb932dd22d61f97f960a5985b7513ec8"
)
],
)


class CiWorkerSummary(BaseModel):
"""Information about a running worker."""

user: User = Field(
...,
title="User",
description="User that the worker works as",
examples=[
User(username="someuser", uidnumber=None, gidnumber=None),
User(username="someuser", uidnumber=123, gidnumber=456),
],
)

num_processed: int = Field(
...,
title="Number of jobs processed",
description=(
"Number of jobs this worker has processed since mobu started"
),
examples=[123],
)

current_job: CiJobSummary | None = Field(
...,
title="Current job summary",
description="The job the worker is currently running, if any",
examples=[
CiJobSummary(
commit_url=HttpUrl(
"https://github.com/lsst-sqre/mobu/commit/"
"dd534286bb932dd22d61f97f960a5985b7513ec8"
),
)
],
)


class CiManagerSummary(BaseModel):
"""Information about the CiManager."""

workers: list[CiWorkerSummary] = Field(
...,
title="Background workers",
description="The workers being managed",
examples=[
[
CiWorkerSummary(
user=User(
username="someuser", uidnumber=123, gidnumber=456
),
num_processed=123,
current_job=CiJobSummary(
commit_url=HttpUrl(
"https://github.com/lsst-sqre/mobu/commit/"
"dd534286bb932dd22d61f97f960a5985b7513ec8"
),
),
)
]
],
)

num_queued: int = Field(
...,
title="Queued jobs",
description="Number of jobs waiting for a free worker",
examples=[123],
)
17 changes: 17 additions & 0 deletions src/mobu/models/summary.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
"""Combined summary of different functionalities."""

from pydantic import BaseModel, Field

from .ci_manager import CiManagerSummary
from .flock import FlockSummary


class CombinedSummary(BaseModel):
"""Summary of all app state."""

flocks: list[FlockSummary] = Field(
..., title="Info about all running flocks"
)
ci_manager: CiManagerSummary | None = Field(
None, title="Info about GitHub CI workers"
)
2 changes: 1 addition & 1 deletion tests/handlers/flock_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ async def test_start_stop_refresh(

r = await client.get("/mobu/summary")
assert r.status_code == 200
assert r.json() == [summary]
assert r.json() == {"flocks": [summary], "ci_manager": None}

r = await client.get("/mobu/flocks/other")
assert r.status_code == 404
Expand Down

0 comments on commit 30e57b3

Please sign in to comment.