mirror of https://github.com/Askill/DSPS.git
63 lines
2.7 KiB
Python
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)
|