Skip to content

Commit b58c552

Browse files
committed
importing 14.5 release
1 parent b5fb2c9 commit b58c552

11 files changed

+68
-64
lines changed

DataProxy8.py

+24-20
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22
#from Selector import Selector
33
import yaml, socket, time, fnmatch, signal, select, sys, traceback
44
from datetime import datetime, timedelta
5-
from LogFile import LogFile
5+
#from LogFile import LogFile
66
from threading import RLock
77
from WebInterface2 import DataProxyWebInterface
8-
from pythreader import TaskQueue, Task, PyThread, synchronized, Primitive, Scheduler
8+
from pythreader import TaskQueue, Task, PyThread, synchronized, Primitive, Scheduler, LogFile
99
from HTTPProxy2 import HTTPProxy
1010
from DataLogger2 import DataLogger
1111
from record import TimeWindow
@@ -83,8 +83,8 @@ def run(self):
8383
for s in self.Servers.values():
8484
s.start()
8585
scheduler = Scheduler()
86-
scheduler.add(self.tick, self.TickInterval)
87-
scheduler.add(self.DataLogger.sendStatsToGraphite, 60.0, self)
86+
scheduler.add(self.tick, interval=self.TickInterval)
87+
#scheduler.add(self.DataLogger.sendStatsToGraphite, self, interval=60.0)
8888
scheduler.start()
8989
scheduler.join()
9090

@@ -208,9 +208,17 @@ def run(self):
208208

209209
if __name__ == "__main__":
210210
import traceback, sys, os, threading, getopt
211+
from Version import Version
212+
import webpie, pythreader
213+
214+
print("Octopus: ", Version, __file__)
215+
print("webpie: ", webpie.__version__, webpie.__file__)
216+
print("pythreader: ", pythreader.__version__, pythreader.__file__)
217+
print()
218+
211219
try:
212220
import logs
213-
from webpie import HTTPServer, HTTPSServer
221+
from webpie import HTTPServer
214222

215223
open("DataProxy.pid", "w").write("%d" % (os.getpid(),))
216224

