Ejemplo n.º 1
0
        public Neo4jV3JavaInstanceProvider(IJavaResolver javaResolver, Neo4jDeploymentRequest request)
        {
            this.javaResolver = javaResolver;
            this.request      = request;

            var neo4JConfigFolder = Path.Combine(request.Neo4jFolder, "conf");

            configEditors = new Dictionary <string, ConfigEditor>
            {
                {
                    Neo4jInstanceFactory.Neo4jConfigFile,
                    new ConfigEditor(Path.Combine(neo4JConfigFolder, Neo4jInstanceFactory.Neo4jConfigFile))
                }
            };

            deployment = new Neo4jDeployment
            {
                DataPath  = GetDataPath(),
                Endpoints = request.Endpoints,
                Version   = request.Version,
                ExpiresOn = request.LeasePeriod == null
                    ? (DateTime?)null
                    : DateTime.UtcNow.Add(request.LeasePeriod.Value),
                BackupPath = Path.Combine(request.Neo4jFolder, "backup")
            };
        }
        // Create
        public async Task <DeploymentResponse> Post(CreateDeploymentRequest request)
        {
            var version = appSettings.Neo4jVersions()
                          .Single(v => v.VersionNumber == request.Version);

            var defaultLeasePeriod = appSettings.Get <TimeSpan>(AppSettingsKeys.DefaultLeasePeriod);

            var neo4jDeploymentRequest = new Neo4jDeploymentRequest
            {
                LeasePeriod = request.LeasePeriod ?? defaultLeasePeriod,
                Version     = new Neo4jVersion
                {
                    Architecture = (Neo4jArchitecture)Enum.Parse(typeof(Neo4jArchitecture), version.Architecture),
                    DownloadUrl  = version.DownloadUrl,
                    Version      = version.VersionNumber,
                    ZipFileName  = version.ZipFileName
                }
            };

            var id = pool.Create(neo4jDeploymentRequest);

            if (!pool.ContainsKey(id))
            {
                throw HttpError.NotFound($"Deployment {id} not found");
            }

            var instance = pool[id];

            request.PluginUrls?.ForEach(p =>
            {
                if (!p.IsEmpty())
                {
                    instance.InstallPlugin(p);
                }
            });

            request.Settings?.ForEach(s =>
            {
                instance.Configure(s.ConfigFile, s.Key, s.Value);
            });

            if (!string.IsNullOrEmpty(request.RestoreDumpFileUrl))
            {
                // Force start to create initial databases/graph.db folder
                await instance.Start(CancellationToken.None);

                await instance.Restore(CancellationToken.None, request.RestoreDumpFileUrl);
            }

            // No need to start if restoring a backup as the restore process needs to auto start due to file system requirements
            if (request.AutoStart && string.IsNullOrEmpty(request.RestoreDumpFileUrl))
            {
                await instance.Start(CancellationToken.None);
            }

            var keyedInstance = pool.SingleOrDefault(p => p.Key == id);

            return(keyedInstance.ConvertTo <DeploymentResponse>());
        }