DSPS/purePy - Simulation/main.py

63 lines
2.7 KiB
Python

from Application.Simulation import *
from Application.DistributionFactory import *
import os
from queue import Queue
import sys
import argparse
if __name__ == '__main__':
# function callbacks are resolved recursively
# there can be thousands of function in one interaction
sys.setrecursionlimit(10**6)
# these path should be changed
schemaPath = os.path.join(os.path.dirname(__file__), "./Application/files/profile_schema.json")
serviceSchemaPath = os.path.join(os.path.dirname(__file__), "./Application/files/service_schema.json")
# parse user input
parser = argparse.ArgumentParser(description='program name, path to util log, path to network log')
parser.add_argument('-p', type=str, help='relativ path to app profile', required=True)
parser.add_argument('-s', type=str, help='relativ path to service definition', required=True)
parser.add_argument('-m', type=str, help='relativ path to mapping', required=True)
parser.add_argument('-d', type=str, help='relativ path to distribution request', required=True)
args = parser.parse_args()
servicePath = os.path.join(os.path.dirname(__file__), args.s)
profilePath = os.path.join(os.path.dirname(__file__), args.p)
mappingPath = os.path.join(os.path.dirname(__file__), args.m)
# the standard seed, so simulations are reproducible
# seed is used by Distribution factory
seed = 435234
# resolve distribution requests
# only triangle distributions are supported right now
# can be expanded analog to triangle
p = DistributionFactory.getContentFromFile(os.path.join(os.path.dirname(__file__), args.d))
distRequest = []
for req in p:
if req["kind"] == "triangle":
dist = (np.random.triangular(req["start"] * 1E9, req["highpoint"] * 1E9, req["end"] * 1E9, req["volume"]),
req["scenarioID"])
distRequest.append(dist)
schema = DistributionFactory.getContentFromFile(schemaPath)
serviceSchema = DistributionFactory.getContentFromFile(serviceSchemaPath)
profile = DistributionFactory.getContentFromFile(profilePath)
specialMapping = DistributionFactory.getContentFromFile(mappingPath)
mapping = DistributionFactory.genMapping(profile, specialMapping)
service = DistributionFactory.getContentFromFile(servicePath)
sim = Simulation(schema, serviceSchema)
# https://json-schema-validator.herokuapp.com/
sim.main(profile, mapping, service, distRequest)
#DistributionFactory.createNetworkGraph(profile, mapping)
# save observation queue as json to be visualized in dashboard
res = sim.saveOberservations()
# plot observation results with matplotlib.pyplot
sim.plotResults(res)