#!/usr/bin/env python

import argparse
import os
from datetime import timedelta
import json
from flask_scenario_testing.analysis.Results import Results
from flask_scenario_testing.analysis.segmenters.TimeWindowedSegmenter import TimeWindowedSegmenter
from flask_scenario_testing.analysis.services.ComputeTransactionSignature import ComputeTransactionSignature

parser = argparse.ArgumentParser(description='Extract signatures from output file')
parser.add_argument('--file', metavar='file', type=str, help='Output file of backend', required=True)
parser.add_argument('--output', metavar='output', type=str, help='File to write signature to', required=True)

args = parser.parse_args()

absolute_input_dir = os.path.abspath(args.file)
absolute_output_dir = os.path.abspath(args.output)

segmenter = TimeWindowedSegmenter(timedelta(seconds=30))

results = Results.from_json(absolute_input_dir)

service = ComputeTransactionSignature(results, segmenter)

assert len(results.scenarios()) == 1

scenario = results.scenarios()[0]

signature = service.compute_signature(scenario)

output = {
    'name': args.file,
    'signature': [
        {'endpoint': s.endpoint_name, 'service_time': s.value, 'regression': False} for s in signature
    ]
}

with open(absolute_output_dir, 'w') as outfile:
    json.dump(output, outfile, indent=4)