#!/usr/bin/env python3
#
# Checker for 'throughput' task limits
#

import pscheduler

logger = pscheduler.Log(quiet=True)

#
# Load and validate everything
#

def check_limit(input_json):

    spec = input_json["spec"]
    limit = input_json["limit"]
    logger.debug("limit = %s" % limit)

    #
    # Handle source, dest and endpoint limits
    #
    errors = pscheduler.check_endpoint_limits(limit, spec)
    
    #
    # Handle numeric ranges
    #
    numeric_ranges = [
        ("bandwidth", "Bandwidth"),
        ("parallel", "Parallel"),
    ]
    for nr in numeric_ranges:
        errors += pscheduler.check_numeric_limit(limit, spec, nr[0], description=nr[1])
        
    #
    # Duration
    #
    errors += pscheduler.check_duration_limit(limit, spec, 'duration', description='Duration')

    #
    # Allow UDP or not
    #
    errors += pscheduler.check_boolean_limit(limit, spec, 'udp', description='UDP')
        
    #
    # Restrict ip-version
    #
    errors += pscheduler.check_enum_limit(limit, spec, 'ip-version', description='IP Version')
    

    return errors

try:
    json = pscheduler.json_load(max_schema=1)
except ValueError as ex:
    pscheduler.fail("Invalid JSON: %s" % str(ex))

errors = check_limit(json)

result = { "passes": not errors }

if errors:
    result["errors"] = errors

pscheduler.succeed_json(result)


