Skip to content

Commit 3bfdc24

Browse files
committed
update: apply consistent code pattern on context propagation
- Update GlobalDns and VPN handlers to use 'ctx := c.Request().Context()' pattern and passing 'ctx' to core functions - Update Swagger annotations for 'x-request-id' and 'x-credential-holder' - Regenerate Swagger docs
1 parent 0d7afdb commit 3bfdc24

File tree

6 files changed

+108
-28
lines changed

6 files changed

+108
-28
lines changed

src/interface/rest/docs/docs.go

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18941,7 +18941,13 @@ const docTemplate = `{
1894118941
"parameters": [
1894218942
{
1894318943
"type": "string",
18944-
"description": "Credential holder ID",
18944+
"description": "Custom request ID for tracking",
18945+
"name": "x-request-id",
18946+
"in": "header"
18947+
},
18948+
{
18949+
"type": "string",
18950+
"description": "Credential holder ID for selecting which credentials to use (default: system default holder)",
1894518951
"name": "x-credential-holder",
1894618952
"in": "header"
1894718953
}
@@ -18998,7 +19004,13 @@ const docTemplate = `{
1899819004
},
1899919005
{
1900019006
"type": "string",
19001-
"description": "Credential holder ID",
19007+
"description": "Custom request ID for tracking",
19008+
"name": "x-request-id",
19009+
"in": "header"
19010+
},
19011+
{
19012+
"type": "string",
19013+
"description": "Credential holder ID for selecting which credentials to use (default: system default holder)",
1900219014
"name": "x-credential-holder",
1900319015
"in": "header"
1900419016
}
@@ -19040,7 +19052,13 @@ const docTemplate = `{
1904019052
"parameters": [
1904119053
{
1904219054
"type": "string",
19043-
"description": "Credential holder ID",
19055+
"description": "Custom request ID for tracking",
19056+
"name": "x-request-id",
19057+
"in": "header"
19058+
},
19059+
{
19060+
"type": "string",
19061+
"description": "Credential holder ID for selecting which credentials to use (default: system default holder)",
1904419062
"name": "x-credential-holder",
1904519063
"in": "header"
1904619064
}
@@ -19091,7 +19109,13 @@ const docTemplate = `{
1909119109
},
1909219110
{
1909319111
"type": "string",
19094-
"description": "Credential holder ID",
19112+
"description": "Custom request ID for tracking",
19113+
"name": "x-request-id",
19114+
"in": "header"
19115+
},
19116+
{
19117+
"type": "string",
19118+
"description": "Credential holder ID for selecting which credentials to use (default: system default holder)",
1909519119
"name": "x-credential-holder",
1909619120
"in": "header"
1909719121
}
@@ -19144,7 +19168,13 @@ const docTemplate = `{
1914419168
},
1914519169
{
1914619170
"type": "string",
19147-
"description": "Credential holder ID",
19171+
"description": "Custom request ID for tracking",
19172+
"name": "x-request-id",
19173+
"in": "header"
19174+
},
19175+
{
19176+
"type": "string",
19177+
"description": "Credential holder ID for selecting which credentials to use (default: system default holder)",
1914819178
"name": "x-credential-holder",
1914919179
"in": "header"
1915019180
}

src/interface/rest/docs/swagger.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

src/interface/rest/docs/swagger.yaml

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15981,9 +15981,15 @@ paths:
1598115981
description: List all hosted zones available in Route53
1598215982
operationId: GetHostedZones
1598315983
parameters:
15984+
- name: x-request-id
15985+
in: header
15986+
description: Custom request ID for tracking
15987+
schema:
15988+
type: string
1598415989
- name: x-credential-holder
1598515990
in: header
15986-
description: Credential holder ID
15991+
description: "Credential holder ID for selecting which credentials to use\
15992+
\ (default: system default holder)"
1598715993
schema:
1598815994
type: string
1598915995
responses:
@@ -16024,9 +16030,15 @@ paths:
1602416030
description: Record Type
1602516031
schema:
1602616032
type: string
16033+
- name: x-request-id
16034+
in: header
16035+
description: Custom request ID for tracking
16036+
schema:
16037+
type: string
1602716038
- name: x-credential-holder
1602816039
in: header
16029-
description: Credential holder ID
16040+
description: "Credential holder ID for selecting which credentials to use\
16041+
\ (default: system default holder)"
1603016042
schema:
1603116043
type: string
1603216044
responses:
@@ -16061,9 +16073,15 @@ paths:
1606116073
3. Manual IP Values (values): Manually provide IP addresses (simple routing only).
1606216074
operationId: PutGlobalDnsRecord
1606316075
parameters:
16076+
- name: x-request-id
16077+
in: header
16078+
description: Custom request ID for tracking
16079+
schema:
16080+
type: string
1606416081
- name: x-credential-holder
1606516082
in: header
16066-
description: Credential holder ID
16083+
description: "Credential holder ID for selecting which credentials to use\
16084+
\ (default: system default holder)"
1606716085
schema:
1606816086
type: string
1606916087
responses:
@@ -16094,9 +16112,15 @@ paths:
1609416112
If setIdentifier is empty, deletes all records matching the name and type.
1609516113
operationId: DeleteGlobalDnsRecord
1609616114
parameters:
16115+
- name: x-request-id
16116+
in: header
16117+
description: Custom request ID for tracking
16118+
schema:
16119+
type: string
1609716120
- name: x-credential-holder
1609816121
in: header
16099-
description: Credential holder ID
16122+
description: "Credential holder ID for selecting which credentials to use\
16123+
\ (default: system default holder)"
1610016124
schema:
1610116125
type: string
1610216126
requestBody:
@@ -16136,9 +16160,15 @@ paths:
1613616160
Records are grouped by domain and submitted as a single ChangeBatch per domain for efficiency.
1613716161
operationId: BulkDeleteGlobalDnsRecord
1613816162
parameters:
16163+
- name: x-request-id
16164+
in: header
16165+
description: Custom request ID for tracking
16166+
schema:
16167+
type: string
1613916168
- name: x-credential-holder
1614016169
in: header
16141-
description: Credential holder ID
16170+
description: "Credential holder ID for selecting which credentials to use\
16171+
\ (default: system default holder)"
1614216172
schema:
1614316173
type: string
1614416174
requestBody:

src/interface/rest/server/resource/globalDns.go

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -58,21 +58,24 @@ func classifyDnsError(err error) int {
5858
// @Tags [Utility] Global DNS Management
5959
// @Accept json
6060
// @Produce json
61-
// @Param x-credential-holder header string false "Credential holder ID"
61+
// @Param x-request-id header string false "Custom request ID for tracking"
62+
// @Param x-credential-holder header string false "Credential holder ID for selecting which credentials to use (default: system default holder)"
6263
// @Success 200 {object} model.SimpleMsg
6364
// @Failure 400 {object} model.SimpleMsg
6465
// @Failure 500 {object} model.SimpleMsg
6566
// @Router /resources/globalDns/record [put]
6667
func RestPutGlobalDnsRecord(c echo.Context) error {
68+
ctx := c.Request().Context()
69+
6770
log.Debug().Msg("[DNS-REST] PUT /resources/globalDns/record called")
6871
req := &model.GlobalDnsRecordReq{}
6972
if err := c.Bind(req); err != nil {
7073
log.Error().Err(err).Msg("[DNS-REST] Failed to bind request body")
7174
return c.JSON(http.StatusBadRequest, model.SimpleMsg{Message: err.Error()})
7275
}
7376
log.Debug().Str("domainName", req.DomainName).Str("recordName", req.RecordName).Str("recordType", req.RecordType).Str("routingPolicy", req.RoutingPolicy).Msg("[DNS-REST] Request parsed")
74-
75-
resp, err := resource.UpdateGlobalDnsRecord(c.Request().Context(), req)
77+
78+
resp, err := resource.UpdateGlobalDnsRecord(ctx, req)
7679
if err != nil {
7780
log.Error().Err(err).Msg("[DNS-REST] UpdateGlobalDnsRecord failed")
7881
return c.JSON(classifyDnsError(err), model.SimpleMsg{Message: err.Error()})
@@ -92,12 +95,14 @@ func RestPutGlobalDnsRecord(c echo.Context) error {
9295
// @Param domainName query string true "Domain Name"
9396
// @Param recordName query string false "Record Name (Prefix search)"
9497
// @Param recordType query string false "Record Type"
95-
// @Param x-credential-holder header string false "Credential holder ID"
98+
// @Param x-request-id header string false "Custom request ID for tracking"
99+
// @Param x-credential-holder header string false "Credential holder ID for selecting which credentials to use (default: system default holder)"
96100
// @Success 200 {object} model.RestGetGlobalDnsRecordResponse
97101
// @Failure 400 {object} model.SimpleMsg
98102
// @Failure 500 {object} model.SimpleMsg
99103
// @Router /resources/globalDns/record [get]
100104
func RestGetGlobalDnsRecord(c echo.Context) error {
105+
ctx := c.Request().Context()
101106
domainName := c.QueryParam("domainName")
102107
recordName := c.QueryParam("recordName")
103108
recordType := c.QueryParam("recordType")
@@ -108,7 +113,7 @@ func RestGetGlobalDnsRecord(c echo.Context) error {
108113
return c.JSON(http.StatusBadRequest, model.SimpleMsg{Message: "domainName is required"})
109114
}
110115

111-
resp, err := resource.GetGlobalDnsRecord(c.Request().Context(), domainName, recordName, recordType)
116+
resp, err := resource.GetGlobalDnsRecord(ctx, domainName, recordName, recordType)
112117
if err != nil {
113118
log.Error().Err(err).Msg("[DNS-REST] GetGlobalDnsRecord failed")
114119
return c.JSON(classifyDnsError(err), model.SimpleMsg{Message: err.Error()})
@@ -127,12 +132,14 @@ func RestGetGlobalDnsRecord(c echo.Context) error {
127132
// @Accept json
128133
// @Produce json
129134
// @Param globalDnsDeleteReq body model.GlobalDnsDeleteReq true "Details for record deletion"
130-
// @Param x-credential-holder header string false "Credential holder ID"
135+
// @Param x-request-id header string false "Custom request ID for tracking"
136+
// @Param x-credential-holder header string false "Credential holder ID for selecting which credentials to use (default: system default holder)"
131137
// @Success 200 {object} model.SimpleMsg
132138
// @Failure 400 {object} model.SimpleMsg
133139
// @Failure 500 {object} model.SimpleMsg
134140
// @Router /resources/globalDns/record [delete]
135141
func RestDeleteGlobalDnsRecord(c echo.Context) error {
142+
ctx := c.Request().Context()
136143
log.Debug().Msg("[DNS-REST] DELETE /resources/globalDns/record called")
137144
req := &model.GlobalDnsDeleteReq{}
138145
if err := c.Bind(req); err != nil {
@@ -141,7 +148,7 @@ func RestDeleteGlobalDnsRecord(c echo.Context) error {
141148
}
142149
log.Debug().Str("domainName", req.DomainName).Str("recordName", req.RecordName).Str("setIdentifier", req.SetIdentifier).Msg("[DNS-REST] Delete request parsed")
143150

144-
resp, err := resource.DeleteGlobalDnsRecord(c.Request().Context(), req)
151+
resp, err := resource.DeleteGlobalDnsRecord(ctx, req)
145152
if err != nil {
146153
log.Error().Err(err).Msg("[DNS-REST] DeleteGlobalDnsRecord failed")
147154
return c.JSON(classifyDnsError(err), model.SimpleMsg{Message: err.Error()})
@@ -157,14 +164,16 @@ func RestDeleteGlobalDnsRecord(c echo.Context) error {
157164
// @Description List all hosted zones available in Route53
158165
// @Tags [Utility] Global DNS Management
159166
// @Produce json
160-
// @Param x-credential-holder header string false "Credential holder ID"
167+
// @Param x-request-id header string false "Custom request ID for tracking"
168+
// @Param x-credential-holder header string false "Credential holder ID for selecting which credentials to use (default: system default holder)"
161169
// @Success 200 {object} model.RestGetHostedZonesResponse
162170
// @Failure 500 {object} model.SimpleMsg
163171
// @Router /resources/globalDns/hostedZone [get]
164172
func RestGetHostedZones(c echo.Context) error {
173+
ctx := c.Request().Context()
165174
log.Debug().Msg("[DNS-REST] GET /resources/globalDns/hostedZone called")
166175

167-
resp, err := resource.ListHostedZones(c.Request().Context())
176+
resp, err := resource.ListHostedZones(ctx)
168177
if err != nil {
169178
log.Error().Err(err).Msg("[DNS-REST] ListHostedZones failed")
170179
return c.JSON(classifyDnsError(err), model.SimpleMsg{Message: err.Error()})
@@ -183,12 +192,14 @@ func RestGetHostedZones(c echo.Context) error {
183192
// @Accept json
184193
// @Produce json
185194
// @Param globalDnsBulkDeleteReq body model.GlobalDnsBulkDeleteReq true "List of records to delete"
186-
// @Param x-credential-holder header string false "Credential holder ID"
195+
// @Param x-request-id header string false "Custom request ID for tracking"
196+
// @Param x-credential-holder header string false "Credential holder ID for selecting which credentials to use (default: system default holder)"
187197
// @Success 200 {object} model.GlobalDnsBulkDeleteResponse
188198
// @Failure 400 {object} model.SimpleMsg
189199
// @Failure 500 {object} model.SimpleMsg
190200
// @Router /resources/globalDns/records [delete]
191201
func RestBulkDeleteGlobalDnsRecord(c echo.Context) error {
202+
ctx := c.Request().Context()
192203
log.Debug().Msg("[DNS-REST] DELETE /resources/globalDns/records called")
193204
req := &model.GlobalDnsBulkDeleteReq{}
194205
if err := c.Bind(req); err != nil {
@@ -200,7 +211,7 @@ func RestBulkDeleteGlobalDnsRecord(c echo.Context) error {
200211
}
201212
log.Debug().Int("count", len(req.Records)).Msg("[DNS-REST] Bulk delete request parsed")
202213

203-
resp, err := resource.BulkDeleteGlobalDnsRecords(c.Request().Context(), req)
214+
resp, err := resource.BulkDeleteGlobalDnsRecords(ctx, req)
204215
if err != nil {
205216
log.Error().Err(err).Msg("[DNS-REST] BulkDeleteGlobalDnsRecords failed")
206217
return c.JSON(classifyDnsError(err), model.SimpleMsg{Message: err.Error()})

src/interface/rest/server/resource/vpn.go

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ import (
4747
// @Param x-credential-holder header string false "Credential holder ID for selecting which credentials to use (default: system default holder)"
4848
// @Router /ns/{nsId}/mci/{mciId}/site [get]
4949
func RestGetSitesInMci(c echo.Context) error {
50+
// ctx := c.Request().Context() // ctx is defined but not used here as ExtractSitesInfoFromMciInfo doesn't take context yet, but following the requested pattern.
5051

5152
nsId := c.Param("nsId")
5253
err := common.CheckString(nsId)
@@ -283,6 +284,7 @@ func ExtractSitesInfoFromMciInfo(nsId, mciId string) (*model.SitesInfo, error) {
283284
// @Param x-credential-holder header string false "Credential holder ID for selecting which credentials to use (default: system default holder)"
284285
// @Router /ns/{nsId}/mci/{mciId}/vpn [post]
285286
func RestPostSiteToSiteVpn(c echo.Context) error {
287+
ctx := c.Request().Context()
286288

287289
nsId := c.Param("nsId")
288290
err := common.CheckString(nsId)
@@ -331,7 +333,7 @@ func RestPostSiteToSiteVpn(c echo.Context) error {
331333
return c.JSON(http.StatusBadRequest, model.SimpleMsg{Message: errMsg.Error()})
332334
}
333335

334-
resp, err := resource.CreateSiteToSiteVPN(c.Request().Context(), nsId, mciId, vpnReq, action)
336+
resp, err := resource.CreateSiteToSiteVPN(ctx, nsId, mciId, vpnReq, action)
335337
if err != nil {
336338
log.Err(err).Msg("")
337339
return c.JSON(http.StatusInternalServerError, model.SimpleMsg{Message: err.Error()})
@@ -360,6 +362,7 @@ func RestPostSiteToSiteVpn(c echo.Context) error {
360362
// @Param x-credential-holder header string false "Credential holder ID for selecting which credentials to use (default: system default holder)"
361363
// @Router /ns/{nsId}/mci/{mciId}/vpn [get]
362364
func RestGetAllSiteToSiteVpn(c echo.Context) error {
365+
ctx := c.Request().Context()
363366

364367
nsId := c.Param("nsId")
365368
err := common.CheckString(nsId)
@@ -386,14 +389,14 @@ func RestGetAllSiteToSiteVpn(c echo.Context) error {
386389

387390
switch option {
388391
case "InfoList":
389-
vpnInfoList, err := resource.GetAllSiteToSiteVPN(c.Request().Context(), nsId, mciId)
392+
vpnInfoList, err := resource.GetAllSiteToSiteVPN(ctx, nsId, mciId)
390393
if err != nil {
391394
log.Err(err).Msg("")
392395
return c.JSON(http.StatusInternalServerError, model.SimpleMsg{Message: err.Error()})
393396
}
394397
return c.JSON(http.StatusOK, vpnInfoList)
395398
case "IdList":
396-
vpnIdList, err := resource.GetAllIDsOfSiteToSiteVPN(c.Request().Context(), nsId, mciId)
399+
vpnIdList, err := resource.GetAllIDsOfSiteToSiteVPN(ctx, nsId, mciId)
397400
if err != nil {
398401
log.Err(err).Msg("")
399402
return c.JSON(http.StatusInternalServerError, model.SimpleMsg{Message: err.Error()})
@@ -426,6 +429,7 @@ func RestGetAllSiteToSiteVpn(c echo.Context) error {
426429
// @Param x-credential-holder header string false "Credential holder ID for selecting which credentials to use (default: system default holder)"
427430
// @Router /ns/{nsId}/mci/{mciId}/vpn/{vpnId} [get]
428431
func RestGetSiteToSiteVpn(c echo.Context) error {
432+
ctx := c.Request().Context()
429433

430434
nsId := c.Param("nsId")
431435
err := common.CheckString(nsId)
@@ -461,7 +465,7 @@ func RestGetSiteToSiteVpn(c echo.Context) error {
461465

462466
// * Only provide the "refined" detail level for now
463467
detail := "refined"
464-
resp, err := resource.GetSiteToSiteVPN(c.Request().Context(), nsId, mciId, vpnId, detail, refreshBool)
468+
resp, err := resource.GetSiteToSiteVPN(ctx, nsId, mciId, vpnId, detail, refreshBool)
465469
if err != nil {
466470
log.Err(err).Msg("")
467471
return c.JSON(http.StatusInternalServerError, model.SimpleMsg{Message: err.Error()})
@@ -491,6 +495,7 @@ func RestGetSiteToSiteVpn(c echo.Context) error {
491495
// @Param x-credential-holder header string false "Credential holder ID for selecting which credentials to use (default: system default holder)"
492496
// @Router /ns/{nsId}/mci/{mciId}/vpn/{vpnId} [delete]
493497
func RestDeleteSiteToSiteVpn(c echo.Context) error {
498+
ctx := c.Request().Context()
494499

495500
nsId := c.Param("nsId")
496501
err := common.CheckString(nsId)
@@ -516,7 +521,7 @@ func RestDeleteSiteToSiteVpn(c echo.Context) error {
516521
return c.JSON(http.StatusBadRequest, model.SimpleMsg{Message: errMsg.Error()})
517522
}
518523

519-
resp, err := resource.DeleteSiteToSiteVPN(c.Request().Context(), nsId, mciId, vpnId)
524+
resp, err := resource.DeleteSiteToSiteVPN(ctx, nsId, mciId, vpnId)
520525
if err != nil {
521526
log.Err(err).Msg("")
522527
return c.JSON(http.StatusInternalServerError, model.SimpleMsg{Message: err.Error()})
@@ -544,6 +549,7 @@ func RestDeleteSiteToSiteVpn(c echo.Context) error {
544549
// @Param x-credential-holder header string false "Credential holder ID for selecting which credentials to use (default: system default holder)"
545550
// @Router /ns/{nsId}/mci/{mciId}/vpn/{vpnId}/request/{requestId} [get]
546551
func RestGetRequestStatusOfSiteToSiteVpn(c echo.Context) error {
552+
ctx := c.Request().Context()
547553

548554
nsId := c.Param("nsId")
549555
err := common.CheckString(nsId)
@@ -575,7 +581,7 @@ func RestGetRequestStatusOfSiteToSiteVpn(c echo.Context) error {
575581
}
576582
reqId = strings.TrimSpace(reqId)
577583

578-
resp, err := resource.GetRequestStatusOfSiteToSiteVpn(c.Request().Context(), nsId, mciId, vpnId, reqId)
584+
resp, err := resource.GetRequestStatusOfSiteToSiteVpn(ctx, nsId, mciId, vpnId, reqId)
579585
if err != nil {
580586
log.Err(err).Msg("")
581587
return c.JSON(http.StatusInternalServerError, model.SimpleMsg{Message: err.Error()})

src/testclient/test-clis/site-to-site-vpn/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,9 @@ This means:
103103
This is the recommended workflow.
104104

105105
```bash
106+
# Change directory (Use 'popd' to return to the previous directory)
107+
pushd src/testclient/test-clis/site-to-site-vpn
108+
# Run batch test
106109
go run app.go test vpn
107110
```
108111

0 commit comments

Comments
 (0)