Example #1
0
        public INeo4jInstance Create(Neo4jVersion neo4jVersion, string id)
        {
            Helper.Download(neo4jVersion, neo4JManagerConfig.Neo4jBasePath);
            Helper.Extract(neo4jVersion, neo4JManagerConfig.Neo4jBasePath);

            var deploymentFolderName = Helper.GenerateValidFolderName(id);

            if (string.IsNullOrEmpty(deploymentFolderName))
            {
                throw new ArgumentException("Error creating folder with given Id");
            }

            var targetDeploymentPath = Path.Combine(neo4JManagerConfig.Neo4jBasePath, deploymentFolderName);

            Helper.SafeDelete(targetDeploymentPath);
            Helper.CopyDeployment(neo4jVersion, neo4JManagerConfig.Neo4jBasePath, targetDeploymentPath);

            var endpoints = new Neo4jEndpoints
            {
                HttpEndpoint = new Uri($"http://localhost:{neo4JManagerConfig.StartHttpPort + Count}"),
            };

            endpoints.BoltEndpoint = new Uri($"bolt://localhost:{neo4JManagerConfig.StartBoltPort + Count}");

            var neo4jFolder = Directory.GetDirectories(targetDeploymentPath)
                              .First(f => f.Contains(neo4jVersion.Version, StringComparison.OrdinalIgnoreCase));

            var instance = neo4jInstanceFactory.Create(neo4jFolder, neo4jVersion, endpoints);

            Add(id, instance);

            return(instance);
        }
        public string Create(Neo4jDeploymentRequest request)
        {
            var id = Guid.NewGuid().ToString();

            Helper.Download(request.Version, appSettings.GetString(AppSettingsKeys.Neo4jBasePath));
            Helper.Extract(request.Version, appSettings.GetString(AppSettingsKeys.Neo4jBasePath));

            var targetDeploymentPath = GetDeploymentPath(id);

            Helper.SafeDelete(targetDeploymentPath);
            Helper.CopyDeployment(request.Version, appSettings.GetString(AppSettingsKeys.Neo4jBasePath), targetDeploymentPath);

            request.Neo4jFolder = Directory.GetDirectories(targetDeploymentPath)
                                  .First(f => f.Contains(request.Version.Version, StringComparison.OrdinalIgnoreCase));

            lock (_object)
            {
                short offset = 0;
                while (true)
                {
                    if (this.All(i => i.Value.Offset != offset))
                    {
                        break;
                    }

                    offset++;
                }

                request.Offset = offset;

                request.Endpoints = new Neo4jEndpoints
                {
                    HttpEndpoint = new Uri($"http://localhost:{appSettings.Get<long>(AppSettingsKeys.StartHttpPort) + offset}"),
                    BoltEndpoint = new Uri($"bolt://localhost:{appSettings.Get<long>(AppSettingsKeys.StartBoltPort) + offset}"),
                };

                var instance = neo4jInstanceFactory.Create(request);

                TryAdd(id, instance);

                return(id);
            }
        }