#!/usr/bin/python

# (c) 2012, Michael DeHaan <michael.dehaan@gmail.com>, and others
#
# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible.  If not, see <http://www.gnu.org/licenses/>.
#

try:
    import json
except ImportError:
    import simplejson as json

import subprocess
import sys
import datetime
import traceback
import shlex
import os

argfile = sys.argv[1]
args = open(argfile, 'r').read()

shell = False

if args.find("#USE_SHELL") != -1:
   args = args.replace("#USE_SHELL", "")
   shell = True

if not shell:
    args = shlex.split(args)

startd = datetime.datetime.now()

try:
    cmd = subprocess.Popen(args, shell=shell, 
        stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    out, err = cmd.communicate()
except (OSError, IOError), e:
    print json.dumps({
        "cmd"    : args,
        "failed" : 1,
        "msg"    : str(e),
        })
    sys.exit(1)
except:
    print json.dumps({
        "failed" : 1,
        "msg" : traceback.format_exc()
    })   
    sys.exit(1)

endd = datetime.datetime.now()
delta = endd - startd

if out is None:
   out = ''
if err is None:
   err = ''

result = {
   "cmd"    : args,
   "stdout" : out.strip(),
   "stderr" : err.strip(),
   "rc"     : cmd.returncode,
   "start"  : str(startd),
   "end"    : str(endd),
   "delta"  : str(delta),
}

print json.dumps(result)