]> git.ipfire.org Git - oddments/fireinfo.git/blame - sendprofile
Add check for Qemu hypervisor that identifies as "Bochs".
[oddments/fireinfo.git] / sendprofile
CommitLineData
65891720
MT
1#!/usr/bin/python
2
3import json
4import logging
5import logging.handlers
3fde7e27 6import os
65891720
MT
7import sys
8import urllib
9import urllib2
10
11import fireinfo
12
3fde7e27 13ENABLED_FILE = "/var/ipfire/main/send_profile"
a3560310 14PROXY_SETTINGS = "/var/ipfire/proxy/advanced/settings"
3fde7e27 15
7c181f39
MT
16log_level = logging.INFO
17if "-d" in sys.argv:
18 log_level = logging.DEBUG
65891720
MT
19
20# Setup logging
21log = logging.getLogger()
22log.setLevel(log_level)
23log.addHandler(logging.handlers.SysLogHandler("/dev/log"))
7c181f39 24log.addHandler(logging.StreamHandler(sys.stderr))
65891720
MT
25for handler in log.handlers:
26 handler.setLevel(log_level)
27
97821efd 28PROFILE_URL = "http://fireinfo.ipfire.org/send/%(public_id)s"
65891720 29
a3560310
MT
30def get_upstream_proxy():
31 if not os.path.exists(PROXY_SETTINGS):
32 return
33
34 proxy_settings = {}
35 with open(PROXY_SETTINGS) as f:
36 for line in f.readlines():
37 k, v = line.split("=", 1)
38 proxy_settings[k] = v.strip()
39
40 return {
41 "host" : proxy_settings.get("UPSTREAM_PROXY", ""),
42 "user" : proxy_settings.get("UPSTREAM_USER", ""),
43 "pass" : proxy_settings.get("UPSTREAM_PASSWORD", ""),
44 }
45
65891720
MT
46def send_profile(profile):
47 logging.debug("Sending profile:")
48 for line in json.dumps(profile, sort_keys=True, indent=4).splitlines():
49 logging.debug(line)
50
a3560310
MT
51 request = urllib2.Request(PROFILE_URL % profile,
52 data = urllib.urlencode({"profile" : json.dumps(profile)}),
53 )
d78396e3 54 request.add_header("User-Agent", "fireinfo/%s" % fireinfo.__version__)
a3560310
MT
55
56 # Set upstream proxy if we have one.
57 # XXX this cannot handle authentication
58 proxy = get_upstream_proxy()
59 if proxy["host"]:
60 request.set_proxy(proxy["host"], "http")
61
65891720 62 try:
65891720
MT
63 urllib2.urlopen(request, timeout=60)
64 except (urllib2.HTTPError, urllib2.URLError), e:
65 reason = "Unknown reason"
66
67 if isinstance(e, urllib2.HTTPError):
68 reason = "%s" % e
69 elif isinstance(e, urllib2.URLError):
70 reason = e.reason
71
72 logging.error("Profile was not sent propertly: %s" % reason)
73 return
74
75 logging.debug("Profile was sent successfully.")
76
77def main():
65891720
MT
78 # Collect system information
79 system = fireinfo.System()
3fde7e27 80 profile = system.profile()
67906550
MT
81
82 # If --dump is passed -> only dump the output.
83 if "--dump" in sys.argv:
3fde7e27 84 print json.dumps(profile, sort_keys=True, indent=4)
67906550
MT
85 return 0
86
d20d3659
MT
87 if "--secret-id" in sys.argv:
88 print system.secret_id
89 return 0
90
91 if "--hardware-string" in sys.argv:
92 print system._unique_id
93 return 0
94
3fde7e27
MT
95 if not os.path.exists(ENABLED_FILE):
96 del profile["profile"]
97
65891720 98 try:
3fde7e27 99 send_profile(profile)
65891720
MT
100 except urllib2.URLError:
101 return 1
102
103 return 0
104
105sys.exit(main())