-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathtasks.py
More file actions
92 lines (83 loc) · 2.56 KB
/
tasks.py
File metadata and controls
92 lines (83 loc) · 2.56 KB
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
# Create your tasks here
import time
import uuid
import logging
from typing import List, Dict
from django.core import signals
from celery import shared_task
from api import manager
from api.exceptions import ServiceUnavailable
from api.models.resource import Resource
logger = logging.getLogger(__name__)
@shared_task(
bind=True,
retry_kwargs={'max_retries': None}
)
def retrieve_resource(self, resource):
task_id = uuid.uuid4().hex
signals.request_started.send(sender=task_id)
try:
if not resource.retrieve():
t = time.time() - resource.created.timestamp()
if t < 3600:
raise self.retry(exc=None, countdown=30)
elif t < 3600 * 12:
raise self.retry(exc=None, countdown=1800)
else:
resource.detach_resource()
except (Exception, Resource.DoesNotExist) as e:
signals.got_request_exception.send(sender=task_id)
if isinstance(e, Resource.DoesNotExist):
logger.exception("retrieve task not found resource: {}".format(resource.id))
else:
raise e
else:
signals.request_finished.send(sender=task_id)
@shared_task(
autoretry_for=(Exception, ),
retry_backoff=8,
retry_jitter=True,
retry_backoff_max=3600,
retry_kwargs={'max_retries': None}
)
def send_measurements(measurements: List[Dict[str, str]]):
task_id = uuid.uuid4().hex
signals.request_started.send(sender=task_id)
try:
measurement = manager.Measurement()
measurement.post(measurements)
except Exception as e:
signals.got_request_exception.send(sender=task_id)
raise e
else:
signals.request_finished.send(sender=task_id)
@shared_task(
autoretry_for=(ServiceUnavailable, ),
retry_jitter=True,
retry_kwargs={'max_retries': 3}
)
def scale_app(app, user, structure):
task_id = uuid.uuid4().hex
signals.request_started.send(sender=task_id)
try:
app.scale(user, structure)
except Exception as e:
signals.got_request_exception.send(sender=task_id)
raise e
else:
signals.request_finished.send(sender=task_id)
@shared_task(
autoretry_for=(ServiceUnavailable, ),
retry_jitter=True,
retry_kwargs={'max_retries': 3}
)
def restart_app(app, **kwargs):
task_id = uuid.uuid4().hex
signals.request_started.send(sender=task_id)
try:
app.restart(**kwargs)
except Exception as e:
signals.got_request_exception.send(sender=task_id)
raise e
else:
signals.request_finished.send(sender=task_id)