You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@apisix.apache.org by GitBox <gi...@apache.org> on 2020/10/19 15:36:13 UTC
[GitHub] [apisix] tzssangglass edited a comment on issue #1574: feature: prometheus plugin `apisix_http_status` metric `route` tag Improve recognition
tzssangglass edited a comment on issue #1574:
URL: https://github.com/apache/apisix/issues/1574#issuecomment-711780364
I saw the example above, init `match_opts.matched` is probably the right way to think about it, as https://github.com/api7/lua-resty-radixtree#synopsis, I did.
```
match_opts.method = api_ctx.var.request_method
match_opts.host = api_ctx.var.host
match_opts.remote_addr = api_ctx.var.remote_addr
match_opts.vars = api_ctx.var
match_opts.matched = {}
local ok = uri_router:dispatch(api_ctx.var.uri, match_opts, api_ctx)
```
But in this test case
https://github.com/apache/apisix/blob/71dcf367d39225c2bca9a2221611e0a8cfa35eca/t/node/sanity-radixtree.t#L127-L133
It will cause the test to fail. The reason is the following code:
```
if match_route_opts(route, opts, args) then
-- log_info("matched route: ", require("cjson").encode(route))
-- log_info("matched path: ", path)
if compare_param(path, route, opts) then
if opts_matched_exists then
opts.matched._path = route.path_org
end
return route
end
end
```
https://github.com/api7/lua-resty-radixtree/blob/6b5d65eb9853c91b1d23cc4cea8941be74bb5f20/lib/resty/radixtree.lua#L663-L666
### case 1: did't init `match_opts.matched`
The test case will success, because `not opts.matched and not route.param` = `true` .
The logic goes as follows
![image](https://user-images.githubusercontent.com/30819887/96413808-c64a2980-121e-11eb-9254-7f83e6d7e58d.png)
### case 2: init `match_opts.matched`
The test case will fail, because `not opts.matched and not route.param` = `false`, then execute the following code in the function `compare_param` .
The logic goes as follows
![image](https://user-images.githubusercontent.com/30819887/96472976-b143b980-1263-11eb-8c52-60b8c3d08fba.png)
So in this test case, init `matched` will cause a 404, is this to use `matched` and `metedate` in combination? But I understand that `matched` should always work, and `metedate` is used to tag the url pass of the restful api.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org