#!/usr/bin/env python
# Copyright (c) 2017 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.


"""This script should be run on a Swarming bot as part of leasing.skia.org."""


from __future__ import print_function
import argparse
import json
import os
import sys
import time
import urllib2


POLLING_WAIT_TIME_SECS = 60


def main():
  parser = argparse.ArgumentParser()
  parser.add_argument('-s', '--leasing-server', required=True, type=str,
                      help='The leasing server this script will poll. '
                           'Eg: leasing.skia.org')
  parser.add_argument('-t', '--task-id', required=True, type=str,
                      help='The taskID of this swarming task.')
  parser.add_argument('-o', '--os-type', required=True, type=str,
                      help='The Os Type this script is running on.')
  parser.add_argument('-c', '--debug-command', required=True, type=str,
                      help='The command users can use to run the debug task.')
  parser.add_argument('-r', '--command-relative-dir', required=True, type=str,
                      help='The directory the command should be run in.')
  args = parser.parse_args()

  if args.debug_command:
    print('Files are mapped into: ')
    print(os.getcwd())
    print()
    print('Original command: ')
    print(args.debug_command)
    print()
    print('Dir to run command in: ')
    print(os.path.join(os.getcwd(), args.command_relative_dir))
    print()
  print()
  print('Please cleanup after you are done debugging or when you get the '
        '15 min warning email!')
  sys.stdout.flush()

  while True:
    get_task_status_url = 'http://%s/_/get_task_status?task=%s' % (
        args.leasing_server, args.task_id)
    try:
      resp = urllib2.urlopen(get_task_status_url)
      output = json.load(resp)
      if output['Expired']:
        break
    except urllib2.HTTPError as e:
      print('Could not contact the leasing server: %s' % e)

    time.sleep(POLLING_WAIT_TIME_SECS)

  print('The lease time has expired.')
  print('Failing the task so that swarming reboots the host.')
  # Fail the task so that swarming reboots the host. This will force all SSH'ed
  # users to disconnect.
  return 1


if __name__ == '__main__':
  sys.exit(main())
