Merge lp:~ack/landscape-client/package-reporter-run-timestamp into lp:~landscape/landscape-client/trunk

Proposed by Alberto Donato
Status: Merged
Approved by: Alberto Donato
Approved revision: 962
Merged at revision: 963
Proposed branch: lp:~ack/landscape-client/package-reporter-run-timestamp
Merge into: lp:~landscape/landscape-client/trunk
Diff against target: 165 lines (+45/-13)
3 files modified
landscape/message_schemas.py (+6/-3)
landscape/package/reporter.py (+5/-2)
landscape/package/tests/test_reporter.py (+34/-8)
To merge this branch: bzr merge lp:~ack/landscape-client/package-reporter-run-timestamp
Reviewer Review Type Date Requested Status
Free Ekanayaka (community) Approve
Adam Collard (community) Approve
🤖 Landscape Builder test results Approve
Review via email: mp+320174@code.launchpad.net

Commit message

Add a timestamp to the package reporter result.
This will be used from the server to show when the package reporting was last attempted, since there's currently no indication on when the information was updated.

There's no need to bump the API version in this case, since the change is backwards compatible, and the extra field will be just ignored by older servers.

Description of the change

Add a timestamp to the package reporter result.
This will be used from the server to show when the package reporting was last attempted, since there's currently no indication on when the information was updated.

There's no need to bump the API version in this case, since the change is backwards compatible, and the extra field will be just ignored by older servers.

To post a comment you must log in.
962. By Alberto Donato

Merge from trunk.

Revision history for this message
🤖 Landscape Builder (landscape-builder) :
review: Abstain (executing tests)
Revision history for this message
🤖 Landscape Builder (landscape-builder) wrote :

Command: TRIAL_ARGS=-j4 make check
Result: Success
Revno: 962
Branch: lp:~ack/landscape-client/package-reporter-run-timestamp
Jenkins: https://ci.lscape.net/job/latch-test-xenial/3636/

review: Approve (test results)
Revision history for this message
🤖 Landscape Builder (landscape-builder) :
review: Abstain (executing tests)
Revision history for this message
🤖 Landscape Builder (landscape-builder) wrote :

Command: TRIAL_ARGS=-j4 make check
Result: Success
Revno: 962
Branch: lp:~ack/landscape-client/package-reporter-run-timestamp
Jenkins: https://ci.lscape.net/job/latch-test-xenial/3637/

review: Approve (test results)
Revision history for this message
Adam Collard (adam-collard) wrote :

+1, but please add a bug for this

review: Approve
Revision history for this message
Free Ekanayaka (free.ekanayaka) wrote :

