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