1
2
3
4
5
6 import logging
7 import socket
8 import time
9 import sys
10
11 from lib.core.config import Config
12
13 log = logging.getLogger(__name__)
14
15 BUFSIZE = 1024*1024
16
18 nc = infd = None
19 try:
20 nc = NetlogFile()
21 nc.init(dump_path, file_path, pids)
22
23 infd = open(file_path, "rb")
24 buf = infd.read(BUFSIZE)
25 while buf:
26 nc.send(buf, retry=False)
27 buf = infd.read(BUFSIZE)
28 except Exception as e:
29 log.error("Exception uploading file %s to host: %s", file_path, e)
30 finally:
31 if infd:
32 infd.close()
33 if nc:
34 nc.close()
35
38 config = Config(cfg="analysis.conf")
39 self.hostip, self.hostport = config.ip, config.port
40 self.sock = None
41 self.proto = proto
42
44
45
46 while not self.sock:
47 try:
48 s = socket.create_connection((self.hostip, self.hostport), 0.1)
49 except socket.error:
50 time.sleep(0.1)
51 continue
52
53 s.settimeout(None)
54 s.sendall(self.proto)
55
56 self.sock = s
57
58 - def send(self, data, retry=True):
59 if not self.sock:
60 self.connect()
61
62 try:
63 self.sock.sendall(data)
64 except socket.error as e:
65 if retry:
66 self.connect()
67 self.send(data, retry=False)
68 else:
69 print >>sys.stderr, "Unhandled exception in NetlogConnection:", str(e)
70 except Exception as e:
71 print >>sys.stderr, "Unhandled exception in NetlogConnection:", str(e)
72
73
74
75 self.close()
76
78 try:
79 self.sock.close()
80 except Exception:
81 pass
82
84 - def init(self, dump_path, filepath=None, pids=[]):
85 if filepath:
86 self.proto = "FILE 2\n{0}\n{1}\n{2}\n".format(
87 dump_path, filepath, " ".join(pids)
88 )
89 else:
90 self.proto = "FILE\n{0}\n".format(dump_path)
91
92 self.connect()
93
99
100 - def emit(self, record):
101 msg = self.format(record)
102 self.send("{0}\n".format(msg))
103