tree checksum vpatch file split hunks

all signers: lobbes bvt diana_coman asciilifeform

antecedents: sept_fixes.kv detect_disconnect.kv shlex_removal.kv

press order:

logotron_genesis.kvasciilifeform diana_coman
multsel_and_datefix.kvasciilifeform diana_coman
raw_line_export.kvasciilifeform diana_coman
rle_errata.kvasciilifeform diana_coman
irssi2tmsr.kvasciilifeform diana_coman
uniturds_etc.kvasciilifeform diana_coman
line_wraps.kvasciilifeform diana_coman
znc2tmsr_etc.kvasciilifeform diana_coman lobbes
uptimefix_bye_cache.kvasciilifeform diana_coman lobbes
raw_line_fix.kvasciilifeform diana_coman lobbes
irssi_format.kvasciilifeform diana_coman
sept_fixes.kvasciilifeform diana_coman
active_disconnect_r3.kvasciilifeform bvt diana_coman
sept_errata.kvasciilifeform
detect_disconnect.kvasciilifeform
shlex_removal.kvasciilifeform
hide_inactive.kvasciilifeform

patch:

- 2E4D375892DB18CE0F42B30381993C7A70F119542A581B3B20211A3A7F373512C23B832A545A730F86B86143D562E3C383BBE2DD960DE617127CC9220437DC1C
+ D842B46BD643A09C4561676285EC2CD921368026994849F0E771B040A090A144A2749FB3DFAD53942AA7D55D3D92037B60E771BF95358A07AFF7AD7CFB775AFC
logotron/MANIFEST.TXT
(14 . 3)(14 . 4)
5 597688 sept_errata asciilifeform "Fixed coarse mistake in reader.py"
6 597858 detect_disconnect asciilifeform "Adjustable detector of bot disconnection."
7 598372 shlex_removal asciilifeform "Reverted defective attempt at double-quoted search."
8 640165 hide_inactive asciilifeform "Configurable default-hide of idle chans"
- 706C15FC1EB5BE1FDAD3D80321DA88590CDC33518D0EA2C004DE17F948B7AD07C190374A3E118C5D254C2731A280B52B4030AD2998808104410A35EAB05CD825
+ 41B2D77F5049BCF7C65DBA41E46DC5464B27DA3F947CECBA3F3BD1ED451B2D469BF550155EC6EFB49E52BEA0A6467F9D5EEE7B5298E2396C39A64390711B6ACE
logotron/README.txt
(119 . 9)(119 . 6)
13
14 Still needs a variant of 'eater' that will eat these.
15
16 ###############
17 Oct. 4 Update:
18 ###############
19
20 (1) WWW: Removed ill-conceived 'Tape' knob.
21 (2) Bot: Added silent-disconnection detector.
(136 . 3)(133 . 11)
23 a disconnection is forced. The normal reconnection routine will execute.
24
25 To disable forced disconnects, set disc_t to zero.
26
27 #################
28 Jul. 2020 Update:
29 #################
30
31 (1) Hide by default chans where no activity in days_hide day (set in config.)
32 (2) Added 'join as guest' link (via 'kiwi' wwwtronic IRC client)
33 (3) Example Apache-WSGI configs.
-
+ 14D7AC73F3C61335C9BB7AE63F70401B2342E82091D600A40653C4A86CBAE5D6BDF8619A377A85D48D02EBB6B3F0BD1563751319BD02D4786C7EC6D4844DE27A
logotron/apacheism/example.vhost
(0 . 0)(1 . 30)
38 Listen 80
39
40 WSGIPythonPath /home/yourbotuser/logger/
41
42 <VirtualHost *:80>
43
44 ServerName logs.yourwww.com
45
46 ErrorLog /var/log/apache2/error.log
47 CustomLog /var/log/apache2/access.log combined
48
49 WSGIDaemonProcess yourbotuser user=yourbotuser group=apache threads=16
50
51 WSGIProcessGroup %{GLOBAL}
52
53 WSGIScriptAlias / /home/yourbotuser/logger/yourbotuser.wsgi
54
55 Alias /static/ /home/yourbotuser/logger/static/
56
57 <Directory /home/yourbotuser/logger/static>
58 Require all granted
59 </Directory>
60
61 <Directory /home/yourbotuser/logger>
62 <Files yourbotuser.wsgi>
63 Require all granted
64 </Files>
65 </Directory>
66
67 </VirtualHost>
- B94D71536F35DE90B931FFC0D485FF22D643576548E60A3B4BACB3E6A8E9F463AE4A219D7D71067DD780B83E41D35A9493B18213D3D6C5DCA96538E3995ECFBD
+ 3FB19192427A44DCB19DF8673EABEF04A84355B0A7BEC3A411ADFEF6B7199969EAF2C02F8536CA89FF5C0332110574C47FF804B323543BEDD21353D0FF855D7D
logotron/nsabot.conf
(58 . 6)(58 . 9)
72 # Other people's bots (for colouration strictly)
73 bots = a111, deedbot, feedbot, auctionbot, lobbesbot
74
75 # Days of inactivity after which chan is hidden by default
76 days_hide = 14
77
78 # On what port will sit the www logtron
79 www_port = 5002
80
-
+ AF929E1979FEF048E21E5537350907B21C3DF71497A2CF592D90707943D3C38D41603F359713FBC37D964F1C4C33E6DB9E732B3B724C48A98CBEAC6551F4EFE2
logotron/nsabot.wsgi
(0 . 0)(1 . 5)
85 #!/usr/bin/python
86
87 import sys
88
89 from reader import app as application
- C9A1CB11F1BCA0D8EE8F1351F0E2AD9AEA8D6E33D5915372854DF0352563FFF72D867002D17E0FD5A1A9475066EEC9078C20C3BDB5B81009456AC44290BF2660
+ 8AC522F24E0ADD9BA37C81161EDBB0BA5FE70DF54C03E73FC8A6A60BAC3BF993D1530088C5A3A8A7CAA90DB67EE6B3CDAE75A15B4C6D698ED3D95AFF12E54626
logotron/reader.py
(25 . 13)(25 . 15)
94
95 ##############################################################################
96 # Single mandatory arg: config file path
97
98 if len(sys.argv[1:]) != 1:
99 # If no args, print usage and exit:
100 print sys.argv[0] + " CONFIG"
101 exit(0)
102 # Default path for WSGI use (change to yours) :
103 config_path = "/home/nsabot/logger/nsabot.conf"
104 else:
105 # Read Config from given conf file
106 config_path = sys.argv[1]
107
108 # Read Config from given conf file
109 config_path = os.path.abspath(sys.argv[1])
110 #config_path = os.path.abspath(config_path)
111 cfg = ConfigParser.ConfigParser()
112 cfg.readfp(open(config_path))
113
(50 . 6)(52 . 7)
115 Era = int(cfg.get("logotron", "era"))
116 DEBUG = int(cfg.get("logotron", "www_dbg"))
117 Max_Raw_Ln = int(cfg.get("logotron", "max_raw"))
118 Days_Hide = int(cfg.get("logotron", "days_hide"))
119 # WWW:
120 WWW_Port = int(cfg.get("logotron", "www_port"))
121
(150 . 27)(153 . 29)
123 l['t'].strftime(Date_Short_Format),
124 l['idx'])
125
126 def gen_chanlist(selected_chan):
127 def gen_chanlist(selected_chan, show_all_chans=False):
128 # Get current time
129 now = datetime.now()
130
131 s = """<table align="center" class="chantable"><tr>"""
132 # Data for channel display :
133 chan_tbl = {}
134 for chan in Channels:
135 chan_tbl[chan] = {}
136 chan_tbl[chan]['show'] = False
137
138 chan_formed = chan
139 if chan == selected_chan:
140 chan_formed = "<span class='highlight'>" + chan + "</span>"
141 s += """<th><a href="{0}log/{1}">{2}</a></th>""".format(
142
143 chan_tbl[chan]['link'] = """<a href="{0}log/{1}"><b>{2}</b></a>""".format(
144 get_base(), chan, chan_formed)
145 s += "</tr><tr>"
146
147 for chan in Channels:
148
149
150 last_time = query_db(
151 '''select t, idx from loglines where chan=%s
152 and idx = (select max(idx) from loglines where chan=%s) ;''',
153 [chan, chan], one=True)
154
155 last_time_txt = ""
156 time_field = ""
157 if last_time != None:
158 span = (now - last_time['t'])
159 days = span.days
(183 . 19)(188 . 31)
161 last_time_txt += '%dh ' % hours
162 if minutes != 0:
163 last_time_txt += '%dm' % minutes
164
165 s += """<td><i><a href="{0}log/{1}/{2}#{3}">{4}</a></i></td>""".format(
166
167 time_field = """<i><a href="{0}log/{1}/{2}#{3}">{4}</a></i>""".format(
168 get_base(),
169 chan,
170 last_time['t'].strftime(Date_Short_Format),
171 last_time['idx'],
172 last_time_txt)
173
174 else:
175 last_time_txt = ""
176 s += "<td></td>"
177 if (days <= Days_Hide) or (chan == selected_chan) or show_all_chans:
178 chan_tbl[chan]['show'] = True
179
180 s += "</tr></table>"
181 chan_tbl[chan]['time'] = time_field
182
183 ## Generate channel selector bar :
184 s = """<table align="center" class="chantable"><tr>"""
185 for chan in Channels:
186 if chan_tbl[chan]['show']:
187 s += """<th>{0}</th>""".format(chan_tbl[chan]['link'])
188 s += "</tr><tr>"
189 ## Generate last-activ. links for above :
190 for chan in Channels:
191 if chan_tbl[chan]['show']:
192 s += """<td>{0}</td>""".format(chan_tbl[chan]['time'])
193 # wrap up:
194 s += "</tr>"
195 return s
196
197
(356 . 6)(373 . 9)
199
200 # Get possible 'reverse gear'
201 rev = request.args.get('rev', default = 0, type = int)
202
203 # Get possible 'show all'
204 show_all = request.args.get('all', default = 0, type = int)
205
206 # Get current time
207 now = datetime.now()
(398 . 7)(418 . 9)
209 sel = (sel_start, sel_end),
210 date = date,
211 tail = tail,
212 rev = not rev)
213 rev = not rev,
214 show_all = show_all,
215 idle_day = Days_Hide)
216
217
218 @app.route('/log-raw/<chan>')
- 96EC2C4262FDC5A0707910CC69CCF6C522E6D4B7C0597B61672AFCFE1F17BCABE94629C97517328D1F02BC8BB8B2F96BB69D1F39027F55A671B0B290E83C6248
+ 7260E8531EEE1E629D3BD793931237B759CCD829F1D5F5A929EF3375897EE7A5D21562E870142C24D5F3BAFB44F7D7B83B1952C8FDD8554A2E8F55633F10D54C
logotron/templates/layout.html
(104 . 32)(104 . 30)
223 <a name="head">
224
225 <p>
226 <table align="center">
227 <table align="center" style="width:100%">
228 <tr>
229 <td>
230 <a href="http://nosuchlabs.com">
231 <img src="{{ url_for('static', filename='snsa.jpg') }}"
232 align="left"
233 alt="No Such lAbs"/>
234 </a>
235 </td>
236
237 <td>
238 {{ gen_chanlist( chan ) | safe }}
239 </td>
240
241 <td>
242 <a href="http://pizarroisp.net">
243 <img src="{{ url_for('static', filename='piz.jpg') }}"
244 align="right"
245 alt="Pizarro"/>
246 </a>
247 {{ gen_chanlist( chan, show_all ) | safe }}
248 </td>
249 </tr>
250 </table>
251
252 </p>
253
254
255 <div align="center">
256 <small>
257 {% if not show_all %}
258 <a href="/log/{{ chan }}?all=1">
259 <i>Show Idle (>{{ idle_day }} d.) Chans</i>
260 </a>
261 {% else %}
262 <a href="/log/{{ chan }}">
263 <i>Hide Idle (>{{ idle_day }} d.) Chans</i>
264 </a>
265 {% endif %}
266 </small>
267 </div>
268
269 <hr>
270
271 <form align="center" id="search" method='get' action='/log-search'><span><a href='/log/{{chan}}'>log</a></span>
(145 . 7)(143 . 7)
273 <hr>
274
275 <div align="center">
276 <a href="/rnd/{{ chan }}">Random({{ chan }})</a> | <a href="{{ url_for('static', filename='log_db.gz') }}">Download daily DB snapshot</a> | <a href="http://www.loper-os.org/?p=3452">Get Source Code</a>
277 <a href="https://kiwiirc.com/nextclient/irc.freenode.net/{{ chan }}">Visit #{{ chan }} as Guest</a> | <a href="/rnd/{{ chan }}">Random({{ chan }})</a> | <a href="{{ url_for('static', filename='log_db.gz') }}">Download hourly DB snapshot</a> | <a href="http://www.loper-os.org/?p=3452">Get Source Code</a>
278 </div>
279
280 <a name="tail">