|
from typing import Sequence |
|
from pydantic import BaseModel, Field, root_validator |
|
from typing import Optional |
|
|
|
|
|
class MetricTemplate(BaseModel): |
|
""" |
|
MetricTemplate is a class for defining a metric template. |
|
""" |
|
type: str |
|
name: str |
|
description: Optional[str] = None |
|
unit: Optional[str] = Field(default="1") |
|
labels: Optional[list[str]] = None |
|
buckets: Optional[Sequence[float]] = None |
|
|
|
@root_validator(pre=True) |
|
def set_default_description(cls, values): |
|
""" |
|
Set the default description if it is not set. |
|
""" |
|
if 'description' not in values or values['description'] is None: |
|
values['description'] = values['name'] |
|
return values |
|
|
|
|
|
class MetricTemplates: |
|
REQUEST_COUNT = MetricTemplate(**{ |
|
"type": "counter", |
|
"name": "request_count", |
|
"description": "The number of requests received", |
|
"unit": "1", |
|
"labels": ["method", "status"] |
|
}) |
|
|
|
REQUEST_LATENCY = MetricTemplate(**{ |
|
"type": "histogram", |
|
"name": "request_latency", |
|
"description": "The latency of requests", |
|
"unit": "ms", |
|
"labels": ["method", "status"], |
|
|
|
}) |
|
|