import sys
import random 
import os 

def usageAndExit() : 
    print "Usage: python %s taskfilename taskcount eventcount resourcecount timerange" % sys.argv[0] 
    print "    taskfilename is the output file"
    print "    taskcount is the number of possible task names to generate (see also gen-commands.py)"
    print "    eventcount is the total number of events to generate "
    print "    resourcecount is the total number of resources you can use (named like resource-15)"
    print "    timerange is the average time per task in microseconds" 
    print "-------------------" 
    print "   your args(if any) were : ", sys.argv         
    exit(1)

def parseArgs() :
    if len(sys.argv) < 6 :
        usageAndExit() 
    try : 
        taskfilename = sys.argv[1] 
        taskcount = int(sys.argv[2])
        eventcount = int(sys.argv[3]) 
        resourcecount = int(sys.argv[4])
        timerange = int(sys.argv[5]) 
        return (taskfilename, taskcount, eventcount, resourcecount, timerange) 
    except : 
        usageAndExit() 

# make one task to run
# each task takes a task name (usually something like task17)
# a time in microseconds
# and a list of resources (usually resource-1 ...)
# 
def genevent(tasks, resources, timerange) : 
    task = random.choice(tasks)
    resourcelist = [] 
    for i in range(random.randint(0,10)) :
        res = random.choice(resources)
        if res not in resourcelist : 
            resourcelist.append(res)
    tasktime = random.randint(1, timerange)
    return task + " " + str(tasktime) + " " +  " ".join(resourcelist) 
        
def main() :
    (taskfilename, taskcount, eventcount, resourcecount, timerange) = parseArgs() 
    if True : 
        print "generating tasklist into ", taskfilename
        print "   task count = ", taskcount
        print "   event count = ", eventcount
        print "   resource count = ", resourcecount
        print "   time range = ", timerange 

    # generate a list of task names -- currently looking like task35 
    tasknames = ["task%d" % i for i in range(taskcount) ]
    # generate a list of resource names -- currently like resource-5 
    resourcenames = ["resource-%d" % i for i in range(resourcecount)] 
    tf = open(taskfilename, "w") 
    for i in range(eventcount) :  
        tf.write(genevent(tasknames, resourcenames, timerange) + "\n") 
            
main() 
