]>
git.ipfire.org Git - oddments/fireinfo.git/blob - sendprofile
2 ###############################################################################
5 # Copyright (C) 2010, 2011 IPFire Team (www.ipfire.org) #
7 # This program is free software: you can redistribute it and/or modify #
8 # it under the terms of the GNU General Public License as published by #
9 # the Free Software Foundation, either version 3 of the License, or #
10 # (at your option) any later version. #
12 # This program is distributed in the hope that it will be useful, #
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of #
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
15 # GNU General Public License for more details. #
17 # You should have received a copy of the GNU General Public License #
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. #
20 ###############################################################################
24 import logging
.handlers
32 ENABLED_FILE
= "/var/ipfire/main/send_profile"
33 PROXY_SETTINGS
= "/var/ipfire/proxy/advanced/settings"
35 log_level
= logging
.INFO
37 log_level
= logging
.DEBUG
40 log
= logging
.getLogger()
41 log
.setLevel(log_level
)
42 log
.addHandler(logging
.handlers
.SysLogHandler("/dev/log"))
43 log
.addHandler(logging
.StreamHandler(sys
.stderr
))
44 for handler
in log
.handlers
:
45 handler
.setLevel(log_level
)
47 PROFILE_URL
= "http://fireinfo.ipfire.org/send/%(public_id)s"
49 def get_upstream_proxy():
50 if not os
.path
.exists(PROXY_SETTINGS
):
54 with
open(PROXY_SETTINGS
) as f
:
55 for line
in f
.readlines():
56 k
, v
= line
.split("=", 1)
57 proxy_settings
[k
] = v
.strip()
60 "host" : proxy_settings
.get("UPSTREAM_PROXY", ""),
61 "user" : proxy_settings
.get("UPSTREAM_USER", ""),
62 "pass" : proxy_settings
.get("UPSTREAM_PASSWORD", ""),
65 def send_profile(profile
):
66 logging
.debug("Sending profile:")
67 for line
in json
.dumps(profile
, sort_keys
=True, indent
=4).splitlines():
70 request
= urllib2
.Request(PROFILE_URL
% profile
,
71 data
= urllib
.urlencode({"profile" : json
.dumps(profile
)}),
73 request
.add_header("User-Agent", "fireinfo/%s" % fireinfo
.__version
__)
75 # Set upstream proxy if we have one.
76 # XXX this cannot handle authentication
77 proxy
= get_upstream_proxy()
79 request
.set_proxy(proxy
["host"], "http")
82 urllib2
.urlopen(request
, timeout
=60)
83 except (urllib2
.HTTPError
, urllib2
.URLError
), e
:
84 reason
= "Unknown reason"
86 if isinstance(e
, urllib2
.HTTPError
):
88 elif isinstance(e
, urllib2
.URLError
):
91 logging
.error("Profile was not sent propertly: %s" % reason
)
94 logging
.debug("Profile was sent successfully.")
97 # Collect system information
98 system
= fireinfo
.System()
99 profile
= system
.profile()
101 # If --dump is passed -> only dump the output.
102 if "--dump" in sys
.argv
:
103 # Remove the private id when dumping the profile because
104 # it contains no information and may confuse people.
105 del profile
["private_id"]
107 print json
.dumps(profile
, sort_keys
=True, indent
=4)
110 if "--secret-id" in sys
.argv
:
111 print system
.secret_id
114 if "--hardware-string" in sys
.argv
:
115 print system
._unique
_id
118 if "--public-id" in sys
.argv
:
119 print system
.public_id
122 if not os
.path
.exists(ENABLED_FILE
):
123 del profile
["profile"]
126 send_profile(profile
)
127 except urllib2
.URLError
: