-
Notifications
You must be signed in to change notification settings - Fork 0
/
redis_info.go
94 lines (84 loc) · 2.47 KB
/
redis_info.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/*
Nging is a toolbox for webmasters
Copyright (C) 2018-present Wenhui Shen <swh@admpub.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package redis
import (
"errors"
"github.com/admpub/nging/v5/application/handler"
"github.com/gomodule/redigo/redis"
)
func (r *Redis) baseInfo() error {
if r.Get(`dbList`) == nil {
dbList, err := r.DatabaseList()
if err != nil {
r.SetFail(err.Error())
return r.Goto(`/db`)
}
r.Set(`dbList`, dbList)
}
if len(r.dbName) > 0 {
nextOffset, tableList, err := r.getTables()
if err != nil {
r.SetFail(err.Error())
return r.Goto(r.GenURL(`listDb`))
}
r.Set(`tableList`, tableList)
r.Set(`nextOffset`, nextOffset)
_, _, _, pagination := handler.PagingWithPagination(r.Context)
offset := r.Form(`offset`, `0`)
q := r.Request().URL().Query()
operation := r.Query(`operation`)
for k := range q {
if k == `operation` && q.Get(k) != `listTable` {
q.Del(k)
continue
}
if k != `accountId` && k != `size` {
q.Del(k)
}
}
if operation == `listTable` && q.Get(`operation`) != operation {
q.Set(`operation`, operation)
}
pagination.SetURL(`/db?`+q.Encode()+`&offset={next}&prev={prev}&size={size}`).SetPosition(``, nextOffset, offset)
r.Set(`tablePagination`, pagination)
}
r.Set(`dbVersion`, r.getVersion())
return nil
}
func (r *Redis) getVersion() string {
info, err := redis.String(r.conn.Do("INFO", "server"))
if err != nil {
return err.Error()
}
infos := ParseInfos(info)
if len(infos) > 0 {
for _, attr := range infos[0].Attrs {
if attr.Name == `redis_version` {
return attr.Value
}
}
}
return info
}
func (r *Redis) info(args ...interface{}) ([]*Infos, error) {
if r.conn == nil {
return nil, errors.New(`Redis connection failed`)
}
info, err := redis.String(r.conn.Do(`INFO`, args...))
if err != nil {
return nil, err
}
return ParseInfos(info), err
}