commit
5f00489392
@ -0,0 +1,51 @@
|
||||
*.exe
|
||||
*.exe~
|
||||
*.dll
|
||||
*.dylib
|
||||
*.test
|
||||
*.out
|
||||
*.prof
|
||||
*.log
|
||||
*.o
|
||||
*.a
|
||||
*.so
|
||||
*.sw[po]
|
||||
*.tar.gz
|
||||
*.[568vq]
|
||||
[568vq].out
|
||||
|
||||
*.cgo1.go
|
||||
*.cgo2.c
|
||||
_cgo_defun.c
|
||||
_cgo_gotypes.go
|
||||
_cgo_export.*
|
||||
_testmain.go
|
||||
_obj
|
||||
_test
|
||||
|
||||
/log*
|
||||
/bin
|
||||
/out
|
||||
/build
|
||||
/dist
|
||||
/etc/*.local.yml
|
||||
/data*
|
||||
|
||||
.idea
|
||||
.index
|
||||
.vscode
|
||||
.DS_Store
|
||||
.cache-loader
|
||||
|
||||
/n9e-*
|
||||
|
||||
/src/modules/index/index
|
||||
/src/modules/collector/collector
|
||||
/src/modules/transfer/transfer
|
||||
/src/modules/tsdb/tsdb
|
||||
/src/modules/monapi/monapi
|
||||
|
||||
/web/node_modules
|
||||
/web/.cache-loader
|
||||
|
||||
|
@ -0,0 +1,30 @@
|
||||
<img src="https://s3-gz01.didistatic.com/n9e-pub/image/n9e-logo-bg-white.png" width="150" alt="Nightingale"/>
|
||||
<br>
|
||||
|
||||
[中文简介](README_ZH.md)
|
||||
|
||||
Nightingale is a fork of Open-Falcon, and all the core modules have been greatly optimized. It integrates the best practices of DiDi. You can think of it as the next generation of Open-Falcon, and use directly in production environment.
|
||||
|
||||
## Documentation
|
||||
|
||||
Nightingale user manual: [https://n9e.didiyun.com/](https://n9e.didiyun.com/)
|
||||
|
||||
## Compile
|
||||
|
||||
```bash
|
||||
mkdir -p $GOPATH/src/github.com/didi
|
||||
cd $GOPATH/src/github.com/didi
|
||||
git clone https://github.com/didi/nightingale.git
|
||||
cd nightingale && ./control build
|
||||
```
|
||||
|
||||
## Team
|
||||
|
||||
[ulricqin](https://github.com/ulricqin) [710leo](https://github.com/710leo) [jsers](https://github.com/jsers) [hujter](https://github.com/hujter) [n4mine](https://github.com/n4mine) [heli567](https://github.com/heli567)
|
||||
|
||||
## License
|
||||
|
||||
<img alt="Apache-2.0 license" src="https://s3-gz01.didistatic.com/n9e-pub/image/apache.jpeg" width="128">
|
||||
|
||||
Nightingale is available under the Apache-2.0 license. See the [LICENSE](LICENSE) file for more info.
|
||||
|
@ -0,0 +1,206 @@
|
||||
#!/bin/bash
|
||||
|
||||
CWD=$(cd $(dirname $0)/; pwd)
|
||||
cd $CWD
|
||||
|
||||
usage()
|
||||
{
|
||||
echo $"Usage: $0 {start|stop|restart|status|build|pack} <module>"
|
||||
exit 0
|
||||
}
|
||||
|
||||
start_all()
|
||||
{
|
||||
# http: 5800
|
||||
test -x n9e-monapi && start monapi
|
||||
# http: 5810 ; rpc: 5811
|
||||
test -x n9e-transfer && start transfer
|
||||
# http: 5820 ; rpc: 5821
|
||||
test -x n9e-tsdb && start tsdb
|
||||
# http: 5830 ; rpc: 5831
|
||||
test -x n9e-index && start index
|
||||
# http: 5840 ; rpc: 5841
|
||||
test -x n9e-judge && start judge
|
||||
# http: 2058
|
||||
test -x n9e-collector && start collector
|
||||
}
|
||||
|
||||
start()
|
||||
{
|
||||
mod=$1
|
||||
if [ "x${mod}" = "x" ]; then
|
||||
usage
|
||||
return
|
||||
fi
|
||||
|
||||
if [ "x${mod}" = "xall" ]; then
|
||||
start_all
|
||||
return
|
||||
fi
|
||||
|
||||
binfile=n9e-${mod}
|
||||
|
||||
if [ ! -f $binfile ]; then
|
||||
echo "file[$binfile] not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ $(ps aux|grep -v grep|grep -v control|grep "$binfile" -c) -gt 0 ]; then
|
||||
echo "${mod} already started"
|
||||
return
|
||||
fi
|
||||
|
||||
mkdir -p logs/$mod
|
||||
nohup $CWD/$binfile &> logs/${mod}/stdout.log &
|
||||
|
||||
for((i=1;i<=15;i++)); do
|
||||
if [ $(ps aux|grep -v grep|grep -v control|grep "$binfile" -c) -gt 0 ]; then
|
||||
echo "${mod} started"
|
||||
return
|
||||
fi
|
||||
sleep 0.2
|
||||
done
|
||||
|
||||
echo "cannot start ${mod}"
|
||||
exit 1
|
||||
}
|
||||
|
||||
stop_all()
|
||||
{
|
||||
test -x n9e-monapi && stop monapi
|
||||
test -x n9e-transfer && stop transfer
|
||||
test -x n9e-tsdb && stop tsdb
|
||||
test -x n9e-index && stop index
|
||||
test -x n9e-judge && stop judge
|
||||
test -x n9e-collector && stop collector
|
||||
}
|
||||
|
||||
stop()
|
||||
{
|
||||
mod=$1
|
||||
if [ "x${mod}" = "x" ]; then
|
||||
usage
|
||||
return
|
||||
fi
|
||||
|
||||
if [ "x${mod}" = "xall" ]; then
|
||||
stop_all
|
||||
return
|
||||
fi
|
||||
|
||||
binfile=n9e-${mod}
|
||||
|
||||
if [ $(ps aux|grep -v grep|grep -v control|grep "$binfile" -c) -eq 0 ]; then
|
||||
echo "${mod} already stopped"
|
||||
return
|
||||
fi
|
||||
|
||||
ps aux|grep -v grep|grep -v control|grep "$binfile"|awk '{print $2}'|xargs kill
|
||||
for((i=1;i<=15;i++)); do
|
||||
if [ $(ps aux|grep -v grep|grep -v control|grep "$binfile" -c) -eq 0 ]; then
|
||||
echo "${mod} stopped"
|
||||
return
|
||||
fi
|
||||
sleep 0.2
|
||||
done
|
||||
|
||||
echo "cannot stop $mod"
|
||||
exit 1
|
||||
}
|
||||
|
||||
restart()
|
||||
{
|
||||
mod=$1
|
||||
if [ "x${mod}" = "x" ]; then
|
||||
usage
|
||||
return
|
||||
fi
|
||||
|
||||
if [ "x${mod}" = "xall" ]; then
|
||||
stop_all
|
||||
start_all
|
||||
return
|
||||
fi
|
||||
|
||||
stop $mod
|
||||
start $mod
|
||||
|
||||
status
|
||||
}
|
||||
|
||||
status()
|
||||
{
|
||||
ps aux|grep -v grep|grep "n9e"
|
||||
}
|
||||
|
||||
build_one()
|
||||
{
|
||||
mod=$1
|
||||
go build -o n9e-${mod} --tags "md5" src/modules/${mod}/${mod}.go
|
||||
}
|
||||
|
||||
build()
|
||||
{
|
||||
mod=$1
|
||||
if [ "x${mod}" = "x" ]; then
|
||||
build_one monapi
|
||||
build_one transfer
|
||||
build_one index
|
||||
build_one judge
|
||||
build_one collector
|
||||
build_one tsdb
|
||||
return
|
||||
fi
|
||||
|
||||
build_one $mod
|
||||
}
|
||||
|
||||
reload()
|
||||
{
|
||||
mod=$1
|
||||
if [ "x${mod}" = "x" ]; then
|
||||
echo "arg: <mod> is necessary"
|
||||
return
|
||||
fi
|
||||
|
||||
build_one $mod
|
||||
restart $mod
|
||||
}
|
||||
|
||||
pack()
|
||||
{
|
||||
v=$(date +%Y-%m-%d-%H-%M-%S)
|
||||
tar zcvf n9e-$v.tar.gz control sql plugin pub etc/log etc/port etc/service etc/nginx.conf etc/mysql.yml etc/address.yml \
|
||||
n9e-collector etc/collector.yml \
|
||||
n9e-tsdb etc/tsdb.yml \
|
||||
n9e-index etc/index.yml \
|
||||
n9e-judge etc/judge.yml \
|
||||
n9e-transfer etc/transfer.yml \
|
||||
n9e-monapi etc/monapi.yml
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
start)
|
||||
start $2
|
||||
;;
|
||||
stop)
|
||||
stop $2
|
||||
;;
|
||||
restart)
|
||||
restart $2
|
||||
;;
|
||||
status)
|
||||
status
|
||||
;;
|
||||
build)
|
||||
build $2
|
||||
;;
|
||||
reload)
|
||||
reload $2
|
||||
;;
|
||||
pack)
|
||||
pack
|
||||
;;
|
||||
*)
|
||||
usage
|
||||
esac
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,34 @@
|
||||
---
|
||||
monapi:
|
||||
http: 0.0.0.0:5800
|
||||
addresses:
|
||||
- 127.0.0.1
|
||||
|
||||
transfer:
|
||||
http: 0.0.0.0:5810
|
||||
rpc: 0.0.0.0:5811
|
||||
addresses:
|
||||
- 127.0.0.1
|
||||
|
||||
tsdb:
|
||||
http: 0.0.0.0:5820
|
||||
rpc: 0.0.0.0:5821
|
||||
addresses:
|
||||
- 127.0.0.1
|
||||
|
||||
index:
|
||||
http: 0.0.0.0:5830
|
||||
rpc: 0.0.0.0:5831
|
||||
addresses:
|
||||
- 127.0.0.1
|
||||
|
||||
judge:
|
||||
http: 0.0.0.0:5840
|
||||
rpc: 0.0.0.0:5841
|
||||
addresses:
|
||||
- 127.0.0.1
|
||||
|
||||
collector:
|
||||
http: 0.0.0.0:2058
|
||||
|
||||
|
@ -0,0 +1,31 @@
|
||||
# use shell if specify is blank
|
||||
logger:
|
||||
dir: logs/collector
|
||||
level: WARNING
|
||||
keepHours: 2
|
||||
identity:
|
||||
specify: ""
|
||||
shell: /usr/sbin/ifconfig `/usr/sbin/route|grep '^default'|awk '{print $NF}'`|grep inet|awk '{print $2}'|head -n 1
|
||||
sys:
|
||||
# timeout in ms
|
||||
# interval in second
|
||||
timeout: 1000
|
||||
interval: 20
|
||||
ifacePrefix:
|
||||
- eth
|
||||
- em
|
||||
mountPoint: []
|
||||
mountIgnorePrefix:
|
||||
- /var/lib
|
||||
|
||||
ignoreMetrics:
|
||||
- cpu.core.idle
|
||||
- cpu.core.util
|
||||
- cpu.core.sys
|
||||
- cpu.core.user
|
||||
- cpu.core.nice
|
||||
- cpu.core.guest
|
||||
- cpu.core.irq
|
||||
- cpu.core.softirq
|
||||
- cpu.core.iowait
|
||||
- cpu.core.steal
|
@ -0,0 +1,7 @@
|
||||
logger:
|
||||
dir: logs/index
|
||||
level: WARNING
|
||||
keepHours: 2
|
||||
identity:
|
||||
specify: ""
|
||||
shell: /usr/sbin/ifconfig `/usr/sbin/route|grep '^default'|awk '{print $NF}'`|grep inet|awk '{print $2}'|head -n 1
|
@ -0,0 +1,22 @@
|
||||
query:
|
||||
connTimeout: 1000
|
||||
callTimeout: 2000
|
||||
indexCallTimeout: 2000
|
||||
|
||||
redis:
|
||||
addrs:
|
||||
- 127.0.0.1:6379
|
||||
pass: ""
|
||||
# timeout:
|
||||
# conn: 500
|
||||
# read: 3000
|
||||
# write: 3000
|
||||
|
||||
identity:
|
||||
specify: ""
|
||||
shell: /usr/sbin/ifconfig `/usr/sbin/route|grep '^default'|awk '{print $NF}'`|grep inet|awk '{print $2}'|head -n 1
|
||||
|
||||
logger:
|
||||
dir: logs/judge
|
||||
level: WARNING
|
||||
keepHours: 2
|
@ -0,0 +1,12 @@
|
||||
{
|
||||
"name": "log.sys.oom",
|
||||
"file_path": "/var/log/messages",
|
||||
"time_format": "mmm dd HH:MM:SS",
|
||||
"pattern": "Out of memory",
|
||||
"interval": 10,
|
||||
"tags": {},
|
||||
"func": "cnt",
|
||||
"degree": 6,
|
||||
"unit": "次数",
|
||||
"comment": "有进程oom了"
|
||||
}
|
@ -0,0 +1,52 @@
|
||||
---
|
||||
salt: "PLACE_SALT"
|
||||
|
||||
logger:
|
||||
dir: "logs/monapi"
|
||||
level: "WARNING"
|
||||
keepHours: 24
|
||||
|
||||
http:
|
||||
secret: "PLACE_SECRET"
|
||||
|
||||
# for ldap authorization
|
||||
ldap:
|
||||
host: "ldap.example.org"
|
||||
port: 389
|
||||
baseDn: "dc=example,dc=org"
|
||||
bindUser: "cn=manager,dc=example,dc=org"
|
||||
bindPass: "*******"
|
||||
# openldap: (&(uid=%s))
|
||||
# AD: (&(sAMAccountName=%s))
|
||||
authFilter: "(&(uid=%s))"
|
||||
tls: false
|
||||
startTLS: false
|
||||
|
||||
# notify support: voice, sms, mail, im
|
||||
# if we have all of notice channel
|
||||
# notify:
|
||||
# p1: ["voice", "sms", "mail", "im"]
|
||||
# p2: ["sms", "mail", "im"]
|
||||
# p3: ["mail", "im"]
|
||||
|
||||
# if we only have mail channel
|
||||
notify:
|
||||
p1: ["mail"]
|
||||
p2: ["mail"]
|
||||
p3: ["mail"]
|
||||
|
||||
# addresses accessible using browsers
|
||||
link:
|
||||
stra: http://n9e.example.com/#/monitor/strategy/%v
|
||||
event: http://n9e.example.com/#/monitor/history/his/%v
|
||||
claim: http://n9e.example.com/#/monitor/history/cur/%v
|
||||
|
||||
# for alarm event and message queue
|
||||
redis:
|
||||
addr: "127.0.0.1:6379"
|
||||
pass: ""
|
||||
# in ms
|
||||
# timeout:
|
||||
# conn: 500
|
||||
# read: 3000
|
||||
# write: 3000
|
@ -0,0 +1,16 @@
|
||||
---
|
||||
uic:
|
||||
addr: "root:1234@tcp(127.0.0.1:3306)/n9e_uic?charset=utf8&parseTime=True&loc=Asia%2FShanghai"
|
||||
max: 16
|
||||
idle: 4
|
||||
debug: false
|
||||
mon:
|
||||
addr: "root:1234@tcp(127.0.0.1:3306)/n9e_mon?charset=utf8&parseTime=True&loc=Asia%2FShanghai"
|
||||
max: 16
|
||||
idle: 4
|
||||
debug: false
|
||||
hbs:
|
||||
addr: "root:1234@tcp(127.0.0.1:3306)/n9e_hbs?charset=utf8&parseTime=True&loc=Asia%2FShanghai"
|
||||
max: 16
|
||||
idle: 4
|
||||
debug: false
|
@ -0,0 +1,89 @@
|
||||
user nginx;
|
||||
|
||||
worker_processes auto;
|
||||
worker_cpu_affinity auto;
|
||||
|
||||
error_log /var/log/nginx/error.log;
|
||||
pid /run/nginx.pid;
|
||||
|
||||
include /usr/share/nginx/modules/*.conf;
|
||||
|
||||
events {
|
||||
use epoll;
|
||||
worker_connections 204800;
|
||||
}
|
||||
|
||||
http {
|
||||
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
|
||||
'$status $body_bytes_sent "$http_referer" '
|
||||
'"$http_user_agent" "$http_x_forwarded_for"';
|
||||
|
||||
access_log /var/log/nginx/access.log main;
|
||||
|
||||
sendfile on;
|
||||
tcp_nopush on;
|
||||
tcp_nodelay on;
|
||||
keepalive_timeout 65;
|
||||
types_hash_max_size 2048;
|
||||
|
||||
include /etc/nginx/mime.types;
|
||||
default_type application/octet-stream;
|
||||
|
||||
include /etc/nginx/conf.d/*.conf;
|
||||
|
||||
|
||||
proxy_connect_timeout 500ms;
|
||||
proxy_send_timeout 1000ms;
|
||||
proxy_read_timeout 3000ms;
|
||||
proxy_buffers 64 8k;
|
||||
proxy_busy_buffers_size 128k;
|
||||
proxy_temp_file_write_size 64k;
|
||||
proxy_redirect off;
|
||||
proxy_next_upstream error invalid_header timeout http_502 http_504;
|
||||
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Real-Port $remote_port;
|
||||
proxy_set_header Host $http_host;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
|
||||
upstream n9e.monapi {
|
||||
server 127.0.0.1:5800;
|
||||
keepalive 10;
|
||||
}
|
||||
|
||||
upstream n9e.index {
|
||||
server 127.0.0.1:5830;
|
||||
keepalive 10;
|
||||
}
|
||||
|
||||
upstream n9e.transfer {
|
||||
server 127.0.0.1:5810;
|
||||
keepalive 10;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 80 default_server;
|
||||
server_name _;
|
||||
root /usr/share/nginx/html;
|
||||
|
||||
# Load configuration files for the default server block.
|
||||
include /etc/nginx/default.d/*.conf;
|
||||
|
||||
location / {
|
||||
root /home/n9e/pub;
|
||||
}
|
||||
|
||||
location /api/portal {
|
||||
proxy_pass http://n9e.monapi;
|
||||
}
|
||||
|
||||
location /api/index {
|
||||
proxy_pass http://n9e.index;
|
||||
}
|
||||
|
||||
location /api/transfer {
|
||||
proxy_pass http://n9e.transfer;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1 @@
|
||||
sshd
|
@ -0,0 +1,20 @@
|
||||
[Unit]
|
||||
Description=Nightingale collector
|
||||
After=network-online.target
|
||||
Wants=network-online.target
|
||||
|
||||
[Service]
|
||||
# modify when deploy in prod env
|
||||
User=root
|
||||
Group=root
|
||||
|
||||
Type=simple
|
||||
ExecStart=/home/n9e/n9e-collector
|
||||
WorkingDirectory=/home/n9e
|
||||
|
||||
Restart=always
|
||||
RestartSec=1
|
||||
StartLimitInterval=0
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
@ -0,0 +1,20 @@
|
||||
[Unit]
|
||||
Description=Nightingale index
|
||||
After=network-online.target
|
||||
Wants=network-online.target
|
||||
|
||||
[Service]
|
||||
# modify when deploy in prod env
|
||||
User=root
|
||||
Group=root
|
||||
|
||||
Type=simple
|
||||
ExecStart=/home/n9e/n9e-index
|
||||
WorkingDirectory=/home/n9e
|
||||
|
||||
Restart=always
|
||||
RestartSec=1
|
||||
StartLimitInterval=0
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
@ -0,0 +1,20 @@
|
||||
[Unit]
|
||||
Description=Nightingale judge
|
||||
After=network-online.target
|
||||
Wants=network-online.target
|
||||
|
||||
[Service]
|
||||
# modify when deploy in prod env
|
||||
User=root
|
||||
Group=root
|
||||
|
||||
Type=simple
|
||||
ExecStart=/home/n9e/n9e-judge
|
||||
WorkingDirectory=/home/n9e
|
||||
|
||||
Restart=always
|
||||
RestartSec=1
|
||||
StartLimitInterval=0
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
@ -0,0 +1,20 @@
|
||||
[Unit]
|
||||
Description=Nightingale monapi
|
||||
After=network-online.target
|
||||
Wants=network-online.target
|
||||
|
||||
[Service]
|
||||
# modify when deploy in prod env
|
||||
User=root
|
||||
Group=root
|
||||
|
||||
Type=simple
|
||||
ExecStart=/home/n9e/n9e-monapi
|
||||
WorkingDirectory=/home/n9e
|
||||
|
||||
Restart=always
|
||||
RestartSec=1
|
||||
StartLimitInterval=0
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
@ -0,0 +1,20 @@
|
||||
[Unit]
|
||||
Description=Nightingale transfer
|
||||
After=network-online.target
|
||||
Wants=network-online.target
|
||||
|
||||
[Service]
|
||||
# modify when deploy in prod env
|
||||
User=root
|
||||
Group=root
|
||||
|
||||
Type=simple
|
||||
ExecStart=/home/n9e/n9e-transfer
|
||||
WorkingDirectory=/home/n9e
|
||||
|
||||
Restart=always
|
||||
RestartSec=1
|
||||
StartLimitInterval=0
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
@ -0,0 +1,20 @@
|
||||
[Unit]
|
||||
Description=Nightingale tsdb
|
||||
After=network-online.target
|
||||
Wants=network-online.target
|
||||
|
||||
[Service]
|
||||
# modify when deploy in prod env
|
||||
User=root
|
||||
Group=root
|
||||
|
||||
Type=simple
|
||||
ExecStart=/home/n9e/n9e-tsdb
|
||||
WorkingDirectory=/home/n9e
|
||||
|
||||
Restart=always
|
||||
RestartSec=1
|
||||
StartLimitInterval=0
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
@ -0,0 +1,11 @@
|
||||
backend:
|
||||
# in ms
|
||||
# connTimeout: 1000
|
||||
# callTimeout: 3000
|
||||
cluster:
|
||||
tsdb01: 127.0.0.1:5821
|
||||
|
||||
logger:
|
||||
dir: logs/transfer
|
||||
level: WARNING
|
||||
keepHours: 2
|
@ -0,0 +1,8 @@
|
||||
rrd:
|
||||
storage: data/5821
|
||||
cache:
|
||||
keepMinutes: 120
|
||||
logger:
|
||||
dir: logs/tsdb
|
||||
level: WARNING
|
||||
keepHours: 2
|
@ -0,0 +1,30 @@
|
||||
module github.com/didi/nightingale
|
||||
|
||||
go 1.12
|
||||
|
||||
require (
|
||||
github.com/cespare/xxhash v1.1.0
|
||||
github.com/codegangsta/negroni v1.0.0
|
||||
github.com/dgryski/go-tsz v0.0.0-20180227144327-03b7d791f4fe
|
||||
github.com/garyburd/redigo v1.6.0
|
||||
github.com/gin-contrib/pprof v1.2.1
|
||||
github.com/gin-contrib/sessions v0.0.3
|
||||
github.com/gin-gonic/gin v1.5.0
|
||||
github.com/go-sql-driver/mysql v1.4.1
|
||||
github.com/gomodule/redigo v2.0.0+incompatible
|
||||
github.com/gorilla/mux v1.6.2
|
||||
github.com/hpcloud/tail v1.0.0
|
||||
github.com/json-iterator/go v1.1.9
|
||||
github.com/mattn/go-isatty v0.0.12
|
||||
github.com/open-falcon/rrdlite v0.0.0-20200214140804-bf5829f786ad
|
||||
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72
|
||||
github.com/spf13/viper v1.6.2
|
||||
github.com/stretchr/testify v1.4.0
|
||||
github.com/toolkits/pkg v1.1.1
|
||||
github.com/ugorji/go/codec v1.1.7
|
||||
github.com/unrolled/render v1.0.2
|
||||
go.uber.org/automaxprocs v1.3.0 // indirect
|
||||
gopkg.in/ldap.v3 v3.1.0
|
||||
xorm.io/core v0.7.3
|
||||
xorm.io/xorm v0.8.1
|
||||
)
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue