public CacheManager(Statistics statistics, TraceFile traceFile, HazelcastClient client, string scenarioId, List<string> elementSetsPut, WebServiceManager webServiceManager)
 {
     this.statistics = statistics;
     this.traceFile = traceFile;
     this.client = client;
     this.scenarioId = scenarioId;
     this.elementSetsPut = elementSetsPut;
     this.webServiceManager = webServiceManager;
 }
        public PrefetchMonitor(ArrayList outputLinks, TraceFile traceFile, ITimeSpan timeHorizon)
        {
            this.traceFile = traceFile;
            this.timeHorizon = timeHorizon;
            items = new Dictionary<string, LinkQuantityInfo>();

            foreach (DataOutputLink link in outputLinks)
            {
                var linkId = getLinkId(link.link);
                var linkInfo = new LinkQuantityInfo(linkId);
                items[linkId] = linkInfo;
            }
        }
        public PrefetchManager(TraceFile traceFile, Statistics statistics, HazelcastClient hazelcastClient, string scenarioId, ArrayList outputLinks, ITimeSpan timeHorizon, bool isEnabled, WebServiceManager webServiceManager)
        {
            this.traceFile = traceFile;
            this.statistics = statistics;
            this.hazelcastClient = hazelcastClient;
            this.scenarioId = scenarioId;
            this.isEnabled = isEnabled;
            this.webServiceManager = webServiceManager;

            mapValueSet = hazelcastClient.getMap<string, ValueSetEntry>("valueSet");
            queueValueSetRequest = hazelcastClient.getQueue<ValueSetRequestEntry>("valueSetRequest");

            prefetchMonitor = new PrefetchMonitor(outputLinks, traceFile, timeHorizon);
        }
        public override void Initialize(IArgument[] properties)
        {
            // read the component arguments from the omi file
            var arguments = new Dictionary<string, string>();
            for (var i = 0; i < properties.Length; i++)
            {
                arguments.Add(properties[i].Key, properties[i].Value);
            }

            // obtain our parameters (assume all parameters are specified
            // via a file or the omi file)
            enablePrefetching = Convert.ToBoolean(arguments["param_enable_prefetching"]);
            var instanceAddress = arguments["param_instance_address"];
            var instanceAssignment = arguments["param_instance_assignment"];
            compositionId = arguments["param_composition_id"];
            perId = arguments["param_per_id"];
            var configFile = arguments["param_config_file"];

            // generate a unique id to use as the scenario id
            //this.scenarioId = "S" + GetUniqueId();
            scenarioId = "S" + GetFixedId();

            // remember our path
            filePath = Path.GetDirectoryName(Path.GetFullPath(configFile));

            // each instance uses a different port which is based on the
            // instance's id number
            var port = 5701 + Convert.ToInt32(instanceAssignment);

            // read the element set file
            var elementSets = ElementSetReader.read("ElementSet.xml");

            // read the config file
            var componentProperties = ComponentProperties.read(configFile, this, elementSets);
            var extras = componentProperties.getExtras();
            foreach (var nextKey in extras.Keys)
            {
                arguments[nextKey] = extras[nextKey];
            }

            // set our data members
            simulationStartTime = componentProperties.getStartDateTime();
            simulationEndTime = componentProperties.getEndDateTime();
            inputs = componentProperties.getInputExchangeItems();
            outputs = componentProperties.getOutputExchangeItems();
            modelId = componentProperties.getModelId();
            modelDescription = componentProperties.getModelDescription();

            // create the trace file
            traceFile = new TraceFile(ModelID + "-" + compositionId + "-" + scenarioId);
            traceFile.Append("Initialize");
            traceFile.Append("Version: " + ModelID + " v" + version);
            traceFile.Append("Instance Address: " + instanceAddress);
            traceFile.Append("Instance Assignment: " + instanceAssignment);
            traceFile.Append("Instance Port: " + port);
            traceFile.Append("Composition ID: " + compositionId);
            traceFile.Append("Per ID: " + perId);
            traceFile.Append("Enable Prefetching: " + enablePrefetching);
            traceFile.Append("Path: " + filePath);
            traceFile.Append("ScenarioId: " + scenarioId);
            traceFile.Append("UniqueId: " + GetUniqueId());

            webServiceManager = new WebServiceManager();
            webServiceManager.Read("WebServices.xml");

            // give the instances a chance to start - PERFORMANCE STUDY
            /*int delay = 1000 * (30 + Convert.ToInt32(this.compositionId));
            this.traceFile.Append("Pausing startup: " + delay);
            System.Threading.Thread.Sleep(delay);*/

            /*if (this.compositionId == "0" && this.perId == "0")
            {
                this.traceFile.Append("NO Extended startup delay");
            }
            else
            {
                this.traceFile.Append("EXTENDED startup delay");
                System.Threading.Thread.Sleep(1000 * 60 * 15);
            }*/

            traceFile.Append("Connecting to instance");
            ConnectToInstance(instanceAddress, Convert.ToString(port), webServiceManager.WebServiceInfoList);

            traceFile.Append("Finishing startup");

            statistics = new Statistics(compositionId, perId);

            cacheManager = new CacheManager(statistics, traceFile, client, scenarioId, elementSetsPut, webServiceManager);

            initializeWasInvoked = true;

            runtimeWatch = new Stopwatch();
            runtimeWatch.Start();

            traceFile.Append("Finished initialization");
        }
        public void Initialize(Hashtable properties)
        {
            try
            {
                // read the element set file
                var elementSets = ElementSetReader.read("ElementSets.xml");

                // read the config file
                var filename = (String)properties["ConfigFile"];
                var componentProperties = ComponentProperties.read(filename, component, elementSets);
                var extras = componentProperties.getExtras();
                foreach (var nextKey in extras.Keys)
                    properties[nextKey] = extras[nextKey];

                // save the standard properties
                _timeStepLength = componentProperties.getTimeStepInSeconds();
                _inputs = componentProperties.getInputExchangeItems();
                _outputs = componentProperties.getOutputExchangeItems();
                _simulationStartTime = componentProperties.getStartDateTime();
                _simulationEndTime = componentProperties.getEndDateTime();
                _modelId = componentProperties.getModelId();
                _modelDescription = componentProperties.getModelDescription();

                // save any extra properties
                _processingTime = Int32.Parse((String)properties["processingTime"]);

                //var c = (SimpleComponent)component;
                //c.EnableParallel = bool.Parse((string)properties["enableParallel"]);

                // setup the log file
                _traceFile = new TraceFile(_modelId);

                _traceFile.Append("Initialize");
                _traceFile.Append("Version: " + _modelId + " v" + version);
                _traceFile.Append("TimeHorizon:" + _simulationStartTime + "-" + _simulationEndTime);
                _traceFile.Append("TimeStep:" + _timeStepLength);
                _traceFile.Append("ProcessingTime:" + _processingTime);
                //_traceFile.Append("Parallel: " + c.EnableParallel);
            }
            catch (Exception e)
            {
                _traceFile.Exception(e);
            }
        }