diff options
author | Tudor Florea <tudor.florea@enea.com> | 2015-10-09 22:59:03 +0200 |
---|---|---|
committer | Tudor Florea <tudor.florea@enea.com> | 2015-10-09 22:59:03 +0200 |
commit | 972dcfcdbfe75dcfeb777150c136576cf1a71e99 (patch) | |
tree | 97a61cd7e293d7ae9d56ef7ed0f81253365bb026 /scripts/send-error-report | |
download | poky-972dcfcdbfe75dcfeb777150c136576cf1a71e99.tar.gz |
initial commit for Enea Linux 5.0 arm
Signed-off-by: Tudor Florea <tudor.florea@enea.com>
Diffstat (limited to 'scripts/send-error-report')
-rwxr-xr-x | scripts/send-error-report | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/scripts/send-error-report b/scripts/send-error-report new file mode 100755 index 0000000000..01c292ead1 --- /dev/null +++ b/scripts/send-error-report | |||
@@ -0,0 +1,114 @@ | |||
1 | #!/usr/bin/env python | ||
2 | |||
3 | # Sends an error report (if the report-error class was enabled) to a remote server. | ||
4 | # | ||
5 | # Copyright (C) 2013 Intel Corporation | ||
6 | # Author: Andreea Proca <andreea.b.proca@intel.com> | ||
7 | |||
8 | |||
9 | |||
10 | import httplib, urllib, os, sys, json, base64 | ||
11 | from urllib2 import _parse_proxy as parseproxy | ||
12 | |||
13 | |||
14 | def handle_connection(server, data): | ||
15 | params = urllib.urlencode({'data': data}) | ||
16 | headers = {"Content-type": "application/json"} | ||
17 | proxyrequired = False | ||
18 | if os.environ.get("http_proxy") or os.environ.get("HTTP_PROXY"): | ||
19 | proxyrequired = True | ||
20 | # we need to check that the server isn't a local one, as in no_proxy | ||
21 | try: | ||
22 | temp = httplib.HTTPConnection(server, strict=True, timeout=5) | ||
23 | temp.request("GET", "/Errors/") | ||
24 | tempres = temp.getresponse() | ||
25 | if tempres.status == 200: | ||
26 | proxyrequired = False | ||
27 | temp.close() | ||
28 | except: | ||
29 | pass | ||
30 | |||
31 | if proxyrequired: | ||
32 | proxy = parseproxy(os.environ.get("http_proxy") or os.environ.get("HTTP_PROXY")) | ||
33 | if proxy[1] and proxy[2]: | ||
34 | auth = base64.encodestring("%s:%s" % (proxy[1], proxy[2])) | ||
35 | headers["Authorization"] = "Basic %s" % auth | ||
36 | conn = httplib.HTTPConnection(proxy[3]) | ||
37 | conn.request("POST", "http://%s/ClientPost/" % server, params, headers) | ||
38 | else: | ||
39 | conn = httplib.HTTPConnection(server) | ||
40 | conn.request("POST", "/ClientPost/", params, headers) | ||
41 | |||
42 | return conn | ||
43 | |||
44 | |||
45 | def sendData(json_file, server): | ||
46 | |||
47 | if os.path.isfile(json_file): | ||
48 | |||
49 | home = os.path.expanduser("~") | ||
50 | userfile = os.path.join(home, ".oe-send-error") | ||
51 | if os.path.isfile(userfile): | ||
52 | with open(userfile) as g: | ||
53 | username = g.readline() | ||
54 | email = g.readline() | ||
55 | else: | ||
56 | print("Please enter your name and your email (optionally), they'll be saved in the file you send.") | ||
57 | username = raw_input("Name: ") | ||
58 | email = raw_input("E-mail (not required): ") | ||
59 | if len(username) > 0 and len(username) < 50: | ||
60 | with open(userfile, "w") as g: | ||
61 | g.write(username + "\n") | ||
62 | g.write(email + "\n") | ||
63 | else: | ||
64 | print("Invalid inputs, try again.") | ||
65 | sys.exit(1) | ||
66 | return | ||
67 | |||
68 | with open(json_file) as f: | ||
69 | data = f.read() | ||
70 | |||
71 | try: | ||
72 | jsondata = json.loads(data) | ||
73 | jsondata['username'] = username.strip() | ||
74 | jsondata['email'] = email.strip() | ||
75 | data = json.dumps(jsondata, indent=4, sort_keys=True) | ||
76 | except: | ||
77 | print("Invalid json data") | ||
78 | sys.exit(1) | ||
79 | return | ||
80 | |||
81 | try: | ||
82 | conn = handle_connection(server, data) | ||
83 | response = conn.getresponse() | ||
84 | print response.status, response.reason | ||
85 | res = response.read() | ||
86 | if response.status == 200: | ||
87 | print(res) | ||
88 | else: | ||
89 | print("There was a problem submiting your data, response written in %s.response.html" % json_file) | ||
90 | with open("%s.response.html" % json_file, "w") as f: | ||
91 | f.write(res) | ||
92 | sys.exit(1) | ||
93 | conn.close() | ||
94 | except Exception as e: | ||
95 | print("Server connection failed: %s" % e) | ||
96 | sys.exit(1) | ||
97 | else: | ||
98 | print("No data file found.") | ||
99 | sys.exit(1) | ||
100 | |||
101 | |||
102 | if __name__ == '__main__': | ||
103 | print ("\nSends an error report (if the report-error class was enabled) to a remote server.") | ||
104 | print("\nThis scripts sends the contents of the error to a public upstream server.") | ||
105 | print("\nPlease remove any identifying information before sending.") | ||
106 | if len(sys.argv) < 2: | ||
107 | print("\nUsage: send-error-report <error_fileName> [server]") | ||
108 | print("\nIf this is the first when sending a report you'll be asked for your name and optionally your email address.") | ||
109 | print("They will be associated with your report.\n") | ||
110 | |||
111 | elif len(sys.argv) == 3: | ||
112 | sendData(sys.argv[1], sys.argv[2]) | ||
113 | else: | ||
114 | sendData(sys.argv[1], "errors.yoctoproject.org") | ||