|
9 | 9 |
|
10 | 10 | from asgiref.sync import sync_to_async |
11 | 11 |
|
| 12 | +from urllib3.response import HTTPResponse |
12 | 13 | from kubernetes.client import Configuration, exceptions |
13 | 14 | from kubernetes.client.api import core_v1_api |
14 | 15 | from kubernetes.stream import stream |
@@ -140,19 +141,26 @@ async def receive(self, text_data=None, bytes_data=None): |
140 | 141 | self.running = True |
141 | 142 | data = json.loads(text_data) |
142 | 143 | args = (self.pod_id, self.id) |
| 144 | + lines = data.get("lines", 100) |
| 145 | + follow = data.get("follow", False) |
143 | 146 | kwargs = { |
144 | | - "tail_lines": data.get("lines", 100), |
145 | | - "follow": data.get("follow", False), |
| 147 | + "tail_lines": lines if lines < 1000 else 1000, |
| 148 | + "follow": follow, |
146 | 149 | "container": data.get("container", ""), |
147 | | - "_preload_content": False, |
| 150 | + "_preload_content": not follow, |
148 | 151 | } |
149 | | - loop = asyncio.get_event_loop() |
150 | 152 | self.response = await sync_to_async(self.kubernetes.read_namespaced_pod_log)( |
151 | 153 | *args, **kwargs) |
152 | | - loop.add_reader(self.response.connection.sock, self.reader, self.response.connection.sock) |
| 154 | + if follow: |
| 155 | + loop = asyncio.get_event_loop() |
| 156 | + loop.add_reader( |
| 157 | + self.response.connection.sock, self.reader, self.response.connection.sock) |
| 158 | + else: |
| 159 | + asyncio.create_task(self.send(text_data=self.response)) |
| 160 | + asyncio.create_task(self.close(code=1000)) |
153 | 161 |
|
154 | 162 | async def disconnect(self, close_code): |
155 | | - if self.response: |
| 163 | + if isinstance(self.response, HTTPResponse): |
156 | 164 | loop = asyncio.get_event_loop() |
157 | 165 | loop.remove_reader(self.response.connection.sock) |
158 | 166 | await sync_to_async(self.response.close)() |
|
0 commit comments