#!/usr/bin/env python
#-*- encoding: utf-8 -*-

import sys
import time

sys.path.insert(0, '/opt/direct-py/startrek-python-client-sni-fix')
from startrek_client import Startrek


TRIES_NUM = 40
INTERVAL = 0.1
TICKET = 'DIRECT-106319'
TESTS_NUM = 50
STARTREK_TOKEN_FILE = u'/etc/direct-tokens/startrek'
STARTREK_TOKEN = open(STARTREK_TOKEN_FILE).readline().rstrip()


def run_with_retries(f):
    start_time = time.time()
    end_time = 0.0
    retry_attempts = 0
 
    for j in xrange(TRIES_NUM):
        try:
            f()
            retry_attempts = j
            break
        except Exception as e:
            print 'Exception (iteration %d): %s %s' % (j, e, type(e))
            end_time = time.time()
            time.sleep(INTERVAL)
 
    return max(end_time - start_time, 0.0), retry_attempts


def main():
    startrek = Startrek(token=STARTREK_TOKEN, useragent='ppc')
    max_lag = 0.0
    max_retry_attempts = 0

    for i in xrange(TESTS_NUM):
         print 'Create test: %d' % i
         result = run_with_retries(
             lambda: startrek.issues[TICKET].comments.create(text='iteration: %d' % i)
         )
         max_lag = max(max_lag, result[0])
         max_retry_attempts = max(max_retry_attempts, result[1])

         result = run_with_retries(
             lambda: startrek.issues[TICKET].update(
                 tags=startrek.issues[TICKET].tags + ['lag_test_tag%d' % i]
             )
         )
         max_lag = max(max_lag, result[0])
         max_retry_attempts = max(max_retry_attempts, result[1])

         print '#'

    print '-' * 40
    comments_ids = [comment['id'] for comment in startrek.issues[TICKET].comments.get_all()]
    for i in xrange(TESTS_NUM):
         print 'Delete test: %d' % i
         result = run_with_retries(lambda: startrek.issues[TICKET].comments[comments_ids[i]].delete())
         max_lag = max(max_lag, result[0])
         max_retry_attempts = max(max_retry_attempts, result[1])

         result = run_with_retries(
             lambda: startrek.issues[TICKET].update(
                 tags=[tag for tag in startrek.issues[TICKET].tags if tag != 'lag_test_tag%d' % i]
             )
         )
         max_lag = max(max_lag, result[0])
         max_retry_attempts = max(max_retry_attempts, result[1])

         print '#'

    print '-' * 40
    print 'max lag: %.2f' % max_lag
    print 'max retry attempts: %d' % max_retry_attempts


if __name__ == '__main__':
    main()

