mirror of
https://github.com/gusaul/grpcox.git
synced 2025-04-22 14:25:37 +00:00
Change assets to assetfs
This commit is contained in:
parent
40bca6e2af
commit
2dafcd5024
17
.vscode/launch.json
vendored
Normal file
17
.vscode/launch.json
vendored
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
{
|
||||||
|
// Use IntelliSense to learn about possible attributes.
|
||||||
|
// Hover to view descriptions of existing attributes.
|
||||||
|
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": "Launch Package",
|
||||||
|
"type": "go",
|
||||||
|
"request": "launch",
|
||||||
|
"mode": "auto",
|
||||||
|
"program": "${workspaceFolder}",
|
||||||
|
"output": "debug.exe"
|
||||||
|
}
|
||||||
|
|
||||||
|
]
|
||||||
|
}
|
45
README.md
45
README.md
|
@ -43,5 +43,50 @@ configure app preferences by editing `config.env` file
|
||||||
|
|
||||||
set value `0 (zero)` to disable auto close idle connection.
|
set value `0 (zero)` to disable auto close idle connection.
|
||||||
|
|
||||||
|
|
||||||
## Demo
|
## Demo
|
||||||

|

|
||||||
|
|
||||||
|
|
||||||
|
## Using AssetFs
|
||||||
|
|
||||||
|
By using assetfs this tool can be compiled into 1 binary file, so that it will be easier to use.
|
||||||
|
|
||||||
|
Please update assetfs when any files inside index folder are modified:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
|
||||||
|
# Install required package
|
||||||
|
$ go get github.com/go-bindata/go-bindata/...
|
||||||
|
$ go get github.com/elazarl/go-bindata-assetfs/...
|
||||||
|
|
||||||
|
# Update assetfs
|
||||||
|
$ go-bindata-assetfs -pkg handler -o handler/binddata.go index/...
|
||||||
|
```
|
||||||
|
|
||||||
|
### Compile
|
||||||
|
|
||||||
|
if you have golang installed on your local machine, just run command
|
||||||
|
```shell
|
||||||
|
# Windows
|
||||||
|
go build -o grpcox.exe
|
||||||
|
|
||||||
|
# Unix
|
||||||
|
go build -o grpcox
|
||||||
|
```
|
||||||
|
from grpcox directory
|
||||||
|
|
||||||
|
configure app preferences by editing `config.env` file
|
||||||
|
|
||||||
|
| var | usage | type | unit |
|
||||||
|
|-----------------|---------------------------------------------|--------|--------|
|
||||||
|
| MAX_LIFE_CONN | maximum idle time connection before closed | number | minute |
|
||||||
|
| TICK_CLOSE_CONN | ticker interval to sweep expired connection | number | second |
|
||||||
|
| BIND_ADDR | ip:port to bind service | string | |
|
||||||
|
|
||||||
|
set value `0 (zero)` to disable auto close idle connection.
|
||||||
|
|
||||||
|
|
||||||
|
### How to use?
|
||||||
|
|
||||||
|
Copy your binary file (ex: grpcox.exe) to your favorite folder, and just run it.
|
2
go.mod
2
go.mod
|
@ -3,7 +3,9 @@ module github.com/gusaul/grpcox
|
||||||
go 1.12
|
go 1.12
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
github.com/elazarl/go-bindata-assetfs v1.0.1 // indirect
|
||||||
github.com/fullstorydev/grpcurl v1.3.2
|
github.com/fullstorydev/grpcurl v1.3.2
|
||||||
|
github.com/go-bindata/go-bindata v3.1.2+incompatible // indirect
|
||||||
github.com/gorilla/mux v1.7.0
|
github.com/gorilla/mux v1.7.0
|
||||||
github.com/jhump/protoreflect v1.5.0
|
github.com/jhump/protoreflect v1.5.0
|
||||||
google.golang.org/grpc v1.21.0
|
google.golang.org/grpc v1.21.0
|
||||||
|
|
4
go.sum
4
go.sum
|
@ -1,8 +1,12 @@
|
||||||
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
||||||
|
github.com/elazarl/go-bindata-assetfs v1.0.1 h1:m0kkaHRKEu7tUIUFVwhGGGYClXvyl4RE03qmvRTNfbw=
|
||||||
|
github.com/elazarl/go-bindata-assetfs v1.0.1/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4=
|
||||||
github.com/fullstorydev/grpcurl v1.3.2 h1:cJKWsBYMocdxXQvgbnhtLG810SL5MhKT4K7BagxRih8=
|
github.com/fullstorydev/grpcurl v1.3.2 h1:cJKWsBYMocdxXQvgbnhtLG810SL5MhKT4K7BagxRih8=
|
||||||
github.com/fullstorydev/grpcurl v1.3.2/go.mod h1:kvk8xPCXOrwVd9zYdjy+xSOT4YWm6kyth4Y9NMfBns4=
|
github.com/fullstorydev/grpcurl v1.3.2/go.mod h1:kvk8xPCXOrwVd9zYdjy+xSOT4YWm6kyth4Y9NMfBns4=
|
||||||
|
github.com/go-bindata/go-bindata v3.1.2+incompatible h1:5vjJMVhowQdPzjE1LdxyFF7YFTXg5IgGVW4gBr5IbvE=
|
||||||
|
github.com/go-bindata/go-bindata v3.1.2+incompatible/go.mod h1:xK8Dsgwmeed+BBsSy2XTopBn/8uK2HWuGSnA11C3Joo=
|
||||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
|
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
|
||||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
||||||
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
||||||
|
|
1095
handler/binddata.go
Normal file
1095
handler/binddata.go
Normal file
File diff suppressed because one or more lines are too long
|
@ -1,7 +1,6 @@
|
||||||
package handler
|
package handler
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
@ -25,18 +24,6 @@ func InitHandler() *Handler {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *Handler) index(w http.ResponseWriter, r *http.Request) {
|
|
||||||
body := new(bytes.Buffer)
|
|
||||||
err := indexHTML.Execute(body, make(map[string]string))
|
|
||||||
if err != nil {
|
|
||||||
writeError(w, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
w.WriteHeader(http.StatusOK)
|
|
||||||
w.Header().Set("Content-Type", "text/html; charset=utf-8")
|
|
||||||
w.Write(body.Bytes())
|
|
||||||
}
|
|
||||||
|
|
||||||
func (h *Handler) getActiveConns(w http.ResponseWriter, r *http.Request) {
|
func (h *Handler) getActiveConns(w http.ResponseWriter, r *http.Request) {
|
||||||
response(w, h.g.GetActiveConns(context.TODO()))
|
response(w, h.g.GetActiveConns(context.TODO()))
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ package handler
|
||||||
import (
|
import (
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
|
assetfs "github.com/elazarl/go-bindata-assetfs"
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -10,8 +11,6 @@ import (
|
||||||
func Init(router *mux.Router) {
|
func Init(router *mux.Router) {
|
||||||
h := InitHandler()
|
h := InitHandler()
|
||||||
|
|
||||||
router.HandleFunc("/", h.index)
|
|
||||||
|
|
||||||
ajaxRoute := router.PathPrefix("/server/{host}").Subrouter()
|
ajaxRoute := router.PathPrefix("/server/{host}").Subrouter()
|
||||||
ajaxRoute.HandleFunc("/services", corsHandler(h.getLists)).Methods(http.MethodGet, http.MethodOptions)
|
ajaxRoute.HandleFunc("/services", corsHandler(h.getLists)).Methods(http.MethodGet, http.MethodOptions)
|
||||||
ajaxRoute.HandleFunc("/services", corsHandler(h.getListsWithProto)).Methods(http.MethodPost)
|
ajaxRoute.HandleFunc("/services", corsHandler(h.getListsWithProto)).Methods(http.MethodPost)
|
||||||
|
@ -24,11 +23,9 @@ func Init(router *mux.Router) {
|
||||||
// close active connection
|
// close active connection
|
||||||
router.HandleFunc("/active/close/{host}", corsHandler(h.closeActiveConns)).Methods(http.MethodDelete, http.MethodOptions)
|
router.HandleFunc("/active/close/{host}", corsHandler(h.closeActiveConns)).Methods(http.MethodDelete, http.MethodOptions)
|
||||||
|
|
||||||
assetsPath := "index"
|
// Serve assets with assetfs
|
||||||
router.PathPrefix("/css/").Handler(http.StripPrefix("/css/", http.FileServer(http.Dir(assetsPath+"/css/"))))
|
fs := &assetfs.AssetFS{Asset: Asset, AssetDir: AssetDir, AssetInfo: AssetInfo, Prefix: "index"}
|
||||||
router.PathPrefix("/js/").Handler(http.StripPrefix("/js/", http.FileServer(http.Dir(assetsPath+"/js/"))))
|
router.PathPrefix("/").Handler(http.FileServer(fs))
|
||||||
router.PathPrefix("/font/").Handler(http.StripPrefix("/font/", http.FileServer(http.Dir(assetsPath+"/font/"))))
|
|
||||||
router.PathPrefix("/img/").Handler(http.StripPrefix("/img/", http.FileServer(http.Dir(assetsPath+"/img/"))))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func corsHandler(h http.HandlerFunc) http.HandlerFunc {
|
func corsHandler(h http.HandlerFunc) http.HandlerFunc {
|
||||||
|
|
|
@ -2,19 +2,16 @@ package handler
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"html/template"
|
|
||||||
"net/http"
|
"net/http"
|
||||||
"regexp"
|
"regexp"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
reGetFuncArg *regexp.Regexp
|
reGetFuncArg *regexp.Regexp
|
||||||
indexHTML *template.Template
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
reGetFuncArg = regexp.MustCompile("\\( (.*) \\) returns")
|
reGetFuncArg = regexp.MustCompile("\\( (.*) \\) returns")
|
||||||
indexHTML = template.Must(template.New("index.html").Delims("{[", "]}").ParseFiles("index/index.html"))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Response - Standar ajax Response
|
// Response - Standar ajax Response
|
||||||
|
|
Loading…
Reference in New Issue
Block a user