Example #1
0
        public async Task TestGetComponentInstanceSettings()
        {
            var componentSettings = (await _componentSettingsDataAccess.GetComponentInstanceSettingsAsync()).ToArray();

            Assert.IsNotNull(componentSettings);
            Assert.IsTrue(componentSettings.Count() > 0);
            Assert.AreEqual(1, componentSettings[0].Id);
            Assert.AreEqual("fileWatcherComponent", componentSettings[0].PackageName);

            Assert.AreEqual("watcher", componentSettings[0].Settings["type"]);
            Assert.AreEqual("C:\\drops\\Test\\boxbot\\inbound", componentSettings[0].Settings["path"]);
            Assert.AreEqual("*.csv", componentSettings[0].Settings["filter"]);

            Assert.AreEqual("watcher", componentSettings[1].Settings["type"]);
            Assert.AreEqual("C:\\drops\\Test\\IT Test", componentSettings[1].Settings["path"]);
            Assert.AreEqual("*.txt", componentSettings[1].Settings["filter"]);
        }
Example #2
0
        private async Task SynchronizeComonentHostInstancesAndPackagesAsync(NodeServer node)
        {
            // get expected instances on node
            // get instances currently on node
            // request to end all instances and start them again
            // if there's a discrepency
            INodeAccessService nodeAccess = NodeAccessFactory.Get(node);
            IComponentHostSettingsDataAccess componentSettingsDataAccess = ComponentHostSettingsDataAccessFactory.Get();

            IEnumerable <ComponentHostInstanceSettings> requiredComponentHostInstances = await componentSettingsDataAccess.GetComponentInstanceSettingsAsync(node);

            IEnumerable <Package> requiredComponentHostPackages = await componentSettingsDataAccess.GetComponentPackagesAsync(node);


            ComponentHostInstanceSettings primerComponentHost = requiredComponentHostInstances.First();

            // start host process
            string hostPackageName = await NodeSettingsAccessFactory.Get().GetComponentHostPackageName();

            NodeBasicProcessInformation primerHostProcess = await nodeAccess.StartProcessAsync(hostPackageName, (id : 0, args : new Dictionary <string, string> {
                { "--port", "4999" }
            }));

            IComponentHostAccessService  primerHostProcessAccess     = ComponentHostAccessFactory.Get(primerHostProcess.ProcessUri);
            IEnumerable <PackageDetails> remoteComponentHostPackages = await primerHostProcessAccess.GetComponentHostPackageConfigurationAsync();

            try
            {
                requiredComponentHostPackages
                //.AsParallel()
                //.ForAll
                .Select(package =>
                {
                    var remoteInstallation        = remoteComponentHostPackages?.Where(x => string.Compare(package.Name, x.PackageName, true) == 0).ToList() ?? default;
                    PackageDetails packageDetails = null;
                    using (var packageStream = File.OpenRead(package.PackagePath))
                    {
                        if (remoteInstallation is null || !remoteInstallation.Any())
                        {// component host doesn't have required package
                            packageDetails = primerHostProcessAccess.UploadComponentHostPackageAsync(packageStream).Result;
                        }
                        else if (!remoteInstallation.Any(x => x.PackageVersion == package.Version))
                        {
                            // check if any instances are running with the loaded package
                            packageDetails = primerHostProcessAccess.UpdateComponentHostPackageAsync(packageStream).Result;
                        }
                    }