Source code for top.web.colour

"""HTTP task colouring.

`See the colour map <https://rich.readthedocs.io/en/stable/appendix/colors.html#appendix-colors>`_.
"""
import datetime
from typing import Optional

from top.web.task import HTTPTask


[docs]def colour_row_by_status(t: HTTPTask): """Set row colour by its HTTP status. """ return map_status_code_colour(t, t.status_code)
[docs]def colour_row_by_duration(t: HTTPTask): """Set row colour by its duration. """ duration = t.get_duration().total_seconds() return map_duration_colour(t, duration)
[docs]def map_duration_colour(task: HTTPTask, duration: Optional[datetime.timedelta]): """Get row/value colour for request duration.""" if not duration: return "white" s = duration.total_seconds() if s < 1.0: return "green" elif s < 2.5: return "yellow" else: return "red"
[docs]def map_status_code_colour(t: HTTPTask, status_code: Optional[int]): """Set row colour by its HTTP status. """ if not status_code: # Still active return "white" elif status_code < 300: # 200-299 good return "green" elif status_code < 400: # 300-399 redirect return "yellow" elif status_code < 500: # 400-499 redirect return "red" elif status_code >= 500 and status_code < 600: # 500+ bad return "red" else: # No idea? return "bright_magenta"