gitscope
← marzneshin / v0.4.1 / app/models/node.py
https://dev.kronoz.win/r/marzneshin.git
app/models/node.py · Python
Blame Raw
 1from enum import Enum
 2
 3from pydantic import ConfigDict, BaseModel, Field
 4
 5
 6class NodeStatus(str, Enum):
 7    healthy = "healthy"
 8    unhealthy = "unhealthy"
 9    disabled = "disabled"
10
11
12class NodeConnectionBackend(str, Enum):
13    grpcio = "grpcio"
14    grpclib = "grpclib"
15
16
17class NodeSettings(BaseModel):
18    min_node_version: str = "v0.2.0"
19    certificate: str
20
21
22class Node(BaseModel):
23    id: int | None = Field(None)
24    name: str
25    address: str
26    port: int = 53042
27    connection_backend: NodeConnectionBackend = Field(
28        default=NodeConnectionBackend.grpclib
29    )
30    usage_coefficient: float = Field(ge=0, default=1.0)
31    model_config = ConfigDict(from_attributes=True)
32
33
34class NodeCreate(Node):
35    model_config = ConfigDict(
36        json_schema_extra={
37            "example": {
38                "name": "DE node",
39                "address": "192.168.1.1",
40                "port": 53042,
41                "usage_coefficient": 1,
42            }
43        }
44    )
45
46
47class NodeModify(Node):
48    name: str | None = Field(None)
49    address: str | None = Field(None)
50    port: int | None = Field(None)
51    connection_backend: NodeConnectionBackend | None = Field(None)
52    status: NodeStatus | None = Field(None)
53    usage_coefficient: float | None = Field(None, ge=0)
54    model_config = ConfigDict(
55        json_schema_extra={
56            "example": {
57                "name": "DE node",
58                "address": "192.168.1.1",
59                "port": 53042,
60                "status": "disabled",
61                "usage_coefficient": 1.0,
62            }
63        }
64    )
65
66
67class NodeResponse(Node):
68    xray_version: str | None = None
69    status: NodeStatus
70    message: str | None = None
71    model_config = ConfigDict(from_attributes=True)
72    inbound_ids: list[int] | None = None
73
74
75class NodeUsageResponse(BaseModel):
76    node_id: int | None = None
77    node_name: str
78    uplink: int
79    downlink: int
80
81
82class NodesUsageResponse(BaseModel):
83    usages: list[NodeUsageResponse]