1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
"""This module is used to send boot and build report email."""
import bson
import datetime
import handlers.base as hbase
import handlers.common as hcommon
import handlers.response as hresponse
import models
import taskqueue.tasks as taskq
# pylint: disable=too-many-public-methods
class SendHandler(hbase.BaseHandler):
"""Handle the /send URLs."""
def __init__(self, application, request, **kwargs):
super(SendHandler, self).__init__(application, request, **kwargs)
@staticmethod
def _valid_keys(method):
return hcommon.SEND_VALID_KEYS.get(method, None)
def _post(self, *args, **kwargs):
response = hresponse.HandlerResponse(202)
json_obj = kwargs["json_obj"]
db_options = kwargs["db_options"]
mail_options = self.settings["mailoptions"]
self.log.info(
"Email trigger received from IP '%s' for '%s-%s' at %s",
self.request.remote_ip,
json_obj.get("job", None),
json_obj.get("kernel", None),
datetime.datetime.utcnow()
)
countdown = json_obj.get(models.DELAY_KEY, self.settings["senddelay"])
if countdown is None:
countdown = self.settings["senddelay"]
try:
countdown = abs(int(countdown))
when = (
datetime.datetime.now(tz=bson.tz_util.utc) +
datetime.timedelta(seconds=countdown)
)
response.reason = (
"Email report scheduled to be sent at '%s' UTC" %
when.isoformat()
)
taskq.schedule_boot_report.apply_async(
[json_obj, db_options, mail_options, countdown])
except (TypeError, ValueError):
response.status_code = 400
response.reason = (
"Wrong value specified for 'delay': %s" % countdown
)
return response
def execute_delete(self, *args, **kwargs):
"""Perform DELETE pre-operations.
Check that the DELETE request is OK.
"""
response = None
if self.validate_req_token("DELETE"):
response = hresponse.HandlerResponse(501)
else:
response = hresponse.HandlerResponse(403)
response.reason = hcommon.NOT_VALID_TOKEN
return response
def execute_get(self, *args, **kwargs):
"""Execute the GET pre-operations.
Checks that everything is OK to perform a GET.
"""
response = None
if self.validate_req_token("GET"):
response = hresponse.HandlerResponse(501)
else:
response = hresponse.HandlerResponse(403)
response.reason = hcommon.NOT_VALID_TOKEN
return response
|