diff --git a/.beagle.yml b/.beagle.yml index bb59fb20c9c2d1e657f6169c7e2609d960401a0b..5eefdfd012e900ae899d17cb91ba89986bce5c0d 100644 --- a/.beagle.yml +++ b/.beagle.yml @@ -1,10 +1,10 @@ workspace: path: src/gitlab.wodcloud.com/apaas/apaas-meshproxy - +platform: 10.11.92.33 clone: git: image: registry.cn-qingdao.aliyuncs.com/wod-devops/git:1.5.0 - + dns: 223.5.5.5 pipeline: go: image: registry.cn-qingdao.aliyuncs.com/wod-devops/go:1.13.1-stretch diff --git a/go.mod b/go.mod index 624d26e9be8a902fed6ec99a6df249ea8f14fd23..aa72c9aa72087ce25ab7c622e014459d2e53edf9 100644 --- a/go.mod +++ b/go.mod @@ -3,13 +3,28 @@ module gitlab.wodcloud.com/apaas/apaas-meshproxy go 1.12 require ( + github.com/Chronokeeper/anyxml v0.0.0-20160530174208-54457d8e98c6 // indirect + github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53 // indirect + github.com/CloudyKit/jet v2.1.2+incompatible // indirect + github.com/agrison/go-tablib v0.0.0-20160310143025-4930582c22ee // indirect + github.com/agrison/mxj v0.0.0-20160310142625-1269f8afb3b4 // indirect + github.com/bndr/gotabulate v1.1.2 // indirect + github.com/fatih/structs v1.1.0 // indirect github.com/gin-gonic/contrib v0.0.0-20190923054218-35076c1b2bea github.com/gin-gonic/gin v1.4.0 github.com/go-redis/redis v6.15.6+incompatible + github.com/go-sql-driver/mysql v1.5.0 + github.com/lib/pq v1.4.0 github.com/mattn/go-isatty v0.0.8 // indirect github.com/onsi/ginkgo v1.10.2 // indirect github.com/onsi/gomega v1.7.0 // indirect github.com/sirupsen/logrus v1.4.2 github.com/spf13/pflag v1.0.5 + github.com/tealeg/xlsx v1.0.5 // indirect github.com/vulcand/oxy v1.0.0 + github.com/xormplus/builder v0.0.0-20200331055651-240ff40009be // indirect + github.com/xormplus/core v0.0.0-20200308074340-f3bce19d5f31 + github.com/xormplus/xorm v0.0.0-20200410045938-f6b4c1cd3b8b + gopkg.in/flosch/pongo2.v3 v3.0.0-20141028000813-5e81b817a0c4 // indirect + xorm.io/cmd v0.0.0-20200427014343-9ccdb0ebedf7 // indirect ) diff --git a/go.sum b/go.sum index 621a21d924f33b51881ceb30c459c2dcb6a94cdf..a4d60bc13ce129ed4970005a45d41d482b878da6 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +1,39 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.37.4/go.mod h1:NHPJ89PdicEuT9hdPXMROBD91xc5uRDxsMtSB16k7hw= +gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a/go.mod h1:EXuID2Zs0pAQhH8yz+DNjUbjppKQzKFAn28TMYPB6IU= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/Chronokeeper/anyxml v0.0.0-20160530174208-54457d8e98c6 h1:Etfj2lhXyrYemgmWzEtEQQb1kezeEXc8jVjkQUyJnWI= +github.com/Chronokeeper/anyxml v0.0.0-20160530174208-54457d8e98c6/go.mod h1:YzuYAe2hrrwKXkM9kqjbkTLlkbA+/xw2MA46f1+ENxc= +github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53 h1:sR+/8Yb4slttB4vD+b9btVEnWgL3Q00OBTzVT8B9C0c= +github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno= +github.com/CloudyKit/jet v2.1.2+incompatible h1:ybZoYzMBdoijK6I+Ke3vg9GZsmlKo/ZhKdNMWz0P26c= +github.com/CloudyKit/jet v2.1.2+incompatible/go.mod h1:HPYO+50pSWkPoj9Q/eq0aRGByCL6ScRlUmiEX5Zgm+w= +github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= +github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= +github.com/agrison/go-tablib v0.0.0-20160310143025-4930582c22ee h1:0RklYSvekYaIFI9JUx7TFPQvo++TdILmZiV17QI4nXk= +github.com/agrison/go-tablib v0.0.0-20160310143025-4930582c22ee/go.mod h1:M9nmO4lBRWR/bBv7UCOmDJ1MB2DVoqz19B4JchDA+K0= +github.com/agrison/mxj v0.0.0-20160310142625-1269f8afb3b4 h1:XBNSe5eibe5Fh131ah+xnO6s4A97U1T3tKZKLQQvqu0= +github.com/agrison/mxj v0.0.0-20160310142625-1269f8afb3b4/go.mod h1:n7qJAqL9BKqGqiJyjPbWtxpdswTL5wX0IVP2Uw4vVhQ= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/bndr/gotabulate v1.1.2 h1:yC9izuZEphojb9r+KYL4W9IJKO/ceIO8HDwxMA24U4c= +github.com/bndr/gotabulate v1.1.2/go.mod h1:0+8yUgaPTtLRTjf49E8oju7ojpU11YmXyvq1LbPAb3U= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/denisenkom/go-mssqldb v0.0.0-20190707035753-2be1aa521ff4/go.mod h1:zAg7JM8CkOJ43xKXIj7eRO9kmWm/TW578qo+oDO6tuM= +github.com/denisenkom/go-mssqldb v0.0.0-20200206145737-bbfc9a55622e h1:LzwWXEScfcTu7vUZNlDDWDARoSGEtvlDKK2BYHowNeE= +github.com/denisenkom/go-mssqldb v0.0.0-20200206145737-bbfc9a55622e/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= +github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= +github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= +github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= +github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= +github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3 h1:t8FVkw33L+wilf2QiWkw0UV77qRpcH/JHPKGpKa2E8g= @@ -10,27 +42,59 @@ github.com/gin-gonic/contrib v0.0.0-20190923054218-35076c1b2bea h1:tPQfr1S0mubDv github.com/gin-gonic/contrib v0.0.0-20190923054218-35076c1b2bea/go.mod h1:iqneQ2Df3omzIVTkIfn7c1acsVnMGiSLn4XF5Blh3Yg= github.com/gin-gonic/gin v1.4.0 h1:3tMoCCfM7ppqsR0ptz/wi1impNpT7/9wQtMZ8lr1mCQ= github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-redis/redis v6.15.6+incompatible h1:H9evprGPLI8+ci7fxQx6WNZHJSb7be8FqJQRhdQZ5Sg= github.com/go-redis/redis v6.15.6+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= +github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs= +github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY= +github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= +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.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db h1:woRePGFeVFfLKN/pOkfl+p/TAqKOfFu+7KPlMVpok/w= +github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gravitational/trace v0.0.0-20190726142706-a535a178675f/go.mod h1:RvdOUHE4SHqR3oXlFFKnGzms8a5dugHygGw1bqDstYI= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/json-iterator/go v1.1.6 h1:MrUvLMLTMxbqFJ9kzlvat/rYZqZnW3u4wkLzWTaFwKs= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.4.0 h1:TmtCFbH+Aw0AixwyttznSMQDgbR5Yed/Gg6S8Funrhc= +github.com/lib/pq v1.4.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lunny/log v0.0.0-20160921050905-7887c61bf0de h1:nyxwRdWHAVxpFcDThedEgQ07DbcRc5xgNObtbTp76fk= +github.com/lunny/log v0.0.0-20160921050905-7887c61bf0de/go.mod h1:3q8WtuPQsoRbatJuy3nvq/hRSvuBJrHHr+ybPPiNvHQ= github.com/mailgun/minheap v0.0.0-20170619185613-3dbe6c6bf55f/go.mod h1:V3EvCedtJTvUYzJF2GZMRB0JMlai+6cBu3VCTQz33GQ= github.com/mailgun/multibuf v0.0.0-20150714184110-565402cd71fb/go.mod h1:E0vRBBIQUHcRtmL/oR6w/jehh4FJqJFxe86gBnw9gXc= github.com/mailgun/timetools v0.0.0-20141028012446-7e6055773c51 h1:Kg/NPZLLC3aAFr1YToMs98dbCdhootQ1hZIvZU28hAQ= @@ -39,17 +103,35 @@ github.com/mailgun/ttlmap v0.0.0-20170619185759-c1c17f74874f/go.mod h1:8heskWJ5c github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.8 h1:HLtExJ+uU2HOZ+wI0Tt5DtUDrx8yhUqDcp7fYERX4CE= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= +github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.10.2 h1:uqH7bpe+ERSiDa34FDOF7RikN6RzXgduUF8yarlZp94= github.com/onsi/ginkgo v1.10.2/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= +github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= @@ -59,29 +141,85 @@ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE= +github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= +github.com/tealeg/xlsx v1.0.5 h1:+f8oFmvY8Gw1iUXzPk+kz+4GpbDZPK1FhPiQRd+ypgE= +github.com/tealeg/xlsx v1.0.5/go.mod h1:btRS8dz54TDnvKNosuAqxrM1QgN1udgk9O34bDCnORM= github.com/ugorji/go v1.1.4 h1:j4s+tAvLfL3bZyefP2SEWmhBzmuIlH/eqNuPdFPgngw= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/vulcand/oxy v1.0.0 h1:7vL5/pjDFzHGbtBEhmlHITUi6KLH4xXTDF33/wrdRKw= github.com/vulcand/oxy v1.0.0/go.mod h1:6EXgOAl6CRa46/2ZGcDJKf3ywJUp5WtT7vSlGSkvecI= github.com/vulcand/predicate v1.1.0/go.mod h1:mlccC5IRBoc2cIFmCB8ZM62I3VDb6p2GXESMHa3CnZg= +github.com/xormplus/builder v0.0.0-20200331055651-240ff40009be h1:HTSana2sMSKVze3XXYrF89w2tw835Fh+7xX5KPvAkuo= +github.com/xormplus/builder v0.0.0-20200331055651-240ff40009be/go.mod h1:PgBA7NoHtnttVkWModa/qpvIWkX6MpOKgyRCWsSKSB0= +github.com/xormplus/core v0.0.0-20200308074340-f3bce19d5f31 h1:Xc/TNcIKyvLIp1Y9K+K7a/XQ2wtBLiF6FNmyCjgmb5E= +github.com/xormplus/core v0.0.0-20200308074340-f3bce19d5f31/go.mod h1:V3p6iAR/MaICgU6GJqxGQxspfljTyfOTv4Czz0B5atU= +github.com/xormplus/xorm v0.0.0-20200410045938-f6b4c1cd3b8b h1:LkpWvTXxj8r18jZAhia1gHmq/ePBTvCDtFw6ZkYof6s= +github.com/xormplus/xorm v0.0.0-20200410045938-f6b4c1cd3b8b/go.mod h1:+v6b10b4x5IcQmp1/Cbo9IqaknxVeuhQng+fhya6bdI= +github.com/ziutek/mymysql v1.5.4 h1:GB0qdRGsTwQSBVYuVShFBKaXSnSnYYC2d9knnE1LHFs= +github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0= +go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c h1:Vj5n4GlwjmQteupaxJ9+0FNOmBrHfq7vN4btdGoDZgI= +golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80 h1:Ao/3l156eZf2AW5wK8a7/smtodRU+gha3+BeqJ69lRk= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f h1:wMNYb4v58l5UBM7MYRLPG6ZhfOqbKu7X5eyFl8ZhKvA= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190422165155-953cdadca894 h1:Cz4ceDQGXuKRnVBDTS23GTn/pU5OE2C0WrNTOYK1Uuc= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190404172233-64821d5d2107/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/flosch/pongo2.v3 v3.0.0-20141028000813-5e81b817a0c4 h1:eyQQg/uGuZ3ndaBhqteakHpVW+dSOPalilfC9RpM2TA= +gopkg.in/flosch/pongo2.v3 v3.0.0-20141028000813-5e81b817a0c4/go.mod h1:bJkYqV5pg6+Z7MsSu/hSb1zsPT955hBW2QHLE1jm4wA= gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/go-playground/assert.v1 v1.2.1 h1:xoYuJVE7KT85PYWrN730RguIQO0ePzVRfFMXadIrXTM= @@ -94,3 +232,14 @@ gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +xorm.io/builder v0.3.7 h1:2pETdKRK+2QG4mLX4oODHEhn5Z8j1m8sXa7jfu+/SZI= +xorm.io/builder v0.3.7/go.mod h1:aUW0S9eb9VCaPohFCH3j7czOx1PMW3i1HrSzbLYGBSE= +xorm.io/cmd v0.0.0-20200427014343-9ccdb0ebedf7 h1:Ce1HpfApDfBU56xw3T+PVkgDeJW+Oawau/6CpLkA/Bw= +xorm.io/cmd v0.0.0-20200427014343-9ccdb0ebedf7/go.mod h1:a6FmYaTKpYSxY9YP5tVssR2MKDDg99K2kE2Z/FZqTA0= +xorm.io/core v0.7.3 h1:W8ws1PlrnkS1CZU1YWaYLMQcQilwAmQXU0BJDJon+H0= +xorm.io/core v0.7.3/go.mod h1:jJfd0UAEzZ4t87nbQYtVjmqpIODugN6PD2D9E+dJvdM= +xorm.io/xorm v1.0.1 h1:/lITxpJtkZauNpdzj+L9CN/3OQxZaABrbergMcJu+Cw= +xorm.io/xorm v1.0.1/go.mod h1:o4vnEsQ5V2F1/WK6w4XTwmiWJeGj82tqjAnHe44wVHY= diff --git a/src/client/db.go b/src/client/db.go new file mode 100644 index 0000000000000000000000000000000000000000..aec74ea9e2048de9f4d90bff07a9c23900cc94e3 --- /dev/null +++ b/src/client/db.go @@ -0,0 +1,36 @@ +package client + +import ( + "fmt" + _ "github.com/go-sql-driver/mysql" + _ "github.com/lib/pq" + "github.com/sirupsen/logrus" + "github.com/xormplus/core" + "github.com/xormplus/xorm" + "gitlab.wodcloud.com/apaas/apaas-meshproxy/src/config" + "time" +) + +var DB *xorm.Engine + +func GetConnect() (xormDB *xorm.Engine, err error) { + //if DB != nil && DB.Ping() == nil { + if DB != nil { + return DB, nil + } + xormDB, err = xorm.NewEngine(config.DriverName, config.DbURL) + if err != nil { + logrus.Errorf("error creating db instance to %s: %s", config.DbURL, err) + return nil, err + } + if err = xormDB.Ping(); err != nil { + logrus.Errorf("error creating db connection to %s: %s", config.DbURL, err) + return nil, err + } + xormDB.SetMapper(core.SnakeMapper{}) + xormDB.ShowSQL(true) + DB = xormDB + DB.TZLocation, _ = time.LoadLocation("Asia/Shanghai") + fmt.Println("connect Db success!") + return xormDB, err +} diff --git a/src/config/conf.go b/src/config/conf.go index db0b7f9ebd3c27761bb795c83182750455269821..881c3c19cd9566cca89f3a13b13d0545b3325b8c 100644 --- a/src/config/conf.go +++ b/src/config/conf.go @@ -1,9 +1,14 @@ package config var ( - RedisURL string - RedisTag string - Prefix string + RedisURL string + RedisTag string + Prefix string + Url string + RedisUrl string + DriverName string + DbURL string + EsHost []string ) var ProxyConf = struct { @@ -17,3 +22,8 @@ type Param struct { Name string `json:"name"` Value string `json:"value"` } + +const LocalDateTimeFormat string = "2006-01-02 15:04:05" +const LocalDateTimeFormatStr string = "20060102150405" +const LocalTimeFormat string = "15:04" +const LocalDateFormat string = "2006-01-02" diff --git a/src/dao/service.go b/src/dao/service.go new file mode 100644 index 0000000000000000000000000000000000000000..ee4baae679d8b44e4d49a7ffbffe04c4e41538a3 --- /dev/null +++ b/src/dao/service.go @@ -0,0 +1,21 @@ +package dao + +type Service struct { + Id int `json:"id" xorm:"id pk"` // 主键 + Name string `json:"name"` // 名称 + Domain string `json:"domain"` // 领域 + Organization int `json:"organization"` // 组织 + Cover string `json:"cover"` // 封面 + Openness int `json:"openness"` // 开放程度 + RealUrl string `json:"real_url"` // 真实地址 + ProxyUrl string `json:"proxy_url"` // 代理地址 + State int `json:"state"` // 服务状态 0 下架 1 上架 + UserId int `json:"user_id"` // 用户id + CreateTime string `json:"create_time"` // 创建时间 + DownTime string `json:"down_time"` // 下架时间 + DataServiceType int `json:"data_service_type"` // 1 原始服务 2 专题服务 +} + +func (Service) TableName() string { + return `apaasv3dev.service` +} diff --git a/src/dao/service_apply.go b/src/dao/service_apply.go new file mode 100644 index 0000000000000000000000000000000000000000..a07f2f7bd2c8908694d6c7b154fcb9a2f96f827e --- /dev/null +++ b/src/dao/service_apply.go @@ -0,0 +1,13 @@ +package dao + +type ServiceApply struct { + Id int `json:"id" xorm:"id"` + Service_id string `json:"service_id" xorm:"service_id"` + User_id int `json:"user_id" xorm:"user_id"` + Request_count int `json:"request_count" xorm:"request_count"` + ResFields string `json:"res_fields" xorm:"res_fields text"` +} + +func (ServiceApply) TableName() string { + return `apaasv3dev.service_apply` +} diff --git a/src/dao/service_req_field.go b/src/dao/service_req_field.go new file mode 100644 index 0000000000000000000000000000000000000000..07a0cc0fc69fdc13eda603a897b9116884ad9a61 --- /dev/null +++ b/src/dao/service_req_field.go @@ -0,0 +1 @@ +package dao diff --git a/src/dao/service_spcs.go b/src/dao/service_spcs.go new file mode 100644 index 0000000000000000000000000000000000000000..07a0cc0fc69fdc13eda603a897b9116884ad9a61 --- /dev/null +++ b/src/dao/service_spcs.go @@ -0,0 +1 @@ +package dao diff --git a/src/handler/proxyhandler.go b/src/handler/proxyhandler.go index 8d892c7d9fbf50ea75db4c417de791366cba012e..cb684a133afc6db46574252787a7f8abb7a0878e 100644 --- a/src/handler/proxyhandler.go +++ b/src/handler/proxyhandler.go @@ -2,6 +2,7 @@ package handler import ( "bytes" + "encoding/json" "github.com/gin-gonic/gin" "github.com/vulcand/oxy/forward" "github.com/vulcand/oxy/testutils" @@ -12,38 +13,65 @@ import ( "strings" ) +var Resp *http.Response + func Proxy(c *gin.Context) { - appId := c.Query("appId") + appId := c.Param("appId") // TODO 根据appId 获取真实地址 - realPath, err := service.GetRealPath(appId) + proxyData, err := service.GetRealPath(appId) if err != nil { c.Error(err) return } f, _ := forward.New(forward.PassHostHeader(true), forward.ResponseModifier(func(resp *http.Response) error { - //defer resp.Body.Close() - // TODO 是否需要处理数据 ( 是否设置了敏感字段 ) - if c.Request.Method == "GET" && service.CheckSensitiveField() { - // TODO 过滤敏感字段 - respbody, _ := ioutil.ReadAll(resp.Body) - respbodyNew, err := service.FilterSensituveField(respbody) - if err != nil { - return err - } - resp.Header.Set("X-Log-By", "Apaas") - l := strconv.Itoa(len(respbodyNew)) - resp.Header.Set("Content-Length", l) - resp.Body = ioutil.NopCloser(bytes.NewBuffer(respbodyNew)) + Resp = resp + // 判断调用是否到达上限 + callflag, sensitiveflag, err := service.QueryCallsCount(appId, proxyData) + if callflag == false { + Return(`调用达到当日限定次数`) + return nil + } + + respbody, _ := ioutil.ReadAll(resp.Body) + //筛选字段 + model := make(map[string]interface{}) + realData := make(map[string]interface{}) + json.Unmarshal([]byte(proxyData.ResFields), &model) + json.Unmarshal(respbody, &realData) + res := service.Change(model, realData) + if err != nil { + Return(err.Error()) + return nil + } + // TODO 筛选过滤敏感字段 + if sensitiveflag == false { + Sensituve_word := make(map[string]interface{}) + json.Unmarshal([]byte(proxyData.Sensituve_word), &Sensituve_word) + res = service.FilterSensituveField(Sensituve_word, res) } - // TODO 计次计费 + Return(res) return nil })) - c.Request.URL = testutils.ParseURI(realPath) - c.Request.RequestURI = realPath - c.Request.Host = getHost(realPath) + c.Request.URL = testutils.ParseURI(proxyData.RealUrl) + c.Request.RequestURI = proxyData.RealUrl + c.Request.Host = getHost(proxyData.RealUrl) f.ServeHTTP(c.Writer, c.Request) } +func Return(res interface{}) { + var b []byte + switch res.(type) { + case []byte: + b = res.([]byte) + case interface{}: + b, _ = json.Marshal(res) + } + Resp.Header.Set("X-Log-By", "Apaas") + l := strconv.Itoa(len(b)) + Resp.Header.Set("Content-Length", l) + Resp.Body = ioutil.NopCloser(bytes.NewBuffer(b)) +} + // 获取域名 func getHost(url string) (path string) { if strings.Contains(url, "//") { diff --git a/src/main.go b/src/main.go index 07c2fa42de82020c3aa426e24c1c5e5bf608e395..c7e69e40f306db50ad934268f14b28d9f5560a27 100644 --- a/src/main.go +++ b/src/main.go @@ -16,11 +16,13 @@ import ( ) var ( - argPort = pflag.Int("port", 8088, "") - argPrefix = pflag.String("prefix", "/bgmesh/fiddler", "") - redisUrl = pflag.String("redisUrl", "redis://k8s.wodcloud.com:16379", "") - redisTag = pflag.String("redisTag", "apaas-mesh-proxy", "") - confPath = pflag.String("confPath", "/app/config/proxy.json", "") + argPort = pflag.Int("port", 8088, "") + argPrefix = pflag.String("prefix", "/bgmesh/fiddler", "") + redisUrl = pflag.String("redisUrl", "redis://localhost:6333", "") + redisTag = pflag.String("redisTag", "apaas-mesh-proxy", "") + confPath = pflag.String("confPath", "/app/config/proxy.json", "") + dbURL = pflag.String("dbURL", "host=localhost port=5432 user=postgres password=passwd123 dbname=apaas sslmode=disable", "") + dbDriverName = pflag.String("dbDriverName", "postgres", "") ) func main() { @@ -52,4 +54,6 @@ func initConfig() { config.RedisTag = *redisTag config.RedisURL = *redisUrl config.Prefix = *argPrefix + config.DriverName = *dbDriverName + config.DbURL = *dbURL } diff --git a/src/model/response.go b/src/model/response.go new file mode 100644 index 0000000000000000000000000000000000000000..af602c94a6e1486688ec6f15110a5ad583ab71a0 --- /dev/null +++ b/src/model/response.go @@ -0,0 +1,9 @@ +package model + +type ProxyData struct { + RealUrl string `json:"req_url" xorm:"req_url"` + ResFields string `json:"res_fields" xorm:"res_fields text"` + Count int `json:"count" xorm:"count"` + Sensituve_word string `json:"sensituve_word" xorm:"sensituve_word"` + Sensitive_count int `json:"sensitive_count" xorm:"sensitive_count"` +} diff --git a/src/router/router.go b/src/router/router.go index 6ca90c1b4523098c29db1d149d4ecacced64bf38..603f5c7883c783a8931522bc15455e3934ba7526 100644 --- a/src/router/router.go +++ b/src/router/router.go @@ -31,7 +31,7 @@ func Load(middleware ...gin.HandlerFunc) http.Handler { e.Use(middleware...) root := e.Group(config.Prefix) { - root.Any("/proxy", handler.Proxy) + root.Any("/:appId/proxy", handler.Proxy) } return e } diff --git a/src/service/field.go b/src/service/field.go index f76c223a5ba5b84b519304f865e3108ebdff02b5..a39a0a8bec9908422e3d9b0fe2fcb88f778633a4 100644 --- a/src/service/field.go +++ b/src/service/field.go @@ -8,7 +8,12 @@ package service import ( + "errors" "fmt" + "gitlab.wodcloud.com/apaas/apaas-meshproxy/src/client" + "gitlab.wodcloud.com/apaas/apaas-meshproxy/src/model" + "strconv" + "time" ) // 判断是否设置了敏感字段,并有敏感词 @@ -16,15 +21,217 @@ func CheckSensitiveField() bool { return true } -// 过滤敏感词 -func FilterSensituveField(respbody []byte) (body []byte, err error) { - body = respbody - fmt.Println("=========> 处理返回体!") - return body, err +//获取当日调用次数 返回是否到达当日访问量,是否到达敏感字段访问量 +func QueryCallsCount(applyId string, filter model.ProxyData) (call bool, sensitiveCall bool, err error) { + //连接redis + redis, err := client.GetRedisClient() + if err != nil { + return + } + countStr, err := redis.Get(applyId) + if err != nil && err.Error() != `redis: nil` { + return + } + //// 更新调用次数 + //err = UpdateCallsCount(applyId) + //if err != nil { + // return false, err + //} + var count int + call = true + sensitiveCall = true + if countStr == "" { + expire := GetExpire() + err = redis.Set(applyId, 1, expire) + count = 1 + } else { + count, err = strconv.Atoi(countStr) + if err != nil { + return + } + if count+1 > filter.Count { + call = false + return + } + //超过允许访问敏感字段次数 + if count+1 > filter.Sensitive_count { + sensitiveCall = false + } + expire := GetExpire() + err = redis.Set(applyId, count+1, expire) + } + return +} + +//获取过期时间 +func GetExpire() time.Duration { + now := time.Now() + timeStr := time.Now().AddDate(0, 0, 1).Format("2006-01-02") + fmt.Println("timeStr:", timeStr) + zero, _ := time.Parse("2006-01-02", timeStr) + timeNumber := zero + fmt.Println("timeNumber:", timeNumber) + subMin := now.Sub(zero) + fmt.Println(subMin.Minutes(), "分钟") + return subMin +} + +//返回申请字段 +func Change(model interface{}, returnData interface{}) interface{} { + switch t := model.(type) { + case map[string]interface{}: + // TODO 判定值是否相等 + for k, v := range returnData.(map[string]interface{}) { + flag := false + for k1, v1 := range model.(map[string]interface{}) { + if k == k1 { + flag = true + Change(v, v1) + } + } + // 删除属性 + if !flag { + fmt.Println("删除属性:", k) + delete(returnData.(map[string]interface{}), k) + } + } + break + case []interface{}: + for k, v := range returnData.([]interface{}) { + switch v.(type) { + case map[string]interface{}: + for _, a2 := range model.([]interface{}) { + for k1, v1 := range v.(map[string]interface{}) { + flag := false + for k2, v2 := range a2.(map[string]interface{}) { + if k1 == k2 { + flag = true + Change(v1, v2) + } + } + // 删除属性 + if !flag { + fmt.Println("删除属性:", k) + delete(v.(map[string]interface{}), k1) + } + } + } + break + case []interface{}: + for _, v2 := range model.([]interface{}) { + fmt.Println(v2) + Change(v2, v) + } + break + default: + // TODO 判断old是否有这个值 + fmt.Println("数组类型 |||||||||||||||||||||||||||||||| old=====new=====>: ", model, returnData) + } + } + break + default: + fmt.Println("old=====new=====>: ", model, returnData) + fmt.Println("类型是*******>:", t) + } + return returnData +} + +//更新调用次数 +func UpdateCallsCount(applyId string) (err error) { + db, err := client.GetConnect() + if err != nil { + return + } + sql := `update service_apply set request_count = request_count+1 where service_apply.service_id = '?'` + db.SQL(sql, applyId) + + return +} + +// 过滤敏感字段 +func FilterSensituveField(model interface{}, returnData interface{}) (body interface{}) { + switch t := model.(type) { + case map[string]interface{}: + // TODO 判定值是否相等 + for k, v := range returnData.(map[string]interface{}) { + //flag := false + for k1, v1 := range model.(map[string]interface{}) { + if k == k1 { + //flag = true + switch v.(type) { + case string: + returnData.(map[string]interface{})[k] = `xxx` + } + FilterSensituveField(v, v1) + } + } + // 删除属性 + //if !flag { + // fmt.Println("删除属性:", k) + // delete(returnData.(map[string]interface{}), k) + //} + } + break + case []interface{}: + for _, v := range returnData.([]interface{}) { + switch v.(type) { + case map[string]interface{}: + for _, a2 := range model.([]interface{}) { + for k1, v1 := range v.(map[string]interface{}) { + //flag := false + for k2, v2 := range a2.(map[string]interface{}) { + if k1 == k2 { + //flag = true + switch v.(map[string]interface{})[k1].(type) { + case string: + v.(map[string]interface{})[k1] = `xxx` + } + FilterSensituveField(v1, v2) + } + } + // 删除属性 + //if !flag { + // fmt.Println("删除属性:", k) + // delete(v.(map[string]interface{}), k1) + //} + } + } + break + case []interface{}: + for _, v2 := range model.([]interface{}) { + fmt.Println(v2) + FilterSensituveField(v2, v) + } + break + default: + // TODO 判断old是否有这个值 + fmt.Println("数组类型 |||||||||||||||||||||||||||||||| old=====new=====>: ", model, returnData) + } + } + break + default: + fmt.Println("old=====new=====>: ", model, returnData) + fmt.Println("类型是*******>:", t) + } + return returnData } -// 获取真实地址 -func GetRealPath(appId string) (path string, err error) { - path = "https://www.baidu.com" +// 获取真实地址和返回结构、调用限定次数 +func GetRealPath(appId string) (res model.ProxyData, err error) { + db, err := client.GetConnect() + if err != nil { + return + } + has, err := db. + Select(`service_apply.res_fields as res_fields,service.req_url as req_url,service_request_spcs.count as count,service_safe_config.sensituve_word as sensituve_word +,service_request_spcs.sensitive_count as sensitive_count`). + Table(`apaasv3dev.service`). + Join(`left`, `apaasv3dev.service_apply`, `service_apply.service_id = service.id`). + Join(`left`, `apaasv3dev.service_request_spcs`, `service_request_spcs.id = service_apply.request_spcs_id`). + Join(`left`, `apaasv3dev.service_safe_config`, `service_apply.service_id = service_safe_config.service_id`). + Where(`service_apply.id=?`, appId).Get(&res) + if !has { + err = errors.New(`未找到申请服务!`) + } return } diff --git a/src/tools/tool.go b/src/tools/tool.go new file mode 100644 index 0000000000000000000000000000000000000000..3f4cd5ac3ac502266c6ba93c0ac6db9df150bb91 --- /dev/null +++ b/src/tools/tool.go @@ -0,0 +1,30 @@ +package tools + +import ( + "gitlab.wodcloud.com/apaas/apaas-meshproxy/src/config" + "time" +) + +type JsonTime time.Time + +func (j JsonTime) MarshalJSON() ([]byte, error) { + return []byte(`"` + time.Time(j).Format(config.LocalDateTimeFormat) + `"`), nil +} + +type JsonHour time.Time + +func (j JsonHour) MarshalJSON() ([]byte, error) { + return []byte(`"` + time.Time(j).Format(config.LocalTimeFormat) + `"`), nil +} + +type JsonDate time.Time + +func (j JsonDate) MarshalJSON() ([]byte, error) { + return []byte(`"` + time.Time(j).Format(config.LocalDateFormat) + `"`), nil +} + +type JsonTime time.Time + +func (j JsonTime) MarshalJSON() ([]byte, error) { + return []byte(`"` + time.Time(j).Format(conf.LocalDateTimeFormat) + `"`), nil +}