43 lines
2.4 KiB
Python
43 lines
2.4 KiB
Python
"""Read-only observation of the ten-bot retry until 11:00 CET."""
|
|
from pathlib import Path
|
|
import sys,os,re,json,time,datetime
|
|
sys.path.insert(0,str(Path(__file__).resolve().parents[1]/'2026-11-02-0600-group-test'))
|
|
import test_driver as d
|
|
BASE=Path(__file__).resolve().parent
|
|
END=datetime.datetime.fromisoformat('2026-11-02T11:00:00+01:00')
|
|
IDS=set(d.RAID)
|
|
def append(name,v):
|
|
with (BASE/name).open('a') as f:f.write(json.dumps(v,ensure_ascii=False)+'\n')
|
|
class Tail:
|
|
def __init__(self,path):
|
|
self.path=path;self.f=path.open('rb');self.inode=os.fstat(self.f.fileno()).st_ino;self.f.seek(0,2);self.pending=b''
|
|
def poll(self):
|
|
st=self.path.stat()
|
|
if st.st_ino==self.inode and st.st_size<self.f.tell():self.f.seek(0);self.pending=b''
|
|
data=self.f.read()
|
|
if st.st_ino!=self.inode:
|
|
self.f.close();self.f=self.path.open('rb');self.inode=st.st_ino;data+=self.f.read()
|
|
parts=(self.pending+data).split(b'\n');self.pending=parts.pop()
|
|
for line in parts:
|
|
s=line.decode(errors='replace')
|
|
if any(int(g) in IDS for g in re.findall(r'\b(?:guid|leader|member|target)=(\d+)\b',s)):
|
|
append('events.jsonl',{'time':d.now().isoformat(),'source':self.path.name,'line':s})
|
|
def snapshot():
|
|
for g in d.RAID:
|
|
for c in [f'clientless adventure status {g}',f'clientless actioninfo {g}',f'clientless flight status {g}',f'clientless interaction {g}']:d.command(c)
|
|
time.sleep(.6)
|
|
stamp=d.now();file='snapshot-'+stamp.strftime('%H%M%S')+'.log';(BASE/file).write_text(d.console(1000))
|
|
groups=d.query('Character','SELECT g.guid,g.leaderGuid,m.memberGuid,c.name FROM groups g JOIN group_member m ON m.guid=g.guid JOIN characters c ON c.guid=m.memberGuid WHERE g.guid IN(SELECT guid FROM group_member WHERE memberGuid IN(159,160,161,162,163,164,165,166,167,176)) ORDER BY g.guid,m.memberGuid')
|
|
append('snapshots.jsonl',{'time':stamp.isoformat(),'native_file':file,'groups':groups})
|
|
if __name__=='__main__':
|
|
logs=Path('/home/wow_admin/wow_cata_server/server/debug/bin');tails=[Tail(logs/'Server.log'),Tail(logs/'adventurebot-navigation.log')];next_snapshot=0
|
|
append('lifecycle.jsonl',{'time':d.now().isoformat(),'event':'start','end':END.isoformat()})
|
|
while d.now()<END:
|
|
try:
|
|
for t in tails:t.poll()
|
|
if time.monotonic()>=next_snapshot:snapshot();next_snapshot=time.monotonic()+120
|
|
except Exception as e:append('errors.jsonl',{'time':d.now().isoformat(),'error':str(e)})
|
|
time.sleep(2)
|
|
for t in tails:t.poll()
|
|
append('lifecycle.jsonl',{'time':d.now().isoformat(),'event':'finished'})
|