cznic/public/: fred-diagonal-3.0.0 metadata and description

Simple index

Diagonal - a client library for Fred service diagnostics

author Jan MusĂ­lek
author_email jan.musilek@nic.cz
classifiers
  • Development Status :: 2 - Pre-Alpha
  • Intended Audience :: Developers
  • License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
  • Operating System :: OS Independent
  • Programming Language :: Python
  • Programming Language :: Python :: 3.9
  • Programming Language :: Python :: 3.10
  • Programming Language :: Python :: 3.11
  • Programming Language :: Python :: 3.12
  • Topic :: Internet
  • Topic :: Office/Business
  • Topic :: Software Development :: Libraries
  • Topic :: Software Development :: Libraries :: Python Modules
  • Topic :: Utilities
  • Typing :: Typed
license GPLv3+
provides_extras types
requires_dist
  • fred-api-diagnostics~=1.0.1
  • fred-types~=2.0
  • fred-frgal~=4.1
  • importlib-metadata; python_version < "3.10"
  • doc8; extra == "quality"
  • mypy; extra == "quality"
  • ruff; extra == "quality"
  • types-protobuf; extra == "types"
  • types-pytz; extra == "types"
requires_python ~=3.9

Because this project isn't in the mirror_whitelist, no releases from root/pypi are included.

File Tox results History
fred_diagonal-3.0.0-py3-none-any.whl
Size
26 KB
Type
Python Wheel
Python
3
fred_diagonal-3.0.0.tar.gz
Size
25 KB
Type
Source

A library for FRED service diagnostics, usable for both the client & server side.

Client usage

DiagnosticsClient is a low-level client to obtain particular information from a single server.

from diagonal import DiagnosticsClient

async def print_localhost():
    client = DiagnosticsClient("localhost:2240")
    about = await client.about()
    print(f"Server version: {about.server_version}, providing {len(about.api_versions)} APIs.")
    status = await client.status()
    print("Status of services:")
    for service_name, service_info in status.items():
        print(f"- {service_name}: {service_info.status}, note: {service_info.note}")

Use collect_server_diagnostics to collect diagnostic information from multiple servers.

from diagonal import collect_server_diagnostics
from diagonal.schema import Server

async def print_summary() -> None:
    servers = [Server(netloc="server1:2240"), Server(netloc="server2:2250")]
    diag = await collect_server_diagnostics(servers)
    print(f"Collected diagnostics from {len(diag.servers)} servers. Got {len(diag.failures)} failures.")
    print(f"Summary status: {diag.summary_status}")

Server usage

from diagonal import DiagnosticsServicer, ServiceStatusInfo
from fred_api.fileman import service_fileman_grpc_pb2  # the service(s) provided by the server

def my_service_status_callback() -> ServiceStatusInfo:
    ...  # obtain the service status information

diag = DiagnosticsServicer(server_version="1.0.0")
services = diag.add_grpc_api(service_fileman_grpc_pb2)
for service in services:
    diag.add_service_status(service, my_service_status_callback)
diag.add_to_server(my_grpc_server)

ChangeLog

Unreleased

3.0.0 (2025-03-05)

  • Add collect_server_diagnostics function (#12)
  • Add DiagnosticsServicer (#13)
  • Breaking changes (#12)
    • Move client.About to schema.About
    • Move and rename
      • client.Service to schema.ServiceStatusInfo
      • client.Status to constants.ServiceStatusCode
    • Remove DiagnosticsDecoder.STATUS_CODE_ENUM
  • Upgrade to fred-frgal ~= 4.1
  • Drop Python 3.8 support

2.0.0 (2024-09-23)

  • Upgrade to pydantic 2 (#11)

1.1.1 (2024-09-23)

  • Upgrade to fred-frgal ~= 3.15 (#10)

1.1.0 (2024-06-24)

  • Add Pydantic v1/v2 compatibility layer
  • Add specific service exceptions
    • DiagnosticsNotImplemented when server does not provide diagnostics service
    • ServiceUnavailable when service is not available at all

1.0.0 (2022-12-21)

  • Update project setup
  • Bump version to 1.0.0

0.2.0 (2022-05-16)

  • Use pydantic models
  • Reformat code with Black

0.1.1 (2021-11-02)

  • Expose DiagnosticsClient in __init__.py

0.1.0 (2021-10-18)

Initial version.