Skip to content

Commit

Permalink
refactor: suggest handling for opensearch
Browse files Browse the repository at this point in the history
Signed-off-by: moson-mo <mo-son@mailbox.org>
  • Loading branch information
moson-mo committed Aug 30, 2023
1 parent 346f7fe commit 8f6880b
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 36 deletions.
13 changes: 7 additions & 6 deletions internal/consts/consts.go
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
package consts

const (
ContentTypeJson = "application/json"
ContentTypeOpenSearchSuggestion = "application/x-suggestions+json"
ContentTypeText = "text/plain; charset=utf-8"
ContentTypeHtml = "text/html; charset=utf-8"
ContentTypeJS = "text/javascript"
ContentTypeForm = "application/x-www-form-urlencoded"
ContentTypeJson = "application/json"
// OSS = OpenSearch sugggestions ;)
ContentTypeOSS = "application/x-suggestions+json"
ContentTypeText = "text/plain; charset=utf-8"
ContentTypeHtml = "text/html; charset=utf-8"
ContentTypeJS = "text/javascript"
ContentTypeForm = "application/x-www-form-urlencoded"
)
18 changes: 9 additions & 9 deletions internal/rpc/rpc_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -98,15 +98,15 @@ func (suite *RpcTestSuite) SetupSuite() {
"/rpc?v=5&type=suggest-pkgbase&arg=at": {`["attest","attestation","attestations","attested","attesting","attests","attic","atticas","attics","attila","attire","attired","attires","attitude","attitudes","attitudinal","attitudinize","attitudinized","attitudinizing","attlee"]`, consts.ContentTypeJson},
"/rpc?v=5&type=suggest-pkgbase&arg=": {`["attest","attestation","attestations","attested","attesting","attests","attic","atticas","attics","attila","attire","attired","attires","attitude","attitudes","attitudinal","attitudinize","attitudinized","attitudinizing","attlee"]`, consts.ContentTypeJson},
"/rpc?v=5&type=suggest-pkgbase&arg=test": {`[]`, consts.ContentTypeJson},
"/rpc?v=5&type=opensearch-suggest&arg=at": {`["at",["attest","attestation","attestations","attested","attesting","attests","attic","atticas","attics","attila","attire","attired","attires","attitude","attitudes","attitudinal","attitudinize","attitudinized","attitudinizing","attlee"]]`, consts.ContentTypeOpenSearchSuggestion},
"/rpc?v=5&type=opensearch-suggest&arg=": {`["",["attest","attestation","attestations","attested","attesting","attests","attic","atticas","attics","attila","attire","attired","attires","attitude","attitudes","attitudinal","attitudinize","attitudinized","attitudinizing","attlee"]]`, consts.ContentTypeOpenSearchSuggestion},
"/rpc?v=5&type=opensearch-suggest&arg=attest": {`["attest",["attest","attestation","attestations","attested","attesting","attests"]]`, consts.ContentTypeOpenSearchSuggestion},
"/rpc?v=5&type=opensearch-suggest&arg=test": {`["test",[]]`, consts.ContentTypeOpenSearchSuggestion},
"/rpc?v=5&type=opensearch-suggest-pkgbase&arg=attest": {`["attest",["attest","attestation","attestations","attested","attesting","attests"]]`, consts.ContentTypeOpenSearchSuggestion},
"/rpc?v=5&type=opensearch-suggest-pkgbase&arg=aTTest": {`["aTTest",["attest","attestation","attestations","attested","attesting","attests"]]`, consts.ContentTypeOpenSearchSuggestion},
"/rpc?v=5&type=opensearch-suggest-pkgbase&arg=at": {`["at",["attest","attestation","attestations","attested","attesting","attests","attic","atticas","attics","attila","attire","attired","attires","attitude","attitudes","attitudinal","attitudinize","attitudinized","attitudinizing","attlee"]]`, consts.ContentTypeOpenSearchSuggestion},
"/rpc?v=5&type=opensearch-suggest-pkgbase&arg=": {`["",["attest","attestation","attestations","attested","attesting","attests","attic","atticas","attics","attila","attire","attired","attires","attitude","attitudes","attitudinal","attitudinize","attitudinized","attitudinizing","attlee"]]`, consts.ContentTypeOpenSearchSuggestion},
"/rpc?v=5&type=opensearch-suggest-pkgbase&arg=test": {`["test",[]]`, consts.ContentTypeOpenSearchSuggestion},
"/rpc?v=5&type=opensearch-suggest&arg=at": {`["at",["attest","attestation","attestations","attested","attesting","attests","attic","atticas","attics","attila","attire","attired","attires","attitude","attitudes","attitudinal","attitudinize","attitudinized","attitudinizing","attlee"]]`, consts.ContentTypeOSS},
"/rpc?v=5&type=opensearch-suggest&arg=": {`["",["attest","attestation","attestations","attested","attesting","attests","attic","atticas","attics","attila","attire","attired","attires","attitude","attitudes","attitudinal","attitudinize","attitudinized","attitudinizing","attlee"]]`, consts.ContentTypeOSS},
"/rpc?v=5&type=opensearch-suggest&arg=attest": {`["attest",["attest","attestation","attestations","attested","attesting","attests"]]`, consts.ContentTypeOSS},
"/rpc?v=5&type=opensearch-suggest&arg=test": {`["test",[]]`, consts.ContentTypeOSS},
"/rpc?v=5&type=opensearch-suggest-pkgbase&arg=attest": {`["attest",["attest","attestation","attestations","attested","attesting","attests"]]`, consts.ContentTypeOSS},
"/rpc?v=5&type=opensearch-suggest-pkgbase&arg=aTTest": {`["aTTest",["attest","attestation","attestations","attested","attesting","attests"]]`, consts.ContentTypeOSS},
"/rpc?v=5&type=opensearch-suggest-pkgbase&arg=at": {`["at",["attest","attestation","attestations","attested","attesting","attests","attic","atticas","attics","attila","attire","attired","attires","attitude","attitudes","attitudinal","attitudinize","attitudinized","attitudinizing","attlee"]]`, consts.ContentTypeOSS},
"/rpc?v=5&type=opensearch-suggest-pkgbase&arg=": {`["",["attest","attestation","attestations","attested","attesting","attests","attic","atticas","attics","attila","attire","attired","attires","attitude","attitudes","attitudinal","attitudinize","attitudinized","attitudinizing","attlee"]]`, consts.ContentTypeOSS},
"/rpc?v=5&type=opensearch-suggest-pkgbase&arg=test": {`["test",[]]`, consts.ContentTypeOSS},
"/rpc?v=5&type=search&by=depends&arg=chrystals": {`{"resultcount":1,"results":[{"Description":"This is a desciptive text for package attics","FirstSubmitted":1644749267,"ID":6877,"LastModified":1644749267,"Maintainer":"supergrasses","Name":"attics","NumVotes":42,"OutOfDate":null,"PackageBase":"attics","PackageBaseID":6877,"Popularity":0,"URL":null,"URLPath":"/cgit/aur.git/snapshot/attics.tar.gz","Version":"8.5-10"}],"type":"search","version":5}`, consts.ContentTypeJson},
"/rpc/v5/search/chrystals?by=depends": {`{"resultcount":1,"results":[{"Description":"This is a desciptive text for package attics","FirstSubmitted":1644749267,"ID":6877,"LastModified":1644749267,"Maintainer":"supergrasses","Name":"attics","NumVotes":42,"OutOfDate":null,"PackageBase":"attics","PackageBaseID":6877,"Popularity":0,"URL":null,"URLPath":"/cgit/aur.git/snapshot/attics.tar.gz","Version":"8.5-10"}],"type":"search","version":5}`, consts.ContentTypeJson},
"/rpc?v=5&type=search&by=depends&arg=x": {`{"error":"Query arg too small.","resultcount":0,"results":[],"type":"error","version":5}`, consts.ContentTypeJson},
Expand Down
30 changes: 17 additions & 13 deletions internal/rpc/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"os"
"os/signal"
"strconv"
"strings"
"sync"
"time"

Expand Down Expand Up @@ -229,31 +230,34 @@ func (s *server) handleRequest(w http.ResponseWriter, r *http.Request) {
metrics.Requests.WithLabelValues(r.Method, rtype, by).Inc()

// handle suggest calls
if rtype == "suggest" || rtype == "suggest-pkgbase" || rtype == "opensearch-suggest" || rtype == "opensearch-suggest-pkgbase" {
if strings.Contains(rtype, "suggest") {
isOpenSearch := strings.HasPrefix(rtype, "opensearch")
isBaseSearch := strings.HasSuffix(rtype, "pkgbase")

s.mut.RLock()
results := s.getSuggestResult(arg, (rtype == "suggest-pkgbase" || rtype == "opensearch-suggest-pkgbase"))
results := s.getSuggestResult(arg, isBaseSearch)
s.mut.RUnlock()

var b []byte
var err error
if rtype == "opensearch-suggest" || rtype == "opensearch-suggest-pkgbase" {
b, err = json.Marshal([]interface{}{params.Get("arg"), results})
var content any
var contentType string

if isOpenSearch {
content = []interface{}{params.Get("arg"), results}
contentType = consts.ContentTypeOSS
} else {
b, err = json.Marshal(results)
content = results
contentType = consts.ContentTypeJson
}

b, err := json.Marshal(content)

if err != nil {
w.WriteHeader(500)
fmt.Fprintf(w, "")
return
}

if rtype == "opensearch-suggest" || rtype == "opensearch-suggest-pkgbase" {
w.Header().Set("Content-Type", consts.ContentTypeOpenSearchSuggestion)
} else {
w.Header().Set("Content-Type", consts.ContentTypeJson)
}

w.Header().Set("Content-Type", contentType)
w.Write(b)
return
}
Expand Down
16 changes: 8 additions & 8 deletions test_coverage.out
Original file line number Diff line number Diff line change
Expand Up @@ -35,14 +35,14 @@ github.com/moson-mo/goaurrpc/internal/rpc/query.go:11: getInfoResult 100.0%
github.com/moson-mo/goaurrpc/internal/rpc/query.go:63: getSearchResult 100.0%
github.com/moson-mo/goaurrpc/internal/rpc/query.go:97: getSuggestResult 100.0%
github.com/moson-mo/goaurrpc/internal/rpc/search.go:8: search 100.0%
github.com/moson-mo/goaurrpc/internal/rpc/server.go:47: New 88.9%
github.com/moson-mo/goaurrpc/internal/rpc/server.go:85: Listen 92.9%
github.com/moson-mo/goaurrpc/internal/rpc/server.go:117: Stop 100.0%
github.com/moson-mo/goaurrpc/internal/rpc/server.go:122: setupRoutes 100.0%
github.com/moson-mo/goaurrpc/internal/rpc/server.go:174: handleRequest 95.6%
github.com/moson-mo/goaurrpc/internal/rpc/server.go:294: composeParameters 100.0%
github.com/moson-mo/goaurrpc/internal/rpc/server.go:331: isRateLimited 100.0%
github.com/moson-mo/goaurrpc/internal/rpc/server.go:358: addToCache 100.0%
github.com/moson-mo/goaurrpc/internal/rpc/server.go:48: New 88.9%
github.com/moson-mo/goaurrpc/internal/rpc/server.go:86: Listen 92.9%
github.com/moson-mo/goaurrpc/internal/rpc/server.go:118: Stop 100.0%
github.com/moson-mo/goaurrpc/internal/rpc/server.go:123: setupRoutes 100.0%
github.com/moson-mo/goaurrpc/internal/rpc/server.go:175: handleRequest 95.8%
github.com/moson-mo/goaurrpc/internal/rpc/server.go:298: composeParameters 100.0%
github.com/moson-mo/goaurrpc/internal/rpc/server.go:335: isRateLimited 100.0%
github.com/moson-mo/goaurrpc/internal/rpc/server.go:362: addToCache 100.0%
github.com/moson-mo/goaurrpc/internal/rpc/stats.go:21: handleStats 100.0%
github.com/moson-mo/goaurrpc/internal/rpc/utils.go:61: validateParameters 100.0%
github.com/moson-mo/goaurrpc/internal/rpc/utils.go:109: getArgsList 100.0%
Expand Down

0 comments on commit 8f6880b

Please sign in to comment.