2015-03-09 21:57:41 +00:00
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
"""
|
2015-08-29 23:16:14 +00:00
|
|
|
wakatime.main
|
2015-03-09 21:57:41 +00:00
|
|
|
~~~~~~~~~~~~~
|
|
|
|
|
2017-02-20 20:40:24 +00:00
|
|
|
Module entry point.
|
2015-03-09 21:57:41 +00:00
|
|
|
|
|
|
|
:copyright: (c) 2013 Alan Hamlett.
|
|
|
|
:license: BSD, see LICENSE for more details.
|
|
|
|
"""
|
|
|
|
|
|
|
|
from __future__ import print_function
|
|
|
|
|
|
|
|
import logging
|
|
|
|
import os
|
|
|
|
import sys
|
2018-10-05 06:59:23 +00:00
|
|
|
import time
|
2015-03-09 21:57:41 +00:00
|
|
|
import traceback
|
|
|
|
|
2016-03-06 20:42:54 +00:00
|
|
|
pwd = os.path.dirname(os.path.abspath(__file__))
|
|
|
|
sys.path.insert(0, os.path.dirname(pwd))
|
|
|
|
sys.path.insert(0, os.path.join(pwd, 'packages'))
|
2015-03-09 21:57:41 +00:00
|
|
|
|
|
|
|
from .__about__ import __version__
|
2019-05-07 07:50:08 +00:00
|
|
|
from .api import send_heartbeats, get_time_today
|
2017-11-09 06:54:33 +00:00
|
|
|
from .arguments import parse_arguments
|
|
|
|
from .compat import u, json
|
2018-09-21 05:16:48 +00:00
|
|
|
from .constants import SUCCESS, UNKNOWN_ERROR, HEARTBEATS_PER_REQUEST
|
2015-04-01 19:48:42 +00:00
|
|
|
from .logger import setup_logging
|
2017-04-23 02:40:25 +00:00
|
|
|
|
|
|
|
log = logging.getLogger('WakaTime')
|
|
|
|
|
2017-11-09 06:54:33 +00:00
|
|
|
from .heartbeat import Heartbeat
|
2015-05-12 21:58:20 +00:00
|
|
|
from .offlinequeue import Queue
|
2016-04-20 22:30:44 +00:00
|
|
|
|
|
|
|
|
2015-09-07 00:18:15 +00:00
|
|
|
def execute(argv=None):
|
|
|
|
if argv:
|
|
|
|
sys.argv = ['wakatime'] + argv
|
2015-03-09 21:57:41 +00:00
|
|
|
|
2017-11-09 06:54:33 +00:00
|
|
|
args, configs = parse_arguments()
|
2015-03-09 21:57:41 +00:00
|
|
|
|
|
|
|
setup_logging(args, __version__)
|
|
|
|
|
2019-05-08 00:49:07 +00:00
|
|
|
if args.today:
|
2019-06-06 16:59:35 +00:00
|
|
|
text, retval = get_time_today(args, configs)
|
2019-05-07 07:12:30 +00:00
|
|
|
if text:
|
|
|
|
print(text)
|
|
|
|
return retval
|
|
|
|
|
2015-10-23 07:14:41 +00:00
|
|
|
try:
|
2017-11-09 06:54:33 +00:00
|
|
|
heartbeats = []
|
2015-10-23 07:14:41 +00:00
|
|
|
|
2017-11-09 06:54:33 +00:00
|
|
|
hb = Heartbeat(vars(args), args, configs)
|
|
|
|
if hb:
|
|
|
|
heartbeats.append(hb)
|
|
|
|
else:
|
|
|
|
log.debug(hb.skip)
|
2016-04-20 22:30:44 +00:00
|
|
|
|
|
|
|
if args.extra_heartbeats:
|
2016-04-28 17:25:52 +00:00
|
|
|
try:
|
2017-11-09 06:54:33 +00:00
|
|
|
for extra_data in json.loads(sys.stdin.readline()):
|
|
|
|
hb = Heartbeat(extra_data, args, configs)
|
|
|
|
if hb:
|
|
|
|
heartbeats.append(hb)
|
|
|
|
else:
|
|
|
|
log.debug(hb.skip)
|
|
|
|
except json.JSONDecodeError as ex:
|
|
|
|
log.warning(u('Malformed extra heartbeats json: {msg}').format(
|
|
|
|
msg=u(ex),
|
|
|
|
))
|
2016-04-28 17:25:52 +00:00
|
|
|
|
2018-09-21 05:16:48 +00:00
|
|
|
retval = SUCCESS
|
|
|
|
while heartbeats:
|
|
|
|
retval = send_heartbeats(heartbeats[:HEARTBEATS_PER_REQUEST], args, configs)
|
|
|
|
heartbeats = heartbeats[HEARTBEATS_PER_REQUEST:]
|
|
|
|
if retval != SUCCESS:
|
|
|
|
break
|
|
|
|
|
|
|
|
if heartbeats:
|
|
|
|
Queue(args, configs).push_many(heartbeats)
|
|
|
|
|
2016-04-28 17:25:52 +00:00
|
|
|
if retval == SUCCESS:
|
2017-11-09 06:54:33 +00:00
|
|
|
queue = Queue(args, configs)
|
2018-09-20 17:14:25 +00:00
|
|
|
for offline_heartbeats in queue.pop_many(args.sync_offline_activity):
|
2018-10-05 06:59:23 +00:00
|
|
|
time.sleep(1)
|
2017-11-09 06:54:33 +00:00
|
|
|
retval = send_heartbeats(offline_heartbeats, args, configs)
|
2018-09-21 05:16:48 +00:00
|
|
|
if retval != SUCCESS:
|
|
|
|
break
|
2016-04-20 22:30:44 +00:00
|
|
|
|
|
|
|
return retval
|
2015-03-09 21:57:41 +00:00
|
|
|
|
2015-10-23 07:14:41 +00:00
|
|
|
except:
|
2016-09-01 09:49:12 +00:00
|
|
|
log.traceback(logging.ERROR)
|
2016-04-20 22:30:44 +00:00
|
|
|
print(traceback.format_exc())
|
2016-03-06 22:07:47 +00:00
|
|
|
return UNKNOWN_ERROR
|