@@ -277,23 +285,20 @@ def run(self):
277285
print("creating DataProxyWebInterface...")
278286
gui = DataProxyWebInterface(tm, title, data_logger, scanner_detector, static_location, correlations_file)
279287
port = cfg["port"]
280-
tls = "tls" in cfg
281288
logging = log_file is not None
282289
debug = None # for now
283-
if tls:
284-
keyfile = cfg["tls"]["key_file"]
285-
certfile = cfg["tls"]["cert_file"]
286-
ca_file = cfg["tls"].get("ca_file")
287-
gui_server = HTTPSServer(port, gui,
288-
certfile, keyfile, ca_file=ca_file,
289-
url_pattern = "*", max_connections = 20, max_queued = 10,
290+
291+
tls = cfg.get("tls", {})
292+
keyfile = tls.get("key_file")
293+
certfile = tls.get("cert_file")
294+
ca_file = tls.get("ca_file")
295+
296+
gui_server = HTTPServer(port, gui,
297+
certfile=certfile, keyfile=keyfile, ca_file=ca_file,
298+
max_connections = 20, max_queued = 10,
290299
logging = logging, log_file=log_file, debug=debug)
291-
gui_url = "https://%s:%s/index" % (socket.getfqdn(), port)
292-
else:
293-
gui_server = HTTPServer(port, gui,
294-
url_pattern = "*", max_connections = 20, max_queued = 10,
295-
logging = logging, log_file=log_file, debug=debug)
296-
gui_url = "http://%s:%s/index" % (socket.getfqdn(), port)
300+
gui_http = "https" if tls else "http"
301+
gui_url = f"{gui_http}://%s:%s/index" % (socket.getfqdn(), port)
297302
print("starting HTTPServer...")
298303
gui_server.start()
299304
gui_server.kind = "GUIServer"
@@ -302,7 +307,6 @@ def run(self):
302307
rport = cfg["redirector"]["port"]
303308
url = cfg["redirector"].get("url", gui_url)
304309
gui_redirector = HTTPServer(rport, Redirector(url),
305-
url_pattern = "*",
306310
max_connections = 20, max_queued = 10, logging = logging, log_file=log_file, debug=None)
307311
gui_redirector.kind = "GUIRedirector"
308312
print("starting Redirector...")

HTTPProxy2.py

+5-3
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ def __init__(self, sock, my_name, header_received=False, nbytes=0):
2121
def read(self):
2222
try: data = self.Sock.recv(self.MAXREAD)
2323
except socket.timeout:
24-
self.debug("timeout")
24+
#self.debug("timeout")
2525
data = b''
2626
except Exception as e:
2727
self.debug("reader error: %s" % (e,))
@@ -269,9 +269,11 @@ def peerClosed(self, peer, exit_status, error_message=None):
269269
sock.shutdown(socket.SHUT_WR)
270270
except OSError as exc:
271271
if exc.errno == errno.ENOTCONN:
272-
self.debug("not connected exception -- ignored")
272+
#self.debug("not connected exception -- ignored")
273+
pass
273274
else:
274-
self.debug("Error shutting down write side: %s" % (traceback.format_exc(),))
275+
#self.debug("Error shutting down write side: %s" % (traceback.format_exc(),))
276+
pass
275277

276278

277279
if __name__ == "__main__":

VServer1.py

+2-18
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,7 @@ def dispatch(self, request):
3535
request.Dispatched = False
3636
request.DispatcherStatus = "nomatch"
3737
return None
38-
39-
38+
4039
class RequestReaderTask(Task, Debugged):
4140

4241
def __init__(self, request, vserver, dispatcher):
@@ -123,7 +122,7 @@ def run(self):
123122
service = self.Dispatcher.dispatch(request)
124123
if not service:
125124
error = "Service not found"
126-
http_status = 403
125+
http_status = 404
127126

128127
if not request.Dispatched:
129128
request.Error = error
@@ -138,21 +137,6 @@ def run(self):
138137

139138
return request
140139

141-
class RequestReader(Debugged, Logged):
142-
143-
def __init__(self, vserver, dispatcher, data_logger, config):
144-
Debugged.__init__(self, "[RequestReader %s]" % (vserver.Port,))
145-
Logged.__init__(self, "[RequestReader %s]" % (vserver.Port,))
146-
self.VServer = vserver
147-
self.Dispatcher = dispatcher
148-
self.DataLogger = data_logger
149-
150-
def put(self, request):
151-
self.ReaderQueue.addTask(RequestReaderTask(request, self.VServer, self.Dispatcher))
152-
153-
def counts(self):
154-
return self.ReaderQueue.counts()
155-
156140
class VirtualServer(PyThread, Debugged, Logged):
157141

158142
LoggerFields = [

Version.py

+5-1
Original file line numberDiff line numberDiff line change
@@ -1 +1,5 @@
1-
Version="14.4"
1+
Version="14.5"
2+
3+
if __name__ == "__main__":
4+
print(Version)
5+

debug.py

+10-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from LogFile import LogFile, LogStream, make_timestamp
1+
from pythreader import LogFile, LogStream
22
import sys
33
from datetime import datetime
44

@@ -20,7 +20,15 @@ def debug(msg, t=None, add_timestamp=True):
2020
if add_timestamp or t is not None:
2121
msg = "%s: %s" % (make_timestamp(t), msg)
2222
_debug_out.log(msg)
23-
23+
24+
def make_timestamp(t=None):
25+
if t is None:
26+
t = datetime.datetime.now()
27+
elif isinstance(t, (int, float)):
28+
t = datetime.datetime.fromtimestamp(t)
29+
return t.strftime("%m/%d/%Y %H:%M:%S") + ".%03d" % (t.microsecond//1000)
30+
31+
2432
class Debugged(object):
2533

2634
def __init__(self, my_name=None, send_to=None, save_in_memory=False, add_timestamps=False, enabled=True):

logs.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from LogFile import LogFile, LogStream
1+
from pythreader import LogFile, LogStream
22
from request_logger import RequestLogger
33
import sys
44

@@ -12,20 +12,20 @@ def openLogFile(path):
1212
if path == "-":
1313
logfile = LogStream(sys.stdout)
1414
else:
15-
logfile = LogFile(path)
15+
logfile = LogFile(path, flush_interval=1.0)
1616
logfile.start()
1717

1818
def openErrorFile(path):
1919
global errfile
2020
if path == "-":
2121
errfile = LogStream(sys.stdout)
2222
else:
23-
errfile = LogFile(path)
23+
errfile = LogFile(path, flush_interval=1.0)
2424
errfile.start()
2525

2626
def openDebugFile(path):
2727
global debugfile
28-
debugfile = LogStream(sys.stdout) if path == "-" else LogFile(path, interval="1h")
28+
debugfile = LogStream(sys.stdout) if path == "-" else LogFile(path, interval="1h", flush_interval=1.0)
2929
debugfile.log("-------- Started --------")
3030

3131
def openRequestLog(path, data_logger):

record.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -448,9 +448,9 @@ def _vacuum(self):
448448

449449
def run(self):
450450
scheduler = Scheduler()
451-
scheduler.add(self._flush, self.SaveInterval)
452-
scheduler.add(self._cleanup, 24*3600)
453-
scheduler.add(self._vacuum, 24*3600) # once per day
451+
scheduler.add(self._flush, interval=self.SaveInterval)
452+
scheduler.add(self._cleanup, interval=24*3600)
453+
scheduler.add(self._vacuum, interval=24*3600) # once per day
454454
scheduler.start()
455455
scheduler.join()
456456

request.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ def __init__(self, csock, caddr, server_port):
3838
self.TransferStatus = None
3939

4040
self.HTTPStatus = None
41-
self.HTTPRequest = None
4241

4342
self.VServerError = None
4443
self.ServiceName = None
@@ -78,4 +77,4 @@ def close(self, done):
7877
self.CSock = None
7978

8079

81-
80+

request_logger.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from LogFile import LogFile
1+
from pythreader import LogFile
22
from request import Request
33
from pythreader import Primitive
44
from dns import DNS
@@ -7,7 +7,7 @@ class RequestLogger(Primitive):
77

88
def __init__(self, logfile, data_logger):
99
if isinstance(logfile, str):
10-
logfile = LogFile(logfile)
10+
logfile = LogFile(logfile, flush_interval=1.0)
1111

1212
self.LogFile = logfile
1313
self.DataLogger = data_logger

service.py

+8-7
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,12 @@ def chooseServer(self, request, server_list):
3434
host, port = address
3535
if probe:
3636
url = "http://%s:%s%s" % (host, port, probe)
37-
self.debug("Trying probe: %s, probe_timeout=%s" % (url,self.Service.ProbeTimeout))
37+
#self.debug("Trying probe: %s, probe_timeout=%s" % (url,self.Service.ProbeTimeout))
3838
try: urlopen(url, None, self.Service.ProbeTimeout)
3939
except:
4040
exctype, excvalue = sys.exc_info()[:2]
41-
self.debug("probe failed: %s, probe_timeout: %s, error:%s %s" % (
42-
url, self.Service.ProbeTimeout, exctype, excvalue))
41+
#self.debug("probe failed: %s, probe_timeout: %s, error:%s %s" % (
42+
# url, self.Service.ProbeTimeout, exctype, excvalue))
4343
server_list.mark_bad(server)
4444
continue
4545

@@ -58,7 +58,7 @@ def chooseServer(self, request, server_list):
5858
server_list.allocate(server)
5959
return s, server
6060
else:
61-
self.debug("can not find available server")
61+
#self.debug("can not find available server")
6262
return None, None
6363

6464
def run(self):
@@ -145,6 +145,7 @@ def __init__(self, mgr, data_logger, name,
145145
self.RewriteURI = None # see note about URL rewriting # rewrite_uri # tuple: ("old_head", "new_head") or None
146146
self.Manager = mgr
147147
self.MaxConnections = max_connections
148+
self.MaxFrequency = max_frequency
148149
self.Backlog = backlog
149150

150151
stagger = 1.0/max_frequency if max_frequency else None
@@ -159,8 +160,8 @@ def __init__(self, mgr, data_logger, name,
159160
self.ProbeTimeout = probe_timeout
160161
self.TransferTimeout = transfer_timeout
161162
if self.TransferTimeout != None: self.TransferTimeout = float(self.TransferTimeout)
162-
self.debug("Service created: %s, %s, %s, pt=%s, tt=%s, %s" %
163-
(name, max_connections, probe, probe_timeout, self.TransferTimeout, servers))
163+
#self.debug("Service created: %s, %s, %s, pt=%s, tt=%s, %s" %
164+
# (name, max_connections, probe, probe_timeout, self.TransferTimeout, servers))
164165
self.Access = access
165166
self.RemovePrefix = remove_prefix
166167
self.AddPrefix = add_prefix
@@ -404,7 +405,7 @@ def taskEnded(self, queue, task, request):
404405
request.TransferEndTime = task.Ended
405406
self.requestEnded(request)
406407
rid = request.Id
407-
self.debug(f"{rid} transfer ended")
408+
#self.debug(f"{rid} transfer ended")
408409

409410
def taskFailed(self, queue, task, exc_type, exc_value, tb):
410411
request = task.Request

templates/services.html

+4-2
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,12 @@ <h2>Services</h2>
99
<th rowspan=2>Service</th>
1010
<th rowspan=2>Server ports</th>
1111
<th rowspan=2>Match</th>
12-
<th rowspan=2>Active Connections</th>
12+
<th rowspan=2>Active connections</th>
1313
<th rowspan=2>Queue</th>
1414
<th colspan=3>Processing time</th>
1515
<th colspan=3>Wait time</th>
16-
<th colspan=3>Request Counts</th>
16+
<th rowspan=2>Max frequency</th>
17+
<th colspan=3>Request counts</th>
1718
<th rowspan=2>Servers</th>
1819
<th rowspan=2>Probe</th>
1920
<th rowspan=2>Timeout</th>
@@ -37,6 +38,7 @@ <h2>Services</h2>
3738
<td class=left>{{s.currentQueueWaitTime()|pretty_time}}</td>
3839
<td class=none>{{s.AvgWaitT|pretty_time}}</td>
3940
<td class=right>{{s.MaxWaitT|pretty_time}}</td>
41+
<td>{{s.MaxFrequency or ''}}</td>
4042
<td class=left>{{s.f1|pretty_frequency}}</td>
4143
<td class=none>{{s.f2|pretty_frequency}}</td>
4244
<td class=right>{{s.f3|pretty_frequency}}</td>

0 commit comments

Comments
 (0)