Skip to content

Commit e6e92a6

Browse files
sfrieselFernando Álvarez
authored andcommitted
Detect successful deploy in push --ship
1 parent f231f63 commit e6e92a6

1 file changed

Lines changed: 34 additions & 20 deletions

File tree

‎cctrl/app.py‎

Lines changed: 34 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1029,24 +1029,36 @@ def log(self, args):
10291029
print_log_entries(logEntries, args.type)
10301030
time.sleep(2)
10311031

1032-
def log_from_now(self, app_name, deployment_name, type_):
1033-
last_time = datetime.now() - timedelta(seconds=10)
1034-
while True:
1035-
logEntries = []
1036-
try:
1037-
logEntries = self.api.read_log(
1038-
app_name,
1039-
deployment_name,
1040-
type_,
1041-
last_time=last_time)
1042-
except GoneError:
1043-
raise InputErrorException('WrongApplication')
1032+
def log_lines_look_successful(self, log_lines, containers, version):
1033+
container_lines = 0
1034+
for line in log_lines:
1035+
if line == 'Deployed version: %s' % version:
1036+
container_lines += 1
1037+
if container_lines == containers and line == "Routing requests to new version":
1038+
return True
1039+
return False
10441040

1045-
if len(logEntries) > 0:
1046-
last_time = datetime.fromtimestamp(float(logEntries[-1]["time"]))
1047-
print_log_entries(logEntries, type_)
1041+
def is_deploy_successful(self, app_name, deployment_name, ts, containers, version):
1042+
print "version:", version
1043+
printed_lines = 0
1044+
log_start_time = datetime.fromtimestamp(ts) - timedelta(seconds=1)
1045+
start_time = ts
1046+
while time.time() < start_time + 130:
1047+
log_entries = self.api.read_log(
1048+
app_name,
1049+
deployment_name,
1050+
'deploy',
1051+
last_time=log_start_time)
1052+
1053+
print_log_entries(log_entries[printed_lines:], 'deploy')
1054+
printed_lines = len(log_entries)
1055+
1056+
log_lines = [line['message'] for line in log_entries]
1057+
if self.log_lines_look_successful(log_lines, containers, version):
1058+
return True
10481059

10491060
time.sleep(1)
1061+
return False
10501062

10511063
def _get_or_create_deployment(self, app_name, deployment_name, clear_cache):
10521064
try:
@@ -1123,6 +1135,7 @@ def push(self, args):
11231135
11241136
If no deployment exists we automatically create one.
11251137
1138+
If --ship is provided, also deploy the deployment and open it in a browser.
11261139
11271140
"""
11281141
if not check_installed_rcs('bzr') and not check_installed_rcs('git'):
@@ -1148,13 +1161,14 @@ def push(self, args):
11481161
self.redeploy(deployment)
11491162

11501163
if args.ship:
1151-
print
1152-
print "Deploying newest version. Press Ctrl+C to open {} in your browser.".format(deployment['name'])
1164+
ts = time.time()
11531165
self.redeploy(deployment)
1166+
deployment = self.api.read_deployment(app_name, deployment_name)
11541167

1155-
try:
1156-
self.log_from_now(app_name, deployment_name, 'deploy')
1157-
except KeyboardInterrupt:
1168+
if not self.is_deploy_successful(app_name, deployment_name, ts, deployment['min_boxes'], deployment['version']):
1169+
sys.exit(1)
1170+
1171+
if sys.stdout.isatty():
11581172
print
11591173
print "Opening in browser..."
11601174
self._open(self._get_deployment_url(deployment))

0 commit comments

Comments
 (0)