+1

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'landscape/message_schemas.py'
2--- landscape/message_schemas.py 2017-01-12 13:56:35 +0000
3+++ landscape/message_schemas.py 2017-03-17 12:14:56 +0000
4@@ -379,9 +379,12 @@
5 "request-id": Int(),
6 })
7
8-PACKAGE_REPORTER_RESULT = Message("package-reporter-result", {
9- "code": Int(),
10- "err": Unicode()})
11+PACKAGE_REPORTER_RESULT = Message(
12+ "package-reporter-result", {
13+ "report-timestamp": Float(),
14+ "code": Int(),
15+ "err": Unicode()},
16+ optional=["report-timestamp"])
17
18 ADD_PACKAGES = Message("add-packages", {
19 "packages": List(KeyDict({"name": Unicode(),
20
21=== modified file 'landscape/package/reporter.py'
22--- landscape/package/reporter.py 2017-03-17 09:26:45 +0000
23+++ landscape/package/reporter.py 2017-03-17 12:14:56 +0000
24@@ -230,6 +230,7 @@
25 self._reactor.call_later(
26 LOCK_RETRY_DELAYS[retry], self._apt_update, deferred)
27 out, err, code = yield deferred
28+ timestamp = self._reactor.time()
29
30 touch_file(self._config.update_stamp_filename)
31 logging.debug(
32@@ -264,7 +265,8 @@
33 self.sources_list_directory))
34
35 yield self._broker.call_if_accepted(
36- "package-reporter-result", self.send_result, code, err)
37+ "package-reporter-result", self.send_result, timestamp,
38+ code, err)
39 yield returnValue((out, err, code))
40 else:
41 logging.debug("'%s' didn't run, update interval has not passed" %
42@@ -288,12 +290,13 @@
43
44 return result.addCallback(callback, deferred)
45
46- def send_result(self, code, err):
47+ def send_result(self, timestamp, code, err):
48 """
49 Report the package reporter result to the server in a message.
50 """
51 message = {
52 "type": "package-reporter-result",
53+ "report-timestamp": timestamp,
54 "code": code,
55 "err": err}
56 return self.send_message(message)
57
58=== modified file 'landscape/package/tests/test_reporter.py'
59--- landscape/package/tests/test_reporter.py 2017-03-17 09:26:45 +0000
60+++ landscape/package/tests/test_reporter.py 2017-03-17 12:14:56 +0000
61@@ -1274,6 +1274,32 @@
62 self.reactor.advance(20)
63 return result
64
65+ def test_run_apt_update_report_timestamp(self):
66+ """
67+ The package-report-result message includes a timestamp of the apt
68+ update run.
69+ """
70+ message_store = self.broker_service.message_store
71+ message_store.set_accepted_types(["package-reporter-result"])
72+ self._make_fake_apt_update(err="")
73+ deferred = Deferred()
74+
75+ def do_test():
76+ self.reactor.advance(10)
77+ result = self.reporter.run_apt_update()
78+
79+ def callback(ignore):
80+ self.assertMessages(
81+ message_store.get_pending_messages(),
82+ [{"type": "package-reporter-result",
83+ "report-timestamp": 10.0, "code": 0, "err": u""}])
84+ result.addCallback(callback)
85+ self.reactor.advance(0)
86+ result.chainDeferred(deferred)
87+
88+ reactor.callWhenRunning(do_test)
89+ return deferred
90+
91 def test_run_apt_update_report_apt_failure(self):
92 """
93 If L{PackageReporter.run_apt_update} fails, a message is sent to the
94@@ -1291,7 +1317,7 @@
95 self.assertMessages(
96 message_store.get_pending_messages(),
97 [{"type": "package-reporter-result",
98- "code": 2, "err": u"error"}])
99+ "report-timestamp": 0.0, "code": 2, "err": u"error"}])
100 result.addCallback(callback)
101 self.reactor.advance(0)
102 result.chainDeferred(deferred)
103@@ -1322,7 +1348,7 @@
104 self.assertMessages(
105 message_store.get_pending_messages(),
106 [{"type": "package-reporter-result",
107- "code": 1, "err": error}])
108+ "report-timestamp": 0.0, "code": 1, "err": error}])
109 result.addCallback(callback)
110 self.reactor.advance(0)
111 result.chainDeferred(deferred)
112@@ -1348,7 +1374,7 @@
113 self.assertMessages(
114 message_store.get_pending_messages(),
115 [{"type": "package-reporter-result",
116- "code": 2, "err": u"error"}])
117+ "report-timestamp": 0.0, "code": 2, "err": u"error"}])
118 result.addCallback(callback)
119 self.reactor.advance(0)
120 result.chainDeferred(deferred)
121@@ -1373,7 +1399,7 @@
122 self.assertMessages(
123 message_store.get_pending_messages(),
124 [{"type": "package-reporter-result",
125- "code": 0, "err": u"message"}])
126+ "report-timestamp": 0.0, "code": 0, "err": u"message"}])
127 result.addCallback(callback)
128 self.reactor.advance(0)
129 result.chainDeferred(deferred)
130@@ -1483,7 +1509,7 @@
131 self.assertMessages(
132 message_store.get_pending_messages(),
133 [{"type": "package-reporter-result",
134- "code": 0, "err": u"message"}])
135+ "report-timestamp": 0.0, "code": 0, "err": u"message"}])
136 result.addCallback(callback)
137 self.reactor.advance(0)
138 result.chainDeferred(deferred)
139@@ -1577,7 +1603,7 @@
140 self.assertMessages(
141 message_store.get_pending_messages(),
142 [{"type": "package-reporter-result",
143- "code": 0, "err": u""}])
144+ "report-timestamp": 0.0, "code": 0, "err": u""}])
145 result.addCallback(callback)
146 self.reactor.advance(0)
147 result.chainDeferred(deferred)
148@@ -1614,7 +1640,7 @@
149 self.assertMessages(
150 message_store.get_pending_messages(),
151 [{"type": "package-reporter-result",
152- "code": 0, "err": u""}])
153+ "report-timestamp": 0.0, "code": 0, "err": u""}])
154 result.addCallback(callback)
155 self.reactor.advance(0)
156 result.chainDeferred(deferred)
157@@ -1748,7 +1774,7 @@
158
159 def callback(ignore):
160 message = {"type": "package-reporter-result",
161- "code": 0, "err": u"error"}
162+ "report-timestamp": 0.0, "code": 0, "err": u"error"}
163 self.assertMessages(
164 message_store.get_pending_messages(), [message])
165 stored = list(self.store._db.execute(

Subscribers

People subscribed via source and target branches

to all changes: