Skip to content

Commit 27ab1fe

Browse files
author
Bogdan Tsechoev
committed
Merge branch 'cli-full-refresh' into 'dle-4-0'
feat(cli): add full-refresh command See merge request postgres-ai/database-lab!1024
2 parents f07bd83 + f795929 commit 27ab1fe

File tree

4 files changed

+101
-0
lines changed

4 files changed

+101
-0
lines changed

engine/cmd/cli/commands/instance/actions.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,3 +66,20 @@ func health(cliCtx *cli.Context) error {
6666

6767
return err
6868
}
69+
70+
// refresh runs a request to initiate a full refresh.
71+
func refresh(cliCtx *cli.Context) error {
72+
client, err := commands.ClientByCLIContext(cliCtx)
73+
if err != nil {
74+
return err
75+
}
76+
77+
response, err := client.FullRefresh(cliCtx.Context)
78+
if err != nil {
79+
return err
80+
}
81+
82+
_, err = fmt.Fprintln(cliCtx.App.Writer, response.Message)
83+
84+
return err
85+
}

engine/cmd/cli/commands/instance/command_list.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@ func CommandList() []*cli.Command {
2525
Usage: "display instance's version",
2626
Action: health,
2727
},
28+
{
29+
Name: "full-refresh",
30+
Usage: "initiate full refresh",
31+
Action: refresh,
32+
},
2833
},
2934
},
3035
}

engine/pkg/client/dblabapi/status.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,3 +72,27 @@ func (c *Client) Health(ctx context.Context) (*models.Engine, error) {
7272

7373
return &engine, nil
7474
}
75+
76+
// FullRefresh triggers a full refresh of the dataset.
77+
func (c *Client) FullRefresh(ctx context.Context) (*models.Response, error) {
78+
u := c.URL("/full-refresh")
79+
80+
request, err := http.NewRequest(http.MethodPost, u.String(), nil)
81+
if err != nil {
82+
return nil, errors.Wrap(err, "failed to make a request")
83+
}
84+
85+
response, err := c.Do(ctx, request)
86+
if err != nil {
87+
return nil, errors.Wrap(err, "failed to get response")
88+
}
89+
90+
defer func() { _ = response.Body.Close() }()
91+
92+
var result models.Response
93+
if err := json.NewDecoder(response.Body).Decode(&result); err != nil {
94+
return nil, errors.Wrap(err, "failed to get response")
95+
}
96+
97+
return &result, nil
98+
}

engine/pkg/client/dblabapi/status_test.go

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,3 +111,58 @@ func TestClientStatusWithFailedRequest(t *testing.T) {
111111
require.EqualError(t, err, "failed to get response: EOF")
112112
require.Nil(t, status)
113113
}
114+
115+
func TestClientFullRefresh(t *testing.T) {
116+
expectedResponse := &models.Response{
117+
Status: "OK",
118+
Message: "Full refresh started",
119+
}
120+
121+
mockClient := NewTestClient(func(req *http.Request) *http.Response {
122+
assert.Equal(t, req.URL.String(), "https://example.com/full-refresh")
123+
assert.Equal(t, req.Method, http.MethodPost)
124+
125+
body, err := json.Marshal(expectedResponse)
126+
require.NoError(t, err)
127+
128+
return &http.Response{
129+
StatusCode: http.StatusOK,
130+
Body: io.NopCloser(bytes.NewBuffer(body)),
131+
Header: make(http.Header),
132+
}
133+
})
134+
135+
c, err := NewClient(Options{
136+
Host: "https://example.com/",
137+
VerificationToken: "testVerify",
138+
})
139+
require.NoError(t, err)
140+
141+
c.client = mockClient
142+
143+
resp, err := c.FullRefresh(context.Background())
144+
require.NoError(t, err)
145+
assert.EqualValues(t, expectedResponse, resp)
146+
}
147+
148+
func TestClientFullRefreshWithFailedDecode(t *testing.T) {
149+
mockClient := NewTestClient(func(req *http.Request) *http.Response {
150+
return &http.Response{
151+
StatusCode: http.StatusOK,
152+
Body: io.NopCloser(bytes.NewBuffer([]byte{})),
153+
Header: make(http.Header),
154+
}
155+
})
156+
157+
c, err := NewClient(Options{
158+
Host: "https://example.com/",
159+
VerificationToken: "testVerify",
160+
})
161+
require.NoError(t, err)
162+
163+
c.client = mockClient
164+
165+
resp, err := c.FullRefresh(context.Background())
166+
require.EqualError(t, err, "failed to get response: EOF")
167+
require.Nil(t, resp)
168+
}

0 commit comments

Comments
 (0)