Skip to content

Commit f6b2346

Browse files
committed
Reconnect every 15 minutes
1 parent d604fb0 commit f6b2346

5 files changed

Lines changed: 46 additions & 32 deletions

File tree

rc.py

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -62,13 +62,10 @@
6262

6363

6464
@celery.task(name='wmrcm.process', queue='wmrcm')
65-
def process(rawdata):
66-
logging.info(rawdata)
67-
try:
68-
change = json.loads(rawdata)
69-
except json.decoder.JSONDecodeError as e:
70-
msg = 'UnicodeDecodeError: {}. {}'.format(e, rawdata)
71-
logging.error(msg)
65+
def process(change):
66+
logging.info(change)
67+
68+
if change['meta']['domain'] == 'canary':
7269
return
7370

7471
try:

rc_abusefilter.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -117,9 +117,7 @@ def tz2int(timetz):
117117
'parsedcomment': log['parsedcomment']
118118
}
119119

120-
data = json.dumps(change)
121-
data = data.encode('utf-8')
122-
process(data)
120+
process(change)
123121

124122
if len(res['query']['logevents']) > 0:
125123
timestamp = res['query']['logevents'][-1]['timestamp']

rc_abuselog.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -196,9 +196,7 @@ def tz2int(timetz):
196196

197197
newlog['timestamp'] = tz2int(newlog['timestamp'])
198198

199-
data = json.dumps(newlog)
200-
data = data.encode('utf-8')
201-
process(data)
199+
process(newlog)
202200

203201
if len(res["query"]["abuselog"]) > 0:
204202
timestamp = res["query"]["abuselog"][-1]["timestamp"]

rc_newusers_autocreate.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -127,9 +127,7 @@ def tz2int(timetz):
127127
'parsedcomment': log['parsedcomment']
128128
}
129129

130-
data = json.dumps(change)
131-
data = data.encode('utf-8')
132-
process(data)
130+
process(change)
133131

134132
if len(res['query']['logevents']) > 0:
135133
timestamp = res['query']['logevents'][-1]['timestamp']

rc_stream.py

Lines changed: 39 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,23 @@
11
# -*- coding: utf-8 -*-
22
import argparse
3+
import json
34
import logging
5+
import multiprocessing
46
import os
57
import socket
68
import time
79
import traceback
10+
from datetime import datetime, timezone
811

9-
from Monitor import Monitor, MonitorLogHandler
10-
from rc_config import SOCKET_HOST, SOCKET_PORT
1112
from sseclient import SSEClient as EventSource
12-
from rc import process
1313

14+
from Monitor import Monitor, MonitorLogHandler
15+
from rc import process
16+
from rc_config import SOCKET_HOST, SOCKET_PORT
1417

1518
parser = argparse.ArgumentParser()
1619
parser.add_argument('--sleep', type=int, default=60)
20+
parser.add_argument('--timeout', type=int, default=900)
1721
parser.add_argument('-d', '--debug', action='store_const', dest='loglevel', const=logging.DEBUG)
1822
parser.add_argument('-v', '--verbose', action='store_const', dest='loglevel', const=logging.INFO)
1923
parser.set_defaults(loglevel=logging.WARNING)
@@ -29,7 +33,7 @@
2933

3034
os.environ['TZ'] = 'UTC'
3135

32-
url = 'https://stream.wikimedia.org/v2/stream/recentchange'
36+
URL = 'https://stream.wikimedia.org/v2/stream/recentchange'
3337

3438
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
3539
sock.connect((SOCKET_HOST, SOCKET_PORT))
@@ -39,23 +43,42 @@
3943
'User-Agent': M.wp_user_agent,
4044
}
4145

42-
errorWaitTime = 1
43-
while True:
44-
try:
45-
for event in EventSource(url, headers=headers):
46-
if event.event == 'message':
47-
if len(event.data) == 0:
48-
continue
4946

50-
logging.debug(event.data)
47+
def main(lastOffset):
48+
fullUrl = URL
49+
if lastOffset.value > 0:
50+
fullUrl += '?since={}'.format(datetime.fromtimestamp(lastOffset.value, tz=timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ"))
51+
for event in EventSource(fullUrl, headers=headers):
52+
if event.event == 'message':
53+
if len(event.data) == 0:
54+
continue
55+
56+
logging.debug(event.data)
57+
58+
try:
59+
change = json.loads(event.data)
60+
except json.decoder.JSONDecodeError as e:
61+
msg = 'UnicodeDecodeError: {}. {}'.format(e, event.data)
62+
logging.error(msg)
63+
continue
64+
process(change)
65+
lastOffset.value = int(change['timestamp'])
5166

52-
noError = True
5367

54-
data = event.data.encode('utf-8')
55-
process(data)
68+
lastOffset = multiprocessing.Value('i', 0)
69+
while True:
70+
try:
71+
print('Last-Event-ID', lastOffset.value)
72+
p = multiprocessing.Process(target=main, args=(lastOffset,))
73+
p.start()
74+
p.join(timeout=args.timeout)
75+
76+
if p.is_alive():
77+
p.terminate()
78+
p.join()
5679

5780
except Exception as e:
5881
traceback.print_exc()
5982
M.error(traceback.format_exc(), noRaise=True)
6083

61-
time.sleep(args.sleep)
84+
time.sleep(args.sleep)

0 commit comments

Comments
 (0)