Merge lp:~brian-murray/errors/newbuckets into lp:errors

Proposed by Brian Murray
Status: Merged
Merged at revision: 383
Proposed branch: lp:~brian-murray/errors/newbuckets
Merge into: lp:errors
Diff against target: 88 lines (+48/-1)
3 files modified
errors/api/resources.py (+17/-0)
errors/api/urls.py (+3/-1)
errors/cassandra.py (+28/-0)
To merge this branch: bzr merge lp:~brian-murray/errors/newbuckets
Reviewer Review Type Date Requested Status
Daisy Pluckers Pending
Review via email: mp+158244@code.launchpad.net

Description of the change

I've added an API method for checking SourceVersionBuckets to see if there are new buckets in a specific version of a package compared to a previous version.

Jockey will return something:

http://10.0.3.182/api/1.0/package-version-new-buckets/?format=json&package=jockey&previous_version=0.9.7-0ubuntu7.7&new_version=0.9.7-0ubuntu7.8

To post a comment you must log in.
Revision history for this message
Evan (ev) wrote :
Revision history for this message
Evan (ev) wrote :

Otherwise, this looks good!

Thanks

Revision history for this message
Evan (ev) wrote :

I've since noticed that the backfill RT didn't complete :)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'errors/api/resources.py'
2--- errors/api/resources.py 2013-03-28 00:49:31 +0000
3+++ errors/api/resources.py 2013-04-10 23:41:26 +0000
4@@ -330,6 +330,23 @@
5 yield ResultObject(result)
6 return wrapped()
7
8+class PackageVersionNewBuckets(ErrorsResource):
9+ function = fields.CharField(attribute='function', readonly=True)
10+ class Meta(ErrorsMeta):
11+ resource_name = 'package-version-new-buckets'
12+
13+ def obj_get_list(self, request):
14+ src_package = request.GET.get('package', None)
15+ previous_version = request.GET.get('previous_version', None)
16+ new_version = request.GET.get('new_version', None)
17+ class wrapped(list):
18+ def __getslice__(self, start, finish):
19+ results = cassandra.get_package_new_buckets(src_package,
20+ previous_version, new_version)
21+ for bucket in results:
22+ yield ResultObject({'function': bucket })
23+ return wrapped()
24+
25 class InstanceResource(ErrorsResource):
26 instance = fields.DictField(attribute='instance', readonly=True)
27 class Meta(ErrorsMeta):
28
29=== modified file 'errors/api/urls.py'
30--- errors/api/urls.py 2013-03-28 00:49:31 +0000
31+++ errors/api/urls.py 2013-04-10 23:41:26 +0000
32@@ -16,7 +16,8 @@
33 InstancesResource,
34 VersionsResource,
35 PackageVersionIsMostRecent,
36- CrashSignaturesForBug)
37+ CrashSignaturesForBug,
38+ PackageVersionNewBuckets)
39
40 v1_api = Api(api_name='1.0')
41 v1_api.register(RetraceResultResource())
42@@ -36,6 +37,7 @@
43 v1_api.register(InstancesResource())
44 v1_api.register(VersionsResource())
45 v1_api.register(CrashSignaturesForBug())
46+v1_api.register(PackageVersionNewBuckets())
47
48 urlpatterns = patterns('',
49 url(r'^', include(v1_api.urls)),
50
51=== modified file 'errors/cassandra.py'
52--- errors/cassandra.py 2013-04-06 17:45:55 +0000
53+++ errors/cassandra.py 2013-04-10 23:41:26 +0000
54@@ -467,6 +467,34 @@
55 results['this_count'] = today_crashes
56 return results
57
58+def get_package_new_buckets(src_pkg, previous_version, new_version):
59+ srcversionbuckets_cf = pycassa.ColumnFamily(pool, 'SourceVersionBuckets')
60+ bucketsystems_cf = pycassa.ColumnFamily(pool, 'BucketSystems')
61+ data = srcversionbuckets_cf.multiget([(src_pkg, previous_version),
62+ (src_pkg, new_version)])
63+ results = []
64+ # new version has no buckets
65+ try:
66+ data[(src_pkg, new_version)]
67+ except KeyError:
68+ return results
69+ # if previous version has no buckets return an empty list
70+ try:
71+ data[(src_pkg, previous_version)]
72+ except KeyError:
73+ data[(src_pkg, previous_version)] = []
74+ new_buckets = set(data[src_pkg, new_version]).difference(set(data[src_pkg,
75+ previous_version]))
76+ for bucket in new_buckets:
77+ try:
78+ count = len(bucketsystems_cf.get(bucket, column_count=4))
79+ except NotFoundException:
80+ continue
81+ if count <= 3:
82+ continue
83+ results.append(bucket)
84+ return results
85+
86 def record_bug_for_bucket(bucketid, bug):
87 bucketmetadata_cf = pycassa.ColumnFamily(pool, 'BucketMetadata')
88 bugtocrashsignatures_cf = pycassa.ColumnFamily(pool, 'BugToCrashSignatures')

Subscribers

People subscribed via source and target branches

to all changes: