11from urllib .parse import urlencode
2+ import aiofiles .os
23import aiohttp
34import asyncio
45import json
5- import sys
66import time
77
88class Publisher :
@@ -11,38 +11,20 @@ def __init__(self, use_config, use_state):
1111 self ._use_state = use_state
1212 self ._last_event_state = None
1313 self ._last_ping_at = None
14-
15- async def start (self ):
16- self ._original_stdout_write = sys .stdout .write
17- self ._original_stderr_write = sys .stderr .write
18- def stdout_wrapper (chunk ):
19- data = chunk .strip ()
20- if (data != "" ):
21- asyncio .create_task (self .publish_event ({
22- 'type' : 'stdout' ,
23- 'data' : data ,
24- 'time' : time .time ()
25- }))
26- return self ._original_stdout_write (chunk )
27- def stderr_wrapper (chunk ):
28- if "KeyboardInterrupt" not in chunk :
29- data = chunk .strip ()
30- if (data != "" ):
31- asyncio .create_task (self .publish_event ({
32- 'type' : 'stderr' ,
33- 'data' : data ,
34- 'time' : time .time ()
35- }))
36- return self ._original_stderr_write (chunk )
37- sys .stdout .write = stdout_wrapper
38- sys .stderr .write = stderr_wrapper
39-
4014 asyncio .create_task (self ._publish_data ({'type' : 'init' }))
41- await asyncio .sleep (0.5 )
42- asyncio .create_task (self ._periodic_publish_state ())
15+ asyncio .create_task (self ._publish_state_periodically ())
16+
17+ async def _generate_event_state (self ):
18+ state = self ._use_state ()
19+ try :
20+ stat_result = await aiofiles .os .stat ("error.log" )
21+ state ["hasErrors" ] = stat_result .st_size > 0
22+ except FileNotFoundError :
23+ state ["hasErrors" ] = False
24+ return {"type" : "state" , "state" : state }
4325
4426 async def publish_state (self ):
45- event = { 'type' : 'state' , 'state' : self ._use_state ()}
27+ event = await self ._generate_event_state ()
4628 self ._last_event_state = json .dumps (event )
4729 await self .publish_event (event )
4830
@@ -76,11 +58,11 @@ async def _publish_data(self, data):
7658 raise Exception (f"Failed to publish event: { response .status } " )
7759 return await response .text ()
7860
79- async def _periodic_publish_state (self ):
61+ async def _publish_state_periodically (self ):
8062 while True :
81- event = {'type' : 'state' , 'state' : self ._use_state ()}
63+ await asyncio .sleep (0.5 )
64+ event = await self ._generate_event_state ()
8265 last_event_state = json .dumps (event )
8366 if self ._last_event_state != last_event_state :
84- await self .publish_event (event )
8567 self ._last_event_state = last_event_state
86- await asyncio .sleep ( 1.0 )
68+ asyncio .create_task ( self . publish_event ( event ) )
0 commit comments