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