2
2
# licensed under the GNU Affero General Public License version 3 (see
5
from datetime import datetime
8
from urllib2 import urlopen
10
7
from config import STORE_IN_QUEUE
11
8
from config import STORE_OUT_QUEUE
12
from config import STORE_URL
13
9
from utils import get_queues
15
log = logging.getLogger("charm.store")
18
def check_store(charm):
19
if charm['owner'] == 'charmers':
20
address = "cs:%s/%s" % (charm["series"], charm["name"])
22
address = "cs:~%s/%s/%s" % (
23
charm["owner"], charm["series"], charm["name"])
25
data = _store_get(address)
27
if 'errors' in data or 'warnings' in data:
28
if charm['owner'] == 'charmers':
29
log.info("rechecking %s with ~charmers", address)
30
retry_address = "cs:~%s/%s/%s" % (
31
charm["owner"], charm["series"], charm["name"])
32
retry_data = _store_get(retry_address)
34
# Update the url to the user qualified name.
35
# if not 'errors' in retry_data \
36
# and not 'warnings' in retry_data:
38
address = retry_address
40
if 'errors' in data or 'warnings' in data:
41
log.warning("store error on %s %s" % (address, data))
43
data["store_checked"] = datetime.now().ctime()
45
charm['store_data'] = data
46
charm['store_url'] = address + "-%d" % data['revision']
49
def _store_get(address):
50
url = STORE_URL + "/charm-info?charms=%s&stats=0" % address
51
contents = urlopen(url).read()
52
data = json.loads(contents)
54
data['address'] = address
58
def run(in_queue, out_queue):
60
item = in_queue.next()
64
charm_data = item.payload
65
log.debug("Checking store for %s", charm_data["branch_spec"])
66
check_store(charm_data)
68
log.exception("store error on %s: %s", charm_data, str(e))
71
out_queue.put(charm_data)
73
# Remove the job from the input queue.
10
from worker import check_charms_store
77
13
if __name__ == '__main__':