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