https://dev.kronoz.win/r/marzneshin.git
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]