public async Task <Result <DgraphInstance> > AddDgraphInstanceAndWait(DgraphInstanceInput instance)
        {
            var addResult = await AddDgraphInstance(instance);

            if (addResult.IsFailed)
            {
                return(addResult);
            }

            // FIXME: need backoff policy and cancelation in here

            for (int i = 1; i < 4; i++)
            {
                Thread.Sleep(TimeSpan.FromSeconds(30 * i));
                var getResult = await GetDgraphInstance(addResult.Value.Id);

                if (getResult.IsSuccess && getResult.Value != null)
                {
                    return(getResult);
                }
            }

            var fail = Results.Fail <DgraphInstance>("Instance doesn't seem to be up yet");

            fail.WithSuccess(new Success("Successesfully added instance").WithMetadata("Id", addResult.Value.Id));
            return(fail);
        }
        public async Task <Result> ProvisionDgraph()
        {
            if (!ConnectionConfig.Endpoint.Equals("localhost"))
            {
                var envResult = await GSioClient.QueryEnvironment("Test");

                if (envResult.IsFailed)
                {
                    return(envResult.ToResult());
                }

                var env = envResult.Value.FirstOrDefault();
                if (env == null)
                {
                    return(Results.Fail("Environment not found"));
                }

                var dgInput = new DgraphInstanceInput()
                {
                    Replicas  = 1,
                    Shards    = 1,
                    StorageGB = 2,
                    Env       = new EnvironmentReference {
                        Id = env.Id
                    }
                };

                var dgresult = await GSioClient.AddDgraphInstanceAndWait(dgInput);

                if (dgresult.IsFailed)
                {
                    return(dgresult.ToResult());
                }

                GSioDgraph = dgresult.Value;
                await CheckVersion();
            }
            return(Results.Ok());
        }
 public async Task <Result <DgraphInstance> > AddDgraphInstance(DgraphInstanceInput instance)
 {
     return(await ExecuteRequest <DgraphInstance, DgraphInstanceInput>("addDgraphInstance", instance));
 }